Repository: jasonacox/pypowerwall Branch: main Commit: 51b5032ce06d Files: 280 Total size: 13.1 MB Directory structure: gitextract_ladqec0m/ ├── .flake8 ├── .github/ │ └── workflows/ │ ├── check-protobuf.yml │ ├── jekyll-gh-pages.yml │ ├── pwsim-docker.yml │ ├── pylint.yml │ ├── simtest.yml │ └── test.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .pylintrc ├── API.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── RELEASE.md ├── _config.yml ├── api_test.py ├── dashboard/ │ └── README.md ├── docs/ │ ├── README.md │ ├── api.txt │ ├── reference/ │ │ ├── alerts.md │ │ ├── devices.md │ │ └── firmware-history.md │ ├── vitals-example-failed-pw.json │ ├── vitals-example-latest.json │ └── vitals-example.json ├── example-cloud-mode.py ├── example.py ├── examples/ │ ├── network_route.py │ ├── vitals/ │ │ ├── README.md │ │ ├── pull_vitals.py │ │ ├── tesla.proto │ │ └── tesla_pb2.py │ └── vitals.py ├── proxy/ │ ├── .dockerignore │ ├── API.md │ ├── Dockerfile │ ├── Dockerfile.beta │ ├── HELP.md │ ├── README.md │ ├── RELEASE.md │ ├── __init__.py │ ├── beta.txt │ ├── localhost.pem │ ├── perf_test.py │ ├── requirements.txt │ ├── server.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── test_api_endpoints.py │ │ └── test_csv_endpoints.py │ ├── transform.py │ ├── upload-beta.sh │ └── web/ │ ├── LICENSE │ ├── bogus/ │ │ ├── api.auth.toggle.supported.json │ │ ├── api.customer.json │ │ ├── api.customer.registration.json │ │ ├── api.installer.json │ │ ├── api.meters.aggregates.json │ │ ├── api.meters.json │ │ ├── api.meters.readings.json │ │ ├── api.meters.site.json │ │ ├── api.meters.solar.json │ │ ├── api.networks.json │ │ ├── api.operation.json │ │ ├── api.powerwalls.json │ │ ├── api.site_info.grid_codes.json │ │ ├── api.site_info.json │ │ ├── api.site_info.site_name.json │ │ ├── api.sitemaster.json │ │ ├── api.solars.brands.json │ │ ├── api.solars.json │ │ ├── api.status.json │ │ ├── api.synchrometer.ct_voltage_references.json │ │ ├── api.system.networks.json │ │ ├── api.system.update.status.json │ │ ├── api.system_status.grid_faults.json │ │ ├── api.system_status.grid_status.json │ │ ├── api.system_status.grid_status.json-offline │ │ ├── api.system_status.grid_status.json-transition │ │ ├── api.system_status.json │ │ ├── api.system_status.soe.json │ │ └── api.troubleshooting.problems.json │ ├── example.html │ ├── index.html │ └── viz-static/ │ ├── 1.17c71172308436a079d1.js │ ├── 124f233cfa9945f861dcaca7acedd308.otf │ ├── 2bf15a1686c7a1bf7b577337a07d7049.otf │ ├── 39.17c71172308436a079d1.js │ ├── 40.17c71172308436a079d1.js │ ├── 653969a51632a4df33358a39d7012f79.otf │ ├── 722c5f898bbca8b2eb3fce0287688326.otf │ ├── 86a6894da889a3db781418529403290f.otf │ ├── 89aec2cc0b804667e95b1adc02e1ac4a.otf │ ├── a3b0d611359e6fa8356cd88aa9035268.otf │ ├── ac2944015a17576924af7c56d88751cb.otf │ ├── app.css │ ├── app.js │ ├── b8d72cb0ef934ba1fe847c692d9dfed1.otf │ ├── bceda3fae660177ae570735feec62811.otf │ ├── befdfda70624c396169873b05de57f8a.otf │ ├── black.js │ ├── clear.js │ ├── d859fee2eba0e67c75c4c92e719d0630.otf │ ├── dakboard.js │ ├── e19c20e966bde501f94e41cd0322dbe8.otf │ ├── ec6b35b07448e1624cb09323b5fb6e32.otf │ ├── ec89c09b066f57efc7687540c998845b.otf │ ├── eca1317ee8a99162d0d0e2df77330cec.otf │ ├── grafana-dark.js │ ├── grafana.js │ ├── solar.js │ ├── vendor.js │ └── white.js ├── pwsimulator/ │ ├── Dockerfile │ ├── README.md │ ├── control.html │ ├── localhost.pem │ ├── stub.py │ ├── tedapi_pb2.py │ ├── test.py │ ├── test.sh │ └── test_tedapi.py ├── pypowerwall/ │ ├── __init__.py │ ├── __main__.py │ ├── api_lock.py │ ├── cloud/ │ │ ├── __init__.py │ │ ├── decorators.py │ │ ├── exceptions.py │ │ ├── mock_data.py │ │ ├── pypowerwall_cloud.py │ │ ├── stubs.py │ │ └── teslapy/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── __init__.py │ │ ├── endpoints.json │ │ ├── option_codes.json │ │ └── requirements.txt │ ├── exceptions.py │ ├── fleetapi/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── decorators.py │ │ ├── exceptions.py │ │ ├── fleetapi.py │ │ ├── mock_data.py │ │ ├── pypowerwall_fleetapi.py │ │ └── stubs.py │ ├── local/ │ │ ├── __init__.py │ │ ├── exceptions.py │ │ ├── pypowerwall_local.py │ │ └── tesla_pb2.py │ ├── pypowerwall_base.py │ ├── regex.py │ ├── scan.py │ ├── tedapi/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── decorators.py │ │ ├── exceptions.py │ │ ├── mock_data.py │ │ ├── pypowerwall_tedapi.py │ │ ├── stubs.py │ │ ├── tedapi.proto │ │ ├── tedapi_combined.proto │ │ ├── tedapi_combined_pb2.py │ │ ├── tedapi_pb2.py │ │ └── tedapi_v1r.py │ ├── tesla_auth.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── tedapi/ │ │ │ ├── __init__.py │ │ │ └── test_init.py │ │ ├── test_live_modes.py │ │ ├── test_mode_selection.py │ │ ├── test_powerwall.py │ │ └── unit/ │ │ ├── __init__.py │ │ ├── test_cli_tedapi.py │ │ ├── test_parse_version.py │ │ └── test_powerwall_core.py │ └── v1r_register.py ├── pytest.ini ├── requirements.txt ├── setup.py ├── tesla.proto ├── test.py ├── test_requirements.txt ├── tools/ │ ├── README.md │ ├── cron.sh │ ├── fleetapi/ │ │ ├── README.md │ │ ├── create_pem_key.py │ │ ├── fleetapi.py │ │ ├── index.html │ │ ├── live.py │ │ ├── setup.py │ │ └── test.py │ ├── gen_proto.sh │ ├── nws.py │ ├── requirements-tools.txt │ ├── server/ │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── app/ │ │ │ ├── __init__.py │ │ │ ├── api/ │ │ │ │ ├── __init__.py │ │ │ │ ├── aggregates.py │ │ │ │ ├── gateways.py │ │ │ │ ├── legacy.py │ │ │ │ └── websockets.py │ │ │ ├── config.py │ │ │ ├── core/ │ │ │ │ ├── __init__.py │ │ │ │ └── gateway_manager.py │ │ │ ├── main.py │ │ │ ├── models/ │ │ │ │ ├── __init__.py │ │ │ │ └── gateway.py │ │ │ ├── static/ │ │ │ │ ├── example.html │ │ │ │ ├── index.html │ │ │ │ └── viz-static/ │ │ │ │ ├── 1.17c71172308436a079d1.js │ │ │ │ ├── 124f233cfa9945f861dcaca7acedd308.otf │ │ │ │ ├── 2bf15a1686c7a1bf7b577337a07d7049.otf │ │ │ │ ├── 39.17c71172308436a079d1.js │ │ │ │ ├── 40.17c71172308436a079d1.js │ │ │ │ ├── 653969a51632a4df33358a39d7012f79.otf │ │ │ │ ├── 722c5f898bbca8b2eb3fce0287688326.otf │ │ │ │ ├── 86a6894da889a3db781418529403290f.otf │ │ │ │ ├── 89aec2cc0b804667e95b1adc02e1ac4a.otf │ │ │ │ ├── a3b0d611359e6fa8356cd88aa9035268.otf │ │ │ │ ├── ac2944015a17576924af7c56d88751cb.otf │ │ │ │ ├── app.css │ │ │ │ ├── app.js │ │ │ │ ├── b8d72cb0ef934ba1fe847c692d9dfed1.otf │ │ │ │ ├── bceda3fae660177ae570735feec62811.otf │ │ │ │ ├── befdfda70624c396169873b05de57f8a.otf │ │ │ │ ├── black.js │ │ │ │ ├── clear.js │ │ │ │ ├── d859fee2eba0e67c75c4c92e719d0630.otf │ │ │ │ ├── dakboard.js │ │ │ │ ├── e19c20e966bde501f94e41cd0322dbe8.otf │ │ │ │ ├── ec6b35b07448e1624cb09323b5fb6e32.otf │ │ │ │ ├── ec89c09b066f57efc7687540c998845b.otf │ │ │ │ ├── eca1317ee8a99162d0d0e2df77330cec.otf │ │ │ │ ├── grafana-dark.js │ │ │ │ ├── grafana.js │ │ │ │ ├── solar.js │ │ │ │ ├── vendor.js │ │ │ │ └── white.js │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ └── transform.py │ │ ├── docker-compose.yml │ │ ├── pytest.ini │ │ ├── requirements-dev.txt │ │ ├── requirements.txt │ │ ├── run.sh │ │ └── tests/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── test_api_aggregates.py │ │ ├── test_api_gateways.py │ │ ├── test_api_legacy.py │ │ ├── test_basic.py │ │ ├── test_config.py │ │ ├── test_edge_cases.py │ │ └── test_gateway_manager.py │ ├── set-mode.py │ ├── set-reserve.py │ ├── tedapi/ │ │ ├── ComponentsQuery.py │ │ ├── PW3_Strings.py │ │ ├── PW3_Vitals.py │ │ ├── README.md │ │ ├── create_request.py │ │ ├── decode.py │ │ ├── status.py │ │ ├── tedapi.proto │ │ ├── tedapi_orig.py │ │ ├── tedapi_pb2.py │ │ ├── tedapi_test.py │ │ └── web.py │ ├── tedapi-lan/ │ │ ├── README.md │ │ ├── lan_tedapi.py │ │ ├── requirements.txt │ │ ├── tedapi_combined.proto │ │ └── tedapi_combined_pb2.py │ └── tessolarcharge.py ├── v1r_register.py └── web/ └── index.html ================================================ FILE CONTENTS ================================================ ================================================ FILE: .flake8 ================================================ [flake8] ignore = E501, F824, F823, F841, W503, E722 ================================================ FILE: .github/workflows/check-protobuf.yml ================================================ name: Check Protobuf on: push: paths: - '**.proto' - '**_pb2.py' pull_request: paths: - '**.proto' - '**_pb2.py' workflow_dispatch: permissions: contents: read jobs: check-protobuf: name: "Verify pb2 files are up to date" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install pinned protobuf tools run: pip install -r tools/requirements-tools.txt - name: Regenerate protobuf files run: bash tools/gen_proto.sh - name: Check for uncommitted changes run: | git diff --exit-code -- '**/*_pb2.py' || { echo "" echo "ERROR: pb2 files are out of date with their .proto sources." echo "Run the protoc commands above locally and commit the updated pb2 files." exit 1 } ================================================ FILE: .github/workflows/jekyll-gh-pages.yml ================================================ # Sample workflow for building and deploying a Jekyll site to GitHub Pages name: Deploy Jekyll with GitHub Pages dependencies preinstalled on: # Runs on pushes targeting the default branch push: branches: ["main"] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false jobs: # Build job build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Pages uses: actions/configure-pages@v5 - name: Build with Jekyll uses: actions/jekyll-build-pages@v1 with: source: ./ destination: ./_site - name: Upload artifact uses: actions/upload-pages-artifact@v3 # Deployment job deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest needs: build steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 ================================================ FILE: .github/workflows/pwsim-docker.yml ================================================ name: pwsim-docker # Only trigger if a push is made to the pwsimulator folder on: push: paths: - 'pwsimulator/**' jobs: docker: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v5 with: context: pwsimulator/ platforms: linux/amd64,linux/arm64 push: true tags: ${{ secrets.DOCKERHUB_USERNAME }}/pwsimulator:latest ================================================ FILE: .github/workflows/pylint.yml ================================================ name: Pylint on: push: pull_request: workflow_dispatch: jobs: build: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install pylint pip install -r requirements.txt - name: Analyzing the code with pylint run: | pylint -E pypowerwall/*.py pylint -E proxy/*.py ================================================ FILE: .github/workflows/simtest.yml ================================================ name: simulator on: push: pull_request: workflow_dispatch: permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: determine-image: name: "Determine Image" runs-on: ubuntu-latest outputs: image-owner: ${{ steps.set-owner.outputs.owner }} steps: - name: Determine image owner id: set-owner uses: actions/github-script@v7 with: script: | const { data: repo } = await github.rest.repos.get({ owner: context.repo.owner, repo: context.repo.repo }); let imageOwner = context.repo.owner; if (repo.fork && repo.parent) { imageOwner = repo.parent.owner.login; } core.setOutput('owner', imageOwner); console.log(`Image owner: ${imageOwner}`); tests: name: "Python ${{ matrix.python-version }}" needs: determine-image runs-on: ubuntu-latest env: USING_COVERAGE: '3.13' strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] services: simulator: image: ${{ needs.determine-image.outputs.image-owner }}/pwsimulator ports: - 443:443 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: "pip" cache-dependency-path: | requirements.txt test_requirements.txt - name: Show environment run: | set -xe python -VV python -m site python -m pip --version - name: "Install dependencies" run: | set -xe python -m pip install --upgrade pip setuptools wheel pip install -U -r requirements.txt -r test_requirements.txt - name: Wait for simulator run: | for i in {1..10}; do if RESP=$(curl -sk https://localhost/test); then echo "Simulator ready" echo "$RESP" exit 0 fi sleep 2 done echo "Simulator never became healthy" >&2 docker ps -a exit 1 - name: "Run example.py on ${{ matrix.python-version }}" run: "python example.py" - name: Collect logs on failure if: failure() run: | mkdir -p logs docker ps -a > logs/docker-ps.txt docker logs "$(docker ps -aq --filter 'publish=443')" > logs/simulator.log 2>&1 || true - if: failure() uses: actions/upload-artifact@v4 with: name: simulator-logs-${{ matrix.python-version }} path: logs/ ================================================ FILE: .github/workflows/test.yml ================================================ name: CI on: push: pull_request: workflow_dispatch: permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: tests: name: "Python ${{ matrix.python-version }}" runs-on: ubuntu-latest strategy: fail-fast: false matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"] steps: - uses: "actions/checkout@v4" with: fetch-depth: 0 # IMPORTANT: get full history so comparisons work submodules: false - uses: "actions/setup-python@v5" with: python-version: "${{ matrix.python-version }}" cache: pip - name: "Install dependencies" run: | set -xe python -VV python -m site python -m pip install --upgrade pip setuptools wheel pip install --upgrade -r requirements.txt pip install --upgrade -r test_requirements.txt # Force branch + html+xml reports even if pytest.ini doesn't set them - name: Run unit tests (with coverage) env: PYTEST_ADDOPTS: "--cov=pypowerwall --cov-branch --cov-report=xml --cov-report=html" run: pytest - name: "Run test.py on ${{ matrix.python-version }}" run: "python test.py" # Upload both XML (for services/badges) and HTML (for browsing) - name: Upload coverage artifacts if: always() uses: actions/upload-artifact@v4 with: name: coverage-${{ matrix.python-version }} path: | coverage.xml htmlcov/** - name: Upload to Codecov if: always() uses: codecov/codecov-action@v4 with: files: coverage.xml flags: py${{ matrix.python-version }} token: ${{ secrets.CODECOV_TOKEN }} ================================================ FILE: .gitignore ================================================ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # Local Test localtest.py upload.sh .powerwall .vscode/settings.json localtest.sh sandbox/ .DS_Store proxy/testproxy.sh proxy/uploadtest.sh tools/set-reserve.auth tools/set-reserve.conf tools/set-mode.auth tools/set-mode.conf tools/tedapi/request.bin tools/tedapi/app* .pypowerwall.auth .pypowerwall.site proxy/pypowerwall proxy/teslapy .fleetapi* .idea **/.cachefile .cachefile .pypowerwall.fleetapi .auth j config.json status.json tools/tedapi/firmware.raw tools/tedapi/components.json tools/tedapi/manypw3.json tools/tedapi/pw3.json tools/tedapi/test.py proxy/.beta_version cleanroom tools/tesla-history/tesla-history.auth tools/tesla-history/tesla-history.conf tools/tedapi-lan/credentials.json fleet_tokens.json tedapi_rsa_* *.bak ================================================ FILE: .pre-commit-config.yaml ================================================ repos: - repo: local hooks: - id: protoc-gen name: Regenerate protobuf Python files language: script entry: tools/gen_proto.sh files: \.proto$ pass_filenames: false # Requires: pip install -r tools/requirements-tools.txt - id: pylint-pypowerwall name: Pylint (pypowerwall errors) language: system entry: pylint -E pypowerwall/ files: ^pypowerwall/.*\.py$ pass_filenames: false - id: pylint-proxy name: Pylint (proxy errors) language: system entry: pylint -E proxy/*.py files: ^proxy/.*\.py$ pass_filenames: false ================================================ FILE: .pylintrc ================================================ [MASTER] # Ignore auto-generated protobuf files ignore-paths = .*_pb2\.py$ [MESSAGES CONTROL] disable=consider-iterating-dictionary, consider-swap-variables, consider-using-enumerate, cyclic-import, consider-using-max-builtin, no-else-continue, consider-using-min-builtin, consider-using-in, super-with-arguments, protected-access, import-outside-toplevel, multiple-statements, unidiomatic-typecheck, no-else-break, import-error, invalid-name, missing-docstring, no-else-return, no-member, too-many-lines, line-too-long, too-many-ancestors, too-many-arguments, too-many-branches, too-many-instance-attributes, too-many-locals, too-many-nested-blocks, too-many-return-statements, too-many-statements, too-few-public-methods, ungrouped-imports, use-dict-literal, superfluous-parens, fixme, consider-using-f-string, bare-except, broad-except, unused-variable, unspecified-encoding, redefined-builtin, consider-using-dict-items, redundant-u-string-prefix, useless-object-inheritance, wrong-import-position, logging-not-lazy, logging-fstring-interpolation, wildcard-import, logging-format-interpolation [SIMILARITIES] min-similarity-lines=8 ================================================ FILE: API.md ================================================ # PyPowerwall Python API Documentation PyPowerwall is a Python library for interfacing with the Tesla Solar Powerwall Gateway. This document provides an overview of the main classes and functions available for users and developers. --- ## Getting Started Install the required dependencies: ```sh pip install requests protobuf ``` Import the library in your Python code: ```python import pypowerwall ``` Create a Powerwall instance: ```python pw = pypowerwall.Powerwall(host="", password="", email="") ``` --- ## Main Class: `Powerwall` ### Initialization ```python pw = pypowerwall.Powerwall( host="", password="", email="", timezone="America/Los_Angeles", pwcacheexpire=5, timeout=5, poolmaxsize=10, cloudmode=False, siteid=None, authpath="", authmode="cookie", cachefile=".powerwall", fleetapi=False, auto_select=False, retry_modes=False, gw_pwd=None, rsa_key_path=None ) ``` **Parameters:** - `host`: Hostname or IP of the Tesla gateway - `password`: Customer password for gateway - `email`: Customer email for gateway/cloud - `timezone`: Timezone string - `pwcacheexpire`: API cache timeout in seconds - `timeout`: HTTPS call timeout in seconds - `poolmaxsize`: HTTP connection pool size - `cloudmode`: Use Tesla cloud API (default: False) - `siteid`: Site ID for cloud mode - `authpath`: Path to cloud auth/site files - `authmode`: "cookie" or "token" (default: "cookie") - `cachefile`: Path to cache file - `fleetapi`: Use Tesla FleetAPI (default: False) - `auto_select`: Auto-select best connection mode - `retry_modes`: Retry connection attempts - `gw_pwd`: Full gateway password from QR sticker (used for TEDAPI and v1r modes; last 5 chars auto-derived for Basic login) - `rsa_key_path`: Path to RSA-4096 private key for v1r LAN TEDAPI mode (Powerwall 3 wired LAN) --- ## Common Methods ### System and Status - `is_connected()` → bool Returns True if able to connect and login to Powerwall. - `status(param=None, jsonformat=False)` → dict/str/None Returns system status. If `param` is provided, returns only that parameter. - `site_name()` → str/None Returns the site name. - `version(int_value=False)` → str/int/None Returns firmware version (as string or int). - `uptime()` → str/None Returns system uptime in seconds. - `din()` → str/None Returns the system DIN. ### Power and Energy - `level(scale=False)` → float/None Returns battery power level percentage. Tesla reserves 5% of battery capacity as a buffer, so: - `scale=False` (default): Returns actual battery level including the 5% reserve - `scale=True`: Returns Tesla app-style percentage using formula `(level / 0.95) - (5 / 0.95)` to show percentage of *usable* capacity (matches Tesla App) - `power()` → dict Returns power data for site, solar, battery, and load. - `site(verbose=False)` → dict Returns site sensor data (W or raw JSON if verbose=True). - `solar(verbose=False)` → dict Returns solar sensor data (W or raw JSON if verbose=True). - `battery(verbose=False)` → dict Returns battery sensor data (W or raw JSON if verbose=True). - `load(verbose=False)` → dict Returns load sensor data (W or raw JSON if verbose=True). - `grid(verbose=False)` → dict Alias for `site()`. - `home(verbose=False)` → dict Alias for `load()`. ### Device and System Data - `vitals(jsonformat=False)` → dict/str Returns Powerwall device vitals. - `strings(jsonformat=False, verbose=False)` → dict/str Returns solar panel string data. - `temps(jsonformat=False)` → dict/str Returns Powerwall temperatures. - `alerts(jsonformat=False, alertsonly=True)` → list/str Returns array of alerts from devices. - `system_status(jsonformat=False)` → dict/str Returns the system status. - `battery_blocks(jsonformat=False)` → dict/str Returns battery-specific information merged from system status and vitals. - `grid_status(type="string")` → str/int/None Returns the power grid status. `type` can be "string" (default), "json", or "numeric". - "string": "UP", "DOWN", "SYNCING" - "numeric": -1 (Syncing), 0 (DOWN), 1 (UP) ### Battery and Operation - `get_reserve(scale=True, force=False)` → float/None Get battery reserve percentage. - `get_mode(force=False)` → str/None Get current battery operation mode. - `set_reserve(level)` → dict/None Set battery reserve percentage (0-100). - `set_mode(mode)` → dict/None Set current battery operation mode (`self_consumption`, `backup`, `autonomous`). - `set_operation(level=None, mode=None, jsonformat=False)` → dict/str/None Set battery reserve percentage and/or operation mode. - `get_time_remaining()` → float/None Get the backup time remaining on the battery (in hours). ### Grid and Export - `set_grid_charging(mode)` → dict/None Enable or disable grid charging (`mode` = True/False). - `get_grid_charging()` → bool/None Get the current grid charging mode. - `set_grid_export(mode)` → dict/None Set grid export mode (`mode` = "battery_ok", "pv_only", "never"). - `get_grid_export()` → str/None Get the current grid export mode. > **v1r LAN Control:** In v1r mode (Powerwall 3 wired LAN with RSA key), all control methods work directly over the local network via config file writes — no cloud API or Tesla account needed. In other modes (WiFi TEDAPI, local), control requires FleetAPI or Cloud API access. --- ## Example Usage ### Local Mode (Powerwall 2/+) ```python import pypowerwall pw = pypowerwall.Powerwall(host="10.0.1.99", password="yourpassword", email="your@email.com") if pw.is_connected(): print("Connected to Powerwall!") print("Site Name:", pw.site_name()) print("Battery Level:", pw.level()) print("Grid Status:", pw.grid_status()) print("Alerts:", pw.alerts()) else: print("Failed to connect to Powerwall.") ``` ### v1r LAN Mode (Powerwall 3 — full local control) ```python import pypowerwall pw = pypowerwall.Powerwall( host="10.42.1.40", # Powerwall vendor subnet IP gw_pwd="ABCDEXXXXX", # Full gateway password from QR sticker rsa_key_path="/path/to/tedapi_rsa_private.pem" # RSA key from v1r_register.py ) # Monitor print("Battery:", pw.level(), "%") print("Power:", pw.power()) print("Vitals:", pw.vitals()) # Read control settings print("Mode:", pw.get_mode()) print("Reserve:", pw.get_reserve()) print("Grid Charging:", pw.get_grid_charging()) print("Grid Export:", pw.get_grid_export()) # Set control values (no cloud needed) pw.set_mode("self_consumption") pw.set_reserve(20) pw.set_grid_charging(False) pw.set_grid_export("pv_only") ``` --- ## Advanced Topics - **Cloud Mode:** Set `cloudmode=True` and provide your Tesla account email to use the Tesla Cloud API. - **FleetAPI:** Set `fleetapi=True` to use Tesla FleetAPI (requires setup). - **TEDAPI:** Use `gw_pwd` for TEDAPI mode (advanced/local diagnostics). - **v1r LAN:** Use `gw_pwd` + `rsa_key_path` for Powerwall 3 wired LAN access with full local control. - **Caching:** The library caches API responses for 5 seconds by default (`pwcacheexpire`). - **Authentication:** Supports both cookie and bearer token authentication (`authmode`). --- ## Requirements - Python 3.7+ - `requests`, `protobuf` Install requirements: ```sh pip install -r requirements.txt ``` ## TeslaPy **Note:** TeslaPy is included as a patched fork within pypowerwall and does not need to be installed separately. The fork was created because the original project is mostly unmaintained and necessary bug fixes were not being accepted by the maintainers. You can access it if needed: ```python from pypowerwall.cloud import teslapy ``` --- ## Architecture pypowerwall uses a modular architecture with multiple backend implementations and a sophisticated multi-tier caching system to optimize performance and reliability. ### Component Overview The library consists of several key components: - **Powerwall (Main Class)**: High-level interface that automatically selects the appropriate backend - **PyPowerwallBase**: Abstract base class defining the core API interface - **Backend Implementations**: - **TEDAPI** - Tesla Energy Device API for local communication via gateway - **Local** - Legacy local API for older Powerwall firmware - **Cloud** - Tesla Cloud API for remote access - **FleetAPI** - Tesla Fleet API for third-party integrations - **Proxy Server**: HTTP server that wraps pypowerwall and adds performance caching ### Class Hierarchy ```mermaid classDiagram class Powerwall { +__init__(host, password, email, ...) +poll() +power() +battery_blocks() Backend selection logic } class PyPowerwallBase { <> +poll() +level() +power() +vitals() +strings() } class TEDAPI { +gw_pwd authentication +protobuf communication +network call cache (30s) +vitals streaming } class Local { +cookie/bearer auth +legacy endpoints +older firmware support } class Cloud { +Tesla account auth +remote access +Included TeslaPy fork } class FleetAPI { +third-party auth +fleet endpoints +vehicle integration } Powerwall --|> PyPowerwallBase : extends TEDAPI --|> PyPowerwallBase : implements Local --|> PyPowerwallBase : implements Cloud --|> PyPowerwallBase : implements FleetAPI --|> PyPowerwallBase : implements Powerwall --> TEDAPI : uses Powerwall --> Local : uses Powerwall --> Cloud : uses Powerwall --> FleetAPI : uses ``` ### Data Flow and Caching Architecture pypowerwall implements a 3-tier caching system for optimal performance: ```mermaid sequenceDiagram participant App as Application participant Proxy as Proxy Server participant Base as Powerwall/Base participant Backend as TEDAPI/Local/Cloud participant GW as Gateway/Cloud API Note over Proxy: Layer 3: Performance Cache
(5s default, configurable) Note over Base: Layer 2: No Caching
(Clean API) Note over Backend: Layer 1: Network Cache
(5s default, configurable) App->>Proxy: GET /api/freq alt Cache Hit (< 5s) Proxy-->>App: Cached Response (~1ms) else Cache Miss Proxy->>Base: frequency() Base->>Backend: vitals() alt Network Cache Hit (< 5s) Backend-->>Base: Cached Data else Network Cache Miss Backend->>GW: API Request GW-->>Backend: Fresh Data Backend->>Backend: Store in cache end Backend-->>Base: Data Base-->>Proxy: Processed Data Proxy->>Proxy: Cache for 5s Proxy-->>App: Fresh Response (~900ms) end ``` ### Connection Mode Selection The Powerwall class automatically selects the appropriate backend based on configuration: ```mermaid flowchart TD Start([Application Initializes]) --> CheckFleet{fleetapi=True?} CheckFleet -->|Yes| Fleet[FleetAPI Backend] CheckFleet -->|No| CheckCloud{cloudmode=True?} CheckCloud -->|Yes| Cloud[Cloud Backend] CheckCloud -->|No| CheckPassword{gw_pwd provided?} CheckPassword -->|Yes| TestTEDAPI[Test TEDAPI Connection] CheckPassword -->|No| Local[Local Backend] TestTEDAPI --> TEDAPI_OK{Connection OK?} TEDAPI_OK -->|Yes| TEDAPI[TEDAPI Backend] TEDAPI_OK -->|No| FallbackLocal[Local Backend
Fallback] Fleet --> Done([Ready]) Cloud --> Done TEDAPI --> Done Local --> Done FallbackLocal --> Done style TEDAPI fill:#90EE90 style Cloud fill:#87CEEB style Fleet fill:#DDA0DD style Local fill:#FFB6C1 ``` ### Backend Comparison | Feature | TEDAPI | Local | Cloud | FleetAPI | |---------|--------|-------|-------|----------| | **Connection** | Local Gateway | Local Gateway | Internet | Internet | | **Authentication** | Gateway Password | Cookie/Token | Tesla Account | OAuth Token | | **Firmware Support** | Recent (23.44.0+) | Legacy | All | All | | **Response Speed** | Fast (~300ms) | Fast (~300ms) | Slower (~1-2s) | Slower (~1-2s) | | **Vitals Streaming** | Yes | Limited | No | Limited | | **Offline Operation** | Yes | Yes | No | No | | **Network Cache** | Yes (5s) | No | No | No | | **Best For** | PW3, Recent PW2+ | Older Systems | Remote Access | Third-party Apps | ### Caching Strategy pypowerwall implements intelligent caching at multiple levels: **Layer 1: Backend Network Cache** (TEDAPI only) - Default TTL: 5 seconds (configurable via `pwcacheexpire`) - Caches raw API responses from gateway - Reduces network calls for repeated requests - Logs cache age/expire for debugging **Layer 2: Base Library** - No caching (by design) - Clean API boundary - Always returns fresh data from backend - Simplifies testing and reasoning **Layer 3: Proxy Server Performance Cache** - Default TTL: 5 seconds (configurable via `PW_CACHE_EXPIRE`) - Caches processed responses for high-frequency endpoints - Dramatically improves response time (900ms → <1ms) - Used for: `/api/csv`, `/api/freq`, `/api/pod`, `/api/json` - Separate cache keys per endpoint - Thread-safe with locks **Layer 3b: Proxy Graceful Degradation Cache** - Default TTL: 15 seconds (configurable via `PW_CACHE_TTL_SECONDS`) - Stores last successful response - Used when gateway is unreachable - Prevents service interruption during brief outages ### Example: Request Flow for `/api/freq` 1. **Application** makes HTTP request to proxy server 2. **Proxy** checks performance cache (5s TTL) - If hit: Returns cached data immediately (~1ms) - If miss: Proceeds to step 3 3. **Proxy** calls multiple pypowerwall methods: - `system_status()` - battery blocks - `vitals()` - detailed metrics - `grid_status()` - grid connection state 4. **Base Library** forwards calls to backend (no caching) 5. **TEDAPI Backend** checks network cache (5s TTL) - If hit: Returns cached data - If miss: Makes protobuf API call to gateway 6. **Response** flows back through layers 7. **Proxy** caches processed response for 5 seconds 8. **Application** receives consolidated frequency data This architecture provides: - **Performance**: Sub-millisecond cached responses - **Reliability**: Graceful degradation during outages - **Flexibility**: Multiple backend support - **Observability**: Cache logging for debugging --- ## More Information - [GitHub Repository](https://github.com/jasonacox/pypowerwall) - [CONTRIBUTING.md](CONTRIBUTING.md) - [RELEASE.md](RELEASE.md) ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Code of Conduct As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, hosting discussions, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, disability, personal appearance, ethnicity, age, religion, or nationality. Examples of unacceptable behavior by participants include: - Personal attacks - Trolling or insulting/derogatory comments - Public or private harassment - Publishing others' private information, such as physical or electronic addresses, without explicit permission - Other unethical or unprofessional conduct Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project maintainer at the email address listed in the repository. This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 1.4. ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to PyPowerwall Thank you for your interest in contributing to PyPowerwall! We welcome contributions that improve the project and make it more useful for everyone. Please read the following guidelines to help us maintain a high-quality, maintainable, and collaborative codebase. ## General Guidelines - **Keep it Modular:** Structure your code in small, focused modules and functions. Avoid monolithic files or classes. This makes the code easier to read, test, and maintain. - **Small Pull Requests:** Submit small, focused pull requests (PRs) that address a single issue or feature. This makes it easier for reviewers to evaluate and approve your changes quickly. - **Simplicity:** Strive for simplicity in your code and design. Avoid unnecessary complexity. Write code that is easy to understand and modify by others. - **Readability:** Use clear, descriptive names for variables, functions, and classes. Add comments where necessary, especially for non-obvious logic. - **Testing:** We recommend that you thoroughly test your changes before submitting a PR. While unit tests are not strictly required, contributions that include appropriate unit tests are highly appreciated and will receive extra consideration. Make sure all existing tests pass before submitting your PR. PRs without tests may still be accepted if they are well-tested and documented. - **Release Notes:** For any user-facing changes, please add a summary to the `RELEASE.md` file describing what changed and why. ## Setting Up Your Development Environment - Clone the repository: ``` git clone https://github.com/jasonacox/pypowerwall.git cd pypowerwall ``` - (Optional) Create and activate a virtual environment: ``` python3 -m venv venv source venv/bin/activate ``` - Install runtime dependencies (required to run the package): ``` pip install -r requirements.txt ``` - (For contributors running tests) Install test dependencies (required to execute unit tests): ``` pip install -r test_requirements.txt ``` ## Dependency Files: requirements.txt vs. test_requirements.txt - `requirements.txt` lists the dependencies required to run the PyPowerwall package itself. Install these to use the library or run the main application. - `test_requirements.txt` lists additional dependencies needed only for running the unit tests (e.g., pytest, mock libraries). Install these if you plan to run or write tests: ``` pip install -r test_requirements.txt ``` - You typically need both files for full development and testing, but end users only need `requirements.txt`. ## How to Run Tests - **Note:** The following applies to the Python library only. The proxy server and other tools have their own testing and validation processes. - Tests are located in the `pypowerwall/tests/` directory. - Before running tests, ensure you have installed both `requirements.txt` and `test_requirements.txt` dependencies (see above). - Run all tests with: ``` pytest ``` - If your contribution requires hardware or external services, please use mocks or document how to test your changes. ## How to Contribute 1. **Fork the Repository** Create your own fork of the project and clone it locally. 2. **Create a Branch** Create a new branch for your feature or bugfix: ``` git checkout -b feature/my-new-feature ``` 3. **Make Your Changes** Keep your changes focused and modular. Update or add tests as needed. 4. **Test Your Changes** Run all tests locally to ensure nothing is broken: ``` pytest ``` 5. **Update Release Notes** Add a brief summary of your change to `RELEASE.md`. 6. **Submit a Pull Request** Push your branch to your fork and open a pull request against the main repository. Provide a clear description of your changes and reference any related issues. ## Issues vs. Discussions - **Issues** are for reporting bugs, requesting features, or tracking specific tasks that require action or resolution. Use an issue when you have a concrete problem, bug, or enhancement to propose. Issues should be closed when the problem is resolved, the feature is implemented, or the task is complete. - **Discussions** are for open-ended conversations, brainstorming, questions, or general feedback that may not require direct action or a code change. Use a discussion when you want to ask for advice, share ideas, or start a broader conversation. Discussions can be closed when the conversation has naturally concluded, a consensus is reached, or the topic is no longer active. > These are guidelines, not strict rules. If you're unsure, start a discussion—maintainers can help move it to an issue if needed. ## Flexibility and Exceptions While the guidelines above are generally adhered to, the maintainers are not strict rules lawyers. We value thoughtful contributions and are always open to reasonable exceptions or nuanced cases. If you have a good reason to diverge from a guideline, or if your situation doesn't fit neatly into the rules, please start a conversation—collaboration and flexibility are encouraged. ## Branch Naming and Commit Messages - Use descriptive branch names, e.g., `fix/issue-123-description` or `feature/add-new-api`. - Write clear, concise commit messages that explain the "why" behind your changes. ## Code Style - Follow [PEP 8](https://pep8.org/) for Python code style. - Use [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html) for docstrings and comments. - Use type hints where appropriate. ## Reviewing and Approval - PRs will be reviewed for clarity, modularity, simplicity, and test coverage. - Please be responsive to feedback and willing to make changes as requested. ## Code of Conduct Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms. ## Licensing By contributing, you agree that your contributions will be licensed under the same license as the rest of the project (see [`LICENSE`](LICENSE)). ## Versioning Policy This project follows [Semantic Versioning](https://semver.org/). Version numbers are in the format MAJOR.MINOR.PATCH: - **MAJOR** version when you make incompatible API changes, - **MINOR** version when you add functionality in a backwards-compatible manner, and - **PATCH** version when you make backwards-compatible bug fixes. Please update the version number appropriately in your pull request if your change warrants it, and describe the change in `RELEASE.md`. ## Relationship to Powerwall-Dashboard PyPowerwall focuses on providing core Python functionality to access Tesla Powerwall and Tesla Solar systems. This repository contains the Python library and proxy server for programmatic and easy access to Powerwall data and control features. The [Powerwall-Dashboard](https://github.com/jasonacox/powerwall-dashboard) project provides a Grafana dashboard for visualizing Powerwall data. It uses PyPowerwall to collect data, stores it in InfluxDB, and displays it in Grafana. Powerwall-Dashboard also manages the container stack needed for the dashboard setup. Since PyPowerwall and [Powerwall-Dashboard](https://github.com/jasonacox/powerwall-dashboard) work closely together, many features, bugs, and enhancements may affect both projects. Please mention this in your issue or discussion if applicable. Maintainers may move or cross-reference issues between repositories as needed. **Where to contribute:** - PyPowerwall: Changes related to the Python library, API, or proxy server (e.g., new endpoints, bug fixes, data collection improvements) - Powerwall-Dashboard: Changes related to dashboard setup, Grafana dashboards, InfluxDB configuration, or container stack management. Additionally, users are encouraged to start or join discussions about the Powerwall system itself or Powerwall Firmware updates (including problems) to that project first. - Not sure? Start a discussion in either repository - maintainers will help direct it appropriately - When submitting PRs or issues, check for and reference any related items in the sister project - Issues may move between projects as needed; cross-project collaboration is encouraged ## Platform and Compatibility Notes - **Backward Compatibility:** We strive to maintain backward compatibility and avoid breaking existing installations whenever possible. If your contribution introduces a breaking change, please clearly document it and discuss with the maintainers before submitting your PR. - **Multi-Platform Support:** PyPowerwall aims to support a wide range of platforms, including Raspberry Pi, Linux, Windows, macOS, and appliance-based compute platforms (such as Synology). Contributors are encouraged to consider cross-platform compatibility and, where possible, test changes on multiple platforms. Please note any platform-specific considerations or limitations in your PR description. ## Questions If you have any questions or need clarification, feel free to open an issue or start a discussion. Thank you for helping make PyPowerwall better! ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2021 Jason Cox Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # pyPowerwall [![License](https://img.shields.io/github/license/jasonacox/pypowerwall)](https://img.shields.io/github/license/jasonacox/pypowerwall) [![PyPI version](https://badge.fury.io/py/pypowerwall.svg)](https://badge.fury.io/py/pypowerwall) [![CI](https://github.com/jasonacox/pypowerwall/actions/workflows/test.yml/badge.svg)](https://github.com/jasonacox/pypowerwall/actions/workflows/test.yml) [![simtest](https://github.com/jasonacox/pypowerwall/actions/workflows/simtest.yml/badge.svg)](https://github.com/jasonacox/pypowerwall/actions/workflows/simtest.yml) [![Python Version](https://img.shields.io/pypi/pyversions/pypowerwall)](https://img.shields.io/pypi/pyversions/pypowerwall) [![PyPI Downloads](https://static.pepy.tech/badge/pypowerwall/month)](https://static.pepy.tech/badge/pypowerwall/month) pyPowerwall is a Python module to interface with Tesla Energy Gateways for Powerwall and solar power data. It supports local access to Powerwall, Powerwall 2, Powerwall+ and Powerwall 3 systems. It also provides Tesla Owner and FleetAPI cloud access for all systems including Solar-only systems. For Powerwall 3 on wired LAN, the v1r TEDAPI mode provides full local access using RSA-signed protobuf messages without needing Wi-Fi access. > ⚠️ **NOTICE:** As of Powerwall Firmware version 25.10.0, network routing to the TEDAPI endpoint (`192.168.91.1`) is no longer supported by Tesla. You must connect directly to the Powerwall's Wi‑Fi access point to access TEDAPI data. ## Description This Python module can be used to monitor and control Tesla Energy Powerwalls. It uses a single class (`Powerwall`) and simple functions to fetch energy data and poll API endpoints on the Gateway. pyPowerwall will cache the authentication headers and API call responses to help reduce the number of calls made to the Gateway (useful if you are polling the Powerwall frequently for trending data). * Works with Tesla Energy Gateways - Powerwall, Powerwall+ and Powerwall 3 * Access provided via Local Gateway APIs, Tesla FleetAPI (official), Tesla Owners API (unofficial), and v1r LAN TEDAPI (Powerwall 3). * Will cache authentication to reduce load on Powerwall Gateway * Will cache responses to limit the number of calls to the Powerwall Gateway or cloud (optional/user‑definable) * Will re-use HTTP connections to the Powerwall Gateway for reduced load and faster response times * Provides solar string data for Powerwall+ and Powerwall 3 systems. ## Setup You can clone this repo or install the package with pip. Once installed, pyPowerwall can scan your local network to find the IP address of your Tesla Powerwall Gateway. ```bash # Install pyPowerwall python3 -m pip install pypowerwall # Option 1 - LOCAL MODE - Scan Network for Powerwalls python3 -m pypowerwall scan # Option 2 - FLEETAPI CLOUD MODE - Setup to use the official Tesla FleetAPI - See notes below. python3 -m pypowerwall setup -fleetapi # Option 3 - CLOUD MODE - Setup to use Tesla Owners cloud API python3 -m pypowerwall setup # Option 4 - TEDAPI MODE - Test this mode (requires extended setup - see below) python3 -m pypowerwall tedapi # Option 5 - v1r LAN TEDAPI MODE - Register RSA key for Powerwall 3 wired LAN access python3 -m pypowerwall setup -v1r ``` ### Local Setup - Option 1 The Tesla Powerwall, Powerwall 2 and Powerwall+ have a local LAN based Web Portal and API that you can use to monitor your Powerwall. It requires that you (or your installer) have the IP address (see scan above) and set up *Customer Login* credentials on your Powerwall Gateway. That is all that is needed to connect. The Powerwall 3 does not have a traditional Web Portal or API but you can access it via the cloud (see options 2 and 3), via the TEDAPI Wi-Fi access point (option 4), or via the wired LAN using v1r TEDAPI (option 5). Locally accessible extended device vitals metrics are available using the TEDAPI method (see options 4 and 5 below). ### FleetAPI Cloud Setup - Option 2 FleetAPI is the official Tesla API for accessing your Tesla products. This setup has some additional setup requirements that you will be prompted to do: Step 1 - Tesla Partner Account - Sign in to Tesla Developer Portal and make an App Access Request: See [Tesla App Access Request](https://developer.tesla.com/request) - During this process, you will need to set up and remember the following account settings: * CLIENT_ID - This will be provided to you by Tesla when your request is approved. * CLIENT_SECRET - Same as above. * DOMAIN - The domain name of a website you own and control. * REDIRECT_URI - This is the URL that Tesla will direct you to after you authenticate. This landing URL (on your website) will extract the GET variable `code`, which is a one-time use authorization code needed during the pyPowerwall setup. You can use https://pypowerwall.com/code or copy the code from [index.html](./tools/fleetapi/index.html) to your site and update REDIRECT_URI with that URL. Alternatively, you can just copy the URL from the 404 page during the authorization process (the code is in the URL). Step 2 - Run the [create_pem_key.py](./tools/fleetapi/create_pem_key.py) script and place the **public** key on your website at the URL: https://{DOMAIN}/.well-known/appspecific/com.tesla.3p.public-key.pem Step 3 - Run `python3 -m pypowerwall fleetapi` - The credentials and tokens will be stored in the `.pypowerwall.fleetapi` file. ### Cloud Mode - Option 3 The unofficial Tesla Owners API allows FleetAPI access (option 2) without having to set up a website and PEM key. Follow the directions given to you by running `python3 -m pypowerwall setup`. The credentials and site_id will be stored in `.pypowerwall.auth` and `.pypowerwall.site`. If you need to authenticate on a machine without a display (e.g. a Raspberry Pi or remote server over SSH), use the `authtoken` command on your local machine to obtain a refresh token, then paste it into the remote session: ```bash # On your local machine (Mac/Windows/Linux with a display): python3 -m pypowerwall authtoken # Follow the Tesla login flow in the popup window. # Copy the token printed to the terminal. # Then on the remote machine, run setup and paste the token when prompted: python3 -m pypowerwall setup ``` ### TEDAPI Mode - Option 4 With version v0.10.0+, pypowerwall can access the TEDAPI endpoint on the Gateway over **Wi-Fi**. This API offers additional metrics related to string data, voltages, and alerts. You will need the Gateway Wi‑Fi password (found on the QR sticker on the Powerwall Gateway) and network access to `192.168.91.1` (either via the Gateway’s Wi‑Fi AP or a static route from your LAN). #### Full vs Hybrid TEDAPI Option 4 operates in two sub-modes depending on which credentials you provide: * **Full TEDAPI** — Set only `gw_pwd` (leave `password` empty). Uses the full Gateway Wi‑Fi password for HTTP Basic Auth directly to the TEDAPI protobuf endpoint. Works on PW2/+/3. * **Hybrid TEDAPI** — Set both `password` (last 5 chars) and `gw_pwd`. The customer password authenticates via `/api/login/Basic` for standard JSON API access, while `gw_pwd` enables TEDAPI for supplemental vitals data (string voltages, per‑device alerts, etc.). Useful on PW2/+ where the customer API provides data that TEDAPI does not. #### Network Requirements (Wi-Fi) Your machine must be able to reach `192.168.91.1`. Options: * Connect directly to the Gateway’s Wi‑Fi access point * Add a static route from your LAN through the Gateway’s home-network IP (see examples below) > **Note:** Some firmware versions (25.10.0+) may block routed access to 192.168.91.1. In that case, connect directly to the Gateway Wi‑Fi. > ⚠️ **TEDAPI Limitations:** Some functions are only available via FleetAPI or Cloud mode. Known limitations include `get_grid_charging()` and `get_grid_export()`, which rely on Fleet API endpoints not exposed locally — these return `None` in TEDAPI mode with a log warning. Use FleetAPI (Option 2) or Cloud mode (Option 3) for full functionality. In the examples below, change **192.168.0.100** to the IP address of the Powerwall Gateway (or Inverter) on your LAN. Also, the **onlink** parameter may be necessary for Linux. #### Linux Ubuntu and RPi ```bash # Can add to /etc/rc.local for persistence sudo ip route add 192.168.91.1 via 192.168.0.100 [onlink] ``` See `examples/network_route.py` for two different approaches to do this programmatically in Python. #### macOS ``` sudo route add -host 192.168.91.1 192.168.0.100 # Temporary networksetup -setadditionalroutes Wi-Fi 192.168.91.1 255.255.255.255 192.168.0.100 # Persistent ``` #### Windows - Using the persistence flag - Administrator Shell ``` route -p add 192.168.91.1 mask 255.255.255.255 192.168.0.100 ``` #### Windows Subsystem for Linux (WSL 2–specific) Follow the instructions for Linux, but you must edit (from the host Windows OS) `%USERPROFILE%\.wslconfig` and add the following settings: ``` [wsl2] networkingMode=mirrored ``` ```bash # Test WiFi TEDAPI python3 -m pypowerwall tedapi -gw_pwd ABCDEXXXXX # Test v1r LAN TEDAPI python3 -m pypowerwall tedapi -host 10.42.1.40 -v1r -gw_pwd ABCDEXXXXX \ -rsa_key_path /path/to/tedapi_rsa_private.pem ``` #### TEDAPI Troubleshooting - Connection refused/timeout: Ensure you’re connected to the Powerwall’s Wi‑Fi or have a working route to 192.168.91.1. Some firmware versions (25.10.0+) block routing; connect directly to the PW Wi‑Fi. - Auth failures: Use the Gateway Wi‑Fi password from the QR label as `gw_pwd` (case‑sensitive). Customer portal passwords do not work for TEDAPI. - TLS/certificate warnings: TEDAPI uses a self‑signed cert; most tools need `--insecure` (curl) or `verify=False` (requests). Use only on trusted networks. - Hybrid mode quirks (PW2/+): If both customer `password`/`email` and `gw_pwd` are provided, TEDAPI data augments local APIs; try removing customer creds if you only need TEDAPI. - QNAP/Appliance routing: Static routes from shell may be ignored; use the appliance’s network control panel to add a persistent host route. ### v1r LAN TEDapi Setup - Option 5 (Powerwall 3 Wired LAN) The Powerwall 3 exposes endpoints on the **wired LAN** (the vendor/third-party Ethernet port) that provide local access to Powerwall data without needing Wi-Fi access to `192.168.91.1`. This is especially useful for always-on monitoring setups where a wired Ethernet connection to the Powerwall gateway is available. Option 5 has two sub-modes: * **Basic LAN** — Uses `/api/login/Basic` for a Bearer token + standard JSON API endpoints. No FleetAPI setup or RSA keys needed. Provides core power/battery/grid data (3 endpoints). * **Full v1r** — Uses RSA-4096 signed protobuf messages to the `/tedapi/v1r` endpoint. Requires one-time FleetAPI key registration. Provides full data access (config, firmware, vitals, strings, components) equivalent to Wi-Fi TEDAPI. #### Network Requirements (Wired LAN) The Powerwall 3 gateway has a wired Ethernet port on the TEG (Tesla Energy Gateway) unit that operates on an internal vendor subnet — typically `10.42.1.0/24` or `10.45.1.0/24`. This is **not** your home LAN IP. > **⚠️ DHCP Required:** The Powerwall 3 does **not** have a static IP address on the vendor subnet. It relies on DHCP to obtain an IP. You must run a DHCP server on the vendor subnet (e.g., `dnsmasq` or your Linux NAT router) that hands out addresses in the `10.42.1.x` or `10.45.1.x` range. Without a DHCP server, the Powerwall will not get an IP and the wired LAN endpoints will be unreachable. To reach this subnet you need a Layer 2 connection to the TEG Ethernet port: * **SPAN panel** — Provides this natively; the SPAN connects to the TEG Ethernet and bridges it to your home network * **Network bridge** — A Linux bridge (e.g., `br-tap`) joining the TEG Ethernet interface to your LAN * **Direct cable** — Ethernet cable from your machine to the TEG port (you will need a static IP on the 10.42.1.x subnet) * **VLAN** — Managed switch with a VLAN that includes the TEG port > **Important:** The v1r/Basic LAN endpoints listen only on the vendor subnet (10.42.1.x). Requests to the Powerwall’s home LAN IP will not reach these endpoints. Use `ping 10.42.1.x` to verify connectivity before configuration. #### Basic LAN Access (No RSA Key Required) If you only need core power, battery, and grid data over the wired LAN, you can use the standard local mode without RSA key registration. This uses the same `/api/login/Basic` endpoint that the Tesla app uses: ```python import pypowerwall pw = pypowerwall.Powerwall( host="10.42.1.40", # Powerwall wired LAN IP (vendor subnet) password="XXXXX", # Customer password (last 5 of GW password) email="user@example.com", timezone="America/Los_Angeles" ) # Basic power data available without RSA: print(pw.power()) # {site, solar, battery, load} in watts print(pw.level()) # Battery percentage print(pw.grid_status()) # Grid connection status ``` This gives you the three core endpoints: `/api/meters/aggregates`, `/api/system_status/soe`, and `/api/system_status/grid_status`. Most other `/api/*` endpoints return 404 on the wired LAN. For full access to vitals, strings, firmware, components, and device-level data, use Full v1r mode below. ##### Getting a Bearer Token (curl / shell) You can also access these endpoints directly without pypowerwall using a Bearer token: ```bash # Get a Bearer token using the customer password (last 5 chars of GW password) TOKEN=$(curl -sk -X POST https://10.0.1.50/api/login/Basic \ -H ‘Content-Type: application/json’ \ -d ‘{"username":"customer","password":"XXXXX","email":"user@example.com","force_sm_off":false}’ \ | python3 -c "import sys,json; print(json.load(sys.stdin)[‘token’])") # Power data (solar, battery, grid, load) curl -sk -H "Authorization: Bearer $TOKEN" https://10.0.1.50/api/meters/aggregates # Battery level (state of energy) curl -sk -H "Authorization: Bearer $TOKEN" https://10.0.1.50/api/system_status/soe # Grid connection status curl -sk -H "Authorization: Bearer $TOKEN" https://10.0.1.50/api/system_status/grid_status ``` **Note:** The token is also returned in the response cookies (`AuthCookie` and `UserRecord`). #### Full v1r LAN Access (RSA Key Required) With an RSA key registered via `v1r_register.py`, you get full TEDapi access over the wired LAN — equivalent to what was previously only available over Wi-Fi: > **Note:** The easiest way to register is using the Tesla Owner API (no developer app required) — just sign in with your Tesla account. Run `python -m pypowerwall register` and select option 1. If you already have FleetAPI set up (Option 2), you can also use those credentials by selecting option 2. ##### Requirements 1. **Wired LAN connection** to the Powerwall 3 gateway vendor subnet (see Network Requirements above) 2. **RSA-4096 key pair** registered with the Powerwall via Tesla Owner API or Fleet API 3. **Gateway password** (`gw_pwd` — from the QR sticker on the gateway; the last 5 characters are auto-derived for login) ##### RSA Key Registration Use `v1r_register.py` (or `python -m pypowerwall register` after pip install) to generate and register an RSA-4096 key pair with the Powerwall: ```bash python3 v1r_register.py ``` When prompted, select the registration method: - **Option 1 — Tesla Owner API** (recommended): Just sign in with your Tesla account. No developer app needed. - **Option 2 — Tesla Fleet API**: Requires a registered developer application (CLIENT_ID, CLIENT_SECRET, REDIRECT_URI). The script will then: 1. Generate an RSA-4096 key pair (saves private key to `tedapi_rsa_private.pem`) 2. Walk you through Tesla OAuth to authorize the registration 3. Register the public key with the Powerwall 4. Prompt you to confirm registration by toggling a Powerwall breaker off and back on (if not auto-verified) After the breaker toggle, wait for the Powerwall status light to turn from red back to white — this can take 30-60 seconds. The script will poll for confirmation and show whether the key was authorized. **Note (Fleet API only):** Tesla Fleet API requires your application’s public key to be served at `https://{DOMAIN}/.well-known/appspecific/com.tesla.3p.public-key.pem`. A Cloudflare Worker or any static web host can serve this file. ##### Full v1r Python Example ```python import pypowerwall pw = pypowerwall.Powerwall( host="10.42.1.40", # Powerwall wired LAN IP (vendor subnet) gw_pwd="ABCDEXXXXX", # Full gateway password (last 5 auto-derived) email="user@example.com", timezone="America/Los_Angeles", rsa_key_path="/path/to/tedapi_rsa_private.pem" # RSA key from v1r_register.py ) # All standard methods work over v1r: print(pw.level()) # Battery percentage print(pw.power()) # {site, solar, battery, load} in watts print(pw.solar()) # Solar power in watts print(pw.battery()) # Battery power in watts print(pw.grid()) # Grid power in watts print(pw.load()) # Load power in watts print(pw.version()) # Firmware version print(pw.vitals()) # Per-device vitals (PVAC, PVS, TEPOD, PINV, etc.) print(pw.strings()) # Solar string data print(pw.alerts()) # Active device alerts # API polling: pw.poll(‘/api/meters/aggregates’) # Detailed meter data pw.poll(‘/api/system_status/soe’) # Battery state of energy pw.poll(‘/api/system_status/grid_status’) # Grid connection status pw.poll(‘/api/system_status’) # Full system status pw.poll(‘/api/site_info’) # Site configuration pw.poll(‘/api/operation’) # Operation mode ``` #### v1r Docker Proxy Setup For always-on monitoring (e.g., with [Powerwall-Dashboard](https://github.com/jasonacox/Powerwall-Dashboard)), configure the proxy container with these environment variables: ```env PW_HOST=10.42.1.40 # Powerwall wired LAN IP (vendor subnet) PW_GW_PWD=ABCDEXXXXX # Full gateway password (last 5 auto-derived for login) PW_TIMEZONE=America/Los_Angeles PW_RSA_KEY_PATH=/app/.auth/tedapi_rsa_private.pem ``` Mount the RSA private key into the container at the path specified by `PW_RSA_KEY_PATH`. > **Tip:** You no longer need to set both `PW_PASSWORD` and `PW_GW_PWD`. Just set `PW_GW_PWD` with the full gateway password — the last 5 characters are automatically used for `/api/login/Basic` authentication. Setting `PW_PASSWORD` explicitly still works for backward compatibility. #### Password Configuration pyPowerwall accepts the gateway password via `PW_GW_PWD` (the full password from the QR sticker). When v1r mode needs the 5-character customer password for `/api/login/Basic`, it is automatically derived from the last 5 characters of `PW_GW_PWD`. You can still set `PW_PASSWORD` explicitly for backward compatibility. | Mode | `PW_GW_PWD` | `PW_PASSWORD` | `PW_RSA_KEY_PATH` | `PW_HOST` | |------|:-----------:|:-------------:|:------------------:|:---------:| | Option 4 full (WiFi) | required | — | — | 192.168.91.1 | | Option 4 hybrid (WiFi) | required | required | — | 192.168.91.1 | | Option 5 basic (LAN) | — | required | — | vendor subnet IP | | Option 5 v1r (LAN) | required | auto-derived | required | vendor subnet IP | | Option 1 local API | — | required | — | any | #### v1r Feature Parity | Feature | WiFi TEDapi (mode 4) | v1r LAN (mode 5) | |---------|:--------------------:|:-----------------:| | Config (site info, batteries) | Yes | Yes | | Firmware version | Yes | Yes | | Power (solar/battery/grid/load) | Yes | Yes | | Battery level (%) | Yes | Yes | | Grid status | Yes | Yes | | Site info & operation mode | Yes | Yes | | Per-device vitals (PVAC/PINV/POD) | Yes | Yes | | Component queries (PCH/BMS/HVP) | Yes | Yes | | Solar string data | Yes | Yes | | Multi-PW follower queries | Yes | Yes | | LAN control (reserve/mode/grid) | No | Yes | #### v1r WiFi Fallback When both the wired LAN (v1r) and WiFi TEDAPI connections are available, pyPowerwall transparently uses WiFi as a fallback transport for follower queries. This is automatically enabled when `PW_GW_PWD` is set alongside the v1r configuration. The proxy `/health` endpoint reports the active transports (e.g., `v1r_lan + wifi_tedapi`), and the mode string dynamically reflects what's active (e.g., `Local (v1r+wifi+control)`). #### LAN Control (v1r) In v1r mode, pyPowerwall can control the Powerwall directly over the wired LAN without requiring cloud access. Control commands are sent as config updates via the v1r filestore `updateFileRequest` mechanism (read-modify-write with optimistic locking). Supported control operations: | Control | Method | Values | |---------|--------|--------| | Backup reserve | `set_reserve(level)` | 0-100 (percentage) | | Operation mode | `set_mode(mode)` | `self_consumption`, `backup` | | Grid charging | `set_grid_charging(enable)` | `True` / `False` | | Grid export | `set_grid_export(mode)` | `battery_ok`, `pv_only`, `never` | ```python import pypowerwall pw = pypowerwall.Powerwall( host="10.42.1.40", gw_pwd="ABCDEXXXXX", rsa_key_path="/path/to/tedapi_rsa_private.pem" ) # Read current settings print(pw.get_mode()) # "self_consumption" print(pw.get_reserve()) # 20 print(pw.get_grid_charging()) # False print(pw.get_grid_export()) # "pv_only" # Set new values pw.set_reserve(30) pw.set_mode("backup") pw.set_grid_charging(True) pw.set_grid_export("battery_ok") # Max backup (v1r only) - sets reserve to 100% for duration pw.schedule_max_backup(3600) # 1 hour pw.cancel_max_backup() print(pw.get_backup_events()) # {"manual_backup": {...}, "backup_events": [...]} ``` For proxy usage, set `PW_CONTROL_SECRET` and use the `/control/*` endpoints — no cloud setup needed when using v1r mode: ```env PW_HOST=10.42.1.40 PW_GW_PWD=ABCDEXXXXX PW_RSA_KEY_PATH=/app/.auth/tedapi_rsa_private.pem PW_CONTROL_SECRET=YourSecretToken ``` ```bash # Read settings curl http://localhost:8675/control/mode curl http://localhost:8675/control/reserve curl http://localhost:8675/control/grid_charging curl http://localhost:8675/control/grid_export curl http://localhost:8675/control/max_backup # Set values curl -X POST -d "value=backup&token=$PW_CONTROL_SECRET" http://localhost:8675/control/mode curl -X POST -d "value=30&token=$PW_CONTROL_SECRET" http://localhost:8675/control/reserve curl -X POST -d "value=true&token=$PW_CONTROL_SECRET" http://localhost:8675/control/grid_charging curl -X POST -d "value=pv_only&token=$PW_CONTROL_SECRET" http://localhost:8675/control/grid_export curl -X POST -d "value=3600&token=$PW_CONTROL_SECRET" http://localhost:8675/control/max_backup curl -X POST -d "value=cancel&token=$PW_CONTROL_SECRET" http://localhost:8675/control/max_backup ``` > **Note:** LAN control requires v1r mode (RSA key registered). Basic LAN mode (no RSA key) does not support control operations. WiFi TEDAPI (mode 4) does not support LAN control — use FleetAPI cloud control instead. ### FreeBSD Install FreeBSD users can install from ports or pkg [FreshPorts](https://www.freshports.org/net-mgmt/py-pypowerwall): Via pkg: ```bash # pkg install net-mgmt/py-pypowerwall ``` Via ports: ```bash # cd /usr/ports/net-mgmt/py-pypowerwall/ && make install clean ``` Note: pyPowerwall installation will attempt to install these required Python packages: _requests_, _protobuf_ and _teslapy_. ## Programming with pyPowerwall After importing pypowerwall, you simply create a handle for your Powerwall device and call functions to poll data. A simple example is below or see [example.py](example.py) for an extended version: ```python import pypowerwall # Optional: Turn on Debug Mode # pypowerwall.set_debug(True) # Select option you wish to use. OPTION = 5 # Connect to Powerwall based on selected option if OPTION == 1: # Option 1 - LOCAL MODE - Customer Login (Powerwall 2 and Powerwall+ only) password="password" email="email@example.com" host = "10.0.1.123" # Address of your Powerwall Gateway timezone = "America/Los_Angeles" # Your local timezone gw_pwd = None rsa_key_path = None if OPTION == 2: # Option 2 - FLEETAPI MODE - Requires Setup (Powerwall & Solar-Only) host = password = email = "" timezone = "America/Los_Angeles" gw_pwd = None rsa_key_path = None if OPTION == 3: # Option 3 - CLOUD MODE - Requires Setup (Powerwall & Solar-Only) host = password = "" email='email@example.com' timezone = "America/Los_Angeles" gw_pwd = None rsa_key_path = None if OPTION == 4: # Option 4 - TEDAPI MODE - Requires access to Gateway (Powerwall 2, Powerwall+, and Powerwall 3) host = "192.168.91.1" gw_pwd = "ABCDEFGHIJ" password = email = "" timezone = "America/Los_Angeles" rsa_key_path = None # Uncomment the following for hybrid mode (Powerwall 2 and +) #password="password" #email="email@example.com" if OPTION == 5: # Option 5 - v1r LAN TEDAPI MODE - Powerwall 3 wired LAN (requires RSA key registration) host = "10.0.1.50" # Powerwall wired LAN IP (vendor subnet) gw_pwd = "ABCDEXXXXX" # Full gateway password from QR sticker (last 5 auto-derived) password = "" # Not needed — auto-derived from gw_pwd email = "" timezone = "America/Los_Angeles" rsa_key_path = "/path/to/tedapi_rsa_private.pem" # From v1r_register.py # Note on gw_pwd (Gateway Password) # - `gw_pwd` is the full Gateway Wi‑Fi password printed on the QR label. # - Used directly for TEDAPI HTTP Basic Auth in mode 4 (WiFi). # - In v1r mode (mode 5), the last 5 characters are auto-derived for /api/login/Basic. # - You only need to set `gw_pwd` — setting `password` separately is optional (backward compatible). # - If you set `gw_pwd` and leave `password` empty, pyPowerwall will: # - Auto-enable full TEDAPI mode (mode 4) if no `rsa_key_path` is set. # - Auto-enable v1r mode (mode 5) if `rsa_key_path` is set (derives last 5 chars). # - On Powerwall 2/+ you can set both `password`/`email` and `gw_pwd` for hybrid mode # that combines customer APIs with TEDAPI for supplemental vitals data. # # Note on rsa_key_path (v1r LAN TEDapi) # - Only needed for Powerwall 3 wired LAN access (mode 5) with full protobuf data. # - Requires RSA-4096 key pair registered via Tesla Owner API or Fleet API (see v1r_register.py). # - Without rsa_key_path, basic LAN mode still works for core power/battery/grid data. # Connect to Powerwall - auto_select mode (local, fleetapi, cloud, tedapi, v1r) pw = pypowerwall.Powerwall(host, password, email, timezone, gw_pwd=gw_pwd, rsa_key_path=rsa_key_path, auto_select=True) # Some System Info print("Site Name: %s - Firmware: %s - DIN: %s" % (pw.site_name(), pw.version(), pw.din())) print("System Uptime: %s\n" % pw.uptime()) # Pull Sensor Power Data grid = pw.grid() solar = pw.solar() battery = pw.battery() home = pw.home() # Display Data print("Battery power level: %0.0f%%" % pw.level()) # Actual level including 5% Tesla reserve print("Tesla app level: %0.0f%%" % pw.level(scale=True)) # Level as shown in Tesla App print("Combined power metrics: %r" % pw.power()) print("") # Display Power in kW print("Grid Power: %0.2fkW" % (float(grid)/1000.0)) print("Solar Power: %0.2fkW" % (float(solar)/1000.0)) print("Battery Power: %0.2fkW" % (float(battery)/1000.0)) print("Home Power: %0.2fkW" % (float(home)/1000.0)) print("") # Raw JSON Payload Examples print("Grid raw: %r\n" % pw.grid(verbose=True)) print("Solar raw: %r\n" % pw.solar(verbose=True)) # Display Device Vitals print("Vitals: %r\n" % pw.vitals()) # Display String Data print("String Data: %r\n" % pw.strings()) # Display System Status (e.g. Battery Capacity) print("System Status: %r\n" % pw.system_status()) ``` ### pyPowerwall Module Class and Functions ``` set_debug(True, color=True) Classes Powerwall(host, password, email, timezone, pwcacheexpire, timeout, poolmaxsize, cloudmode, siteid, authpath, authmode, cachefile, fleetapi, auto_select, retry_modes, gw_pwd, rsa_key_path) Parameters host # Hostname or IP of the Tesla gateway; may include :port for non-standard HTTPS (e.g. 10.0.1.99:8443); default port is 443 if omitted password # Customer password for gateway email # (required) Customer email for gateway / cloud timezone # Desired timezone pwcacheexpire = 5 # Set API cache timeout in seconds timeout = 5 # Timeout for HTTPS calls in seconds poolmaxsize = 10 # Pool max size for HTTP connection reuse (persistent connections disabled if zero) cloudmode = False # If True, use Tesla cloud for data (default is False) siteid = None # If cloudmode is True, use this siteid (default is None) authpath = "" # Path to cloud auth and site files (default current directory) authmode = "cookie" # "cookie" (default) or "token" - use cookie or bearer token for auth cachefile = ".powerwall" # Path to cache file (default current directory) fleetapi = False # If True, use Tesla FleetAPI for data (default is False) auth_path = "" # Path to configfile (default current directory) auto_select = False # If True, select the best available mode to connect (default is False) retry_modes = False # If True, retry connection to Powerwall gw_pwd = None # Full gateway password from QR sticker; used for TEDAPI (mode 4) and auto-derived (last 5 chars) for v1r login (mode 5) rsa_key_path = None # Path to RSA-4096 private key for v1r LAN TEDapi (Powerwall 3) Functions poll(api, json, force) # Return data from Powerwall API (dict if json=True, bypass cache force=True) post(api, payload, json) # Send payload to Powerwall API (dict if json=True) level(scale) # Return battery power level percentage (scale=False: actual level, scale=True: Tesla app level) power() # Return power data returned as dictionary site(verbose) # Return site sensor data (W or raw JSON if verbose=True) solar(verbose): # Return solar sensor data (W or raw JSON if verbose=True) battery(verbose): # Return battery sensor data (W or raw JSON if verbose=True) load(verbose) # Return load sensor data (W or raw JSON if verbose=True) grid() # Alias for site() home() # Alias for load() vitals(json) # Return Powerwall device vitals (dict or json if True) strings(json, verbose) # Return solar panel string data din() # Return DIN uptime() # Return uptime - string hms format version() # Return system version status(param) # Return status (JSON) or individual param site_name() # Return site name temps() # Return Powerwall Temperatures alerts() # Return array of Alerts from devices system_status(json) # Returns the system status battery_blocks(json) # Returns battery specific information merged from system_status() and vitals() grid_status(type) # Return the power grid status, type ="string" (default), "json", or "numeric" # - "string": "UP", "DOWN", "SYNCING" # - "numeric": -1 (Syncing), 0 (DOWN), 1 (UP) is_connected() # Returns True if able to connect and login to Powerwall get_reserve(scale) # Get Battery Reserve Percentage get_mode() # Get Current Battery Operation Mode set_reserve(level) # Set Battery Reserve Percentage set_mode(mode) # Set Current Battery Operation Mode get_time_remaining() # Get the backup time remaining on the battery set_operation(level, mode, json) # Set Battery Reserve Percentage and/or Operation Mode set_grid_charging(mode) # Enable or disable grid charging (mode = True or False) set_grid_export(mode) # Set grid export mode (mode = battery_ok, pv_only, never) get_grid_charging() # Get the current grid charging mode get_grid_export() # Get the current grid export mode ``` ## Tools The following are some useful tools based on pypowerwall: * [Powerwall Proxy](proxy) - Use this caching proxy to handle authentication to the Powerwall Gateway and make basic read-only API calls to /api/meters/aggregates (power metrics), /api/system_status/soe (battery level) and many [others](https://github.com/jasonacox/pypowerwall/blob/main/proxy/API.md). This is useful for metrics gathering tools like telegraf to pull metrics without needing to authenticate. Because pyPowerwall is designed to cache the auth and high frequency API calls, this will also reduce the load on the Gateway and prevent crash/restart issues that can happen if too many sessions are created on the Gateway. * [Powerwall Simulator](simulator) - A Powerwall simulator to mimic the responses from the Tesla Powerwall Gateway. This is useful for testing purposes. * [Powerwall Dashboard](https://github.com/jasonacox/Powerwall-Dashboard#powerwall-dashboard) - Monitoring Dashboard for the Tesla Powerwall using Grafana, InfluxDB, Telegraf and pyPowerwall. ## pyPowerwall Command Line Interface (CLI) pyPowerwall includes a CLI for scanning your network, setting up cloud/gateway access, and querying or controlling your Powerwall. ``` Usage: PyPowerwall [-h] [-debug] [-authpath AUTHPATH] {setup,login,authtoken,fleetapi,tedapi,register,scan,set,get,version} ... PyPowerwall Module v0.15.6 Global options (apply to all commands): -debug Enable debug output -authpath PATH Override auth file directory (default: PW_AUTH_PATH env var) Commands (run -h for full usage): setup Setup Tesla Cloud, Fleet API, or v1r LAN TEDAPI access login [Deprecated] Use: setup authtoken Get a Tesla Cloud refresh token (prints to stdout) fleetapi [Deprecated] Use: setup -fleetapi tedapi Test TEDAPI connection to Powerwall Gateway register Register RSA key with Powerwall (for v1r LAN mode) scan Scan local network for Powerwall gateway set Set Powerwall operating mode and reserve level get Get Powerwall settings and power levels version Print version information ``` ### Setup ```bash # Install pyPowerwall if you haven't already python -m pip install pypowerwall # Option 1 — Scan network for Powerwall gateways (local mode) python -m pypowerwall scan # Option 2 — Setup Tesla Fleet API (official) python -m pypowerwall setup -fleetapi # Option 3 — Setup Tesla Cloud (Owners API) python -m pypowerwall setup # Option 4 — Test TEDAPI Wi-Fi connection python -m pypowerwall tedapi -gw_pwd ABCDEXXXXX # Option 5 — Register RSA key for v1r LAN TEDAPI (Powerwall 3 wired LAN) python -m pypowerwall setup -v1r ``` ### `get` — Read Powerwall Status Returns settings and live power levels. Choose a connection mode or omit for auto-select. **Connection mode flags** (mutually exclusive, all optional): | Flag | Mode | Required credentials | |------|------|----------------------| | _(none)_ | Auto-select from available config | — | | `-local` | Local Gateway API (PW2/+) | `-host`, `-password` | | `-cloud` | Tesla Cloud (Owners API) | prior `setup` | | `-fleetapi` | Tesla Fleet API | prior `setup -fleetapi` | | `-tedapi` | TEDAPI Wi-Fi | `-gw_pwd` (host defaults to `192.168.91.1`) | | `-v1r` | v1r LAN TEDAPI (PW3) | `-host`, `-gw_pwd`, RSA key | ```bash # Auto-select (uses available config/credentials) python -m pypowerwall get python -m pypowerwall get -format json python -m pypowerwall get -format csv # Local gateway python -m pypowerwall get -local -host 10.0.1.123 -password XXXXX # Tesla Cloud python -m pypowerwall get -cloud # Tesla Fleet API python -m pypowerwall get -fleetapi # TEDAPI (Wi-Fi — needs access to 192.168.91.1) python -m pypowerwall get -tedapi -gw_pwd ABCDEXXXXX # v1r LAN TEDAPI (Powerwall 3 wired LAN) python -m pypowerwall get -v1r -host 10.42.1.40 -gw_pwd ABCDEXXXXX \ -rsa_key_path ./tedapi_rsa_private.pem ``` Example output (`-format text`, the default): ``` pyPowerwall [0.15.6] - Get Powerwall settings using Local (v1r+wifi+control) mode. Site Cox Power Plant Site ID N/A DIN 1707000-11-M--TG1234567890TB Firmware 25.10.0 Mode self_consumption Reserve 20.0 Battery Level 64.2 Grid Status UP Grid 12 Home 5588.5 Battery 1613 Solar 3965 Grid Charging True Grid Export Mode pv_only Time Remaining N/A ``` ### `set` — Control Powerwall Accepts the same connection mode flags as `get`, plus control options: ```bash # Set operating mode python -m pypowerwall set -mode self_consumption python -m pypowerwall set -mode backup python -m pypowerwall set -mode autonomous # Set battery reserve python -m pypowerwall set -reserve 20 # Set reserve to current charge level python -m pypowerwall set -current # Grid charging and export python -m pypowerwall set -gridcharging on python -m pypowerwall set -gridcharging off python -m pypowerwall set -gridexport battery_ok python -m pypowerwall set -gridexport pv_only python -m pypowerwall set -gridexport never # Combine multiple settings in one call python -m pypowerwall set -mode self_consumption -reserve 20 -gridcharging off # Use a specific connection mode with set python -m pypowerwall set -v1r -host 10.42.1.40 -gw_pwd ABCDEXXXXX \ -rsa_key_path ./tedapi_rsa_private.pem -mode backup -reserve 100 ``` ### `scan` — Find Powerwall Gateways ```bash # Scan Network for Powerwalls python -m pypowerwall scan ``` Example Output ``` pyPowerwall Network Scanner [0.1.2] Scan local network for Tesla Powerwall Gateways Your network appears to be: 10.0.1.0/24 Enter Network or press enter to use 10.0.1.0/24: Running Scan... Host: 10.0.1.16 ... OPEN - Not a Powerwall Host: 10.0.1.26 ... OPEN - Not a Powerwall Host: 10.0.1.36 ... OPEN - Found Powerwall 1232100-00-E--TG123456789ABG Done Discovered 1 Powerwall Gateway 10.0.1.36 [1232100-00-E--TG123456789ABG] ``` ## Example API Calls The following APIs are a result of help from other projects as well as my own investigation. * pw.poll('/api/system_status/soe') - Battery percentage (JSON with float 0-100) ```json {"percentage":40.96227949234631} ``` * pw.poll('/api/meters/aggregates') - Site, Load, Solar and Battery (JSON) ```json { "site": { "last_communication_time": "2021-11-22T22:15:06.590577619-07:00", "instant_power": -23, "instant_reactive_power": -116, "instant_apparent_power": 118.25819210524064, "frequency": 0, "energy_exported": 3826.313294918422, "energy_imported": 1302981.2128324094, "instant_average_voltage": 209.59546822390985, "instant_average_current": 5.4655000000000005, "i_a_current": 0, "i_b_current": 0, "i_c_current": 0, "last_phase_voltage_communication_time": "0001-01-01T00:00:00Z", "last_phase_power_communication_time": "0001-01-01T00:00:00Z", "timeout": 1500000000, "num_meters_aggregated": 1, "instant_total_current": 5.4655000000000005 }, "battery": { "last_communication_time": "2021-11-22T22:15:06.590178016-07:00", "instant_power": 1200, "instant_reactive_power": 0, "instant_apparent_power": 1200, "frequency": 59.997, "energy_exported": 635740, "energy_imported": 730610, "instant_average_voltage": 242.15000000000003, "instant_average_current": -28.6, "i_a_current": 0, "i_b_current": 0, "i_c_current": 0, "last_phase_voltage_communication_time": "0001-01-01T00:00:00Z", "last_phase_power_communication_time": "0001-01-01T00:00:00Z", "timeout": 1500000000, "num_meters_aggregated": 2, "instant_total_current": -28.6 }, "load": { "last_communication_time": "2021-11-22T22:15:06.590178016-07:00", "instant_power": 1182.5, "instant_reactive_power": -130.5, "instant_apparent_power": 1189.6791584288599, "frequency": 0, "energy_exported": 0, "energy_imported": 2445454.899537491, "instant_average_voltage": 209.59546822390985, "instant_average_current": 5.641820455472543, "i_a_current": 0, "i_b_current": 0, "i_c_current": 0, "last_phase_voltage_communication_time": "0001-01-01T00:00:00Z", "last_phase_power_communication_time": "0001-01-01T00:00:00Z", "timeout": 1500000000, "instant_total_current": 5.641820455472543 }, "solar": { "last_communication_time": "2021-11-22T22:15:06.594908129-07:00", "instant_power": 10, "instant_reactive_power": 0, "instant_apparent_power": 10, "frequency": 59.988, "energy_exported": 1241170, "energy_imported": 0, "instant_average_voltage": 241.60000000000002, "instant_average_current": 0.04132231404958678, "i_a_current": 0, "i_b_current": 0, "i_c_current": 0, "last_phase_voltage_communication_time": "0001-01-01T00:00:00Z", "last_phase_power_communication_time": "0001-01-01T00:00:00Z", "timeout": 1000000000, "num_meters_aggregated": 1, "instant_total_current": 0.04132231404958678 } } ``` * pw.strings(jsonformat=True) ```json { "A": { "Connected": true, "Current": 1.81, "Power": 422.0, "State": "PV_Active", "Voltage": 230.0 }, "B": { "Connected": false, "Current": 0.0, "Power": 0.0, "State": "PV_Active", "Voltage": -2.5 }, "C": { "Connected": true, "Current": 4.47, "Power": 892.0, "State": "PV_Active", "Voltage": 202.4 }, "D": { "Connected": true, "Current": 4.44, "Power": 889.0, "State": "PV_Active_Parallel", "Voltage": 202.10000000000002 } } ``` * pw.temps(jsonformat=True) ```json { "TETHC--2012170-25-E--TGxxxxxxxxxxxx": 17.5, "TETHC--3012170-05-B--TGxxxxxxxxxxxx": 17.700000000000003 } ``` * pw.status(jsonformat=True) ```json { "din": "1232100-00-E--TGxxxxxxxxxxxx", "start_time": "2022-01-05 09:20:47 +0800", "up_time_seconds": "62h48m24.076725628s", "is_new": false, "version": "21.44.1 c58c2df3", "git_hash": "c58c2df39ec207708c4cde0c747db7cf31750f29", "commission_count": 8, "device_type": "teg", "sync_type": "v2.1", "leader": "", "followers": null, "cellular_disabled": false } ``` * pw.vitals(jsonformat=True) * Example Output: [here](https://github.com/jasonacox/pypowerwall/blob/main/docs/vitals-example.json) * Produces device vitals and alerts. For more information see [here](https://github.com/jasonacox/pypowerwall/tree/main/docs#devices-and-alerts). * pw.grid_status(type="json") ```json { "grid_services_active": false, "grid_status": "SystemGridConnected" } ``` * pw.system_status(jsonformat=True) ```json { "all_enable_lines_high": true, "auxiliary_load": 0, "available_blocks": 2, "battery_blocks": [ { "OpSeqState": "Active", "PackagePartNumber": "3012170-10-B", "PackageSerialNumber": "TG122xxx", "Type": "", "backup_ready": true, "charge_power_clamped": false, "disabled_reasons": [], "energy_charged": 21410, "energy_discharged": 950, "f_out": 60.016999999999996, "i_out": 6.800000000000001, "nominal_energy_remaining": 13755, "nominal_full_pack_energy": 13803, "off_grid": false, "p_out": -370, "pinv_grid_state": "Grid_Compliant", "pinv_state": "PINV_GridFollowing", "q_out": -10, "v_out": 243.60000000000002, "version": "b0ec24329c08e4", "vf_mode": false, "wobble_detected": false }, { "OpSeqState": "Active", "PackagePartNumber": "3012170-10-B", "PackageSerialNumber": "TG122yyy", "Type": "", "backup_ready": true, "charge_power_clamped": false, "disabled_reasons": [], "energy_charged": 20460, "energy_discharged": 1640, "f_out": 60.016000000000005, "i_out": 3.6, "nominal_energy_remaining": 13789, "nominal_full_pack_energy": 13816, "off_grid": false, "p_out": -210, "pinv_grid_state": "Grid_Compliant", "pinv_state": "PINV_GridFollowing", "q_out": 20, "v_out": 243.20000000000002, "version": "b0ec24329c08e4", "vf_mode": false, "wobble_detected": false } ], "battery_target_power": -706, "battery_target_reactive_power": 0, "blocks_controlled": 2, "can_reboot": "Yes", "command_source": "Configuration", "expected_energy_remaining": 0, "ffr_power_availability_high": 11658, "ffr_power_availability_low": 194, "grid_faults": [ { "alert_is_fault": false, "alert_name": "PINV_a006_vfCheckUnderFrequency", "alert_raw": 432374469357469696, "decoded_alert": "[{\"name\":\"PINV_alertID\",\"value\":\"PINV_a006_vfCheckUnderFrequency\"},{\"name\":\"PINV_alertType\",\"value\":\"Warning\"},{\"name\":\"PINV_a006_frequency\",\"value\":58.97,\"units\":\"Hz\"}]", "ecu_package_part_number": "1081100-22-U", "ecu_package_serial_number": "CN321365D2U06J", "ecu_type": "TEPINV", "git_hash": "b0ec24329c08e4", "site_uid": "1232100-00-E--TG120325001C3D", "timestamp": 1645733844019 } ], "grid_services_power": 0, "instantaneous_max_apparent_power": 30690, "instantaneous_max_charge_power": 14000, "instantaneous_max_discharge_power": 20000, "inverter_nominal_usable_power": 11700, "last_toggle_timestamp": "2022-02-22T08:18:22.51778899-07:00", "load_charge_constraint": 0, "max_apparent_power": 10000, "max_charge_power": 10000, "max_discharge_power": 10000, "max_power_energy_remaining": 0, "max_power_energy_to_be_charged": 0, "max_sustained_ramp_rate": 2512500, "nominal_energy_remaining": 27624, "nominal_full_pack_energy": 27668, "primary": true, "score": 10000, "smart_inv_delta_p": 0, "smart_inv_delta_q": 0, "solar_real_power_limit": -1, "system_island_state": "SystemGridConnected" } ``` * pw.battery_blocks(jsonformat=True) ```json { "TG122xxx": { "OpSeqState": "Active", "PackagePartNumber": "3012170-10-B", "THC_State": "THC_STATE_AUTONOMOUSCONTROL", "Type": "", "backup_ready": true, "charge_power_clamped": false, "disabled_reasons": [], "energy_charged": 21020, "energy_discharged": 880, "f_out": 60.016000000000005, "i_out": 2.7, "nominal_energy_remaining": 13812, "nominal_full_pack_energy": 13834, "off_grid": false, "p_out": -160, "pinv_grid_state": "Grid_Compliant", "pinv_state": "PINV_GridFollowing", "q_out": 20, "temperature": 21.799999999999997, "v_out": 243.9, "version": "b0ec24329c08e4", "vf_mode": false, "wobble_detected": false }, "TG122yyy": { "OpSeqState": "Active", "PackagePartNumber": "3012170-10-B", "THC_State": "THC_STATE_AUTONOMOUSCONTROL", "Type": "", "backup_ready": true, "charge_power_clamped": false, "disabled_reasons": [], "energy_charged": 21020, "energy_discharged": 880, "f_out": 60.016000000000005, "i_out": 2.7, "nominal_energy_remaining": 13812, "nominal_full_pack_energy": 13834, "off_grid": false, "p_out": -160, "pinv_grid_state": "Grid_Compliant", "pinv_state": "PINV_GridFollowing", "q_out": 20, "temperature": 18.5, "v_out": 243.9, "version": "b0ec24329c08e4", "vf_mode": false, "wobble_detected": false } } ``` ## Documentation For detailed documentation, see the [Documentation Hub](docs/README.md). ### Quick Reference * [Firmware Version History](docs/reference/firmware-history.md) - Complete history of Powerwall firmware versions and release notes * [Device Information](docs/reference/devices.md) - Detailed information about Powerwall devices and alerts * [Alert Codes](docs/reference/alerts.md) - Comprehensive list of alert codes * [Python API Reference](API.md) - Full API documentation ## Glossary This is an unofficial list of terms that are seen in Powerwall responses and messages. * Site = Utility Grid * Load = Home (think of it as the "load" that the battery or grid powers) * instant_power = Current power (instant) - also called "true power" in wattage (W) * instant_reactive_power = The dissipated power resulting from inductive and capacitive loads measured in volt-amperes reactive (VAR) * instant_apparent_power = The combination of reactive and true power measure in volt-amperes (VA) * energy_imported = kWh pulled from grid over a duration of time (since Powerwall commissioning it seems) * energy_exported = kWh pushed to grid ### Support There are several ways you can support this project. * Submit ideas, issues, discussions and code! Thanks to our active community, the project continues to grow and improve. Your engagement and help is needed and appreciated. * Tell others. If you find this useful, please share with others to help build our community. * Help test the code. We need help testing the project on different platforms and systems. Report your finding and any suggestions to make it easier to better. * Some of you have asked how you can contribute to help fund the project. This is work of love and a hobby. I'm not looking for financial help. However, if you are considering purchasing a Tesla Solar and/or Powerwall system, please take advantage of this code for a discount and I'll get a referral credit as well: https://www.tesla.com/referral/jason50054 ## References * Tesla Powerwall 2 – Local Gateway API documentation – https://github.com/vloschiavo/powerwall2 * TESLA PowerWall 2 Security Shenanigans – https://github.com/hackerschoice/thc-tesla-powerwall2-hack * Powerwall Monitoring – https://github.com/mihailescu2m/powerwall_monitor * Protocol Buffers (protobuf) Basics - https://developers.google.com/protocol-buffers/docs/pythontutorial * Powerwall Dashboard - The project that started pypowerwall - https://github.com/jasonacox/Powerwall-Dashboard # Acknowledgements * [Tesla Energy](https://www.tesla.com/energy/design?referral=jason50054&redirect=no) - Tesla is not affiliated with this project but we want to thank the brilliant minds at Tesla for creating such a great system for solar home energy generation. Tesla and Powerwall are trademarks of Tesla, Inc. * Tesla ([tesla.proto](tesla.proto)) Research and Credit to @brianhealey * Status Functions - Thanks to @wcwong for contribution: system_status(), battery_blocks(), grid_status() * Special thanks to the entire pypowerwall community for the great engagement, contributions and encouragement! See [RELEASE notes](https://github.com/jasonacox/pypowerwall/releases) for the ever growing list of improvements and contributors making this project possible. ## Other Tools and Similar Projects * NetZero app - iOS and Android App for monitoring your System - https://www.netzeroapp.io/ * Python Tesla Powerwall API – https://github.com/jrester/tesla_powerwall * GoTesla - go based Tesla API - https://github.com/bmah888/gotesla ## Contributors ## Citation If you wish to cite this project, please use: ```bibtex @software{pyPowerwall, author = {Cox, Jason A.}, title = {pyPowerwall: Python API for Tesla Powerwall and Solar Energy Data.}, year = {2023}, publisher = {GitHub}, journal = {GitHub repository}, howpublished = {\url{https://github.com/jasonacox/pypowerwall}}, } ``` ================================================ FILE: RELEASE.md ================================================ # RELEASE NOTES ## v0.15.6 - Reserve Percent Scaling Fix + CLI Redesign * Fix: `set_operation()` reserve percent scaling — reverse Tesla App scaling (0–100%) to raw API scale (5–100%) only in TEDAPI v1r mode, avoiding incorrect round-trip values in cloud and FleetAPI modes * Fix: Correctly handle `level=0` in `set_reserve()` via `level is not None` check * Fix: Revert universal scaling from `set_operation()`; move raw conversion into `PyPowerwallTEDAPI.post_api_operation()` where it belongs * Fix: FleetAPI `get_api_system_status_soe()` was returning `battery_level()` (Tesla App-scaled, 0–100% usable) directly as the raw SOE percentage — missing the reverse-scaling applied by the cloud backend. This caused `level()` (default `scale=False`) to return the already-scaled app value instead of the physical percentage, making FleetAPI SOC appear ~2% lower than v1r/TEDAPI for the same battery. Fix: apply `soe = (percentage_charged + 5/0.95) * 0.95` to convert app scale → raw, matching the cloud backend. * Fix: `get` command now reports SOC using `level(scale=True)` — matching the Tesla app display (usable capacity, 0–100% of non-reserved energy) rather than the raw physical percentage including Tesla's 5% buffer reserve. * Fix: FleetAPI config validation in `Powerwall.__init__()` — changed `os.access(file, W_OK)` check (fails when file doesn't exist) to check directory writability when config file is absent, preventing spurious `PyPowerwallInvalidConfigurationParameter` on first-time setup * Feat: CLI (`python -m pypowerwall`) redesigned for consistency across all connection modes * Replace string `-mode` flag on `get` (which clashed with `set -mode`) with explicit boolean connection flags: `-local`, `-cloud`, `-fleetapi`, `-tedapi`, `-v1r` — available on both `get` and `set` * **Backward compat:** `get -mode ` still accepted with a deprecation warning; e.g. `get -mode v1r` behaves identically to `get -v1r` * Add `-host`, `-password`, `-gw_pwd`, `-rsa_key_path` credential flags to `get` and `set` subcommands * Add global `-debug` and `-authpath` flags (via shared parent parser) available to every subcommand * `setup` subcommand now handles all auth flows: default/`-cloud` (Tesla Owners API), `-fleetapi` (Fleet API wizard), `-v1r` (RSA key registration) — replacing the now-deprecated `fleetapi` top-level command * `get` output expanded: adds `firmware`, `grid_status`, and `time_remaining` fields; `None` values display as `N/A` in text/CSV output * Pre-flight checks in `get` and `set`: if `-cloud` or `-fleetapi` is specified but the required config file is missing, a clear error message with setup instructions is printed before any connection attempt * Connection check (`is_connected()`) now runs before the output banner — no partial output on failure * `fleetapi` top-level command shows deprecation warning and points to `setup -fleetapi`; `login` command shows deprecation warning and exits * Docs: Update `README.md` CLI section — new command list with global flags, connection mode flag reference table, examples for all 5 connection modes, updated setup commands (`fleetapi` → `setup -fleetapi`, `setup -v1r`) * Release prep: * Bump library version to `0.15.6` * Update proxy pinned dependency to `pypowerwall==0.15.6` ## v0.15.5 - Native Python Tesla Authentication + v1r Key Verification Fixes * Feat: Replace external `tesla-auth` binary dependency with native Python Tesla authentication — no more platform-specific binary downloads * Feat: New `setup` command handles authentication and site selection in a single flow using a native WebView popup window (macOS, Windows, Linux) * Feat: New `authtoken` command for obtaining a refresh token on a local machine, then using it on a remote/headless server * Fix: Cross-platform WebView interception of `tesla://auth/callback` using WKWebView (macOS), WebView2 (Windows), and WebKit2GTK (Linux) * Fix: `v1r_register.py` now verifies the specific newly-registered RSA key rather than any key in the authorized clients list — prevents false VERIFIED result when only the Tesla app key is verified (fixes #274) * Fix: `tedapi_v1r.py` now detects and clearly logs `client authorization not verified` inner-payload errors, with actionable instructions to complete physical key verification — previously silently returned `None` with no diagnostic output * Release prep: * Bump library version to `0.15.5` ## v0.15.4 - CLI Enhancements and Safety Guards * Feat: `pypowerwall tedapi` CLI now accepts `-host HOST`, `-gw_pwd GW_PWD`, `-v1r`, `-password PASSWORD`, `-rsa_key_path RSA_KEY_PATH`, and `-wifi_host WIFI_HOST` flags, enabling full PW3 wired LAN (v1r) access directly from the command line * Feat: `go_off_grid()` now requires `confirm=True` to prevent accidental islanding — calling without the flag logs an error and returns `None` * Fix: Unsupported-method error logs in `go_off_grid()` and `reconnect_grid()` now include the backend class name for easier diagnosis * Add: Unit tests for `go_off_grid()` confirm guard and CLI v1r argument forwarding/password derivation * Release prep: * Bump library version to `0.15.4` * Update proxy pinned dependency to `pypowerwall==0.15.4` ## v0.15.3 - PW3 No-Solar None Handling * Update scanner to use cidr by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/266 * Add go_off_grid() and reconnect_grid() for Powerwall island mode control by @bolagnaise in https://github.com/jasonacox/pypowerwall/pull/277 * Fix: Prevent `TypeError` in Powerwall 3 TEDAPI vitals parsing when `PCH_PvVoltage*` or `PCH_PvCurrent*` signals are `None` on systems without solar panels - by @anopheles in https://github.com/jasonacox/pypowerwall/pull/278 * `get_pw3_vitals()` now guards `None` values before performing `> 0` comparisons * PV measured voltage, current, and power now safely report `0` when the gateway returns missing PV values * Prevents downstream failures in endpoints derived from PW3 vitals, including `/api/meters/aggregates` * Adds regression coverage for PW3 systems without solar panels so the no-solar path no longer raises and remains locked in by tests * Release prep: * Bump library version to `0.15.3` * Update proxy pinned dependency to `pypowerwall==0.15.3` * Fix PyPI upload cleanup script to remove `pypowerwall.egg-info` instead of stale `tinytuya.egg-info` ## v0.15.2 - Minor Fixes * v0.15.2 - Protobuf Support by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/276 * Fix: Remove `<5` upper cap on `protobuf` runtime dependency — constraint is now `protobuf>=4.25.1`; pb2 files generated with 4.25.x are compatible with 5.x, 6.x, and 7.x runtimes (confirmed and tested up to 7.34.1) and the cap was causing pip conflicts for users with newer protobuf versions installed (e.g. via TensorFlow) ## v0.15.1 - Code Quality and Build Pipeline Improvements * Fix: Remove duplicate stub methods `get_grid_charging()` and `get_grid_export()` in `pypowerwall_tedapi.py` that were left over from a merge — the real implementations (reading/writing config via v1r transport) were already present and being shadowed * Fix: Update `pwsimulator` `stub.py` to use `ssl.SSLContext` API replacing the removed `ssl.wrap_socket()` call, which caused the simulator container to silently exit on Python 3.12+ * Fix: Remove `linux/arm/v7` platform from `pwsimulator` Docker build (`upload.sh`) — platform is no longer supported * Fix: Correct protobuf runtime dependency — `protobuf>=3.20.0` was misleading; set floor to `protobuf>=4.25.1` (the `<5` upper cap added here was subsequently lifted in v0.15.2) * Add: `.pylintrc` with `[MESSAGES CONTROL]` disable list (restored), `[SIMILARITIES]` config, and `ignore-paths` to skip auto-generated `*_pb2.py` files * Add: `tools/gen_proto.sh` — script to regenerate all `*_pb2.py` files from `.proto` sources using pinned `grpcio-tools` * Add: `tools/requirements-tools.txt` — pinned dev tools (`grpcio-tools<1.64`, `protobuf<5`) to ensure pb2 files are generated consistently with a compatible protobuf version * Add: `.pre-commit-config.yaml` — pre-commit hooks for protobuf regeneration and `pylint -E` checks on `pypowerwall/` and `proxy/` before every commit * Add: `.github/workflows/check-protobuf.yml` — CI workflow to verify committed `*_pb2.py` files are in sync with their `.proto` sources ## v0.15.0 - Powerwall 3 Wired LAN TEDAPI Support (v1r) * Docs: Note FleetAPI/Cloud mode requirement for `get_grid_charging()` and `get_grid_export()` - by @jasonacox-sam in https://github.com/jasonacox/pypowerwall/pull/268 * Insert empty `battery_blocks` array if missing to prevent downstream KeyError - by @zi0r in https://github.com/jasonacox/pypowerwall/pull/269 * Fix: Prevent shared-state race condition in stubs via factory functions - by @woofiwoof in https://github.com/jasonacox/pypowerwall/pull/270 * `API_METERS_AGGREGATES_STUB` and `API_SYSTEM_STATUS_STUB` in cloud/fleetapi/tedapi stubs were module-level mutable dicts; concurrent polling of multiple gateways caused threads to overwrite each other's data * Replaced module-level dicts with `_..._TEMPLATE` constants and factory functions that return `copy.deepcopy()` copies, ensuring each gateway gets an independent data structure * Add `/tedapi/v1r` transport for Powerwall 3 wired LAN access without requiring WiFi connection to `192.168.91.1` - by @nalditopr in https://github.com/jasonacox/pypowerwall/pull/265 * New `tedapi_v1r.py` RSA-signed transport class — handles TLV payload construction, PKCS1v15+SHA512 signing, RoutableMessage protobuf wrapping, and Bearer token authentication * New `tedapi_combined_pb2.py` — compiled protobuf definitions for v1r message format (`RoutableMessage`, `MessageEnvelope`, etc.) * New `pypowerwall register` CLI command (and `v1r_register.py` script) for generating an RSA-4096 key pair and registering it with the Powerwall via Tesla Owner API (default) or Fleet API OAuth * `Powerwall()` constructor accepts new `rsa_key_path` parameter — when provided alongside `password`/`gw_pwd`, the library automatically selects v1r mode * `gw_pwd` (full 10-character QR code password from the Powerwall sticker) auto-derives the last-5-character Basic API password, simplifying configuration * Proxy server supports new `PW_RSA_KEY_PATH` environment variable to pass the RSA key path through to `Powerwall()` * `cryptography` package added to `install_requires` for RSA key loading and signing * Full feature parity with WiFi TEDAPI (mode 4): config, status, vitals, firmware version, power, battery level, grid status, per-device vitals, and component queries * LAN control support — set backup reserve, operation mode, grid charging, and grid export directly over the wired LAN via v1r filestore config writes (no cloud API needed) * WiFi fallback transport — when both wired LAN and WiFi TEDAPI are available, v1r mode transparently uses WiFi for follower queries; mode string dynamically reflects active transports (e.g., `Local (v1r+wifi+control)`) * Requires the Powerwall 3 leader's ethernet port to be on a routable subnet (`10.42.1.x/24` is the TEG's dedicated wired interface); see PR notes for bridge setup examples * Drop `linux/arm/v7` (32-bit ARMv7) platform support from the pypowerwall proxy Docker container builds ## v0.14.10 - Host Port Support * Add support for `host:port` format in the `host` parameter for local mode connections - Fix for https://github.com/jasonacox/pypowerwall/issues/254 * Allows specifying a non-standard HTTPS port (e.g. `192.168.1.50:8443` or `powerwall.local:8443`) * Defaults to port 443 when no port is specified in `host` * Enables travel router / NAT proxy setups where multiple Powerwall gateways are each mapped to distinct `ip:port` endpoints on the local network * Updated `_validate_init_configuration()` to validate bare host first, then strip the optional port suffix — prevents false port detection inside IPv6 addresses (e.g. `2001:db8::1` is never mistaken for a host with port `1`) * Fixed TEDAPI hybrid mode detection in `PyPowerwallLocal` to match `192.168.91.1:443` (explicit default port) in addition to bare `192.168.91.1`, ensuring TEDAPI activates for direct gateway connections regardless of whether the port is stated * URL construction in local and TEDAPI modes naturally handles `host:port` format via `https://{host}/...` string formatting * Note: IPv6 addresses are accepted by validation but full URL construction support (bracket notation per RFC 2732) is not yet implemented ## v0.14.9 - TEDAPI Voltage Calculation Fix * Fix `compute_LL_voltage()` function to handle `None` voltage values in grid down scenarios - Fix for https://github.com/jasonacox/Powerwall-Dashboard/issues/683 * Added `None` value handling in three-phase voltage calculations to prevent `TypeError` exceptions * Converts `None` voltage parameters to `0` before performing arithmetic operations * Prevents crashes when grid is down and voltage readings are unavailable * Added comprehensive unit tests to verify None handling behavior for all scenarios: grid down (all None), mixed None/valid values, and numeric-only values ## v0.14.8 - CLI Tool and PW3 Power Vitals Fix * Add standalone `pypowerwall` command-line tool - installed automatically with pip * Added `entry_points` to `setup.py` to create console script * Refactored `__main__.py` to use a `main()` function as entry point * Users can now run `pypowerwall` command directly instead of `python -m pypowerwall` * Maintains backward compatibility - both methods work identically * Available commands: `pypowerwall scan`, `pypowerwall setup`, `pypowerwall fleetapi`, `pypowerwall get`, `pypowerwall set`, `pypowerwall version` * Fix Powerwall 3 power output (PINV_Pout) in vitals for TEDAPI mode * Corrected signal source from `PCH_AcRealPowerAB` to `PCH_BatteryPower` for accurate per battery power reporting ## v0.14.7 - Reserve Level 0 Fix * Fix bug where `pypowerwall set` command could not set battery reserve level to 0 - Fix by @ParaAdBellum in https://github.com/jasonacox/pypowerwall/pull/252 * Changed default value for `-reserve` argument from `None` to `-1` (sentinel value) * Updated conditional checks to compare against `-1` instead of using truthiness evaluation * Previously, `not args.reserve` evaluated to `True` when reserve was set to 0, preventing the reserve from being set ## v0.14.6 - Firmware 25.42.2+ Support * Add gzip decompression support for firmware 25.42.2+ TEDAPI responses - Fix by @bolagnaise in https://github.com/jasonacox/pypowerwall/pull/251 * Gateway firmware 25.42.2 and later returns gzip-compressed responses for DIN and other TEDAPI endpoints * Added `decompress_response()` helper function to handle both compressed and uncompressed responses transparently * Updated all TEDAPI methods (`get_din()`, `get_config()`, `get_status()`, `get_device_controller()`, `get_firmware_version()`, `get_components()`, `get_battery_block()`) to decompress responses * Added error handling for UnicodeDecodeError in DIN decode operation to gracefully handle corrupted or invalid responses * Maintains backward compatibility with older firmware versions that return uncompressed responses ## v0.14.5 - Performance Improvements * Performance Fixes and Improvements * Fix variable shadowing in `grid_status()` method: renamed `type` parameter to `output_type` to avoid shadowing Python's built-in `type()` function * Add backward compatibility for deprecated `type` parameter - still supported but `output_type` is now preferred * Fix return type annotation for `extract_grid_status()` method: changed from `str` to `Optional[str]` to accurately reflect function can return `None` * Add age and expiration logging to TEDAPI Components cache for debugging consistency * Proxy server build t86 * Rename incorrect unit test file (test_ prefix indicates unit tests) by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/226 * Simple reliability improvements by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/240 * Add aggregation unit tests by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/241 * Update all Python versions to be consistent by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/243 * Add CSV endpoint tests to the proxy by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/244 * Add csv/v2 endpoint unit tests by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/245 ## v0.14.4 - Expansion Pack Energy Fix * **Fix expansion pack energy data** by processing all BMS components in TEDAPI responses - Fix by @rlerdorf in https://github.com/jasonacox/pypowerwall/pull/239 * Refactored `get_pw3_vitals()` to process ALL BMS components and match them to batteries (main units and expansions) via HVP serial numbers * Creates individual TEPOD entries in `/vitals` for each battery including expansion packs with accurate energy data * Simplified `/pod` endpoint by removing complex subtraction-based energy calculation logic - expansion packs now appear automatically as TEPOD entries * Refactored `get_blocks()` to retrieve expansion pack energy from vitals TEPOD entries instead of making separate API calls * Improves data accuracy and reduces API calls by directly extracting expansion pack energy from parallel BMS/HVP component arrays * Validated on system with 2 Powerwall 3 units (Leader + Follower) and 1 Expansion Pack showing correct energy values for all three batteries * Proxy server build t85 ## v0.14.3 - Battery Expansion and Grid Meter Support * Add support for Powerwall 3 Battery Expansion Packs in TEDAPI mode - Fix for issue https://github.com/jasonacox/pypowerwall/issues/227 by @rlerdorf in https://github.com/jasonacox/pypowerwall/pull/236 * Battery expansions (battery-only units without inverters) now appear in `/pw/battery_blocks`, `/pod`, and `/tedapi/battery` endpoints * The `get_blocks()` function now reads battery expansion data from the configuration's `battery_expansions` array and fetches BMS component data for each expansion unit * Expansion units are identified with `"Type": "BatteryExpansion"` and include battery capacity metrics (`nominal_energy_remaining`, `nominal_full_pack_energy`) * Inverter-related fields (`pinv_state`, `p_out`, `v_out`, etc.) are set to `None` for expansions since they don't have inverters * The `/pod` endpoint calculates expansion pack energy by subtracting known battery values from system totals (individual expansion BMS data not exposed by Tesla) * For multiple expansion packs, the first entry shows combined totals with "(combined)" suffix, while additional entries show `null` values * Add support for TEMSA/MSA grid meter data in `/vitals` endpoint for Powerwall 3 systems * PW3 MSA data fallback: reads from `components.msa` with signals array format conversion when `esCan.bus.MSA` is unavailable * Voltage reference mapping: converts PW3 ground-referenced voltages (VL1G/VL2G/VL3G) to neutral-referenced (VL1N/VL2N/VL3N) for consistency * TEMSA block in vitals now includes grid voltage, current, and instantaneous power readings for PW3 backup switches ## v0.14.2 - Misc * Move API lock timeout messages in exponential backoff mechanism to DEBUG logging to prevent noise for regular users. ## v0.14.1 - Test Coverage & battery_blocks Fix * Add unit tests expanding coverage: version parsing, core Powerwall methods (poll json output, power aggregation, grid_status numeric/json, alerts fallback path, set_operation validation, reserve/mode helpers, temps, site_name) * Introduce stub client in tests for deterministic, offline execution * Fix `battery_blocks()` KeyError when vitals include a battery serial not present in `/api/system_status` `battery_blocks` (create entry lazily) * Harden battery temperature/state merge logic for mixed firmware/mode scenarios * No public API changes ## v0.14.0 - Fix for TeslaPy and FleetAPI * Pin and embed TeslaPy code patch directly into pyPowerwall to help address issue setting Powerwall Mode - see https://github.com/jasonacox/pypowerwall/issues/197 * FleetAPI CLI: improved error handling, skips incomplete sites, clearer output to help address issue where token can't be refreshed due to missing energy_site_id key - see https://github.com/jasonacox/pypowerwall/issues/198 ## v0.13.2 - TEDAPI Lock Optimization * Fix TEDAPI lock contention issues causing "Timeout for locked object" errors under concurrent load by optimizing cache-before-lock pattern in core functions * Optimize `get_config()`, `get_status()`, `get_device_controller()`, `get_firmware_version()`, `get_components()`, and `get_battery_block()` to check cache before acquiring expensive locks * Remove redundant API call in `pypowerwall_tedapi.py` `get_api_system_status()` method * Fix proxy server KeyError when status response missing version or git_hash keys by using defensive key access * Fix proxy server KeyError when auth dictionary missing AuthCookie or UserRecord keys in cookie mode * Improve performance and reduce lock timeout errors in multi-threaded environments like the pypowerwall proxy server * Enhance `compute_LL_voltage()` function with voltage threshold detection (100V) to better handle single-phase systems with residual voltages on inactive legs, as well as split- and three-phase systems. * These optimizations benefit all methods that depend on the core TEDAPI functions, including `vitals()`, `get_blocks()`, and `get_battery_blocks()` ## v0.13.1 - TEDAPI Battery Blocks * Fix missing battery_blocks data on PW3 with Multiple Powerwalls in Local Mode in https://github.com/jasonacox/pypowerwall/issues/131 * Fix errant API base URL check. by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/185 * Update TEDAPI to pull battery blocks from vitals for PW3 Systems by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/184 ## v0.13.0 - TEDAPI Updates * Additional values /json endpoint by @erikgieseler in https://github.com/jasonacox/pypowerwall/pull/176 * Use Neurio for TEDAPI data when Tesla Remote Meter is not present by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/157 * Initial simple unit test by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/181 * Add connection pool to TEDAPI by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/177 * Add METER_Z (Backup Switch) data to vitals and aggregates data - See https://github.com/jasonacox/Powerwall-Dashboard/discussions/629#discussioncomment-13284217 * Update and add documentation helps: contributor, conduct and API (python and proxy) * Fix logic for aggregates API for consolidated voltage and current data by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/183 ## v0.12.12 - Multiple PW3 Fix * Bug Fix - Logic added in https://github.com/jasonacox/pypowerwall/pull/169 does not iterate through all PW3 strings. This adds logic to handle multiple PW3 string sets. Reported in https://github.com/jasonacox/pypowerwall/issues/172. ## v0.12.11 - Error Handling * Fix error handling in component data handling in TEDAPI. ## v0.12.10 - Power Flow and Other Fixes * Add PROXY_BASE_URL option for reverse proxying by @mccahan in https://github.com/jasonacox/pypowerwall/pull/155 * Fix issue with power flow animation showing blank when opened more than once by @mccahan in https://github.com/jasonacox/pypowerwall/pull/156 * Add fan speed routes and update proxy version to t71 by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/161 * Fix for TypeError: PyPowerwallTEDAPI.vitals() got an unexpected keyword argument 'force' by @F1p in https://github.com/jasonacox/pypowerwall/pull/164 * Catch error condition when components payload is empty or malformed. Bug in extract_fan_speeds() reported by by @jgleigh in jasonacox/Powerwall-Dashboard#392 and https://github.com/jasonacox/pypowerwall/issues/167 * Issue #162: add /pw/XXX endpoints to expose Powerwall() API methods by @JohnJ9ml in https://github.com/jasonacox/pypowerwall/pull/166 * PW3 Vitals Fix - Switch from using device specific URI https://{GW_IP}/tedapi/device/{pw_din}/v1 to https://{GW_IP}/tedapi/v1 - Corrects 502 error condition on some Powerwall 3 systems by @johncuthbertuk in https://github.com/jasonacox/pypowerwall/pull/169 ## v0.12.9 - Fan Speeds * Add PVAC fan speeds to TEDAPI vitals monitoring (PVAC_Fan_Speed_Actual_RPM and PVAC_Fan_Speed_Target_RPM). ## v0.12.8 - TEDAPI Improvements * Avoid divide by zero when nominalFullPackEnergyWh is zero by @rlpm in https://github.com/jasonacox/pypowerwall/pull/150 * Add thread locking to TEDAPI by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/148 ## v0.12.7 - SystemConnectedToGrid Fix * Alerts in extract_grid_status can be None. Block this edge case. #145 ## v0.12.6 - Aggregates Data * Updated aggregates call to include site current (METER_X) and external PV inverter data in solar (METER_Y). Reported in Issue #140. ## v0.12.5 - Normalize Alerts * Fix an issue in TEDAPI where the grid status is not accurately reported in certain edge cases. Now, only the "SystemConnectedToGrid" alert will appear if it is present in alerts API. This update also eliminates the risk of duplicate and redundant ("SystemGridConnected") alerts and normalizes this specific alert. PR https://github.com/jasonacox/pypowerwall/pull/139 by @Nexarian ## v0.12.4 - Neurio Vitals * Update proxy for /csv/v2 API support by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/134 * Fix CTS data retrieval in TEDAPI vitals processor #136 by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/137 * Fix bug in TEDAPI vitals processor that was not pulling in all Neurio CTS data. Issue reported in https://github.com/jasonacox/Powerwall-Dashboard/discussions/578#discussioncomment-12034018 and tracked in https://github.com/jasonacox/pypowerwall/issues/136. ## v0.12.3 - Custom GW IP * Fix TEDAPI URL from constant GW_IP to constructor selectable host gw_ip by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/129 - The hard-coded 192.168.91.1 for the TEDAPI internal endpoint doesn't always work if you're using NAT. This change enables support for this use-case. * See https://gist.github.com/jasonacox/91479957d0605248d7eadb919585616c?permalink_comment_id=5373785#gistcomment-5373785 for NAP implementation example. ## v0.12.2 - Cache Expiration Fix * Fix bug in cache expiration timeout code that was not honoring pwcacheexpire setting. Raised by @erikgiesele in https://github.com/jasonacox/pypowerwall/issues/122 - PW_CACHE_EXPIRE=0 not possible? (Proxy) * Add WARNING log in proxy for settings below 5s. * Change TEDAPI config default timeout from 300s to 5s and link to pwcacheexpire setting. ## v0.12.1 - Scanner Update * Large-scale refactor of scan function by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/117 - Function `scan()` returns a list of the discovered devices for use as a utility function. - Ability to silence output for use as a utility. - Improve performance of multi-threaded scan by using a Queue. - General code flow improvements and encapsulation. - Add ability to work with standalone inverters. ```python from pypowerwall.scan import scan found_devices = scan(interactive = False) ``` ## v0.12.0 - Add Controller Data * TEDAPI: Add `get_device_controller()` to get device data which includes Powerwall THC_AmbientTemp data. Credit to @ygelfand for discovery and reported in https://github.com/jasonacox/Powerwall-Dashboard/discussions/392#discussioncomment-11360474 * Updated `vitals()` to include Powerwall temperature data. * Proxy Updated to t66 to include API response for /tedapi/controller. * Remove Negative Solar Values [Option] by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/113 * Solar-Only Cloud Access - Fix errors with site references by @Nexarian in https://github.com/jasonacox/pypowerwall/pull/115 ## v0.11.1 - PW3 and FleetAPI Bugfix * TEDAPI: Fix bug with activeAlerts logic causing errors on systems with multiple Powerwall 3's. Identified by @rmotapar in https://github.com/jasonacox/Powerwall-Dashboard/issues/387#issuecomment-2336431741 * FleetAPI: Fix connect() to handle non-energy products in the getsites response. Identified by @gregrahn in https://github.com/jasonacox/pypowerwall/issues/111 ## v0.11.0 - Add PW3 Vitals * Add polling of Powerwall 3 Devices to pull in PW3 specific string data, capacity, voltages, frequencies, and alerts. * This creates mock TEPOD, PVAC and PVS compatible payloads available in vitals(). Proxy URLs updated for PW3: * http://localhost:8675/vitals * http://localhost:8675/help (verify pw3 shows True) * http://localhost:8675/tedapi/components * http://localhost:8675/tedapi/battery ## v0.10.10 - Add Grid Control * Add a function and command line options to allow user to get and set grid charging and exporting modes (see https://github.com/jasonacox/pypowerwall/issues/108). * Supports FleetAPI and Cloud modes only (not Local mode) #### Command Line Examples ```bash # Connect to Cloud python3 -m pypowerwall setup # or fleetapi # Get Current Settings python3 -m pypowerwall get # Turn on Grid charging python3 -m pypowerwall set -gridcharging on # Turn off Grid charging python3 -m pypowerwall set -gridcharging off # Set Grid Export to Solar (PV) energy only python3 -m pypowerwall set -gridexport pv_only # Set Grid Export to Battery and Solar energy python3 -m pypowerwall set -gridexport battery_ok # Disable export of all energy to grid python3 -m pypowerwall set -gridexport never ``` #### Programming Examples ```python import pypowerwall # FleetAPI Mode PW_HOST="" PW_EMAIL="my@example.com" pw = pypowerwall.Powerwall(host=PW_HOST, email=PW_EMAIL, fleetapi=True) # Get modes pw.get_grid_charging() pw.get_grid_export() # Set modes pw.set_grid_charging("on") # set grid charging mode (on or off) pw.set_grid_export("pv_only") # set grid export mode (battery_ok, pv_only, or never) ``` ## v0.10.9 - TEDAPI Voltage & Current * Add computed voltage and current to `/api/meters/aggregates` from TEDAPI status data. * Fix error in `num_meters_aggregated` calculation in aggregates. ## v0.10.8 - TEDAPI Firmware Version * Add TEDAPI `get_firmware_version()` to poll Powerwall for firmware version. Discovered by @geptto in https://github.com/jasonacox/pypowerwall/issues/97. This function has been integrated into pypowerwall existing APIs (e.g. `pw.version()`) * Add TEDAPI `get_components()` and `get_battery_block()` functions which providing additional Powerwall 3 related device vital information for Powerwall 3 owners. Discovered by @lignumaqua in https://github.com/jasonacox/Powerwall-Dashboard/discussions/392#discussioncomment-9864364. The plan it to integrate this data into the other device vitals payloads (TODO). ## v0.10.7 - Energy History * FleetAPI - Add `get_history()` and `get_calendar_history()` to return energy, power, soe, and other history data. ```python import pypowerwall pw = pypowerwall.Powerwall(host=PW_HOST, email=PW_EMAIL, fleetapi=True) pw.client.fleet.get_calendar_history(kind="soe") pw.client.fleet.get_history(kind="power") ``` ## v0.10.6 - pyLint Cleanup * Minor Bug Fixes - TEDAPI get_reserve() fix to address unscaled results. * pyLint Cleanup of Code ## v0.10.5 - Minor Fixes * Fix for TEDAPI "full" (e.g. Powerwall 3) mode, including `grid_status` bug resulting in false reports of grid status, `level()` bug where data gap resulted in 0% state of charge and `alerts()` where data gap from tedapi resulted in a `null` alert. * Add TEDAPI API call locking to limit load caused by concurrent polling. * Proxy - Add battery full_pack and remaining energy data to `/pod` API call for all cases. ## v0.10.4 - Powerwall 3 Local API Support * Add local support for Powerwall 3 using TEDAPI. * TEDAPI will activate in `hybrid` (using TEDAPI for vitals and existing local APIs for other metrics) or `full` (all data from TEDAPI) mode to provide better Powerwall 3 support. * The `full` mode will automatically activate when the customer `password` is blank and `gw_pwd` is set. * Note: The `full` mode will provide less metrics than `hybrid` mode since Powerwall 2/+ systems have additional APIs that are used in `hybrid` mode to fetch additional data ```python import pypowerwall # Activate HYBRID mode (for Powerwall / 2 / + systems) pw = pypowerwall.Powerwall("192.168.91.1", password=PASSWORD, email=EMAIL, gw_pwd=PW_GW_PWD) # Activate FULL mode (for all systems including Powerwall 3) pw = pypowerwall.Powerwall("192.168.91.1", gw_pwd=PW_GW_PWD) ``` Related: * #97 * https://github.com/jasonacox/Powerwall-Dashboard/issues/387 ## v0.10.3 - TEDAPI Connect Update * Update `setup.py` to include dependencies on `protobuf>=3.20.0`. * Add TEDAPI `connect()` logic to better validate Gateway endpoint access. * Add documentation for TEDAPI setup. * Update CLI to support TEDAPI calls. * Proxy t60 - Fix edge case where `/csv` API will error due to NoneType inputs. * Add TEDAPI argument to set custom GW IP address. ```bash # Connect to TEDAPI and pull data python3 -m pypowerwall tedapi # Direct call to TEDAPI class test function (optional password) python3 -m pypowerwall.tedapi GWPASSWORD python3 -m pypowerwall.tedapi --debug python3 -m pypowerwall.tedapi --gw_ip 192.168.91.1 --debug ``` ## v0.10.2 - FleetAPI Hotfix * Fix FleetAPI setup script as raised in https://github.com/jasonacox/pypowerwall/issues/98. * Update FleetAPI documentation and CLI usage. ## v0.10.1 - TEDAPI Vitals Hotfix * Fix PVAC lookup error logic in TEDAPI class vitals() function. * Add alerts and other elements to PVAC TETHC TESYNC vitals. * Update vitals Neurio block to include correct location and adjust RealPower based on power scale factor. ## v0.10.0 - New Device Vitals * Add support for `/tedapi` API access on Gateway (requires connectivity to 192.168.91.1 GW and Gateway Password) with access to "config" and "status" data. * Adds drop-in replacement for depreciated `/vitals` API and payload using the new TEDAPI class. This allows easy access to Powerwall device vitals. * Proxy update to t58 to support TEDAPI with environmental variable `PW_GW_PWD` for Gateway Password. Also added FleetAPI, Cloud and TEDAPI specific GET calls, `/fleetapi`, `/cloud`, and `/tedapi` respectively. ```python # How to Activate the TEDAPI Mode import pypowerwall gw_pwd = "GW_PASSWORD" # Gateway Passowrd usually on QR code on Gateway host = "192.168.91.1" # Direct Connect to GW pw = pypowerwall.Powerwall(host,password,email,timezone,gw_pwd=gw_pwd) print(pw.vitals()) ``` ```python # New TEDAPI Class import pypowerwall.tedapi tedapi = pypowerwall.tedapi.TEDAPI("GW_PASSWORD") config = tedapi.get_config() status = tedapi.get_status() meterAggregates = status.get('control', {}).get('meterAggregates', []) for meter in meterAggregates: location = meter.get('location', 'Unknown').title() realPowerW = int(meter.get('realPowerW', 0)) print(f" - {location}: {realPowerW}W") ``` ## v0.9.1 - Bug Fixes and Updates * Fix bug in time_remaining_hours() and convert print statements in FleetAPI to log messages. * Fix CLI bug related to `site_id` as raised by @darroni in https://github.com/jasonacox/pypowerwall/issues/93 * Add CLI option for local mode to get status: ```bash python -m pypowerwall get -host 10.1.2.3 -password 'myPassword' ``` ## v0.9.0 - FleetAPI Support * v0.9.0 - Tesla (official) FleetAPI cloud mode support by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/91 - This adds the FleetAPI class and mapping for pypowerwall. * FleetAPI setup provided by module CLI: `python -m pypowerwall fleetapi` * Adds `auto_select` mode for instatiating a Powerwall connection: `local` mode, `fleetapi` mode and `cloud` mode. Provides `pw.mode` class variable as the mode selected. ```python import pypowerwall # Option 1 - LOCAL MODE - Credentials for your Powerwall - Customer Login password="password" email="email@example.com" host = "10.0.1.123" # Address of your Powerwall Gateway timezone = "America/Los_Angeles" # Your local timezone # Option 2 - FLEETAPI MODE - Requires Setup host = password = email = "" timezone = "America/Los_Angeles" # Option 3 - CLOUD MODE - Requires Setup host = password = "" email='email@example.com' timezone = "America/Los_Angeles" # Connect to Powerwall - auto_select mode (local, fleetapi, cloud) pw = pypowerwall.Powerwall(host,password,email,timezone,auto_select=True) print(f"Connected to Powerwall with mode: {pw.mode}") ``` ## v0.8.5 - Solar Only * Fix bug with setup for certain Solar Only systems where setup process fails. Identified by @hulkster in https://github.com/jasonacox/Powerwall-Dashboard/discussions/475 ## v0.8.4 - Set Reserve * Updated `set_reserve(level)` logic to handle levels from 0 to 100. Identified by @spoonwzd in #85 ## v0.8.3 - Error Handling * Added additional error handling logic to clean up exceptions. * Proxy: Added command APIs for setting backup reserve and operating mode. ## v0.8.2 - 503 Error Handling * Added 5 minute cooldown for HTTP 503 Service Unavailable errors from API calls. * Proxy: Added DISABLED API handling logic. ## v0.8.1 - Set battery reserve, operation mode * Added `get_mode()`, `set_mode()`,`set_reserve()`,and `set_operation()` function to set battery operation mode and/or reserve level by @emptywee in https://github.com/jasonacox/pypowerwall/pull/78. Likely won't work in the local mode. * Added basic validation for main class `__init__()` parameters (a.k.a. user input). * Better handling of 401/403 errors from Powerwall in local mode. * Handle 50x errors from Powerwall in local mode. * Added Alerts for Grid Status `alerts()`. * New command line functions (`set` and `get`): ``` usage: PyPowerwall [-h] {setup,scan,set,get,version} ... PyPowerwall Module v0.8.1 options: -h, --help show this help message and exit commands (run -h to see usage information): {setup,scan,set,get,version} setup Setup Tesla Login for Cloud Mode access scan Scan local network for Powerwall gateway set Set Powerwall Mode and Reserve Level get Get Powerwall Settings and Power Levels version Print version information ``` ## v0.8.0 - Refactoring * Refactored pyPowerwall by @emptywee in https://github.com/jasonacox/pypowerwall/pull/77 including: * Moved Local and Cloud based operation code into respective modules, providing better abstraction and making it easier to maintain and extend going forward. * Made meaning of the `jsonformat` parameter consistent across all method calls (breaking API change). * Removed Python 2.7 support. * Cleaned up code and adopted a more pythoinc style. * Fixed battery_blocks() for non-vitals systems. ## v0.7.12 - Cachefile, Alerts & Strings * Added logic to pull string data from `/api/solar_powerwall` API if vitals data is not available by @jasonacox in #76. * Added alerts from `/api/solar_powerwall` when vitals not present by @DerickJohnson in #75. The vitals API is not present in firmware versions > 23.44, this provides a workaround to get alerts. * Allow customization of the cachefile location and name by @emptywee in #74 via `cachefile` parameter. ```python # Example import pypowerwall pw = pypowerwall.Powerwall( host="10.1.2.30", password="secret", email="me@example.com", timezone="America/Los_Angeles", pwcacheexpire=5, timeout=5, poolmaxsize=10, cloudmode=False, siteid=None, authpath="", authmode="cookie", cachefile=".powerwall", ) ``` ## v0.7.11 - Cooldown Mode * Updated logic to disable vitals API calls for Firmware 23.44.0+ * Added rate limit detection and cooldown mode to allow Powerwall gateway time to recover. ## v0.7.10 - Cache 404 Responses * Add cache and extended TTL for 404 responses from Powerwall as identified in issue https://github.com/jasonacox/Powerwall-Dashboard/issues/449. This will help reduce load on Powerwall gateway that may be causing rate limiting for some users (Firmware 23.44.0+). ## v0.7.9 - Cloud Grid Status * Bug fix for correct grid status for Solar-Only systems on `cloud mode` (see https://github.com/jasonacox/Powerwall-Dashboard/issues/437) ## v0.7.8 - Cloud Fixes * Fix enumeration of energy sites during `cloud mode` setup to handle incomplete sites with Unknown names or types by @dcgibbons in https://github.com/jasonacox/pypowerwall/pull/72 * Proxy t41 Updates - Bug fixes for Solar-Only systems using `cloud mode` (see https://github.com/jasonacox/Powerwall-Dashboard/issues/437). ## v0.7.7 - Battery Data and Network Scanner * Proxy t40: Use /api/system_status battery blocks data to augment /pod and /freq macro data APIs by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/67 thanks to @ceeeekay in https://github.com/jasonacox/Powerwall-Dashboard/discussions/402#discussioncomment-8193776 * Network Scanner: Improve network scan speed by scanning multiple hosts simultaneously by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/67. The number of hosts to scan simultaneously can be adjusted using the optional `-hosts=` argument (default = 30, maximum = 100), e.g. `python -m pypowerwall scan -hosts=50` ## v0.7.6 - 404 Bug Fix * Fix Critical Bug - 404 HTTP Status Code Handling (Issue https://github.com/jasonacox/pypowerwall/issues/65). ## v0.7.5 - Cloud Mode Setup * Added optional email address argument to Cloud Mode setup (`python -m pypowerwall setup -email=`) by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/64 to streamline Powerwall-Dashboard setup script. * Updated network scanner output to advise Powerwall 3 is supported in Cloud Mode by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/64 ## v0.7.4 - Bearer Token Auth pyPowerwall Updates * This release adds the ability to use a Bearer Token for Authentication for the local Powerwall gateway API calls. This is selectable by defining `authmode='token'` in the initialization. The default mode uses the existing `AuthCookie` and `UserRecord` method. ```python import pypowerwall pw = pypowerwall.Powerwall(HOST, PASSWORD, EMAIL, TIMEZONE, authmode="token") ``` Proxy * The above option is extended to the pyPowerwall Proxy via the environmental variable `PW_AUTH_MODE` set to cookie (default) or token. Powerwall Network Scanner * Added optional IP address argument to network scanner by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/63. The Scan Function can now accept an additional argument `-ip=` to override the host IP address detection (`python -m pypowerwall scan -ip=192.168.1.100`). This may be useful where the host IP address/network cannot be detected correctly, for instance if pypowerwall is running inside a container. ## v0.7.3 - Cloud Mode Setup * Setup will now check for `PW_AUTH_PATH` environmental variable to set the path for `.pypowerwall.auth` and `.pypowerwall.site` by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/62 * Proxy t37 - Move signal handler to capture SIGTERM when proxy halts due to config error by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/62. This ensures a containerized proxy will exit without delay when stopping or restarting the container. ## v0.7.2 - Cloud Auth Path * Add pypowerwall setting to define path to cloud auth cache and site files in the initialization. It will default to current directory. * Add pypowerwall setting to define energy site id in the initialization. It will default to None. ```python import pypowerwall pw = pypowerwall.Powerwall(email="email@example.com",cloudmode=True,siteid=1234567,authpath=".auth") ``` * Proxy will now use `PW_AUTH_PATH` as an environmental variable to set the path for `.pypowerwall.auth` and `.pypowerwall.site`. * Proxy also has `PW_SITEID` as an environmental variable to set `siteid`. ## v0.7.1 - Tesla Cloud Mode * Simulate Powerwall Energy Gateway via Tesla Cloud API calls. In `cloudmode` API calls to pypowerwall APIs will result in calls made to the Tesla API to fetch the data. Cloud Mode Setup - Use pypowerwall to fetch your Tesla Owners API Token ```bash python3 -m pypowerwall setup # Token and site information stored in .pypowerwall.auth and .pypowerwall.site ``` Cloud Mode Code Example ```python import pypowerwall pw = pypowerwall.Powerwall(email="email@example.com",cloudmode=True) pw.power() # Output: {'site': 2977, 'solar': 1820, 'battery': -3860, 'load': 937} pw.poll('/api/system_status/soe') # Output: '{"percentage": 26.403205103271222}' ``` * Added new API function to compute estimated backup time remaining on the battery: `get_time_remaining()` ## v0.6.4 - Power Flow Animation Proxy t29 Updates * Default page rendered by proxy (http://pypowerwall:8675/) will render Powerflow Animation * Animation assets (html, css, js, images, fonts, svg) will render from local filesystem instead of pulling from Powerwall TEG portal. * Start prep for possible API removals from Powerwall TEG portal (see NOAPI settings) Powerwall Network Scanner * Adjust scan timeout default to 1,000ms (1s) to help with more consistent scans. ## v0.6.3 - Powerwall 3 Scan * Added scan detection for new Powerwall 3 systems. API discovery is still underway so pypowerwall currently does not support Powerwall 3s. See https://github.com/jasonacox/Powerwall-Dashboard/issues/387 ``` $ python3 -m pypowerwall scan pyPowerwall Network Scanner [0.6.3] Scan local network for Tesla Powerwall Gateways Your network appears to be: 10.0.1.0/24 Enter Network or press enter to use 10.0.1.0/24: Running Scan... Host: 10.0.1.2 ... OPEN - Not a Powerwall Host: 10.0.1.5 ... OPEN - Found Powerwall 3 [Currently Unsupported] Host: 10.0.1.8 ... OPEN - Not a Powerwall Host: 10.0.1.9 ... OPEN - Found Powerwall 3 [Currently Unsupported] Done Discovered 2 Powerwall Gateway 10.0.1.5 [Powerwall-3] Firmware Currently Unsupported - See https://tinyurl.com/pw3support 10.0.1.9 [Powerwall-3] Firmware Currently Unsupported - See https://tinyurl.com/pw3support ``` ## v0.6.2b - Proxy Grafana Support * Proxy t28: Add a `grafana-dark` style for `PW_STYLE` settings to accommodate placing as iframe in newer Grafana versions (e.g. v9.4.14). See https://github.com/jasonacox/Powerwall-Dashboard/discussions/371. ## v0.6.2a - Proxy Graceful Exit * Add alert PVS_a036_PvArcLockout by @JordanBelford in https://github.com/jasonacox/pypowerwall/pull/33 * Create `tessolarcharge.py` by @venturanc in https://github.com/jasonacox/pypowerwall/pull/36 & https://github.com/jasonacox/pypowerwall/pull/37 & https://github.com/jasonacox/pypowerwall/pull/38 * Fix typos and spelling errors by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/40 * Add alert definitions per #42 by @jasonacox in https://github.com/jasonacox/pypowerwall/pull/43 * Added two PVAC Alerts by @niabassey in https://github.com/jasonacox/pypowerwall/pull/46 * Added Firmware 23.28.1 to README.md by @niabassey in https://github.com/jasonacox/pypowerwall/pull/48 * Add proxy gracefully exit with SIGTERM by @rcasta74 in https://github.com/jasonacox/pypowerwall/pull/49 ## v0.6.2 - Proxy Cache-Control * PyPI 0.6.2 * Update docs for alerts by @DerickJohnson in https://github.com/jasonacox/pypowerwall/pull/29 and https://github.com/jasonacox/pypowerwall/pull/30 * Fix Cache-Control no-cache header and allow for setting max-age, fixes #31 by @dkerr64 in https://github.com/jasonacox/pypowerwall/pull/32 ## v0.6.1 - Add Grid Conditions * PyPI 0.6.1 * Added new `SystemMicroGridFaulted` and `SystemWaitForUser` grid conditions to `grid_status()` function. Both are mapped to "DOWN" conditions. Discovery by @mcbrise in https://github.com/jasonacox/Powerwall-Dashboard/issues/158#issuecomment-1441648085. * Revised error handling of SITE_DATA request due to issues noted in #12 when multiple sites are linked to the Tesla account by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/25 * Proxy t24: Added new `/alerts/pw` endpoint with dictionary/object response format by @DerickJohnson in https://github.com/jasonacox/pypowerwall/pull/26 ## v0.6.0 - Add Persistent HTTP Connections * PyPI 0.6.0 * Added HTTP persistent connections for API requests to Powerwall Gateway by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/21 * Requests to Gateway will now re-use persistent http connections which reduces load and increases response time. * Uses default connection `poolmaxsize=10` to align with Session object defaults. Note: pool use applies to multi-threaded use of pyPowerwall only, e.g. as with the pyPowerwall Proxy Server. * Added env `PW_POOL_MAXSIZE` to proxy server to allow this to be controlled (persistent connections disabled if set to zero). * Added env `PW_TIMEOUT` to proxy server to allow timeout on requests to be adjusted. ## v0.5.1 - Fix grid_status() Off-Grid Map * PyPI 0.5.1 * Add FreeBSD-specific installation instructions by @zi0r in https://github.com/jasonacox/pypowerwall/pull/18 * Add `grid_status()` responses for syncing to off-grid by @mcbirse in https://github.com/jasonacox/pypowerwall/pull/19 ## v0.5.0 - Exception Handling for Powerwall Connection * PyPI 0.5.0 * Added additional exception handling to help identify connection and login errors. * Added `is_connected()` function to test for a successful connection to the Powerwall. * Added firmware version to command line network scan (`python -m pypowerwall scan`) [Proxy Server](https://github.com/jasonacox/pypowerwall/tree/main/proxy#pypowerwall-proxy-server) Updates (Build t16) - See [here](https://github.com/jasonacox/pypowerwall/blob/main/proxy/HELP.md#release-notes) for more Proxy Release notes. * Add support for backup switch by @nhasan in https://github.com/jasonacox/pypowerwall/pull/12 * Add passthrough to Powerwall web interface and customize for iFrame displays by @danisla in https://github.com/jasonacox/pypowerwall/pull/14 * Remove scrollbars from web view by @danisla in https://github.com/jasonacox/pypowerwall/pull/15 * Add support for specifying a bind address by @zi0r in https://github.com/jasonacox/pypowerwall/pull/16 * Add shebang for direct execution by @zi0r in https://github.com/jasonacox/pypowerwall/pull/17 ## v0.4.0 - Cache Bypass Option and New Functions * PyPI 0.4.0 * Added parameter to `poll()` to force call (ignore cache) * Added `alerts()` function to return an array of device alerts. * Added `get_reserve()` function to return battery reserve setting. * Added `grid_status()` function to return state of grid. * Added `system_status()` function to return system status. * Added `battery_blocks()` function to return battery specific information. * Expanded class to include settings for cache expiration (`pwcacheexpire`) and connection `timeout`. ```python # Force Poll pw.poll('/api/system_status/soe',force=True) '{"percentage":100}' # Powerwall Alerts pw.alerts() ['PodCommissionTime', 'GridCodesWrite', 'GridCodesWrite', 'FWUpdateSucceeded', 'THC_w155_Backup_Genealogy_Updated', 'PINV_a067_overvoltageNeutralChassis', 'THC_w155_Backup_Genealogy_Updated', 'PINV_a067_overvoltageNeutralChassis', 'PVS_a018_MciStringB', 'SYNC_a001_SW_App_Boot'] # Battery Reserve Setting pw.get_reserve() 20.0 # State of Grid pw.grid_status() 'UP' ``` ## v0.3.0 - Device Vitals Alerts and Attributes * PyPI 0.3.0 * Added alerts and additional attributes from `vitals()` output. * Note: API change to `vitals()` output for dependant systems. ## v0.2.0 - Tesla Protocol Buffer Scheme Update * PyPI 0.2.0 * Breaking change to Protobuf schema (PR #2) including: * Files `tesla.proto` and `tesla_pb2.py` * Impacted output from function `vitals()` and [examples/vitals.py](examples/vitals.py). ## v0.1.4 - Battery Level Percentage Scaling * PyPI 0.1.4 * Changed "Network Scan" default timeout to 400ms for better detection. * Added Tesla App style "Battery Level Percentage" Conversion option to `level()` to convert the level reading to the 95% scale used by the App. This converts the battery level percentage to be consistent with the Tesla App: ```python >>> pw.level(scale=True) 39.971429212508326 >>> pw.level() 42.972857751882906 ``` ## v0.1.3 - Powerwall Temps * PyPI 0.1.3 * Added `temp()` function to pull Powerwall temperatures. ```python pw.temps(jsonformat=True) ``` ```json { "TETHC--2012170-25-E--TGxxxxxxxxxxxx": 17.5, "TETHC--3012170-05-B--TGxxxxxxxxxxxx": 17.700000000000003 } ``` ## v0.1.2 - Error Handling and Proxy Stats * PyPI 0.1.2 * Added better Error handling for calls to Powerwall with debug info for timeout and connection errors. * Added timestamp stats to pypowerwall proxy server.py (via URI /stats and /stats/clear) pyPowerwall Debug ``` DEBUG:pypowerwall [0.1.2] DEBUG:loaded auth from cache file .powerwall DEBUG:Starting new HTTPS connection (1): 10.0.1.2:443 DEBUG:ERROR Timeout waiting for Powerwall API https://10.0.1.2/api/devices/vitals ``` Proxy Stats ```json {"pypowerwall": "0.1.2", "gets": 2, "errors": 3, "uri": {"/stats": 1, "/soe": 1}, "ts": 1641148636, "start": 1641148618, "clear": 1641148618} ``` ## v0.1.1 - New System Info Functions * PyPI 0.1.1 * Added stats to pypowerwall proxy server.py (via URI /stats and /stats/clear) * Added Information Functions: `site_name()`, `version()`, `din()`, `uptime()`, and `status()`. ```python # Display System Info print("Site Name: %s - Firmware: %s - DIN: %s" % (pw.site_name(), pw.version(), pw.din())) print("System Uptime: %s\n" % pw.uptime()) ``` ## v0.1.0 - Vitals Data * PyPI 0.1.0 * Added *protobuf* handling to support decoding the Powerwall Device Vitals data (requires protobuf package) * Added function `vitals()` to pull Powerwall Device Vitals * Added function `strings()` to pull data on solar panel strings (Voltage, Current, Power and State) ```python vitals = pw.vitals(jsonformat=False) strings = pw.strings(jsonformat=False, verbose=False) ``` ## v0.0.3 - Binary Poll Function, Proxy Server and Simulator * PyPI 0.0.3 * Added Proxy Server - Useful for metrics gathering tools like telegraf (see [proxy](proxy/)]). * Added Powerwall Simulator - Mimics Powerwall Gateway responses for testing (see [pwsimulator](pwsimulator/)]) * Added raw binary poll capability to be able to pull *protobuf* formatted payloads like '/api/devices/vitals'. ```python payload = pw.poll('/api/devices/vitals') ``` ## v0.0.2 - Scan Function * PyPI 0.0.2 * pyPowerwall now has a network scan function to find the IP address of Powerwalls ```bash # Scan Network for Powerwalls python -m pypowerwall scan ``` Output Example: ``` pyPowerwall Network Scanner [0.0.2] Scan local network for Tesla Powerwall Gateways Your network appears to be: 10.0.3.0/24 Enter Network or press enter to use 10.0.3.0/24: Running Scan... Host: 10.0.3.22 ... OPEN - Not a Powerwall Host: 10.0.3.45 ... OPEN - Found Powerwall 1234567-00-E--TG123456789ABC Done Discovered 1 Powerwall Gateway 10.0.1.45 [1234567-00-E--TG123456789ABC] ``` ## v0.0.1 - Initial Release * PyPI 0.0.1 * Initial Beta Release 0.0.1 ================================================ FILE: _config.yml ================================================ theme: jekyll-theme-cayman ================================================ FILE: api_test.py ================================================ # Test Functions of the Powerwall API import os import pypowerwall # Optional: Turn on Debug Mode pypowerwall.set_debug(True) # Credentials for your Powerwall - Customer Login Data password = os.environ.get('PW_PASSWORD', 'password') email = os.environ.get('PW_EMAIL', 'email@example.com') host = os.environ.get('PW_HOST', 'localhost') # Change to the IP of your Powerwall timezone = os.environ.get('PW_TIMEZONE', 'America/Los_Angeles') # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones auth_path = os.environ.get('PW_AUTH_PATH', "") cachefile_path = os.environ.get('PW_CACHEFILE_PATH', ".cachefile") def test_battery_mode_change(pw): original_mode = pw.get_mode(force=True) if original_mode != 'backup': new_mode = 'backup' else: new_mode = 'self_consumption' resp = pw.set_mode(mode=new_mode) if resp and resp.get('set_operation', {}).get('result') == 'Updated': # if we got a valid response from API, let's assume it worked :) installed_mode = resp.get('set_operation', {}).get('real_mode') else: # TODO: may need to poll API until change is detected (in cloud mode) installed_mode = pw.get_mode(force=True) if installed_mode != new_mode: print(f"Set battery operation mode to {new_mode} failed.") # revert to original value just in case pw.set_mode(mode=original_mode) def test_battery_reserve_change(pw): original_reserve_level = pw.get_reserve(force=True) if original_reserve_level != 100: new_reserve_level = 100 else: new_reserve_level = 50 resp = pw.set_reserve(level=new_reserve_level) if resp and resp.get('set_backup_reserve_percent', {}).get('result') == 'Updated': # if we got a valid response from API, let's assume it worked :) installed_level = resp.get('set_backup_reserve_percent', {}).get('backup_reserve_percent') else: # TODO: may need to poll API until change is detected (in cloud mode) installed_level = pw.get_reserve(force=True) if installed_level != new_reserve_level: print(f"Set battery reserve level to {new_reserve_level}% failed.") # revert to original value just in case pw.set_reserve(level=original_reserve_level) def test_post_functions(pw): # test battery reserve and mode change print("Testing set_operation()...") test_battery_mode_change(pw) test_battery_reserve_change(pw) print("Post functions test complete.") def run(include_post_funcs=False): for h in [host, ""]: if h: print(f"LOCAL MODE: Connecting to Powerwall at {h}") else: print(f"CLOUD MODE: Connecting to Powerwall via Tesla API") print("---------------------------------------------------------") # Connect to Powerwall pw = pypowerwall.Powerwall(h, password, email, timezone, authpath=auth_path, cachefile=cachefile_path) # noinspection PyUnusedLocal aggregates = pw.poll('/api/meters/aggregates') # noinspection PyUnusedLocal coe = pw.poll('/api/system_status/soe') # Pull Sensor Power Data grid = pw.grid() solar = pw.solar() battery = pw.battery() home = pw.home() # Display Data battery_level = pw.level() combined_power_metrics = pw.power() print(f"Battery power level: \033[92m{battery_level:.0f}%\033[0m") print(f"Combined power metrics: \033[92m{combined_power_metrics}\033[0m") print("") # Display Power in kW print(f"Grid Power: \033[92m{float(grid) / 1000.0:.2f}kW\033[0m") print(f"Solar Power: \033[92m{float(solar) / 1000.0:.2f}kW\033[0m") print(f"Battery Power: \033[92m{float(battery) / 1000.0:.2f}kW\033[0m") print(f"Home Power: \033[92m{float(home) / 1000.0:.2f}kW\033[0m") print() # Raw JSON Payload Examples print(f"Grid raw: \033[92m{pw.grid(verbose=True)!r}\033[0m\n") print(f"Solar raw: \033[92m{pw.solar(verbose=True)!r}\033[0m\n") # Test each function print("Testing each function:") functions = [ pw.poll, pw.level, pw.power, pw.site, pw.solar, pw.battery, pw.load, pw.grid, pw.home, pw.vitals, pw.strings, pw.din, pw.uptime, pw.version, pw.status, pw.site_name, pw.temps, pw.alerts, pw.system_status, pw.battery_blocks, pw.grid_status, pw.is_connected, pw.get_reserve, pw.get_mode, pw.get_time_remaining ] for func in functions: print(f"{func.__name__}()") print(f"{func()}") if include_post_funcs: test_post_functions(pw) print("All functions tested.") print("") print("Testing all functions and printing result:") input("Press Enter to continue...") print("") for func in functions: print(f"{func.__name__}()") print("\033[92m", end="") print(func()) print("\033[0m") print("All functions tested.") print("") input("Press Enter to continue...") print("") print("All tests completed.") print("") if __name__ == "__main__": run(include_post_funcs=True) ================================================ FILE: dashboard/README.md ================================================ # Powerwall Dashboard Monitoring Dashboard for the Tesla Powerwall using Grafana, InfluxDB and Telegraf. See [jasonacox/Powerwall-Dashboard](https://github.com/jasonacox/Powerwall-Dashboard). ![Dashboard](https://user-images.githubusercontent.com/836718/144769680-78b8abf4-4336-4672-9483-896b0476ec44.png) ![Strings](https://user-images.githubusercontent.com/836718/146310511-7863e4bb-7e43-40b9-9790-65c1d6ce24ba.png) ## Installation and Setup See [jasonacox/Powerwall-Dashboard](https://github.com/jasonacox/Powerwall-Dashboard#requirements). ## Credits This is based on the great work by [mihailescu2m](https://github.com/mihailescu2m/powerwall_monitor) but has been modified to use pypowerwall as a proxy to the Powerwall and includes solar String graphs for Powerwall+ systems. ================================================ FILE: docs/README.md ================================================ # pyPowerwall Documentation Welcome to the pyPowerwall documentation hub. This page provides organized access to all documentation resources for users, developers, and contributors. ## Getting Started New to pyPowerwall? Start with the main [README](../README.md) for installation instructions and basic setup. ## How-To Guides ### View Local Tesla Powerwall Portal The Powerwall 2 gateway has a web based portal that you can access to the power flow animation. This requires that you find the local IP address of you Powerwall. You can do that using `pypowerwall`: ```bash # Install pyPowerwall if you haven't already python -m pip install pypowerwall # Scan Network for Powerwall python -m pypowerwall scan ``` After confirming your local network address space, it will scan your network looking for a Tesla Powerwall and respond with something like this: ``` Discovered 1 Powerwall Gateway 10.0.1.23 [1234567-00-E--TG123456789ABC] ``` For Powerwall 2 and + systems, point your browser to that address http://10.0.1.23 and you will be able to log in and see the power details and flow animation: [![portal.png](portal.png)](portal.png) Note: This is not available for Powerwall 3 systems. See the [pypowerwall-server](https://github.com/jasonacox/pypowerwall-server) project for an alternative local portal. ### Solar Panel Strings You can use pyPowerwall to grab individual string data. It uses the protobuf payload from the 'vitals' API. ```python import pypowerwall # Credentials for your Powerwall password='password' email='email@example.com' host = "10.0.1.123" # Address of your Powerwall Gateway timezone = "America/Los_Angeles" # Your local timezone # Connect to Powerwall pw = pypowerwall.Powerwall(host,password,email,timezone) # Print String Data in JSON print(pw.strings(True)) # True = JSON format output ``` Output example: ```json { "A": { "Connected": true, "Current": 1.81, "Power": 422.0, "State": "PV_Active", "Voltage": 230.0 }, "B": { "Connected": false, "Current": 0.0, "Power": 0.0, "State": "PV_Active", "Voltage": -2.5 }, "C": { "Connected": true, "Current": 4.47, "Power": 892.0, "State": "PV_Active", "Voltage": 202.4 }, "D": { "Connected": true, "Current": 4.44, "Power": 889.0, "State": "PV_Active_Parallel", "Voltage": 202.10000000000002 } } ``` ### Device Vitals Access detailed device vitals data from your Powerwall system: ```python import pypowerwall # Connect to Powerwall pw = pypowerwall.Powerwall(host,password,email,timezone) # Display Device Vitals print("Device Vitals:\n %s\n" % pw.vitals(True)) ``` Example Output: [vitals-example.json](vitals-example.json) ## Reference Documentation ### Firmware History Complete list of Powerwall firmware versions, release dates, and known features/issues. - [Firmware History](reference/firmware-history.md) ### Devices Comprehensive information about Powerwall devices (STSTSM, TETHC, TEPOD, TEPINV, TESYNC, TEMSA, PVAC, PVS, NEURIO, TESLA) including ECU types, part numbers, and component relationships. - [Device Reference](reference/devices.md) ### Alerts Detailed alert codes and descriptions that may appear in device vitals. - [Alert Codes](reference/alerts.md) ## API Documentation Full API reference for pyPowerwall methods and endpoints. - [API Documentation](../API.md) ## Contributing Interested in contributing? See our contribution guidelines. - [Contributing Guide](../CONTRIBUTING.md) - [Code of Conduct](../CODE_OF_CONDUCT.md) ================================================ FILE: docs/api.txt ================================================ /api/auth/toggle/login /api/auth/toggle/start /api/auth/toggle/supported /api/autoconfig/cancel /api/autoconfig/retry /api/autoconfig/run /api/autoconfig/status /api/config /api/customer /api/customer/registration /api/customer/registration/legal /api/devices/vitals /api/logging /api/logout /api/meters /api/meters/${e}/ct_config /api/meters/${e}/cts /api/meters/${e}/invert_cts /api/meters/${o.serial}/cts /api/meters/detect_wired_meters /api/meters/inverter_meter_readings /api/meters/readings /api/meters/status /api/networks /api/networks/${e}/disconnect /api/networks/client_protocols /api/networks/enable_${e} /api/networks/request_scan_wifi /api/operation /api/password/generate /api/powerwalls /api/powerwalls/enable_inverter_solar_meter_readings /api/powerwalls/phase_detection /api/powerwalls/phase_usages /api/powerwalls/pvi_power_status /api/powerwalls/scan /api/powerwalls/status /api/powerwalls/update /api/site_info /api/site_info/extra_programs /api/site_info/grid_code /api/site_info/grid_regions /api/site_info/offgrid /api/site_info/site_name /api/site_info/timezone /api/sitemaster/run /api/sitemaster/run_for_commissioning /api/sitemaster/stop /api/solar_powerwall/reset /api/status /api/synchrometer/ct_voltage_references /api/synchrometer/ct_voltage_references/options /api/system/networks/conn_tests /api/system/networks/ping_test /api/system/testing /api/system/testing/PINV_TEST /api/system/update /api/system/update/urgency /api/system/update?force=true /api/system_status/grid_faults /api/system_status/grid_status /api/troubleshooting/problems /api/v2/islanding/mode ================================================ FILE: docs/reference/alerts.md ================================================ # Alerts The following list details alerts potentially returned by the device vitals API (e.g., /api/device/vitals). This data is aggregated from two primary sources: - [Tesla Residential Powerhub User Manual](https://energylibrary.tesla.com/docs/Public/More/Powerhub/Residential/UserManual/en-us/GUID-C91CB9E0-8909-4440-8796-551470CE9539.html) (Official) - Community Contributions (Unofficial) This list is non-exhaustive and may not cover every possible alert code. > [!WARNING] > Alert descriptions labeled as `Community Contributed` are generated through user observation and best-effort reverse engineering. These descriptions are not official Tesla documentation. They may contain inaccuracies or incomplete information. ## Alert List - [AC Blade Connector Damaged](#ac-blade-connector-damaged) - [Backfeed Limited (BackfeedLimited)](#backfeed-limited-(backfeedlimited)) - [Battery Breaker Open](#battery-breaker-open) - [Battery Comms](#battery-comms) - [Battery Fault (BatteryFault)](#battery-fault-(batteryfault)) - [Battery Meter Comms](#battery-meter-comms) - [Battery Unexpected Power](#battery-unexpected-power) - [Battery Unexpected Reactive Power](#battery-unexpected-reactive-power) - [Black Start Failure](#black-start-failure) - [Busway Meter Comms](#busway-meter-comms) - [Contactor Unresponsive Close](#contactor-unresponsive-close) - [DC Bus Bar Shorted](#dc-bus-bar-shorted) - [External IO Comms](#external-io-comms) - [Frequency Meter Comms](#frequency-meter-comms) - [FWUpdateSucceeded](#fwupdatesucceeded) - [Generator Breaker Timeout](#generator-breaker-timeout) - [Generator Faulted](#generator-faulted) - [Generator Meter Comms](#generator-meter-comms) - [GridCodesWrite](#gridcodeswrite) - [Grid Resynchronization Failed](#grid-resynchronization-failed) - [Inverter Not Going To Vf](#inverter-not-going-to-vf) - [Islanding Controller MIA](#islanding-controller-mia) - [Load Meter Comms](#load-meter-comms) - [Lost Connectivity to Tesla Site Controller](#lost-connectivity-to-tesla-site-controller) - [No Solar Production](#no-solar-production) - [Opticaster Exe](#opticaster-exe) - [Permanent Battery Module Fault](#permanent-battery-module-fault) - [PINV_a010_can_gtwMIA](#pinv_a010_can_gtwmia) - [PINV_a039_can_thcMIA](#pinv_a039_can_thcmia) - [PINV_a067_overvoltageNeutralChassis](#pinv_a067_overvoltageneutralchassis) - [POD_f029_HW_CMA_OV](#pod_f029_hw_cma_ov) - [POD_w024_HW_Fault_Asserted](#pod_w024_hw_fault_asserted) - [POD_w029_HW_CMA_OV](#pod_w029_hw_cma_ov) - [POD_w031_SW_Brick_OV](#pod_w031_sw_brick_ov) - [POD_w044_SW_Brick_UV_Warning](#pod_w044_sw_brick_uv_warning) - [POD_w045_SW_Brick_OV_Warning](#pod_w045_sw_brick_ov_warning) - [POD_w048_SW_Cell_Voltage_Sens](#pod_w048_sw_cell_voltage_sens) - [POD_w058_SW_App_Boot](#pod_w058_sw_app_boot) - [POD_w063_SW_SOC_Imbalance](#pod_w063_sw_soc_imbalance) - [POD_w067_SW_Not_Enough_Energy_Precharge](#pod_w067_sw_not_enough_energy_precharge) - [POD_w090_SW_SOC_Imbalance_Limit_Charge](#pod_w090_sw_soc_imbalance_limit_charge) - [POD_w093_SW_Charge_Request](#pod_w093_sw_charge_request) - [POD_w105_SW_EOD](#pod_w105_sw_eod) - [POD_w109_SW_Self_Test_Request_Not_Serviced](#pod_w109_sw_self_test_request_not_serviced) - [POD_w110_SW_EOC](#pod_w110_sw_eoc) - [PodCommissionTime](#podcommissiontime) - [Powerwall Inverter Failure](#powerwall-inverter-failure) - [Powerwall Performance Limited](#powerwall-performance-limited) - [PV Inverter Comms](#pv-inverter-comms) - [PVS_a018_MciString[A-D]](#pvs_a018_mcistring[a-d]) - [PVS_a026_Mci1PvVoltage](#pvs_a026_mci1pvvoltage) - [PVS_a027_Mci2PvVoltage](#pvs_a027_mci2pvvoltage) - [PVS_a031_Mci3PvVoltage](#pvs_a031_mci3pvvoltage) - [PVS_a032_Mci4PvVoltage](#pvs_a032_mci4pvvoltage) - [PV String Out](#pv-string-out) - [Pyranometer Comms](#pyranometer-comms) - [Ramp Rate Limited](#ramp-rate-limited) - [Reactive Power Limited](#reactive-power-limited) - [Real Power Available Limited (RealPowerAvailableLimited)](#real-power-available-limited-(realpoweravailablelimited)) - [Real Power Config Limited](#real-power-config-limited) - [ScheduledIslandContactorOpen](#scheduledislandcontactoropen) - [SelfConsumptionReservedLimit](#selfconsumptionreservedlimit) - [Site Max Power Limited](#site-max-power-limited) - [Site Meter Comms](#site-meter-comms) - [Site Min Power Limited (SiteMinPowerLimited)](#site-min-power-limited-(siteminpowerlimited)) - [Smart Inverter Active](#smart-inverter-active) - [Solar Charge Only Limited (SolarChargeOnlyLimited)](#solar-charge-only-limited-(solarchargeonlylimited)) - [Solar Meter Comms](#solar-meter-comms) - [SYNC_a001_SW_App_Boot](#sync_a001_sw_app_boot) - [SYNC_a038_DoOpenArguments](#sync_a038_doopenarguments) - [System shutdown](#system-shutdown) - [THC_w061_CAN_TX_FIFO_Overflow](#thc_w061_can_tx_fifo_overflow) - [THC_w155_Backup_Genealogy_Updated](#thc_w155_backup_genealogy_updated) - [Wait for Solar](#wait-for-solar) - [Waiting for Jumpstart - Low SOE](#waiting-for-jumpstart---low-soe) --- ### AC Blade Connector Damaged - **UI Name**: `AC Blade Connector Damaged` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `RMA` - **Device**: Detected AC blade connector damage. Solar Inverter/assembly damaged, impacting solar production. --- ### Backfeed Limited (BackfeedLimited) - **UI Name**: `Backfeed Limited` - **API Name**: `BackfeedLimited` - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: `STSTSM` The system is configured for inadvertent export and therefore will not further discharge to respect this limit --- ### Battery Breaker Open - **UI Name**: `Battery Breaker Open` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: There is an open breaker between the site meter and the powerwall itself. The meter will automatically detect when the breaker is closed again. --- ### Battery Comms - **UI Name**: `Battery Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Critical` - **Device**: Loss of communication to one or more inverter blocks. --- ### Battery Fault (BatteryFault) - **UI Name**: `Battery Fault` - **API Name**: `BatteryFault` - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Critical` - **Device**: `STSTSM` One or more inverter blocks is in a faulted state. --- ### Battery Meter Comms - **UI Name**: `Battery Meter Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with Battery Meter. --- ### Battery Unexpected Power - **UI Name**: `Battery Unexpected Power` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: Commanded real power does not match measured power from battery meter --- ### Battery Unexpected Reactive Power - **UI Name**: `Battery Unexpected Reactive Power` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: Commanded reactive power does not match measured power from battery meter --- ### Black Start Failure - **UI Name**: `Black Start Failure` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Critical` - **Device**: The battery system was unable to black start. --- ### Busway Meter Comms - **UI Name**: `Busway Meter Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with Busway Meter. --- ### Contactor Unresponsive Close - **UI Name**: `Contactor Unresponsive Close` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Critical` - **Device**: The islanding controller was unable to open the islanding contactor/circuit breaker. --- ### DC Bus Bar Shorted - **UI Name**: `DC Bus Bar Shorted` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `RMA` - **Device**: Detected DC bus bar short. Solar Inverter/assembly is damaged, impacting solar production. --- ### External IO Comms - **UI Name**: `External IO Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with External IO device. --- ### Frequency Meter Comms - **UI Name**: `Frequency Meter Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with Frequency Meter. --- ### FWUpdateSucceeded - **UI Name**: - **API Name**: `FWUpdateSucceeded` - **Source**: `Community Contributed` - **Severity**: - **Device**: `STSTSM` Firmware Upgrade Succeeded --- ### Generator Breaker Timeout - **UI Name**: `Generator Breaker Timeout` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: The generator was unable to close its breaker within the timeout window. --- ### Generator Faulted - **UI Name**: `Generator Faulted` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Critical` - **Device**: The generator is in a faulted state. --- ### Generator Meter Comms - **UI Name**: `Generator Meter Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with Generator Meter. --- ### GridCodesWrite - **UI Name**: - **API Name**: `GridCodesWrite` - **Source**: `Community Contributed` - **Severity**: - **Device**: `STSTSM` --- ### Grid Resynchronization Failed - **UI Name**: `Grid Resynchronization Failed` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: The islanding controller was unable to synchronize and close the islanding contactor/circuit breaker within 5 minutes. --- ### Inverter Not Going To Vf - **UI Name**: `Inverter Not Going To Vf` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Critical` - **Device**: The battery system is not transitioning to grid-forming mode. --- ### Islanding Controller MIA - **UI Name**: `Islanding Controller MIA` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Critical` - **Device**: Loss of communications with the islanding controller. --- ### Load Meter Comms - **UI Name**: `Load Meter Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with Load Meter. --- ### Lost Connectivity to Tesla Site Controller - **UI Name**: `Lost Connectivity to Tesla Site Controller` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: The Tesla Site Controller (or Gateway) has lost connectivity to Tesla Servers. Monitoring and management capabilities are currently limited. --- ### No Solar Production - **UI Name**: `No Solar Production` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: One or more of the solar inverters have not produced any energy in the past 24 hours. There might be an issue impacting solar production. --- ### Opticaster Exe - **UI Name**: `Opticaster Exe` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Critical` - **Device**: Opticaster failed to run on the Tesla Site Controller and the battery system is not being dispatched. --- ### Permanent Battery Module Fault - **UI Name**: `Permanent Battery Module Fault` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `RMA` - **Device**: The Powerwall battery mode has permanently faulted and product needs replacement. --- ### PINV_a010_can_gtwMIA - **UI Name**: - **API Name**: `PINV_a010_can_gtwMIA` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPINV` Indicate that gateway/sync is MIA (seen during firmware upgrade reboot) --- ### PINV_a039_can_thcMIA - **UI Name**: - **API Name**: `PINV_a039_can_thcMIA` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPINV` Seems to indicate that Home Controller is MIA (seen during firmware upgrade reboot) --- ### PINV_a067_overvoltageNeutralChassis - **UI Name**: - **API Name**: `PINV_a067_overvoltageNeutralChassis` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPINV` --- ### POD_f029_HW_CMA_OV - **UI Name**: - **API Name**: `POD_f029_HW_CMA_OV` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w024_HW_Fault_Asserted - **UI Name**: - **API Name**: `POD_w024_HW_Fault_Asserted` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w029_HW_CMA_OV - **UI Name**: - **API Name**: `POD_w029_HW_CMA_OV` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w031_SW_Brick_OV - **UI Name**: - **API Name**: `POD_w031_SW_Brick_OV` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w044_SW_Brick_UV_Warning - **UI Name**: - **API Name**: `POD_w044_SW_Brick_UV_Warning` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w045_SW_Brick_OV_Warning - **UI Name**: - **API Name**: `POD_w045_SW_Brick_OV_Warning` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w048_SW_Cell_Voltage_Sens - **UI Name**: - **API Name**: `POD_w048_SW_Cell_Voltage_Sens` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w058_SW_App_Boot - **UI Name**: - **API Name**: `POD_w058_SW_App_Boot` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w063_SW_SOC_Imbalance - **UI Name**: - **API Name**: `POD_w063_SW_SOC_Imbalance` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w067_SW_Not_Enough_Energy_Precharge - **UI Name**: - **API Name**: `POD_w067_SW_Not_Enough_Energy_Precharge` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w090_SW_SOC_Imbalance_Limit_Charge - **UI Name**: - **API Name**: `POD_w090_SW_SOC_Imbalance_Limit_Charge` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w093_SW_Charge_Request - **UI Name**: - **API Name**: `POD_w093_SW_Charge_Request` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w105_SW_EOD - **UI Name**: - **API Name**: `POD_w105_SW_EOD` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w109_SW_Self_Test_Request_Not_Serviced - **UI Name**: - **API Name**: `POD_w109_SW_Self_Test_Request_Not_Serviced` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### POD_w110_SW_EOC - **UI Name**: - **API Name**: `POD_w110_SW_EOC` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TEPOD` --- ### PodCommissionTime - **UI Name**: - **API Name**: `PodCommissionTime` - **Source**: `Community Contributed` - **Severity**: - **Device**: `STSTSM` --- ### Powerwall Inverter Failure - **UI Name**: `Powerwall Inverter Failure` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `RMA` - **Device**: Powerwall inverter has failed permanently. Unit needs replacement. --- ### Powerwall Performance Limited - **UI Name**: `Powerwall Performance Limited` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `RMA` - **Device**: Powerwall has been locked out due to low energy. Unit needs replacement. --- ### PV Inverter Comms - **UI Name**: `PV Inverter Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with PV Inverter. --- ### PVS_a018_MciString[A-D] - **UI Name**: - **API Name**: `PVS_a018_MciString[A-D]` - **Source**: `Community Contributed` - **Severity**: - **Device**: `PVS` This indicates a solar string (A, B, C or D) that is not connected. --- ### PVS_a026_Mci1PvVoltage - **UI Name**: - **API Name**: `PVS_a026_Mci1PvVoltage` - **Source**: `Community Contributed` - **Severity**: - **Device**: `PVS` --- ### PVS_a027_Mci2PvVoltage - **UI Name**: - **API Name**: `PVS_a027_Mci2PvVoltage` - **Source**: `Community Contributed` - **Severity**: - **Device**: `PVS` --- ### PVS_a031_Mci3PvVoltage - **UI Name**: - **API Name**: `PVS_a031_Mci3PvVoltage` - **Source**: `Community Contributed` - **Severity**: - **Device**: `PVS` --- ### PVS_a032_Mci4PvVoltage - **UI Name**: - **API Name**: `PVS_a032_Mci4PvVoltage` - **Source**: `Community Contributed` - **Severity**: - **Device**: `PVS` --- ### PV String Out - **UI Name**: `PV String Out` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: One or more solar inverter strings are not producing power, expect lower than usual solar performance. --- ### Pyranometer Comms - **UI Name**: `Pyranometer Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with Pyranometer. --- ### Ramp Rate Limited - **UI Name**: `Ramp Rate Limited` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: The output does not currently match the commanded power because the system is ramping to its setpoint --- ### Reactive Power Limited - **UI Name**: `Reactive Power Limited` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: The command is greater than the Available Reactive Power --- ### Real Power Available Limited (RealPowerAvailableLimited) - **UI Name**: `Real Power Available Limited` - **API Name**: `RealPowerAvailableLimited` - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: `STSTSM` The command is greater than the Available Battery Real Charge or Discharge Power --- ### Real Power Config Limited - **UI Name**: `Real Power Config Limited` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: The system is unable to meet the commanded power because of a limit that was configured during commissioning --- ### ScheduledIslandContactorOpen - **UI Name**: - **API Name**: `ScheduledIslandContactorOpen` - **Source**: `Community Contributed` - **Severity**: - **Device**: `STSTSM` Manually Disconnected from Grid --- ### SelfConsumptionReservedLimit - **UI Name**: - **API Name**: `SelfConsumptionReservedLimit` - **Source**: `Community Contributed` - **Severity**: - **Device**: `STSTSM` Battery reached reserve limit during self-consumption mode and switches to grid --- ### Site Max Power Limited - **UI Name**: `Site Max Power Limited` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: Cannot meet command because the Site Maximum Power Limit has been set --- ### Site Meter Comms - **UI Name**: `Site Meter Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with Site Meter. --- ### Site Min Power Limited (SiteMinPowerLimited) - **UI Name**: `Site Min Power Limited` - **API Name**: `SiteMinPowerLimited` - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: `STSTSM` Cannot meet command because the Site Minimum Power Limit has been set --- ### Smart Inverter Active - **UI Name**: `Smart Inverter Active` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: Due to grid conditions, a Smart Inverter Feature is now in operation on Battery Block X --- ### Solar Charge Only Limited (SolarChargeOnlyLimited) - **UI Name**: `Solar Charge Only Limited` - **API Name**: `SolarChargeOnlyLimited` - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.6` - **Severity**: - **Device**: `STSTSM` The system has been configured to only charge from solar. Solar is not available; the charge request cannot be met --- ### Solar Meter Comms - **UI Name**: `Solar Meter Comms` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: Loss of communications with Solar Meter. --- ### SYNC_a001_SW_App_Boot - **UI Name**: - **API Name**: `SYNC_a001_SW_App_Boot` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TESYNC` --- ### SYNC_a038_DoOpenArguments - **UI Name**: - **API Name**: `SYNC_a038_DoOpenArguments` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TESYNC` --- ### System shutdown - **UI Name**: `System shutdown` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: The system has been shutdown by an external kill switch, or a system shutdown has been triggered by a low GPIO pin. --- ### THC_w061_CAN_TX_FIFO_Overflow - **UI Name**: - **API Name**: `THC_w061_CAN_TX_FIFO_Overflow` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TETHC` --- ### THC_w155_Backup_Genealogy_Updated - **UI Name**: - **API Name**: `THC_w155_Backup_Genealogy_Updated` - **Source**: `Community Contributed` - **Severity**: - **Device**: `TETHC` Unknown but seen during firmware upgrade. --- ### Wait for Solar - **UI Name**: `Wait for Solar` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Performance` - **Device**: The site currently doesn't have enough SOE to form a grid. Waiting for more solar energy. Fix: User command or wait for daytime. --- ### Waiting for Jumpstart - Low SOE - **UI Name**: `Waiting for Jumpstart - Low SOE` - **API Name**: - **Source**: `Tesla - Residential Powerhub User Manual - Rev. 1.16` - **Severity**: `Informational` - **Device**: The system has been put to sleep due to a low SOE and being off-grid. --- ================================================ FILE: docs/reference/devices.md ================================================ # Powerwall Devices Devices and alerts will show up in the device vitals API (e.g., `/api/device/vitals`). Below is a list of the devices and alerts that I have seen. I'm looking for information on what these mean. Please submit an issue or PR if you have more information or definitions we can add. The device details below are mostly educated guesses. ```python import pypowerwall # Connect to Powerwall pw = pypowerwall.Powerwall(host, password, email, timezone, gw_pwd=gw_pwd, auto_select=True) # Display Device Vitals print("Device Vitals:\n %s\n" % pw.vitals(True)) ``` Example Output: [vitals-example.json](../vitals-example.json) ## Devices | Device | ECU Type | Description | | --- | --- | --- | | STSTSM | 207 | Tesla Energy System | | TETHC | 224 | Tesla Energy Total Home Controller - Energy Storage System (ESS) | | TEPOD | 226 | Tesla Energy Powerwall | | TEPINV | 253 | Tesla Energy Powerwall Inverter | | TESYNC | 259 | Tesla Energy Synchronizer | | TEMSA | 300 | Tesla Backup Switch | | PVAC | 296 | Photovoltaic AC - Solar Inverter | | PVS | 297 | Photovoltaic Strings | | TESLA | x | Internal Device Attributes | | NEURIO | x | Wireless Revenue Grade Solar Meter | #### STSTSM - Tesla Energy System * This appears to be the primary control unit for the Tesla Energy Systems. * ECU Type is 207 * Part Numbers: 1232100-XX-Y, 1152100-XX-Y, 1118431-xx-y * Tesla Gateway 1 (1118431-xx-y) or Tesla Gateway 2 (1232100-xx-y) * Tesla Backup Switch (1624171-xx-y) #### TETHC - Tesla Energy Total Home Controller * Appears to be controller for Powerwall/2/+ Systems * ECU Type is 224 * Part 1092170-XX-Y (Powerwall 2) * Part 2012170-XX-Y (Powerwall 2.1) * Part 3012170-XX-Y (Powerwall +) #### TEPOD - Tesla Energy Powerwall * Appears to be the Powerwall battery system (not sure of what POD stands for) * ECU Type is 226 * Part 1081100-XX-Y * Component of TETHC #### TEPINV - Tesla Energy Powerwall Inverter * Appears to be the Powerwall Inverter for battery energy storage/release * ECU Type is 253 * Part 1081100-XX-Y * Component of TETHC #### TESYNC - Tesla Energy Synchronizer * Tesla Backup Gateway includes a synchronizer constantly monitoring grid voltage and frequency to relay grid parameters to Tesla Powerwall during Backup to Grid-tied transition. * ECU Type is 259 * Part 1493315-XX-Y * Component of TETHC #### TEMSA - Tesla Backup Switch * Tesla Backup Switch is designed to simplify installation of your Powerwall system. It plugs into your meter socket panel, with the meter plugging directly into the Backup Switch. Within the Backup Switch housing, the contactor controls your system's connection to the grid. The controller provides energy usage monitoring, providing you with precise, real-time data of your home's energy consumption. * ECU Type is 300 * Part 1624171-XX-E - Tesla Backup Switch (1624171-xx-y) #### PVAC - Photovoltaic AC - Solar Inverter * ECU Type is 296 * Part 1534000-xx-y - 3.8kW * Part 1538000-xx-y - 7.6kW * Component of TETHC #### PVS - Photovoltaic Strings * ECU Type is 297 * This terminates the Photovoltaic DC power strings * Component of PVAC #### NEURIO - Wireless Revenue Grade Solar Meter * This is a third party (Generac) meter with Tesla proprietary firmware. It is generally installed as a wireless meter to report on solar production. [Link](https://neur.io/) * Component of STSTSM #### TESLA - Internal Device Attributes * This is used to describe attributes of the inverter, meters and others * Component of STSTSM ### Alerts See [alerts.md](alerts.md). ================================================ FILE: docs/reference/firmware-history.md ================================================ # Firmware Version History Firmware version of the Powerwall can be seen with `pw.version()`. An estimate of Firmware versions in the wild can be seen here: https://www.netzeroapp.io/firmware_versions | Powerwall Firmware | Date Seen | Features | pyPowerwall | Tesla App | | --- | --- | --- | --- | --- | | 20.49.0 | Unknown | Unknown | N/A | | | 21.13.2 | May-2021 | Improved Powerwall behavior during power outage. Push notification when charge level is low during outage. | N/A | | | 21.31.2 | Sep-2021 | Unknown | N/A | | | 21.39.1 7759c368 | Nov-2021 | Unknown | v0.1.0 | | | 21.44 223a5cd | Unknown | Issue with this firmware is that when the Neurio meter (1.6.1-Tesla) loses connection with gateway (happens frequently) it stops solar generation. | v0.1.0 | | | 21.44.1 c58c2df3 | 1-Jan-2022 | Neurio converted to RGM only so that when it disconnects it no longer stop solar power generation | v0.2.0 | | | 22.1 92118b67 | 21-Jan-2022 | Upgrades Neurio Revenue Grade Meter (RGM) to 1.7.1-Tesla addressing Neurio instability and missing RGM data | v0.3.0 | | | 22.1.1 | 22-Feb-2022 | Unknown | v0.3.0 | | | 22.1.2 34013a3f | N/A | Unknown | N/A | | | [22.9](https://www.tesla.com/support/energy/powerwall/mobile-app/software-updates) | 1-Apr-2022 | * More options for 'Advanced Settings' in the Tesla app to control grid charging and export behavior * Improved Powerwall performance when charge level is below backup reserve and Powerwall is importing from the grid * Capability to configure the charge rate of Powerwall below backup reserve * Improved metering accuracy when loads are not balanced across phases | v0.4.0 | 4.8.0 | | 22.9.1 | 12-Apr-2022 | Unknown | v0.4.0 | 4.8.0 | | 22.9.1.1 75c90bda | 2-May-2022 | Unknown | v0.4.0 | 4.8.0-1025 | | 22.9.2 a54352e6 | 2-May-2022 | Unknown | v0.4.0 Proxy t11 | 4.8.0-1025 | | 22.18.3 21c0ad81 | 28-Jun-2022 | Two new alerts did show up in device vitals: HighCPU and SystemConnectedToGrid * The HighCPU was particularly interesting. If you updated your customer password on the gateway, it seems to have reverted during the firmware upgrade. Any monitoring tools using the new password were getting errors. The gateway was presenting "API rate limit" errors (even for installer mode). Reverting the password to the older one fixes the issue but revealed the HighCPU alert. | v0.4.0 Proxy t15 | 4.9.2-1087 | | 22.18.6 7884188e | 27-Sep-2022 | STSTSM HighCPU Alert appeared after upgrade. The firmwareVersion now shows "2022-08-01-g8b6399632f". Alerts during upgrade: "PINV_a010_can_gtwMIA", "PINV_a039_can_thcMIA". | v0.4.0 Proxy t15 | 4.13.1-1312 | | 22.26.1-foxtrot 4d562eaf | 13-Oct-2022 | This release seems to have introduced a Powerwall charging slowdown mode. After 95% full, the charging will slow dramatically with excess solar production getting pushed to the grid even if the battery is less than 100% (see [discussion](https://github.com/jasonacox/Powerwall-Dashboard/discussions/109)). This upgrade also upgrades the Neurio Revenue Grade Meter (RGM) to 1.7.2-Tesla with STSTSM firmware showing 2022-09-28-g7cb0d69c2b. [Tesla Release Notes](https://www.tesla.com/support/energy/powerwall/mobile-app/software-updates): Time-Based Control mode updates, Improved off-grid retry, improved commissioning, improved metering accuracy on Neurio Smart CTs | v0.6.0 Proxy t19 | 4.13.1-1334 | | 22.26.2 8cd8cac4 | 26-Oct-2022 | STSTSM firmware showing 2022-10-24-g64e8c689f9 - This version seems to have fixed a slow charging issue with the Powerwall. With version 22.26.1, it started trickle charging at around 85-90% and would never get above 95%. With this new version it charges up to 98% and then starts trickle charging to the final 100%.| v0.6.0 Proxy t19 | 4.14.1-1395 | | 22.26.4 fc00d5dd | 22-Nov-2022 | STSTSM firmware showing 2022-10-26-g9b8e445626 - No noticeable changes so far. | v0.6.0 Proxy t22 | 4.14.4-1455 | | 22.36.4 71cc31f1 | 23-Feb-2023 | Added Tesla Pro app graphic/link to Gateway login screen | v0.6.0 Proxy t24 | 4.18.0-1607 | | 22.36.6 cf1839cb | 11-Mar-2023 | STSTSM firmware showing 2023-03-04-gd9f19c06f2 - Improved detection of open circuit breakers on Powerwall systems ([see Tesla release notes](https://www.tesla.com/support/energy/powerwall/mobile-app/software-updates)). Change was reverted and rolled back to 22.26.4 | v0.6.0 Proxy t24 | 4.18.0-1607 | | 22.36.7 08d06dad | 21-Mar-2023 | STSTSM firmware showing 2023-03-04-gd9f19c06f2 - No noticeable changes so far. | v0.6.1 Proxy t24 | 4.18.0-1607 | | 22.36.8 | 27-Mar-2023 | "Battery Unexpected Power" alert reported during firmware upgrade | v0.6.2 Proxy t25 | 4.19.5-1665| | 22.36.9 c55384d2 | 11-Apr-2023 | STSTSM firmware showing 2023-03-29-g66549e6ca7 - Power flow animation panel had "Aw, snap!" error | v0.6.2 Proxy t25 | 4.19.5-1665| | 23.4.2-1 fe55682a | 3-May-2023 | STSTSM firmware showing `localbuild` | v0.6.2 Proxy t25 | 4.20.69-1691| | 23.12.10 30f95d0b | 1-Jul-2023 | STSTSM firmware showing 2023-07-11-geb56bf57ab | v0.6.2 Proxy t26 | 4.23.6-1844 | | 23.12.11 452c76cb | 4-Aug-2023 | STSTSM firmware showing 2023-07-20-ga38210a892 | v0.6.2 Proxy t26 | 4.23.6-1844 | | 23.28.1 fa0c1ad0 | 11-Sep-2023 | STSTSM firmware showing 2023-08-22-g807640ca4a | v0.6.2 Proxy t26 | 4.24.5-1931 | | 23.28.2 27626f98 | 13-Oct-2023 | STSTSM firmware showing 2023-09-12-gafa2393b50 | v0.6.2 Proxy t26 | 4.25.6-1976 | | 23.36.3 aa269d353 | 22-Dec-2023 | STSTSM firmware showing 2023-11-30-g6e07d12eea | .. | .. | | 23.36.4 4064fc6a | 17-Jan-2024 | STSTSM firmware showing 2023-11-30-g6e07d12eea | .. | .. | | 24.4.0 0fe780c9 | 15-Mar-2024 | No vitals available | .. | .. | | 24.12.3 1feaff3a | May-2024 | No vitals available | .. | .. | | 23.44.0 eb113390 | 25-Jan-2024 | STSTSM firmware showing Unknown - No vitals available | .. | .. | | 23.44.3-msa | 7-Feb-2024 | No vitals available | .. | .. | | 25.2.2 | 2024 | Unknown | .. | .. | | 25.2.6 | 2024 | Unknown | .. | .. | | 25.2.7 bca3fdc8 | 2024 | Updated from 25.2.6, kept working | .. | .. | | 25.10.1 | 2024 | Local (LAN) access to TEDAPI on Powerwall blocked | .. | .. | | 25.10.2 9325e147 | 2024 | Unknown | .. | .. | | 25.10.3 | 2024 | Updated from 25.10.1 | .. | .. | | 25.10.4 4a4191ff | 2024 | TEDAPI via wifi still working | .. | .. | | 25.18.1 9eca33eb | 2024 | Good with PD v4.7.1 and TEDAPI (via wi-fi) | .. | .. | | 25.18.2 e1f565d8 | 2024 | Unknown | .. | .. | | 25.18.4 b6b41ca8 | 2024 | "Battery Unexpected Power" alert | .. | .. | | 25.18.5 a411ff15 | 2024 | Multiple reports of "Powerwall Disabled - Service Required - Low Energy Lockout" | .. | .. | | 25.26.0 0d5436e | 5-Aug-2025 | Possibly bug in this version (see [issue #680](https://github.com/jasonacox/Powerwall-Dashboard/issues/680)) - WiFi stability improvements reported | .. | .. | | 25.26.1 2c4bb00e | 18-Aug-2025 | Unknown | .. | .. | | 25.34.1 930a7700 | 29-Sep-2025 | Updated for PW2 and PW+ units | .. | .. | | 25.34.3 82272c3b | 21-Oct-2025 | PW3 - Grid charging rates dropped from 3.3 kW to 1.9 kW | .. | .. | | 25.42.0 2cd3dcfd | Nov-2025 | Charging on Solar and PW2 stops/start due to high temperature - Firmware branch split: PW3 on separate line from PW2/inverters/Powerwall+ | .. | .. | | 25.42.1 1d1ff4c6 | Dec-2025 | Unknown | .. | .. | | 25.42.1 ab1ab81d | 3-Dec-2025 | PW3 variant - Grid charging rates continue to be lower (~1.5 kW) | .. | .. | | 25.42.1 b5289d33 | 25-Nov-2025 | Operational variant - Resolved "fan_speed_mismatch_detected" alert | .. | .. | **For more details on firmware versions, see [Tesla Powerwall Firmware Upgrades - Observations](https://github.com/jasonacox/Powerwall-Dashboard/discussions/109).** ## Important Notes * Beginning with firmware version 23.44.0, Tesla has removed the `/api/devices/vitals` API endpoint. For discussion about this and future updates, see [Tesla Powerwall Firmware Upgrades - Observations](https://github.com/jasonacox/Powerwall-Dashboard/discussions/109). * As of firmware version 25.10.0, network routing to the TEDAPI endpoint (`192.168.91.1`) is no longer supported by Tesla. You must connect directly to the Powerwall's Wi‑Fi access point to access TEDAPI data. ================================================ FILE: docs/vitals-example-failed-pw.json ================================================ { "STSTSM--1152100-14-E--CNxxx": { "STSTSM-Location": "Gateway", "alerts": [ "GridCodesWrite", "FWUpdateSucceeded", "BatteryFault" ], "firmwareVersion": "2022-01-31-g9853d3db5", "lastCommunicationTime": 1645918731, "manufacturer": "TESLA", "partNumber": "1152100-14-E", "serialNumber": "CNxxx", "teslaEnergyEcuAttributes": { "ecuType": 207 } }, "TEPINV--1081100-01-U--T21C0007854": { "componentParentDin": "TETHC--3012170-05-B--TG121094002C9V", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645911911, "manufacturer": "TESLA", "partNumber": "1081100-01-U", "serialNumber": "Txxx", "teslaEnergyEcuAttributes": { "ecuType": 253 } }, "TEPOD--1081100-01-U--T21C0007854": { "alerts": [ "POD_f029_HW_CMA_OV", "POD_w024_HW_Fault_Asserted", "POD_w029_HW_CMA_OV", "POD_w031_SW_Brick_OV", "POD_w044_SW_Brick_UV_Warning", "POD_w045_SW_Brick_OV_Warning", "POD_w048_SW_Cell_Voltage_Sens", "POD_w058_SW_App_Boot", "POD_w063_SW_SOC_Imbalance", "POD_w067_SW_Not_Enough_Energy_Precharge", "POD_w090_SW_SOC_Imbalance_Limit_Charge", "POD_w093_SW_Charge_Request", "POD_w105_SW_EOD", "POD_w110_SW_EOC" ], "componentParentDin": "TETHC--3012170-05-B--TG121094002C9V", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645911911, "manufacturer": "TESLA", "partNumber": "1081100-01-U", "serialNumber": "Txxx", "teslaEnergyEcuAttributes": { "ecuType": 226 } }, "TESLA--JBL20314C4D370": { "componentParentDin": "STSTSM--1152100-14-E--CNxxx", "lastCommunicationTime": 1645918731, "manufacturer": "TESLA", "meterAttributes": { "meterLocation": [ 1, 4 ] }, "serialNumber": "JBLxxx" }, "TESYNC--1449782-04-D--JBLxxx": { "ISLAND_FreqL1_Load": 50.03, "ISLAND_FreqL1_Main": 50.03, "ISLAND_FreqL2_Load": 50.03, "ISLAND_FreqL2_Main": 50.04, "ISLAND_FreqL3_Load": 50.019999999999996, "ISLAND_FreqL3_Main": 50.019999999999996, "ISLAND_GridConnected": true, "ISLAND_GridState": "ISLAND_GridState_Grid_Compliant", "ISLAND_L1L2PhaseDelta": -256.0, "ISLAND_L1L3PhaseDelta": -120.5, "ISLAND_L1MicrogridOk": true, "ISLAND_L2L3PhaseDelta": 119.0, "ISLAND_L2MicrogridOk": true, "ISLAND_L3MicrogridOk": true, "ISLAND_PhaseL1_Main_Load": -1.0, "ISLAND_PhaseL2_Main_Load": -1.0, "ISLAND_PhaseL3_Main_Load": -1.0, "ISLAND_ReadyForSynchronization": true, "ISLAND_VL1N_Load": 247.5, "ISLAND_VL1N_Main": 246.5, "ISLAND_VL2N_Load": 248.0, "ISLAND_VL2N_Main": 248.0, "ISLAND_VL3N_Load": 245.0, "ISLAND_VL3N_Main": 245.5, "METER_X_CTA_I": 5.901, "METER_X_CTA_InstReactivePower": 304.0, "METER_X_CTA_InstRealPower": 1406.0, "METER_X_CTB_I": 2.5315, "METER_X_CTB_InstReactivePower": -154.0, "METER_X_CTB_InstRealPower": -600.0, "METER_X_CTC_I": 2.5585, "METER_X_CTC_InstReactivePower": -278.0, "METER_X_CTC_InstRealPower": -552.0, "METER_X_LifetimeEnergyExport": 6195476.0, "METER_X_LifetimeEnergyImport": 5631703.0, "METER_X_VL1N": 246.04, "METER_X_VL2N": 247.11, "METER_X_VL3N": 244.66, "METER_Y_CTA_I": 2.91, "METER_Y_CTA_InstReactivePower": 129.0, "METER_Y_CTA_InstRealPower": 704.0, "METER_Y_CTB_I": 2.5395, "METER_Y_CTB_InstReactivePower": 110.0, "METER_Y_CTB_InstRealPower": 614.0, "METER_Y_CTC_I": 2.571, "METER_Y_CTC_InstReactivePower": 110.0, "METER_Y_CTC_InstRealPower": 616.0, "METER_Y_LifetimeEnergyExport": 16680.0, "METER_Y_LifetimeEnergyImport": 7861507.0, "METER_Y_VL1N": 246.70000000000002, "METER_Y_VL2N": 246.78, "METER_Y_VL3N": 244.32, "SYNC-Phase1Usage": "Backup", "SYNC-Phase2Usage": "NonBackup", "SYNC-Phase3Usage": "NonBackup", "SYNC_ExternallyPowered": false, "SYNC_SiteSwitchEnabled": false, "alerts": [ "SYNC_a001_SW_App_Boot" ], "componentParentDin": "STSTSM--1152100-14-E--CN3xxx", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645918731, "manufacturer": "TESLA", "partNumber": "1449782-04-D", "serialNumber": "JBLxxx", "teslaEnergyEcuAttributes": { "ecuType": 259 } }, "TETHC--3012170-05-B--TG121094002C9V": { "THC_AmbientTemp": 21.5, "THC_State": "THC_STATE_AUTONOMOUSCONTROL", "alerts": [ "THC_w061_CAN_TX_FIFO_Overflow", "THC_w155_Backup_Genealogy_Updated" ], "componentParentDin": "STSTSM--1152100-14-E--CNxxx", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645918730, "manufacturer": "TESLA", "partNumber": "3012170-05-B", "serialNumber": "TGxxx", "teslaEnergyEcuAttributes": { "ecuType": 224 } } } ================================================ FILE: docs/vitals-example-latest.json ================================================ { "NEURIO--VAHXXXXXXXXXX": { "NEURIO_CT0_InstRealPower": 2118.239990234375, "NEURIO_CT0_Location": "solarRGM", "componentParentDin": "STSTSM--1232100-00-E--TGXXXXXXXXXX", "firmwareVersion": "1.7.1-Tesla", "lastCommunicationTime": 1645914595, "manufacturer": "NEURIO", "meterAttributes": { "meterLocation": [ 5 ] }, "serialNumber": "VAHXXXXXXXXXX" }, "PVAC--1538100-00-F--XXXXXXXXXX": { "PVAC_Fout": 59.995999999999995, "PVAC_GridState": "Grid_Compliant", "PVAC_InvState": "INV_Grid_Connected", "PVAC_Iout": 8.4, "PVAC_LifetimeEnergyPV_Total": 3262340.0, "PVAC_PVCurrent_A": 2.25, "PVAC_PVCurrent_B": 0.01, "PVAC_PVCurrent_C": 2.68, "PVAC_PVCurrent_D": 2.63, "PVAC_PVMeasuredPower_A": 562.0, "PVAC_PVMeasuredPower_B": 0.0, "PVAC_PVMeasuredPower_C": 749.0, "PVAC_PVMeasuredPower_D": 735.0, "PVAC_PVMeasuredVoltage_A": 248.60000000000002, "PVAC_PVMeasuredVoltage_B": -2.0999999999999996, "PVAC_PVMeasuredVoltage_C": 281.2, "PVAC_PVMeasuredVoltage_D": 281.5, "PVAC_Pout": 2120.0, "PVAC_PvState_A": "PV_Active", "PVAC_PvState_B": "PV_Active", "PVAC_PvState_C": "PV_Active", "PVAC_PvState_D": "PV_Active_Parallel", "PVAC_Qout": 20.0, "PVAC_State": "PVAC_Active", "PVAC_VHvMinusChassisDC": -210.0, "PVAC_VL1Ground": 121.19999999999999, "PVAC_VL2Ground": 120.6, "PVAC_Vout": 241.60000000000002, "PVI-PowerStatusSetpoint": "on", "componentParentDin": "TETHC--2012170-25-E--XXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "partNumber": "1538100-00-F", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 296 } }, "PVS--1538100-00-F--XXXXXXXXXX": { "PVS_EnableOutput": true, "PVS_SelfTestState": "PVS_SelfTestOff", "PVS_State": "PVS_Active", "PVS_StringA_Connected": true, "PVS_StringB_Connected": false, "PVS_StringC_Connected": true, "PVS_StringD_Connected": true, "PVS_vLL": 242.4, "alerts": [ "PVS_a018_MciStringB" ], "componentParentDin": "PVAC--1538100-00-F--XXXXXXXXXX", "firmwareVersion": "0eb61d6819b2b3", "lastCommunicationTime": 1645914594, "manufacturer": "TESLA", "partNumber": "1538100-00-F", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 297 } }, "STSTSM--1232100-00-E--TGXXXXXXXXXX": { "STSTSM-Location": "Gateway", "alerts": [ "PodCommissionTime", "RealPowerAvailableLimited", "GridCodesWrite", "GridCodesWrite", "FWUpdateSucceeded" ], "firmwareVersion": "2022-01-31-g9853d3db5", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "partNumber": "1232100-00-E", "serialNumber": "TGXXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 207 } }, "TEPINV--1081100-10-U--XXXXXXXXXX": { "PINV_EnergyCharged": 969850.0, "PINV_EnergyDischarged": 841280.0, "PINV_Fout": 59.997, "PINV_GridState": "Grid_Compliant", "PINV_HardwareEnableLine": true, "PINV_PllFrequency": 59.99, "PINV_PllLocked": true, "PINV_Pout": 0.01, "PINV_PowerLimiter": "PWRLIM_POD_Power_Limit", "PINV_Qout": -0.01, "PINV_ReadyForGridForming": true, "PINV_State": "PINV_GridFollowing", "PINV_VSplit1": 121.10000000000001, "PINV_VSplit2": 120.9, "PINV_Vout": 242.0, "alerts": [ "PINV_a067_overvoltageNeutralChassis" ], "componentParentDin": "TETHC--3012170-05-B--XXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "partNumber": "1081100-10-U", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 253 } }, "TEPINV--1081100-13-V--XXXXXXXXXX": { "PINV_EnergyCharged": 1008050.0, "PINV_EnergyDischarged": 862810.0, "PINV_Fout": 59.997, "PINV_GridState": "Grid_Compliant", "PINV_HardwareEnableLine": true, "PINV_PllFrequency": 59.989000000000004, "PINV_PllLocked": true, "PINV_Pout": 0.0, "PINV_PowerLimiter": "PWRLIM_POD_Power_Limit", "PINV_Qout": -0.01, "PINV_ReadyForGridForming": true, "PINV_State": "PINV_GridFollowing", "PINV_VSplit1": 121.0, "PINV_VSplit2": 121.0, "PINV_Vout": 242.10000000000002, "alerts": [ "PINV_a067_overvoltageNeutralChassis" ], "componentParentDin": "TETHC--2012170-25-E--XXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "partNumber": "1081100-13-V", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 253 } }, "TEPOD--1081100-10-U--XXXXXXXXXX": { "POD_ActiveHeating": false, "POD_CCVhold": false, "POD_ChargeComplete": true, "POD_ChargeRequest": false, "POD_DischargeComplete": false, "POD_PermanentlyFaulted": false, "POD_PersistentlyFaulted": false, "POD_available_charge_power": 0.0, "POD_available_dischg_power": 12000.0, "POD_enable_line": true, "POD_nom_energy_remaining": 13875.0, "POD_nom_energy_to_be_charged": 0.0, "POD_nom_full_pack_energy": 13875.0, "POD_state": "POD_ACTIVE", "alerts": [ "POD_w110_SW_EOC" ], "componentParentDin": "TETHC--3012170-05-B--XXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "partNumber": "1081100-10-U", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 226 } }, "TEPOD--1081100-13-V--XXXXXXXXXX": { "POD_ActiveHeating": false, "POD_CCVhold": false, "POD_ChargeComplete": true, "POD_ChargeRequest": false, "POD_DischargeComplete": false, "POD_PermanentlyFaulted": false, "POD_PersistentlyFaulted": false, "POD_available_charge_power": 0.0, "POD_available_dischg_power": 12000.0, "POD_enable_line": true, "POD_nom_energy_remaining": 14233.0, "POD_nom_energy_to_be_charged": 0.0, "POD_nom_full_pack_energy": 14233.0, "POD_state": "POD_ACTIVE", "alerts": [ "POD_w110_SW_EOC" ], "componentParentDin": "TETHC--2012170-25-E--XXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "partNumber": "1081100-13-V", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 226 } }, "TESLA--1538100-00-F--XXXXXXXXXX": { "componentParentDin": "STSTSM--1232100-00-E--TGXXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "pvInverterAttributes": { "nameplateRealPowerW": 7680 }, "serialNumber": "1538100-00-F--XXXXXXXXXX" }, "TESLA--XXXXXXXXXX": { "componentParentDin": "STSTSM--1232100-00-E--TGXXXXXXXXXX", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "meterAttributes": { "meterLocation": [ 1 ] }, "serialNumber": "XXXXXXXXXX" }, "TESYNC--1493315-01-F--XXXXXXXXXX": { "ISLAND_FreqL1_Load": 60.0, "ISLAND_FreqL1_Main": 60.0, "ISLAND_FreqL2_Load": 60.0, "ISLAND_FreqL2_Main": 60.0, "ISLAND_FreqL3_Load": 0.0, "ISLAND_FreqL3_Main": 0.0, "ISLAND_GridConnected": true, "ISLAND_GridState": "ISLAND_GridState_Grid_Compliant", "ISLAND_L1L2PhaseDelta": -256.0, "ISLAND_L1L3PhaseDelta": -256.0, "ISLAND_L1MicrogridOk": true, "ISLAND_L2L3PhaseDelta": -256.0, "ISLAND_L2MicrogridOk": true, "ISLAND_L3MicrogridOk": false, "ISLAND_PhaseL1_Main_Load": 0.0, "ISLAND_PhaseL2_Main_Load": 0.0, "ISLAND_PhaseL3_Main_Load": -256.0, "ISLAND_ReadyForSynchronization": true, "ISLAND_VL1N_Load": 121.0, "ISLAND_VL1N_Main": 121.0, "ISLAND_VL2N_Load": 121.5, "ISLAND_VL2N_Main": 121.5, "ISLAND_VL3N_Load": 0.0, "ISLAND_VL3N_Main": 0.0, "METER_X_CTA_I": 2.4575, "METER_X_CTA_InstReactivePower": -104.0, "METER_X_CTA_InstRealPower": -36.0, "METER_X_CTB_I": 6.5185, "METER_X_CTB_InstReactivePower": -60.0, "METER_X_CTB_InstRealPower": -750.0, "METER_X_CTC_I": 0.0, "METER_X_CTC_InstReactivePower": 0.0, "METER_X_CTC_InstRealPower": 0.0, "METER_X_LifetimeEnergyExport": 802759.0, "METER_X_LifetimeEnergyImport": 2872293.0, "METER_X_VL1N": 120.71000000000001, "METER_X_VL2N": 120.94, "METER_X_VL3N": 0.0, "METER_Y_CTA_I": 0.0, "METER_Y_CTA_InstReactivePower": 0.0, "METER_Y_CTA_InstRealPower": 0.0, "METER_Y_CTB_I": 0.0, "METER_Y_CTB_InstReactivePower": 0.0, "METER_Y_CTB_InstRealPower": 0.0, "METER_Y_CTC_I": 0.0, "METER_Y_CTC_InstReactivePower": 0.0, "METER_Y_CTC_InstRealPower": 0.0, "METER_Y_LifetimeEnergyExport": 0.0, "METER_Y_LifetimeEnergyImport": 2.0, "METER_Y_VL1N": 120.72, "METER_Y_VL2N": 120.94, "METER_Y_VL3N": 0.0, "SYNC_ExternallyPowered": false, "SYNC_SiteSwitchEnabled": false, "alerts": [ "SYNC_a001_SW_App_Boot" ], "componentParentDin": "STSTSM--1232100-00-E--TGXXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914595, "manufacturer": "TESLA", "partNumber": "1493315-01-F", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 259 } }, "TETHC--2012170-25-E--XXXXXXXXXX": { "THC_AmbientTemp": 21.400000000000006, "THC_State": "THC_STATE_AUTONOMOUSCONTROL", "alerts": [ "THC_w155_Backup_Genealogy_Updated" ], "componentParentDin": "STSTSM--1232100-00-E--TGXXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914594, "manufacturer": "TESLA", "partNumber": "2012170-25-E", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 224 } }, "TETHC--3012170-05-B--XXXXXXXXXX": { "THC_AmbientTemp": 21.0, "THC_State": "THC_STATE_AUTONOMOUSCONTROL", "alerts": [ "THC_w155_Backup_Genealogy_Updated" ], "componentParentDin": "STSTSM--1232100-00-E--TGXXXXXXXXXX", "firmwareVersion": "b0ec24329c08e4", "lastCommunicationTime": 1645914594, "manufacturer": "TESLA", "partNumber": "3012170-05-B", "serialNumber": "XXXXXXXXXX", "teslaEnergyEcuAttributes": { "ecuType": 224 } } } ================================================ FILE: docs/vitals-example.json ================================================ { "NEURIO--VAHxxxxxxxxxx": { "NEURIO_CT0_InstRealPower": -15.920000076293945, "NEURIO_CT0_Location": "solarRGM", "componentParentDin": "STSTSM--1232100-00-E--TGxxxxxxxxxxxx", "firmwareVersion": "1.6.1-Tesla", "lastCommunicationTime": 1642742952, "manufacturer": "NEURIO", "meterAttributes": { "meterLocation": [ 5 ] }, "serialNumber": "VAHxxxxxxxxxx" }, "PVAC--1538100-00-F--CNxxxxxxxxxxxx": { "PVAC_Fout": 60.0, "PVAC_GridState": "Grid_Compliant", "PVAC_InvState": "INV_Grid_Connected", "PVAC_Iout": 1.08, "PVAC_LifetimeEnergyPV_Total": 2160960.0, "PVAC_PVCurrent_A": 0.01, "PVAC_PVCurrent_B": 0.0, "PVAC_PVCurrent_C": 0.0, "PVAC_PVCurrent_D": 0.0, "PVAC_PVMeasuredPower_A": 1.0, "PVAC_PVMeasuredPower_B": 0.0, "PVAC_PVMeasuredPower_C": 0.0, "PVAC_PVMeasuredPower_D": 0.0, "PVAC_PVMeasuredVoltage_A": 10.700000000000003, "PVAC_PVMeasuredVoltage_B": 33.1, "PVAC_PVMeasuredVoltage_C": 10.600000000000001, "PVAC_PVMeasuredVoltage_D": 9.8, "PVAC_Pout": 0.0, "PVAC_PvState_A": "PV_Disabled", "PVAC_PvState_B": "PV_Disabled", "PVAC_PvState_C": "PV_Disabled", "PVAC_PvState_D": "PV_Disabled", "PVAC_Qout": -10.0, "PVAC_State": "PVAC_Active", "PVAC_VHvMinusChassisDC": -211.0, "PVAC_VL1Ground": 120.6, "PVAC_VL2Ground": 120.0, "PVAC_Vout": 240.8, "PVI-PowerStatusSetpoint": "on", "componentParentDin": "TETHC--2012170-25-E--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "partNumber": "1538100-00-F", "serialNumber": "CNxxxxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 296 } }, "PVS--1538100-00-F--CNxxxxxxxxxxxx": { "PVS_EnableOutput": true, "PVS_SelfTestState": "PVS_SelfTestOff", "PVS_State": "PVS_GridSupporting", "PVS_StringA_Connected": true, "PVS_StringB_Connected": false, "PVS_StringC_Connected": true, "PVS_StringD_Connected": true, "PVS_vLL": 241.5, "alerts": [ "PVS_a018_MciStringB" ], "componentParentDin": "PVAC--1538100-00-F--CNxxxxxxxxxxxx", "firmwareVersion": "0eb61d6819b2b3", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "partNumber": "1538100-00-F", "serialNumber": "CNxxxxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 297 } }, "STSTSM--1232100-00-E--TGxxxxxxxxxxxx": { "STSTSM-Location": "Gateway", "alerts": [ "GridCodesWrite", "GridCodesWrite", "PodCommissionTime", "FWUpdateSucceeded" ], "firmwareVersion": "2021-12-14-ge0e7fa81c", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "partNumber": "1232100-00-E", "serialNumber": "TGxxxxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 207 } }, "TEPINV--1081100-10-U--Txxxxxxxxxx": { "PINV_EnergyCharged": 636930.0, "PINV_EnergyDischarged": 550880.0, "PINV_Fout": 60.010000000000005, "PINV_GridState": "Grid_Compliant", "PINV_HardwareEnableLine": true, "PINV_PllFrequency": 59.998000000000005, "PINV_PllLocked": true, "PINV_Pout": 0.65, "PINV_PowerLimiter": "PWRLIM_No_Power_Limit", "PINV_Qout": -0.01, "PINV_ReadyForGridForming": true, "PINV_State": "PINV_GridFollowing", "PINV_VSplit1": 121.0, "PINV_VSplit2": 120.7, "PINV_Vout": 241.70000000000002, "alerts": [ "PINV_a067_overvoltageNeutralChassis" ], "componentParentDin": "TETHC--3012170-05-B--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "partNumber": "1081100-10-U", "serialNumber": "Txxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 253 } }, "TEPINV--1081100-13-V--Txxxxxxxxxx": { "PINV_EnergyCharged": 667810.0, "PINV_EnergyDischarged": 565680.0, "PINV_Fout": 60.010999999999996, "PINV_GridState": "Grid_Compliant", "PINV_HardwareEnableLine": true, "PINV_PllFrequency": 60.001000000000005, "PINV_PllLocked": true, "PINV_Pout": 0.66, "PINV_PowerLimiter": "PWRLIM_No_Power_Limit", "PINV_Qout": -0.03, "PINV_ReadyForGridForming": true, "PINV_State": "PINV_GridFollowing", "PINV_VSplit1": 120.80000000000001, "PINV_VSplit2": 120.60000000000001, "PINV_Vout": 241.4, "alerts": [ "PINV_a067_overvoltageNeutralChassis" ], "componentParentDin": "TETHC--2012170-25-E--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "partNumber": "1081100-13-V", "serialNumber": "Txxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 253 } }, "TEPOD--1081100-10-U--Txxxxxxxxxx": { "POD_ActiveHeating": false, "POD_CCVhold": false, "POD_ChargeComplete": false, "POD_ChargeRequest": false, "POD_DischargeComplete": false, "POD_PermanentlyFaulted": false, "POD_PersistentlyFaulted": false, "POD_available_charge_power": 7000.0, "POD_available_dischg_power": 12000.0, "POD_enable_line": true, "POD_nom_energy_remaining": 8790.0, "POD_nom_energy_to_be_charged": 5420.0, "POD_nom_full_pack_energy": 13896.0, "POD_state": "POD_ACTIVE", "componentParentDin": "TETHC--3012170-05-B--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742951, "manufacturer": "TESLA", "partNumber": "1081100-10-U", "serialNumber": "Txxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 226 } }, "TEPOD--1081100-13-V--Txxxxxxxxxx": { "POD_ActiveHeating": false, "POD_CCVhold": false, "POD_ChargeComplete": false, "POD_ChargeRequest": false, "POD_DischargeComplete": false, "POD_PermanentlyFaulted": false, "POD_PersistentlyFaulted": false, "POD_available_charge_power": 7000.0, "POD_available_dischg_power": 12000.0, "POD_enable_line": true, "POD_nom_energy_remaining": 9011.0, "POD_nom_energy_to_be_charged": 5521.0, "POD_nom_full_pack_energy": 14249.0, "POD_state": "POD_ACTIVE", "componentParentDin": "TETHC--2012170-25-E--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742951, "manufacturer": "TESLA", "partNumber": "1081100-13-V", "serialNumber": "Txxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 226 } }, "TESLA--1538100-00-F--CNxxxxxxxxxxxx": { "componentParentDin": "STSTSM--1232100-00-E--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "pvInverterAttributes": { "nameplateRealPowerW": 7680 }, "serialNumber": "1538100-00-F--CNxxxxxxxxxxxx" }, "TESLA--JBLxxxxxxxxxxx": { "componentParentDin": "STSTSM--1232100-00-E--TGxxxxxxxxxxxx", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "meterAttributes": { "meterLocation": [ 1 ] }, "serialNumber": "JBLxxxxxxxxxxx" }, "TESYNC--1493315-01-F--JBLxxxxxxxxxxx": { "ISLAND_FreqL1_Load": 60.010000000000005, "ISLAND_FreqL1_Main": 60.010000000000005, "ISLAND_FreqL2_Load": 60.010000000000005, "ISLAND_FreqL2_Main": 60.010000000000005, "ISLAND_FreqL3_Load": 0.0, "ISLAND_FreqL3_Main": 0.0, "ISLAND_GridConnected": true, "ISLAND_GridState": "ISLAND_GridState_Grid_Compliant", "ISLAND_L1L2PhaseDelta": -256.0, "ISLAND_L1L3PhaseDelta": -256.0, "ISLAND_L1MicrogridOk": true, "ISLAND_L2L3PhaseDelta": -256.0, "ISLAND_L2MicrogridOk": true, "ISLAND_L3MicrogridOk": false, "ISLAND_PhaseL1_Main_Load": 0.0, "ISLAND_PhaseL2_Main_Load": 0.0, "ISLAND_PhaseL3_Main_Load": -256.0, "ISLAND_ReadyForSynchronization": true, "ISLAND_VL1N_Load": 121.0, "ISLAND_VL1N_Main": 121.0, "ISLAND_VL2N_Load": 121.5, "ISLAND_VL2N_Main": 121.0, "ISLAND_VL3N_Load": 0.0, "ISLAND_VL3N_Main": 0.0, "METER_X_CTA_I": 6.2305, "METER_X_CTA_InstReactivePower": -205.0, "METER_X_CTA_InstRealPower": 433.0, "METER_X_CTB_I": 3.983, "METER_X_CTB_InstReactivePower": -53.0, "METER_X_CTB_InstRealPower": -457.0, "METER_X_CTC_I": 0.0, "METER_X_CTC_InstReactivePower": 0.0, "METER_X_CTC_InstRealPower": 0.0, "METER_X_LifetimeEnergyExport": 530366.0, "METER_X_LifetimeEnergyImport": 2600971.0, "METER_X_VL1N": 120.37, "METER_X_VL2N": 120.81, "METER_X_VL3N": 0.0, "METER_Y_CTA_I": 0.0, "METER_Y_CTA_InstReactivePower": 0.0, "METER_Y_CTA_InstRealPower": 0.0, "METER_Y_CTB_I": 0.0, "METER_Y_CTB_InstReactivePower": 0.0, "METER_Y_CTB_InstRealPower": 0.0, "METER_Y_CTC_I": 0.0, "METER_Y_CTC_InstReactivePower": 0.0, "METER_Y_CTC_InstRealPower": 0.0, "METER_Y_LifetimeEnergyExport": 0.0, "METER_Y_LifetimeEnergyImport": 2.0, "METER_Y_VL1N": 120.38, "METER_Y_VL2N": 120.81, "METER_Y_VL3N": 0.0, "SYNC_ExternallyPowered": false, "SYNC_SiteSwitchEnabled": false, "alerts": [ "SYNC_a001_SW_App_Boot" ], "componentParentDin": "STSTSM--1232100-00-E--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "partNumber": "1493315-01-F", "serialNumber": "JBLxxxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 259 } }, "TETHC--2012170-25-E--TGxxxxxxxxxxxx": { "THC_AmbientTemp": 18.60000000000001, "THC_State": "THC_STATE_AUTONOMOUSCONTROL", "componentParentDin": "STSTSM--1232100-00-E--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "partNumber": "2012170-25-E", "serialNumber": "TGxxxxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 224 } }, "TETHC--3012170-05-B--TGxxxxxxxxxxxx": { "THC_AmbientTemp": 19.0, "THC_State": "THC_STATE_AUTONOMOUSCONTROL", "componentParentDin": "STSTSM--1232100-00-E--TGxxxxxxxxxxxx", "firmwareVersion": "c58c2df39ec207", "lastCommunicationTime": 1642742952, "manufacturer": "TESLA", "partNumber": "3012170-05-B", "serialNumber": "TGxxxxxxxxxxxx", "teslaEnergyEcuAttributes": { "ecuType": 224 } } } ================================================ FILE: example-cloud-mode.py ================================================ # Example test for pypowerwall import os import pypowerwall if __name__ == "__main__": # Optional: Turn on Debug Mode pypowerwall.set_debug(True) # Credentials for your Powerwall - Customer Login Data # Set appropriate env vars or change the defaults email = os.environ.get('PW_EMAIL', 'email@example.com') timezone = os.environ.get('PW_TIMEZONE', 'America/Los_Angeles') # Change to your local timezone/tz auth_path = os.environ.get('PW_AUTH_PATH', "") # Connect to Powerwall pw = pypowerwall.Powerwall("", "", email, timezone, authpath=auth_path, cloudmode=True) # Display Metric Examples print("Battery power level: %0.0f%%" % pw.level()) print("Power response: %r" % pw.power()) print("Grid Power: %0.2fkW" % (float(pw.grid()) / 1000.0)) print("Solar Power: %0.2fkW" % (float(pw.solar()) / 1000.0)) print("Battery Power: %0.2fkW" % (float(pw.battery()) / 1000.0)) print("Home Power: %0.2fkW" % (float(pw.home()) / 1000.0)) # Raw JSON Data Examples print("Status: %s" % pw.status()) print("Grid raw: %r" % pw.grid(verbose=True)) print("Solar raw: %r" % pw.solar(verbose=True)) ================================================ FILE: example.py ================================================ # Example: pyPowerwall Usage Demo # -------------------------------- # This script demonstrates how to connect to a Tesla Powerwall using the pyPowerwall library. # It supports multiple connection modes (local, fleetapi, cloud, tedapi). # # Usage: # - Set your connection mode and credentials below, or use a .env file with the following variables: # POWERWALL_MODE, POWERWALL_HOST, POWERWALL_PASSWORD, POWERWALL_EMAIL, POWERWALL_TIMEZONE, # POWERWALL_GW_PWD, POWERWALL_RSA_KEY_PATH # - Run: python example.py # # For more info, see: https://github.com/jasonacox/pypowerwall import pypowerwall import dotenv import os # Load environment variables from .env file if present dotenv.load_dotenv() host = password = email = timezone = gw_pwd = rsa_key_path = None # Enable debug logging for more verbose output (optional for learning) # pypowerwall.set_debug(True) # Select the connection mode you want to use and enter # the credentials for your Powerwall below. mode = os.getenv('POWERWALL_MODE', 'local') # Option 1 - LOCAL MODE - Customer Login (Powerwall 2 and + only) if mode == "local": password = "password" email = "email@example.com" host = "localhost" # Address of your Powerwall Gateway timezone = "America/Los_Angeles" # Your local timezone gw_pwd = None # Option 2 - FLEETAPI MODE - Requires Setup (Powerwall & Solar-Only) if mode == "fleetapi": host = password = email = "" timezone = "America/Los_Angeles" gw_pwd = None # Option 3 - CLOUD MODE - Requires Setup (Powerwall & Solar-Only) if mode == "cloud": host = password = "" email = 'email@example.com' timezone = "America/Los_Angeles" gw_pwd = None # Option 4 - TEDAPI MODE - Requires WiFi access to Gateway (Powerwall 2, + and 3) if mode == "tedapi": host = "192.168.91.1" gw_pwd = "ABCDEFGHIJ" # Full gateway password from QR sticker password = email = "" timezone = "America/Los_Angeles" # Uncomment the following for hybrid mode (Powerwall 2 and +) # password = "password" # email = "email@example.com" # Option 5 - v1r LAN MODE - Wired LAN to Powerwall 3 (requires RSA key registration) if mode == "v1r": host = "10.0.1.50" # Powerwall wired LAN IP (vendor subnet) gw_pwd = "ABCDEFGHIJ" # Full gateway password (last 5 auto-derived for login) password = email = "" timezone = "America/Los_Angeles" rsa_key_path = "/path/to/tedapi_rsa_private.pem" # Override with .env or environment variables if set host = os.getenv('POWERWALL_HOST', host) password = os.getenv('POWERWALL_PASSWORD', password) email = os.getenv('POWERWALL_EMAIL', email) timezone = os.getenv('POWERWALL_TIMEZONE', timezone) gw_pwd = os.getenv('POWERWALL_GW_PWD', gw_pwd) rsa_key_path = os.getenv('POWERWALL_RSA_KEY_PATH', locals().get('rsa_key_path')) # Connect to Powerwall - auto_select mode (local, fleetapi, cloud, tedapi, v1r) print(f"Connecting to Powerwall using {mode} mode...") pw = pypowerwall.Powerwall(host, password, email, timezone, gw_pwd=gw_pwd, rsa_key_path=rsa_key_path, auto_select=True) # --- System Info --- print("Site Name: %s - Firmware: %s - DIN: %s" % (pw.site_name(), pw.version(), pw.din())) print("System Uptime: %s\n" % pw.uptime()) # --- Pull Sensor Power Data --- grid = pw.grid() solar = pw.solar() battery = pw.battery() home = pw.home() # --- Display Data --- print("Battery power level: %0.0f%%" % pw.level()) print("Combined power metrics: %r" % pw.power()) print("") print("Grid Power: %0.2fkW" % (float(grid)/1000.0)) print("Solar Power: %0.2fkW" % (float(solar)/1000.0)) print("Battery Power: %0.2fkW" % (float(battery)/1000.0)) print("Home Power: %0.2fkW" % (float(home)/1000.0)) print("") # --- Raw JSON Payload Examples --- print("Grid raw: %r\n" % pw.grid(verbose=True)) print("Solar raw: %r\n" % pw.solar(verbose=True)) # --- Device Vitals --- print("Vitals: %r\n" % pw.vitals()) # --- String Data --- print("String Data: %r\n" % pw.strings()) # --- System Status (e.g. Battery Capacity) --- system_status = pw.system_status() print("System Status: %r\n" % system_status) # --- Key System Status Data --- if system_status: def safe_get(key, default=0): value = system_status.get(key, default) return value if value is not None else default print("Battery Capacity: %0.2f kWh" % (safe_get('nominal_full_pack_energy') / 1000.0)) print("Battery Energy Remaining: %0.2f kWh" % (safe_get('nominal_energy_remaining') / 1000.0)) print("Max Charge Power: %0.2f kW" % (safe_get('max_charge_power') / 1000.0)) print("Max Discharge Power: %0.2f kW" % (safe_get('max_discharge_power') / 1000.0)) print("Grid Status: %s" % system_status.get('system_island_state', '')) print("Available Battery Blocks: %d" % safe_get('available_blocks')) # Print per-battery block details if present battery_blocks = system_status.get('battery_blocks', []) if battery_blocks: print("\nBattery Blocks:") for i, block in enumerate(battery_blocks, 1): print(f" Block {i}:") print(f" Serial: {block.get('PackageSerialNumber', '')}") print(f" Nominal Full Pack Energy: {block.get('nominal_full_pack_energy', 0)/1000.0:.2f} kWh") print(f" Nominal Energy Remaining: {block.get('nominal_energy_remaining', 0)/1000.0:.2f} kWh") print(f" Power Output: {block.get('p_out', 0)} W") print(f" Voltage Output: {block.get('v_out', 0)} V") print(f" Frequency Output: {block.get('f_out', 0)} Hz") print(f" Inverter State: {block.get('pinv_state', '')}") print(f" Grid State: {block.get('pinv_grid_state', '')}") print(f" Backup Ready: {block.get('backup_ready', False)}") print(f" Version: {block.get('version', '')}") else: print("System Status unavailable. Skipping battery details.") # --- Explore Further --- # Uncomment below to see all available methods and attributes: # print(dir(pw)) # --- Next Steps --- # See the API.md or project README for more advanced usage and # integration tips. ================================================ FILE: examples/network_route.py ================================================ # This file contains two examples of how to use the `route` command from Linux in Python. # 1. manage_ip_route_pyroute: Recommended approach. Less error-prone due to use of encapsulated pyroute2 framework. # 2. manage_ip_route_subprocess: Simpler, straightforward approach that utilizes Python subprocces. import socket import subprocess from enum import Enum, auto from typing import Optional from pyroute2 import IPRoute, NetlinkError class Tense(Enum): """ String/tense variation on the route operations. """ BASE = auto() PRESENT = auto() PAST = auto() class RouteOperation(Enum): """Whether to add or remove a route. """ ADD = { Tense.BASE: "add", Tense.PRESENT: "adding", Tense.PAST: "added" } DELETE = { Tense.BASE: "del", Tense.PRESENT: "deleting", Tense.PAST: "deleted" } def get_action(self, tense: Tense) -> str: """Retrieve string representation appropriate to each RouteOperation tense. Args: tense (Tense): Tense for each operation. Returns: str: String representation of operation tense. """ return self.value.get(tense, "Tense Missing") def manage_ip_route_pyroute(operation: RouteOperation, destination: str, gateway: str, interface: Optional[str] = None, interactive: bool = False) -> None: """ Manages an IP route using pyroute2's IPRoute, utilizing onlink to ensure the route works. For instance, if you want to map all requests that go from a CIDR range of 192.168.91.0/24 => 192.168.1.250, use this to add/delete such a route. This can also be configured on your router. The calling process must be run as root (sudo). Args: operation (RouteOperation): RouteOperation.ADD or RouteOperation.DELETE, corresponding to desired operation for network route. destination (str): The network or IP address in IPv4 CIDR notation (e.g., "192.168.1.0/24") gateway (str): The IP address of the Tesla Gateway/Powerwall (e.g., "192.168.1.250") interface (str, optional): The optional network interface (e.g., "eth0"). If not provided, the route is managed without specifying an interface. Defaults to None. interactive (bool, optional): Whether messages should be printed. Defaults to False. Example usage: manage_ip_route_pyroute(RouteOperation.ADD, "192.168.1.0/24", "192.168.1.1") manage_ip_route_pyroute(RouteOperation.DELETE, "192.168.1.0/24", "192.168.1.1", "eth0") """ route_params = { "family": socket.AF_INET6 if ":" in destination else socket.AF_INET, "dst": destination, "gateway": gateway } if operation == RouteOperation.ADD: route_params["flags"] = ["onlink"] with IPRoute() as ip: try: # Lookup interface index if interface is specified idxs = ip.link_lookup(ifname=interface) if interface else None if not idxs: print(f"Interface '{interface}' not found.") return route_params["oif"] = idxs[0] # Perform the route operation ip.route(operation.get_action(Tense.BASE), **route_params) if interactive: print(f"Route {operation.get_action(Tense.PAST)}: {destination} via {gateway}" + (f" dev {interface}" if interface else "") + (f" {','.join(route_params['flags'])}" if 'flags' in route_params else "")) except NetlinkError as e: print(f"Network specific error occurred {operation.get_action(Tense.PRESENT)} route: {e}") except Exception as e: print(f"An unexpected error occurred: {e}") def manage_ip_route_subprocess(operation: RouteOperation, destination: str, gateway: str, interface: Optional[str] = None, interactive: bool = False) -> None: """ Manages an IP route using the 'ip' command, utilizing onlink to ensure the route works. For instance, if you want to map all requests that go from a CIDR range of 192.168.91.0/24 => 192.168.1.250, use this to add/delete such a route. This can also be configured on your router. Args: operation (RouteOperation): RouteOperation.ADD or RouteOperation.DELETE, corresponding to desired operation for network route. destination (str): The network or IP address in IPv4 CIDR notation (e.g., "192.168.1.0/24") gateway (str): The IP address of the Tesla Gateway/Powerwall (e.g., "192.168.1.250") interface (str, optional): The optional network interface (e.g., "eth0"). If not provided, the route is managed without specifying an interface. Defaults to None. interactive (bool, optional): Whether messages should be printed. Defaults to False. Example usage: manage_ip_route_subprocess(RouteOperation.ADD, "192.168.1.0/24", "192.168.1.1") manage_ip_route_subprocess(RouteOperation.DELETE, "192.168.1.0/24", "192.168.1.1", "eth0") """ command = ["sudo", "ip", "route", operation.get_action(Tense.BASE), destination, "via", gateway] if interface: command.extend(["dev", interface]) if operation == RouteOperation.ADD: command.append("onlink") try: subprocess.run(command, check=True) if interactive: print(f"Route {operation.get_action(Tense.PAST)}: {destination} via {gateway}" + (f" dev {interface}" if interface else "") + (f" onlink" if 'onlink' in command else "")) except subprocess.CalledProcessError as e: print(f"Error adding route: {e}") ================================================ FILE: examples/vitals/README.md ================================================ # Tesla Powerwall Vitals Data This script, [pull_vitals.py](pull_vitals.py) pulls the Powerwall Vitals API and returns a JSON result. ## Notes * Work in Progress * API Endpoint on Powerwall: /api/devices/vitals (protobuf binary payload) * Output from this script is a list of vital data points from all Tesla Energy Powerwall devices and a resulting combined JSON payload. ## Requirements Tesla is using a protobuf response for this API. This requires the necessary protobuf definition and libraries: Install the protobuf python module: ```bash # Install protobuf pip install protobuf ``` The script uses the generated file, [tesla_pb2.py](tesla_pb2.py). This is generated from the `protoc` compiler. If you wish to compile the tesla.proto definition file yourself, install protobuf of your systems (e.g. `brew install protobuf`) and run: ```bash # Run protobuf compiler to build definition python code protoc --python_out=. tesla.proto ``` ## Credits * Protobuf definition [tesla.proto](tesla.proto) thanks to @brianhealey. See https://github.com/vloschiavo/powerwall2/issues/51#issuecomment-923574346 ================================================ FILE: examples/vitals/pull_vitals.py ================================================ # pyPowerWall Vitals # -*- coding: utf-8 -*- """ This script pulls the Powerwall Vitals API Author: Jason A. Cox For more information see https://github.com/jasonacox/pypowerwall * Work in Progress * API Endpoing on Powerwall: /api/devices/vitals * Result is a protobuf binary payload Requires protobuf: pip install protobuf tesla_pb2.py # tesla protobuf definition file built using: protoc --python_out=. tesla.proto Credits: Protobuf definition (tesla.proto) thanks to @brianhealey Date: 27 Nov 2021 """ import pypowerwall import tesla_pb2 import json # Update with your details password='password' email='email@example.com' host = "10.0.1.23" timezone = "America/LosAngeles" # Make sure binary polling allowed if pypowerwall.version_tuple < (0,0,3): print("\n*** WARNING: Minimum pypowerwall version 0.0.3 required for proper function! ***\n\n") # Connect to Powerwall pw = pypowerwall.Powerwall(host,password,email,timezone) # Pull vitals payload - binary format in protobuf stream = pw.poll('/api/devices/vitals') streamsize = len(stream) print("Size of stream = %d" % streamsize) # Protobuf payload processing pw = tesla_pb2.DevicesWithVitals() pw.ParseFromString(stream) num = len(pw.devices) print("There are %d devices found." % num) # List Devices x = 0 output = {} while(x < num): device = pw.devices[x].device.device parent = str(device.componentParentDin.value) vitals = pw.devices[x].vitals alerts = pw.devices[x].alerts name = str(device.din.value) print("Device %d: %s " % (x, name)) # e.STSTSM = "STSTSM", # e.POD = "TEPOD", # e.PINV = "TEPINV", # e.PVAC = "PVAC", # e.PVS = "PVS", # e.SYNC = "TESYNC", # e.MSA = "TEMSA", # e.NEURIO = "NEURIO", # e.ACPW = "ACPW", # e.PVI = "PVI", # e.SPW = "SPW" if name.startswith("TETHC--"): print(" - Inverter") if device.HasField("partNumber"): print(" - Part Number: %s" % device.partNumber.value) if device.HasField("serialNumber"): print(" - Serial Number: %s" % device.serialNumber.value) if device.HasField("manufacturer"): print(" - Manufacturer: %s" % device.manufacturer.value) if device.HasField("siteLabel"): print(" - Site Label: %s" % device.siteLabel.value) if device.HasField("componentParentDin"): print(" - Parent DIN: %s" % device.componentParentDin.value) if device.HasField("firmwareVersion"): print(" - Firmware Version: %s" % device.firmwareVersion.value) if device.HasField("firstCommunicationTime"): print(" - First Communicated At: %s" % device.firstCommunicationTime.ToDatetime()) if device.HasField("lastCommunicationTime"): print(" - Last Communicated At: %s" % device.lastCommunicationTime.ToDatetime()) # if device.HasField("connectionParameters"): # print(" - Connection Parameters: %s" % device.connectionParameters) if device.HasField("deviceAttributes"): attributes = device.deviceAttributes if attributes.HasField("teslaEnergyEcuAttributes"): print(" - Ecu:") print(" - type: %i" % attributes.teslaEnergyEcuAttributes.ecuType) if attributes.HasField("generatorAttributes"): print(" - Generator:") print(" - nameplateRealPowerW: %i" % attributes.generatorAttributes.nameplateRealPowerW) print(" - nameplateApparentPowerVa: %i" % attributes.generatorAttributes.nameplateApparentPowerVa) if attributes.HasField("pvInverterAttributes"): print(" - Inverter:") print(" - nameplateRealPowerW: %i" % attributes.pvInverterAttributes.nameplateRealPowerW) if attributes.HasField("meterAttributes"): print(" - Meter:") for location in attributes.meterAttributes.meterLocation: print(" - location: %i" % location) a = 0 while (a < len(alerts)): if (a == 0): print(" - Alerts:") print(" - ALERT_%i = %s" % (a, alerts[a]) ) a += 1 print(" - Vitals:") for y in pw.devices[x].vitals: vital_name = str(y.name) if (y.HasField('intValue')): print(" - %s = %i" % (y.name, y.intValue)) vital_value = y.intValue if(y.HasField('boolValue')): print(" - %s = %r" % (y.name,y.boolValue)) vital_value = y.boolValue if(y.HasField('stringValue')): print(" - %s = '%s'" % (y.name,y.stringValue)) vital_value = y.stringValue if(y.HasField('floatValue')): print(" - %s = '%f'" % (y.name,y.floatValue)) vital_value = y.floatValue # Record in output dictionary if name not in output.keys(): output[name] = {} output[name]['Parent'] = parent output[name][vital_name] = vital_value if name in output.keys() and len(alerts) > 0: output[name]["ALERT_Count"] = len(pw.devices[x].alerts) x += 1 json_out = json.dumps(output, indent=4, sort_keys=True) print("Resulting vitals:\n", json_out) ================================================ FILE: examples/vitals/tesla.proto ================================================ // Tesla Protocol Buffer definition (tesla.proto) // // Create tesla_pb2.py for use in projects using the protoc compiler: // protoc --python_out=. tesla.proto // // Credit and thanks to @brianhealey syntax = "proto3"; package teslapower; import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; message ExternalAuth { ExternalAuthType type = 1; } enum ExternalAuthType { EXTERNAL_AUTH_TYPE_INVALID = 0; EXTERNAL_AUTH_TYPE_PRESENCE = 1; EXTERNAL_AUTH_TYPE_MTLS = 2; EXTERNAL_AUTH_TYPE_HERMES_COMMAND = 4; } enum DeliveryChannel { DELIVERY_CHANNEL_INVALID = 0; DELIVERY_CHANNEL_LOCAL_HTTPS = 1; DELIVERY_CHANNEL_HERMES_COMMAND = 2; DELIVERY_CHANNEL_BLE = 3; } enum TeslaService { TESLA_SERVICE_INVALID = 0; TESLA_SERVICE_COMMAND = 1; } message Participant { oneof id { string din = 1; int32 teslaService = 2; int32 local = 3; int32 authorizedClient = 4; } } message EcuId { string partNumber = 1; string serialNumber = 2; } message Din { string value = 1; } message FirmwareVersion { string version = 1; string githash = 2; } message AccumulatedEnergy { float energyWh = 1; int32 accumulationType = 2; optional UInt64Value periodS = 3; } message InstACMeasurement { float voltageVrms = 1; float frequencyHz = 2; optional FloatValue currentArms = 3; optional FloatValue realPowerW = 4; optional FloatValue reactivePowerVar = 5; optional FloatValue apparentPowerVa = 6; } message InstDCMeasurement { float voltageV = 1; optional FloatValue currentA = 2; } message GridComplianceStatus { int32 gridState = 1; optional UInt32Value qualifyingTimeRemainingS = 2; } message NetworkInterfaceIPv4Config { reserved 1; bool dhcpEnabled = 2; fixed32 address = 3; fixed32 subnetMask = 4; fixed32 gateway = 5; repeated fixed32 dns = 6; } message Rssi { sint32 value = 1; optional UInt32Value signalStrengthPercent = 2; } message NetworkConnectivityStatus { bool connectedPhysical = 1; bool connectedInternet = 2; bool connectedTesla = 3; optional Rssi rssi = 4; optional Int32Value snr = 5; } message NetworkInterface { bytes macAddress = 1; bool enabled = 2; bool activeRoute = 3; optional NetworkInterfaceIPv4Config ipv4Config = 4; optional NetworkConnectivityStatus connectivityStatus = 5; } message WifiPassword { string value = 1; } message EncryptedMessage { int32 cipher = 1; bytes ciphertext = 2; } message WifiConfig { string ssid = 1; optional string password = 2; optional int32 securityType = 3; } message WifiNetwork { string ssid = 1; sint32 rssiValue = 2; optional Rssi rssi = 3; optional int32 securityType = 4; } message SystemUpdate { int32 handshakeResult = 1; int32 updateStatus = 2; optional FirmwareVersion serverStagedVersion = 3; uint64 totalBytes = 4; uint64 bytesOffset = 5; uint64 estimatedBytesPerSecond = 6; uint64 lastHandshakeTimestamp = 7; uint32 lastUpdateResult = 8; } message ErrorResponse { optional Status status = 1; } message CommonAPIGetSystemInfoRequest { } message CommonAPIGetSystemInfoResponse { optional EcuId deviceId = 1; string din = 2; optional FirmwareVersion firmwareVersion = 3; reserved 4; optional SystemUpdate systemUpdate = 5; } message CommonAPISetLocalSiteConfigRequest {} message CommonAPISetLocalSiteConfigResponse {} message CommonAPICheckForUpdateRequest {} message CommonAPICheckForUpdateResponse {} message CommonAPIClearUpdateRequest {} message CommonAPIClearUpdateResponse {} message CommonAPIPerformUpdateRequest {} message CommonAPIPerformUpdateResponse {} message CommonAPIFactoryResetRequest {} message CommonAPIFactoryResetResponse {} message CommonAPIGetNetworkingStatusRequest {} message CommonAPIGetNetworkingStatusResponse { optional WifiConfig wifiConfig = 1; optional NetworkInterface wifi = 2; optional NetworkInterface eth = 3; optional NetworkInterface gsm = 4; } message CommonAPIWifiScanRequest { uint32 maxScanDurationS = 1; repeated int32 desiredSecurityTypes = 2; uint32 maximumTotalAps = 3; } message CommonAPIWifiScanResponse { repeated WifiNetwork wifiNetworks = 1; } message CommonAPIConfigureWifiRequest { bool enabled = 1; optional WifiConfig wifiConfig = 2; } message CommonAPIConfigureWifiResponse { optional WifiConfig wifiConfig = 1; optional NetworkInterface wifi = 2; } message CommonAPIConfigureWifiWithEncryptedPasswordRequest { bool enabled = 1; optional WifiConfig wifiConfig = 2; optional EncryptedMessage encryptedPassword = 3; } message CommonAPIConfigureWifiWithEncryptedPasswordResponse { optional WifiConfig wifiConfig = 1; optional NetworkInterface wifi = 2; int32 result = 3; } message CommonAPIDeviceCertRequest {} message CommonAPIDeviceCertResponse { int32 format = 1; bytes deviceCert = 2; } message AlertLog { fixed64 data = 1; } message AlertMatrix { fixed64 data = 1; } message EnergySiteNetDevice { optional Din din = 1; optional WifiConfig wifiApConfig = 2; } message EnergySiteNetRecentlyAddedDevice { optional Din din = 1; int32 status = 2; } message EnergySiteNetRecentlyRemovedDevice { optional Din din = 1; int32 status = 2; } message EnergySiteNetConfig { repeated EnergySiteNetDevice devices = 1; repeated EnergySiteNetRecentlyAddedDevice recentlyAdded = 2; repeated EnergySiteNetRecentlyRemovedDevice recentlyRemoved = 3; } message EnergySiteNetAPIAddDeviceRequest { EnergySiteNetDevice device = 1; } message EnergySiteNetAPIAddDeviceResponse { EnergySiteNetRecentlyAddedDevice recentlyAdded = 1; } message EnergySiteNetAPIRemoveDeviceRequest { Din din = 1; } message EnergySiteNetAPIRemoveDeviceResponse { EnergySiteNetRecentlyRemovedDevice recentlyRemoved = 1; } message EnergySiteNetAPIGetConfigRequest {} message EnergySiteNetAPIGetConfigResponse { EnergySiteNetConfig config = 1; } message DeviceVital { optional string name = 1; oneof value { int64 intValue = 3; double floatValue = 4; string stringValue = 5; bool boolValue = 6; } } message StringValue { string value = 1; } message UInt32Value { uint32 value = 1; } message Int32Value { int32 value = 1; } message UInt64Value { uint64 value = 1; } message FloatValue { float value = 1; } message ConnectionParameters { optional StringValue ipAddress = 1; optional StringValue serialPort = 2; optional int64 serialBaud = 3; optional uint32 modbusId = 4; } message TeslaHardwareId { optional UInt32Value pcbaId = 1; optional UInt32Value assemblyId = 2; optional UInt32Value usageId = 3; } message TeslaEnergyEcuAttributes { int32 ecuType = 1; optional TeslaHardwareId hardwareId = 2; optional PVInverterAttributes pvInverterAttributes = 3; optional MeterAttributes meterAttributes = 4; } message GeneratorAttributes { uint64 nameplateRealPowerW = 1; uint64 nameplateApparentPowerVa = 2; } message PVInverterAttributes { uint64 nameplateRealPowerW = 1; } message MeterAttributes { repeated uint32 meterLocation = 1; } message DeviceAttributes { oneof deviceAttributes { TeslaEnergyEcuAttributes teslaEnergyEcuAttributes = 1; GeneratorAttributes generatorAttributes = 2; PVInverterAttributes pvInverterAttributes = 3; MeterAttributes meterAttributes = 4; }; } message Device { optional StringValue din = 1; optional StringValue partNumber = 2; optional StringValue serialNumber = 3; optional StringValue manufacturer = 4; optional StringValue siteLabel = 5; optional StringValue componentParentDin = 6; optional StringValue firmwareVersion = 7; optional google.protobuf.Timestamp firstCommunicationTime = 8; optional google.protobuf.Timestamp lastCommunicationTime = 9; optional ConnectionParameters connectionParameters = 10; optional DeviceAttributes deviceAttributes = 11; } message SiteControllerConnectedDevice { optional Device device = 1; } message SiteControllerConnectedDeviceWithVitals { SiteControllerConnectedDevice device = 1; repeated DeviceVital vitals = 2; repeated string alerts = 3; } message DevicesWithVitals { repeated SiteControllerConnectedDeviceWithVitals devices = 1; } message SiteControllerConnectedDeviceStore { repeated SiteControllerConnectedDevice siteControllerConnectedDevice = 1; } message BatterySystemCapabilities { uint64 nominalEnergyWh = 1; uint64 nominalPowerW = 2; } message Status { int32 code = 1; string message = 2; repeated google.protobuf.Any details = 3; } message Manifest { string gatewayDin = 1; int32 trigger = 2; google.protobuf.Timestamp generatedTime = 3; repeated Device device = 4; optional BatterySystemCapabilities batterySystemCapabilities = 5; optional StringValue gatewayFirmwareVersion = 6; } message MessageEnvelope { int32 deliveryChannel = 1; Participant sender = 2; Participant recipient = 3; oneof payload { CommonMessages common = 4; TEGMessages teg = 5; EnergySiteNetMessages energysitenet = 6; } } message CommonMessages { int32 errorResponse = 1; oneof message { CommonAPIGetSystemInfoRequest getSystemInfoRequest = 2; CommonAPIGetSystemInfoResponse getSystemInfoResponse = 3; CommonAPISetLocalSiteConfigRequest setLocalSiteConfigRequest = 4; CommonAPISetLocalSiteConfigResponse setLocalSiteConfigResponse = 5; CommonAPIPerformUpdateRequest performUpdateRequest = 6; CommonAPIPerformUpdateResponse performUpdateResponse = 7; CommonAPIFactoryResetRequest factoryResetRequest = 8; CommonAPIFactoryResetResponse factoryResetResponse = 9; CommonAPIWifiScanRequest wifiScanRequest = 10; CommonAPIWifiScanResponse wifiScanResponse = 11; CommonAPIConfigureWifiRequest configureWifiRequest = 12; CommonAPIConfigureWifiResponse configureWifiResponse = 13; CommonAPICheckForUpdateRequest checkForUpdateRequest = 14; CommonAPICheckForUpdateResponse checkForUpdateResponse = 15; CommonAPIClearUpdateRequest clearUpdateRequest = 16; CommonAPIClearUpdateResponse clearUpdateResponse = 17; CommonAPIDeviceCertRequest deviceCertRequest = 18; CommonAPIDeviceCertResponse deviceCertResponse = 19; CommonAPIConfigureWifiWithEncryptedPasswordRequest configureWifiWithEncryptedPasswordRequest = 20; CommonAPIConfigureWifiWithEncryptedPasswordResponse configureWifiWithEncryptedPasswordResponse = 21; CommonAPIGetNetworkingStatusRequest getNetworkingStatusRequest = 22; CommonAPIGetNetworkingStatusResponse getNetworkingStatusResponse = 23; } } message TEGMessages { oneof message { TEGAPIGetConfigRequest getConfigRequest = 1; TEGAPIGetConfigResponse getConfigResponse = 2; TEGAPISetIslandModeRequest setIslandModeRequest = 3; TEGAPISetIslandModeResponse setIslandModeResponse = 4; TEGAPITriggerIslandingBlackStartRequest triggerIslandingBlackStartRequest = 5; TEGAPITriggerIslandingBlackStartResponse triggerIslandingBlackStartResponse = 6; TEGAPITriggerAssetManifestUploadRequest triggerAssetManifestUploadRequest = 7; TEGAPITriggerAssetManifestUploadResponse triggerAssetManifestUploadResponse = 8; } } message TEGSettings {} message TEGAPIGetConfigRequest {} message TEGAPIGetConfigResponse { optional TEGSettings settings = 1; optional WifiConfig wifiConfig = 2; optional NetworkInterface wifi = 3; optional NetworkInterface eth = 4; optional NetworkInterface gsm = 5; } message TEGAPITriggerIslandingBlackStartRequest {} message TEGAPITriggerIslandingBlackStartResponse {} message TEGAPISetIslandModeRequest { int32 mode = 1; bool force = 2; } message TEGAPISetIslandModeResponse { int32 result = 1; } message TEGAPITriggerAssetManifestUploadRequest {} message TEGAPITriggerAssetManifestUploadResponse {} message EnergySiteNetMessages { oneof message { EnergySiteNetAPIAddDeviceRequest addDeviceRequest = 1; EnergySiteNetAPIAddDeviceResponse addDeviceResponse = 2; EnergySiteNetAPIRemoveDeviceRequest removeDeviceRequest = 3; EnergySiteNetAPIRemoveDeviceResponse removeDeviceResponse = 4; EnergySiteNetAPIGetConfigRequest getConfigRequest = 5; EnergySiteNetAPIGetConfigResponse getConfigResponse = 6; } } message LocalAuthAPIRequiredFactorsRequest {} message LocalAuthAPIRequiredFactorsResponse { bool password = 1; bool presence = 2; } message LocalAuthAPILoginRequest { int32 Participant = 1; string email = 2; WifiPassword password = 3; } message LocalAuthAPILoginResponse { int32 result = 1; } message LocalAuthAPILogoutRequest {} message LocalAuthAPILogoutResponse {} message LocalAuthAPICheckAuthStatusRequest {} message LocalAuthAPICheckAuthStatusResponse { int32 result = 1; } ================================================ FILE: examples/vitals/tesla_pb2.py ================================================ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: tesla.proto """Generated protocol buffer code.""" from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0btesla.proto\x12\nteslapower\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\":\n\x0c\x45xternalAuth\x12*\n\x04type\x18\x01 \x01(\x0e\x32\x1c.teslapower.ExternalAuthType\"g\n\x0bParticipant\x12\r\n\x03\x64in\x18\x01 \x01(\tH\x00\x12\x16\n\x0cteslaService\x18\x02 \x01(\x05H\x00\x12\x0f\n\x05local\x18\x03 \x01(\x05H\x00\x12\x1a\n\x10\x61uthorizedClient\x18\x04 \x01(\x05H\x00\x42\x04\n\x02id\"1\n\x05\x45\x63uId\x12\x12\n\npartNumber\x18\x01 \x01(\t\x12\x14\n\x0cserialNumber\x18\x02 \x01(\t\"\x14\n\x03\x44in\x12\r\n\x05value\x18\x01 \x01(\t\"3\n\x0f\x46irmwareVersion\x12\x0f\n\x07version\x18\x01 \x01(\t\x12\x0f\n\x07githash\x18\x02 \x01(\t\"z\n\x11\x41\x63\x63umulatedEnergy\x12\x10\n\x08\x65nergyWh\x18\x01 \x01(\x02\x12\x18\n\x10\x61\x63\x63umulationType\x18\x02 \x01(\x05\x12-\n\x07periodS\x18\x03 \x01(\x0b\x32\x17.teslapower.UInt64ValueH\x00\x88\x01\x01\x42\n\n\x08_periodS\"\xd5\x02\n\x11InstACMeasurement\x12\x13\n\x0bvoltageVrms\x18\x01 \x01(\x02\x12\x13\n\x0b\x66requencyHz\x18\x02 \x01(\x02\x12\x30\n\x0b\x63urrentArms\x18\x03 \x01(\x0b\x32\x16.teslapower.FloatValueH\x00\x88\x01\x01\x12/\n\nrealPowerW\x18\x04 \x01(\x0b\x32\x16.teslapower.FloatValueH\x01\x88\x01\x01\x12\x35\n\x10reactivePowerVar\x18\x05 \x01(\x0b\x32\x16.teslapower.FloatValueH\x02\x88\x01\x01\x12\x34\n\x0f\x61pparentPowerVa\x18\x06 \x01(\x0b\x32\x16.teslapower.FloatValueH\x03\x88\x01\x01\x42\x0e\n\x0c_currentArmsB\r\n\x0b_realPowerWB\x13\n\x11_reactivePowerVarB\x12\n\x10_apparentPowerVa\"a\n\x11InstDCMeasurement\x12\x10\n\x08voltageV\x18\x01 \x01(\x02\x12-\n\x08\x63urrentA\x18\x02 \x01(\x0b\x32\x16.teslapower.FloatValueH\x00\x88\x01\x01\x42\x0b\n\t_currentA\"\x86\x01\n\x14GridComplianceStatus\x12\x11\n\tgridState\x18\x01 \x01(\x05\x12>\n\x18qualifyingTimeRemainingS\x18\x02 \x01(\x0b\x32\x17.teslapower.UInt32ValueH\x00\x88\x01\x01\x42\x1b\n\x19_qualifyingTimeRemainingS\"z\n\x1aNetworkInterfaceIPv4Config\x12\x13\n\x0b\x64hcpEnabled\x18\x02 \x01(\x08\x12\x0f\n\x07\x61\x64\x64ress\x18\x03 \x01(\x07\x12\x12\n\nsubnetMask\x18\x04 \x01(\x07\x12\x0f\n\x07gateway\x18\x05 \x01(\x07\x12\x0b\n\x03\x64ns\x18\x06 \x03(\x07J\x04\x08\x01\x10\x02\"l\n\x04Rssi\x12\r\n\x05value\x18\x01 \x01(\x11\x12;\n\x15signalStrengthPercent\x18\x02 \x01(\x0b\x32\x17.teslapower.UInt32ValueH\x00\x88\x01\x01\x42\x18\n\x16_signalStrengthPercent\"\xc9\x01\n\x19NetworkConnectivityStatus\x12\x19\n\x11\x63onnectedPhysical\x18\x01 \x01(\x08\x12\x19\n\x11\x63onnectedInternet\x18\x02 \x01(\x08\x12\x16\n\x0e\x63onnectedTesla\x18\x03 \x01(\x08\x12#\n\x04rssi\x18\x04 \x01(\x0b\x32\x10.teslapower.RssiH\x00\x88\x01\x01\x12(\n\x03snr\x18\x05 \x01(\x0b\x32\x16.teslapower.Int32ValueH\x01\x88\x01\x01\x42\x07\n\x05_rssiB\x06\n\x04_snr\"\xfb\x01\n\x10NetworkInterface\x12\x12\n\nmacAddress\x18\x01 \x01(\x0c\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x12\x13\n\x0b\x61\x63tiveRoute\x18\x03 \x01(\x08\x12?\n\nipv4Config\x18\x04 \x01(\x0b\x32&.teslapower.NetworkInterfaceIPv4ConfigH\x00\x88\x01\x01\x12\x46\n\x12\x63onnectivityStatus\x18\x05 \x01(\x0b\x32%.teslapower.NetworkConnectivityStatusH\x01\x88\x01\x01\x42\r\n\x0b_ipv4ConfigB\x15\n\x13_connectivityStatus\"\x1d\n\x0cWifiPassword\x12\r\n\x05value\x18\x01 \x01(\t\"6\n\x10\x45ncryptedMessage\x12\x0e\n\x06\x63ipher\x18\x01 \x01(\x05\x12\x12\n\nciphertext\x18\x02 \x01(\x0c\"j\n\nWifiConfig\x12\x0c\n\x04ssid\x18\x01 \x01(\t\x12\x15\n\x08password\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x19\n\x0csecurityType\x18\x03 \x01(\x05H\x01\x88\x01\x01\x42\x0b\n\t_passwordB\x0f\n\r_securityType\"\x88\x01\n\x0bWifiNetwork\x12\x0c\n\x04ssid\x18\x01 \x01(\t\x12\x11\n\trssiValue\x18\x02 \x01(\x11\x12#\n\x04rssi\x18\x03 \x01(\x0b\x32\x10.teslapower.RssiH\x00\x88\x01\x01\x12\x19\n\x0csecurityType\x18\x04 \x01(\x05H\x01\x88\x01\x01\x42\x07\n\x05_rssiB\x0f\n\r_securityType\"\x98\x02\n\x0cSystemUpdate\x12\x17\n\x0fhandshakeResult\x18\x01 \x01(\x05\x12\x14\n\x0cupdateStatus\x18\x02 \x01(\x05\x12=\n\x13serverStagedVersion\x18\x03 \x01(\x0b\x32\x1b.teslapower.FirmwareVersionH\x00\x88\x01\x01\x12\x12\n\ntotalBytes\x18\x04 \x01(\x04\x12\x13\n\x0b\x62ytesOffset\x18\x05 \x01(\x04\x12\x1f\n\x17\x65stimatedBytesPerSecond\x18\x06 \x01(\x04\x12\x1e\n\x16lastHandshakeTimestamp\x18\x07 \x01(\x04\x12\x18\n\x10lastUpdateResult\x18\x08 \x01(\rB\x16\n\x14_serverStagedVersion\"C\n\rErrorResponse\x12\'\n\x06status\x18\x01 \x01(\x0b\x32\x12.teslapower.StatusH\x00\x88\x01\x01\x42\t\n\x07_status\"\x1f\n\x1d\x43ommonAPIGetSystemInfoRequest\"\xff\x01\n\x1e\x43ommonAPIGetSystemInfoResponse\x12(\n\x08\x64\x65viceId\x18\x01 \x01(\x0b\x32\x11.teslapower.EcuIdH\x00\x88\x01\x01\x12\x0b\n\x03\x64in\x18\x02 \x01(\t\x12\x39\n\x0f\x66irmwareVersion\x18\x03 \x01(\x0b\x32\x1b.teslapower.FirmwareVersionH\x01\x88\x01\x01\x12\x33\n\x0csystemUpdate\x18\x05 \x01(\x0b\x32\x18.teslapower.SystemUpdateH\x02\x88\x01\x01\x42\x0b\n\t_deviceIdB\x12\n\x10_firmwareVersionB\x0f\n\r_systemUpdateJ\x04\x08\x04\x10\x05\"$\n\"CommonAPISetLocalSiteConfigRequest\"%\n#CommonAPISetLocalSiteConfigResponse\" \n\x1e\x43ommonAPICheckForUpdateRequest\"!\n\x1f\x43ommonAPICheckForUpdateResponse\"\x1d\n\x1b\x43ommonAPIClearUpdateRequest\"\x1e\n\x1c\x43ommonAPIClearUpdateResponse\"\x1f\n\x1d\x43ommonAPIPerformUpdateRequest\" \n\x1e\x43ommonAPIPerformUpdateResponse\"\x1e\n\x1c\x43ommonAPIFactoryResetRequest\"\x1f\n\x1d\x43ommonAPIFactoryResetResponse\"%\n#CommonAPIGetNetworkingStatusRequest\"\x90\x02\n$CommonAPIGetNetworkingStatusResponse\x12/\n\nwifiConfig\x18\x01 \x01(\x0b\x32\x16.teslapower.WifiConfigH\x00\x88\x01\x01\x12/\n\x04wifi\x18\x02 \x01(\x0b\x32\x1c.teslapower.NetworkInterfaceH\x01\x88\x01\x01\x12.\n\x03\x65th\x18\x03 \x01(\x0b\x32\x1c.teslapower.NetworkInterfaceH\x02\x88\x01\x01\x12.\n\x03gsm\x18\x04 \x01(\x0b\x32\x1c.teslapower.NetworkInterfaceH\x03\x88\x01\x01\x42\r\n\x0b_wifiConfigB\x07\n\x05_wifiB\x06\n\x04_ethB\x06\n\x04_gsm\"k\n\x18\x43ommonAPIWifiScanRequest\x12\x18\n\x10maxScanDurationS\x18\x01 \x01(\r\x12\x1c\n\x14\x64\x65siredSecurityTypes\x18\x02 \x03(\x05\x12\x17\n\x0fmaximumTotalAps\x18\x03 \x01(\r\"J\n\x19\x43ommonAPIWifiScanResponse\x12-\n\x0cwifiNetworks\x18\x01 \x03(\x0b\x32\x17.teslapower.WifiNetwork\"p\n\x1d\x43ommonAPIConfigureWifiRequest\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12/\n\nwifiConfig\x18\x02 \x01(\x0b\x32\x16.teslapower.WifiConfigH\x00\x88\x01\x01\x42\r\n\x0b_wifiConfig\"\x9a\x01\n\x1e\x43ommonAPIConfigureWifiResponse\x12/\n\nwifiConfig\x18\x01 \x01(\x0b\x32\x16.teslapower.WifiConfigH\x00\x88\x01\x01\x12/\n\x04wifi\x18\x02 \x01(\x0b\x32\x1c.teslapower.NetworkInterfaceH\x01\x88\x01\x01\x42\r\n\x0b_wifiConfigB\x07\n\x05_wifi\"\xd9\x01\n2CommonAPIConfigureWifiWithEncryptedPasswordRequest\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12/\n\nwifiConfig\x18\x02 \x01(\x0b\x32\x16.teslapower.WifiConfigH\x00\x88\x01\x01\x12<\n\x11\x65ncryptedPassword\x18\x03 \x01(\x0b\x32\x1c.teslapower.EncryptedMessageH\x01\x88\x01\x01\x42\r\n\x0b_wifiConfigB\x14\n\x12_encryptedPassword\"\xbf\x01\n3CommonAPIConfigureWifiWithEncryptedPasswordResponse\x12/\n\nwifiConfig\x18\x01 \x01(\x0b\x32\x16.teslapower.WifiConfigH\x00\x88\x01\x01\x12/\n\x04wifi\x18\x02 \x01(\x0b\x32\x1c.teslapower.NetworkInterfaceH\x01\x88\x01\x01\x12\x0e\n\x06result\x18\x03 \x01(\x05\x42\r\n\x0b_wifiConfigB\x07\n\x05_wifi\"\x1c\n\x1a\x43ommonAPIDeviceCertRequest\"A\n\x1b\x43ommonAPIDeviceCertResponse\x12\x0e\n\x06\x66ormat\x18\x01 \x01(\x05\x12\x12\n\ndeviceCert\x18\x02 \x01(\x0c\"\x18\n\x08\x41lertLog\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x06\"\x1b\n\x0b\x41lertMatrix\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x06\"\x84\x01\n\x13\x45nergySiteNetDevice\x12!\n\x03\x64in\x18\x01 \x01(\x0b\x32\x0f.teslapower.DinH\x00\x88\x01\x01\x12\x31\n\x0cwifiApConfig\x18\x02 \x01(\x0b\x32\x16.teslapower.WifiConfigH\x01\x88\x01\x01\x42\x06\n\x04_dinB\x0f\n\r_wifiApConfig\"]\n EnergySiteNetRecentlyAddedDevice\x12!\n\x03\x64in\x18\x01 \x01(\x0b\x32\x0f.teslapower.DinH\x00\x88\x01\x01\x12\x0e\n\x06status\x18\x02 \x01(\x05\x42\x06\n\x04_din\"_\n\"EnergySiteNetRecentlyRemovedDevice\x12!\n\x03\x64in\x18\x01 \x01(\x0b\x32\x0f.teslapower.DinH\x00\x88\x01\x01\x12\x0e\n\x06status\x18\x02 \x01(\x05\x42\x06\n\x04_din\"\xd5\x01\n\x13\x45nergySiteNetConfig\x12\x30\n\x07\x64\x65vices\x18\x01 \x03(\x0b\x32\x1f.teslapower.EnergySiteNetDevice\x12\x43\n\rrecentlyAdded\x18\x02 \x03(\x0b\x32,.teslapower.EnergySiteNetRecentlyAddedDevice\x12G\n\x0frecentlyRemoved\x18\x03 \x03(\x0b\x32..teslapower.EnergySiteNetRecentlyRemovedDevice\"S\n EnergySiteNetAPIAddDeviceRequest\x12/\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x1f.teslapower.EnergySiteNetDevice\"h\n!EnergySiteNetAPIAddDeviceResponse\x12\x43\n\rrecentlyAdded\x18\x01 \x01(\x0b\x32,.teslapower.EnergySiteNetRecentlyAddedDevice\"C\n#EnergySiteNetAPIRemoveDeviceRequest\x12\x1c\n\x03\x64in\x18\x01 \x01(\x0b\x32\x0f.teslapower.Din\"o\n$EnergySiteNetAPIRemoveDeviceResponse\x12G\n\x0frecentlyRemoved\x18\x01 \x01(\x0b\x32..teslapower.EnergySiteNetRecentlyRemovedDevice\"\"\n EnergySiteNetAPIGetConfigRequest\"T\n!EnergySiteNetAPIGetConfigResponse\x12/\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x1f.teslapower.EnergySiteNetConfig\"\x88\x01\n\x0b\x44\x65viceVital\x12\x11\n\x04name\x18\x01 \x01(\tH\x01\x88\x01\x01\x12\x12\n\x08intValue\x18\x03 \x01(\x03H\x00\x12\x14\n\nfloatValue\x18\x04 \x01(\x01H\x00\x12\x15\n\x0bstringValue\x18\x05 \x01(\tH\x00\x12\x13\n\tboolValue\x18\x06 \x01(\x08H\x00\x42\x07\n\x05valueB\x07\n\x05_name\"\x1c\n\x0bStringValue\x12\r\n\x05value\x18\x01 \x01(\t\"\x1c\n\x0bUInt32Value\x12\r\n\x05value\x18\x01 \x01(\r\"\x1b\n\nInt32Value\x12\r\n\x05value\x18\x01 \x01(\x05\"\x1c\n\x0bUInt64Value\x12\r\n\x05value\x18\x01 \x01(\x04\"\x1b\n\nFloatValue\x12\r\n\x05value\x18\x01 \x01(\x02\"\xe2\x01\n\x14\x43onnectionParameters\x12/\n\tipAddress\x18\x01 \x01(\x0b\x32\x17.teslapower.StringValueH\x00\x88\x01\x01\x12\x30\n\nserialPort\x18\x02 \x01(\x0b\x32\x17.teslapower.StringValueH\x01\x88\x01\x01\x12\x17\n\nserialBaud\x18\x03 \x01(\x03H\x02\x88\x01\x01\x12\x15\n\x08modbusId\x18\x04 \x01(\rH\x03\x88\x01\x01\x42\x0c\n\n_ipAddressB\r\n\x0b_serialPortB\r\n\x0b_serialBaudB\x0b\n\t_modbusId\"\xc6\x01\n\x0fTeslaHardwareId\x12,\n\x06pcbaId\x18\x01 \x01(\x0b\x32\x17.teslapower.UInt32ValueH\x00\x88\x01\x01\x12\x30\n\nassemblyId\x18\x02 \x01(\x0b\x32\x17.teslapower.UInt32ValueH\x01\x88\x01\x01\x12-\n\x07usageId\x18\x03 \x01(\x0b\x32\x17.teslapower.UInt32ValueH\x02\x88\x01\x01\x42\t\n\x07_pcbaIdB\r\n\x0b_assemblyIdB\n\n\x08_usageId\"\x9d\x02\n\x18TeslaEnergyEcuAttributes\x12\x0f\n\x07\x65\x63uType\x18\x01 \x01(\x05\x12\x34\n\nhardwareId\x18\x02 \x01(\x0b\x32\x1b.teslapower.TeslaHardwareIdH\x00\x88\x01\x01\x12\x43\n\x14pvInverterAttributes\x18\x03 \x01(\x0b\x32 .teslapower.PVInverterAttributesH\x01\x88\x01\x01\x12\x39\n\x0fmeterAttributes\x18\x04 \x01(\x0b\x32\x1b.teslapower.MeterAttributesH\x02\x88\x01\x01\x42\r\n\x0b_hardwareIdB\x17\n\x15_pvInverterAttributesB\x12\n\x10_meterAttributes\"T\n\x13GeneratorAttributes\x12\x1b\n\x13nameplateRealPowerW\x18\x01 \x01(\x04\x12 \n\x18nameplateApparentPowerVa\x18\x02 \x01(\x04\"3\n\x14PVInverterAttributes\x12\x1b\n\x13nameplateRealPowerW\x18\x01 \x01(\x04\"(\n\x0fMeterAttributes\x12\x15\n\rmeterLocation\x18\x01 \x03(\r\"\xaa\x02\n\x10\x44\x65viceAttributes\x12H\n\x18teslaEnergyEcuAttributes\x18\x01 \x01(\x0b\x32$.teslapower.TeslaEnergyEcuAttributesH\x00\x12>\n\x13generatorAttributes\x18\x02 \x01(\x0b\x32\x1f.teslapower.GeneratorAttributesH\x00\x12@\n\x14pvInverterAttributes\x18\x03 \x01(\x0b\x32 .teslapower.PVInverterAttributesH\x00\x12\x36\n\x0fmeterAttributes\x18\x04 \x01(\x0b\x32\x1b.teslapower.MeterAttributesH\x00\x42\x12\n\x10\x64\x65viceAttributes\"\xc7\x06\n\x06\x44\x65vice\x12)\n\x03\x64in\x18\x01 \x01(\x0b\x32\x17.teslapower.StringValueH\x00\x88\x01\x01\x12\x30\n\npartNumber\x18\x02 \x01(\x0b\x32\x17.teslapower.StringValueH\x01\x88\x01\x01\x12\x32\n\x0cserialNumber\x18\x03 \x01(\x0b\x32\x17.teslapower.StringValueH\x02\x88\x01\x01\x12\x32\n\x0cmanufacturer\x18\x04 \x01(\x0b\x32\x17.teslapower.StringValueH\x03\x88\x01\x01\x12/\n\tsiteLabel\x18\x05 \x01(\x0b\x32\x17.teslapower.StringValueH\x04\x88\x01\x01\x12\x38\n\x12\x63omponentParentDin\x18\x06 \x01(\x0b\x32\x17.teslapower.StringValueH\x05\x88\x01\x01\x12\x35\n\x0f\x66irmwareVersion\x18\x07 \x01(\x0b\x32\x17.teslapower.StringValueH\x06\x88\x01\x01\x12?\n\x16\x66irstCommunicationTime\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x07\x88\x01\x01\x12>\n\x15lastCommunicationTime\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x08\x88\x01\x01\x12\x43\n\x14\x63onnectionParameters\x18\n \x01(\x0b\x32 .teslapower.ConnectionParametersH\t\x88\x01\x01\x12;\n\x10\x64\x65viceAttributes\x18\x0b \x01(\x0b\x32\x1c.teslapower.DeviceAttributesH\n\x88\x01\x01\x42\x06\n\x04_dinB\r\n\x0b_partNumberB\x0f\n\r_serialNumberB\x0f\n\r_manufacturerB\x0c\n\n_siteLabelB\x15\n\x13_componentParentDinB\x12\n\x10_firmwareVersionB\x19\n\x17_firstCommunicationTimeB\x18\n\x16_lastCommunicationTimeB\x17\n\x15_connectionParametersB\x13\n\x11_deviceAttributes\"S\n\x1dSiteControllerConnectedDevice\x12\'\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x12.teslapower.DeviceH\x00\x88\x01\x01\x42\t\n\x07_device\"\x9d\x01\n\'SiteControllerConnectedDeviceWithVitals\x12\x39\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32).teslapower.SiteControllerConnectedDevice\x12\'\n\x06vitals\x18\x02 \x03(\x0b\x32\x17.teslapower.DeviceVital\x12\x0e\n\x06\x61lerts\x18\x03 \x03(\t\"Y\n\x11\x44\x65vicesWithVitals\x12\x44\n\x07\x64\x65vices\x18\x01 \x03(\x0b\x32\x33.teslapower.SiteControllerConnectedDeviceWithVitals\"v\n\"SiteControllerConnectedDeviceStore\x12P\n\x1dsiteControllerConnectedDevice\x18\x01 \x03(\x0b\x32).teslapower.SiteControllerConnectedDevice\"K\n\x19\x42\x61tterySystemCapabilities\x12\x17\n\x0fnominalEnergyWh\x18\x01 \x01(\x04\x12\x15\n\rnominalPowerW\x18\x02 \x01(\x04\"N\n\x06Status\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x05\x12\x0f\n\x07message\x18\x02 \x01(\t\x12%\n\x07\x64\x65tails\x18\x03 \x03(\x0b\x32\x14.google.protobuf.Any\"\xcc\x02\n\x08Manifest\x12\x12\n\ngatewayDin\x18\x01 \x01(\t\x12\x0f\n\x07trigger\x18\x02 \x01(\x05\x12\x31\n\rgeneratedTime\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x06\x64\x65vice\x18\x04 \x03(\x0b\x32\x12.teslapower.Device\x12M\n\x19\x62\x61tterySystemCapabilities\x18\x05 \x01(\x0b\x32%.teslapower.BatterySystemCapabilitiesH\x00\x88\x01\x01\x12<\n\x16gatewayFirmwareVersion\x18\x06 \x01(\x0b\x32\x17.teslapower.StringValueH\x01\x88\x01\x01\x42\x1c\n\x1a_batterySystemCapabilitiesB\x19\n\x17_gatewayFirmwareVersion\"\x9c\x02\n\x0fMessageEnvelope\x12\x17\n\x0f\x64\x65liveryChannel\x18\x01 \x01(\x05\x12\'\n\x06sender\x18\x02 \x01(\x0b\x32\x17.teslapower.Participant\x12*\n\trecipient\x18\x03 \x01(\x0b\x32\x17.teslapower.Participant\x12,\n\x06\x63ommon\x18\x04 \x01(\x0b\x32\x1a.teslapower.CommonMessagesH\x00\x12&\n\x03teg\x18\x05 \x01(\x0b\x32\x17.teslapower.TEGMessagesH\x00\x12:\n\renergysitenet\x18\x06 \x01(\x0b\x32!.teslapower.EnergySiteNetMessagesH\x00\x42\t\n\x07payload\"\x92\x0e\n\x0e\x43ommonMessages\x12\x15\n\rerrorResponse\x18\x01 \x01(\x05\x12I\n\x14getSystemInfoRequest\x18\x02 \x01(\x0b\x32).teslapower.CommonAPIGetSystemInfoRequestH\x00\x12K\n\x15getSystemInfoResponse\x18\x03 \x01(\x0b\x32*.teslapower.CommonAPIGetSystemInfoResponseH\x00\x12S\n\x19setLocalSiteConfigRequest\x18\x04 \x01(\x0b\x32..teslapower.CommonAPISetLocalSiteConfigRequestH\x00\x12U\n\x1asetLocalSiteConfigResponse\x18\x05 \x01(\x0b\x32/.teslapower.CommonAPISetLocalSiteConfigResponseH\x00\x12I\n\x14performUpdateRequest\x18\x06 \x01(\x0b\x32).teslapower.CommonAPIPerformUpdateRequestH\x00\x12K\n\x15performUpdateResponse\x18\x07 \x01(\x0b\x32*.teslapower.CommonAPIPerformUpdateResponseH\x00\x12G\n\x13\x66\x61\x63toryResetRequest\x18\x08 \x01(\x0b\x32(.teslapower.CommonAPIFactoryResetRequestH\x00\x12I\n\x14\x66\x61\x63toryResetResponse\x18\t \x01(\x0b\x32).teslapower.CommonAPIFactoryResetResponseH\x00\x12?\n\x0fwifiScanRequest\x18\n \x01(\x0b\x32$.teslapower.CommonAPIWifiScanRequestH\x00\x12\x41\n\x10wifiScanResponse\x18\x0b \x01(\x0b\x32%.teslapower.CommonAPIWifiScanResponseH\x00\x12I\n\x14\x63onfigureWifiRequest\x18\x0c \x01(\x0b\x32).teslapower.CommonAPIConfigureWifiRequestH\x00\x12K\n\x15\x63onfigureWifiResponse\x18\r \x01(\x0b\x32*.teslapower.CommonAPIConfigureWifiResponseH\x00\x12K\n\x15\x63heckForUpdateRequest\x18\x0e \x01(\x0b\x32*.teslapower.CommonAPICheckForUpdateRequestH\x00\x12M\n\x16\x63heckForUpdateResponse\x18\x0f \x01(\x0b\x32+.teslapower.CommonAPICheckForUpdateResponseH\x00\x12\x45\n\x12\x63learUpdateRequest\x18\x10 \x01(\x0b\x32\'.teslapower.CommonAPIClearUpdateRequestH\x00\x12G\n\x13\x63learUpdateResponse\x18\x11 \x01(\x0b\x32(.teslapower.CommonAPIClearUpdateResponseH\x00\x12\x43\n\x11\x64\x65viceCertRequest\x18\x12 \x01(\x0b\x32&.teslapower.CommonAPIDeviceCertRequestH\x00\x12\x45\n\x12\x64\x65viceCertResponse\x18\x13 \x01(\x0b\x32\'.teslapower.CommonAPIDeviceCertResponseH\x00\x12s\n)configureWifiWithEncryptedPasswordRequest\x18\x14 \x01(\x0b\x32>.teslapower.CommonAPIConfigureWifiWithEncryptedPasswordRequestH\x00\x12u\n*configureWifiWithEncryptedPasswordResponse\x18\x15 \x01(\x0b\x32?.teslapower.CommonAPIConfigureWifiWithEncryptedPasswordResponseH\x00\x12U\n\x1agetNetworkingStatusRequest\x18\x16 \x01(\x0b\x32/.teslapower.CommonAPIGetNetworkingStatusRequestH\x00\x12W\n\x1bgetNetworkingStatusResponse\x18\x17 \x01(\x0b\x32\x30.teslapower.CommonAPIGetNetworkingStatusResponseH\x00\x42\t\n\x07message\"\xb8\x05\n\x0bTEGMessages\x12>\n\x10getConfigRequest\x18\x01 \x01(\x0b\x32\".teslapower.TEGAPIGetConfigRequestH\x00\x12@\n\x11getConfigResponse\x18\x02 \x01(\x0b\x32#.teslapower.TEGAPIGetConfigResponseH\x00\x12\x46\n\x14setIslandModeRequest\x18\x03 \x01(\x0b\x32&.teslapower.TEGAPISetIslandModeRequestH\x00\x12H\n\x15setIslandModeResponse\x18\x04 \x01(\x0b\x32\'.teslapower.TEGAPISetIslandModeResponseH\x00\x12`\n!triggerIslandingBlackStartRequest\x18\x05 \x01(\x0b\x32\x33.teslapower.TEGAPITriggerIslandingBlackStartRequestH\x00\x12\x62\n\"triggerIslandingBlackStartResponse\x18\x06 \x01(\x0b\x32\x34.teslapower.TEGAPITriggerIslandingBlackStartResponseH\x00\x12`\n!triggerAssetManifestUploadRequest\x18\x07 \x01(\x0b\x32\x33.teslapower.TEGAPITriggerAssetManifestUploadRequestH\x00\x12\x62\n\"triggerAssetManifestUploadResponse\x18\x08 \x01(\x0b\x32\x34.teslapower.TEGAPITriggerAssetManifestUploadResponseH\x00\x42\t\n\x07message\"\r\n\x0bTEGSettings\"\x18\n\x16TEGAPIGetConfigRequest\"\xc0\x02\n\x17TEGAPIGetConfigResponse\x12.\n\x08settings\x18\x01 \x01(\x0b\x32\x17.teslapower.TEGSettingsH\x00\x88\x01\x01\x12/\n\nwifiConfig\x18\x02 \x01(\x0b\x32\x16.teslapower.WifiConfigH\x01\x88\x01\x01\x12/\n\x04wifi\x18\x03 \x01(\x0b\x32\x1c.teslapower.NetworkInterfaceH\x02\x88\x01\x01\x12.\n\x03\x65th\x18\x04 \x01(\x0b\x32\x1c.teslapower.NetworkInterfaceH\x03\x88\x01\x01\x12.\n\x03gsm\x18\x05 \x01(\x0b\x32\x1c.teslapower.NetworkInterfaceH\x04\x88\x01\x01\x42\x0b\n\t_settingsB\r\n\x0b_wifiConfigB\x07\n\x05_wifiB\x06\n\x04_ethB\x06\n\x04_gsm\")\n\'TEGAPITriggerIslandingBlackStartRequest\"*\n(TEGAPITriggerIslandingBlackStartResponse\"9\n\x1aTEGAPISetIslandModeRequest\x12\x0c\n\x04mode\x18\x01 \x01(\x05\x12\r\n\x05\x66orce\x18\x02 \x01(\x08\"-\n\x1bTEGAPISetIslandModeResponse\x12\x0e\n\x06result\x18\x01 \x01(\x05\")\n\'TEGAPITriggerAssetManifestUploadRequest\"*\n(TEGAPITriggerAssetManifestUploadResponse\"\xf0\x03\n\x15\x45nergySiteNetMessages\x12H\n\x10\x61\x64\x64\x44\x65viceRequest\x18\x01 \x01(\x0b\x32,.teslapower.EnergySiteNetAPIAddDeviceRequestH\x00\x12J\n\x11\x61\x64\x64\x44\x65viceResponse\x18\x02 \x01(\x0b\x32-.teslapower.EnergySiteNetAPIAddDeviceResponseH\x00\x12N\n\x13removeDeviceRequest\x18\x03 \x01(\x0b\x32/.teslapower.EnergySiteNetAPIRemoveDeviceRequestH\x00\x12P\n\x14removeDeviceResponse\x18\x04 \x01(\x0b\x32\x30.teslapower.EnergySiteNetAPIRemoveDeviceResponseH\x00\x12H\n\x10getConfigRequest\x18\x05 \x01(\x0b\x32,.teslapower.EnergySiteNetAPIGetConfigRequestH\x00\x12J\n\x11getConfigResponse\x18\x06 \x01(\x0b\x32-.teslapower.EnergySiteNetAPIGetConfigResponseH\x00\x42\t\n\x07message\"$\n\"LocalAuthAPIRequiredFactorsRequest\"I\n#LocalAuthAPIRequiredFactorsResponse\x12\x10\n\x08password\x18\x01 \x01(\x08\x12\x10\n\x08presence\x18\x02 \x01(\x08\"j\n\x18LocalAuthAPILoginRequest\x12\x13\n\x0bParticipant\x18\x01 \x01(\x05\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12*\n\x08password\x18\x03 \x01(\x0b\x32\x18.teslapower.WifiPassword\"+\n\x19LocalAuthAPILoginResponse\x12\x0e\n\x06result\x18\x01 \x01(\x05\"\x1b\n\x19LocalAuthAPILogoutRequest\"\x1c\n\x1aLocalAuthAPILogoutResponse\"$\n\"LocalAuthAPICheckAuthStatusRequest\"5\n#LocalAuthAPICheckAuthStatusResponse\x12\x0e\n\x06result\x18\x01 \x01(\x05*\x97\x01\n\x10\x45xternalAuthType\x12\x1e\n\x1a\x45XTERNAL_AUTH_TYPE_INVALID\x10\x00\x12\x1f\n\x1b\x45XTERNAL_AUTH_TYPE_PRESENCE\x10\x01\x12\x1b\n\x17\x45XTERNAL_AUTH_TYPE_MTLS\x10\x02\x12%\n!EXTERNAL_AUTH_TYPE_HERMES_COMMAND\x10\x04*\x90\x01\n\x0f\x44\x65liveryChannel\x12\x1c\n\x18\x44\x45LIVERY_CHANNEL_INVALID\x10\x00\x12 \n\x1c\x44\x45LIVERY_CHANNEL_LOCAL_HTTPS\x10\x01\x12#\n\x1f\x44\x45LIVERY_CHANNEL_HERMES_COMMAND\x10\x02\x12\x18\n\x14\x44\x45LIVERY_CHANNEL_BLE\x10\x03*D\n\x0cTeslaService\x12\x19\n\x15TESLA_SERVICE_INVALID\x10\x00\x12\x19\n\x15TESLA_SERVICE_COMMAND\x10\x01\x62\x06proto3') _EXTERNALAUTHTYPE = DESCRIPTOR.enum_types_by_name['ExternalAuthType'] ExternalAuthType = enum_type_wrapper.EnumTypeWrapper(_EXTERNALAUTHTYPE) _DELIVERYCHANNEL = DESCRIPTOR.enum_types_by_name['DeliveryChannel'] DeliveryChannel = enum_type_wrapper.EnumTypeWrapper(_DELIVERYCHANNEL) _TESLASERVICE = DESCRIPTOR.enum_types_by_name['TeslaService'] TeslaService = enum_type_wrapper.EnumTypeWrapper(_TESLASERVICE) EXTERNAL_AUTH_TYPE_INVALID = 0 EXTERNAL_AUTH_TYPE_PRESENCE = 1 EXTERNAL_AUTH_TYPE_MTLS = 2 EXTERNAL_AUTH_TYPE_HERMES_COMMAND = 4 DELIVERY_CHANNEL_INVALID = 0 DELIVERY_CHANNEL_LOCAL_HTTPS = 1 DELIVERY_CHANNEL_HERMES_COMMAND = 2 DELIVERY_CHANNEL_BLE = 3 TESLA_SERVICE_INVALID = 0 TESLA_SERVICE_COMMAND = 1 _EXTERNALAUTH = DESCRIPTOR.message_types_by_name['ExternalAuth'] _PARTICIPANT = DESCRIPTOR.message_types_by_name['Participant'] _ECUID = DESCRIPTOR.message_types_by_name['EcuId'] _DIN = DESCRIPTOR.message_types_by_name['Din'] _FIRMWAREVERSION = DESCRIPTOR.message_types_by_name['FirmwareVersion'] _ACCUMULATEDENERGY = DESCRIPTOR.message_types_by_name['AccumulatedEnergy'] _INSTACMEASUREMENT = DESCRIPTOR.message_types_by_name['InstACMeasurement'] _INSTDCMEASUREMENT = DESCRIPTOR.message_types_by_name['InstDCMeasurement'] _GRIDCOMPLIANCESTATUS = DESCRIPTOR.message_types_by_name['GridComplianceStatus'] _NETWORKINTERFACEIPV4CONFIG = DESCRIPTOR.message_types_by_name['NetworkInterfaceIPv4Config'] _RSSI = DESCRIPTOR.message_types_by_name['Rssi'] _NETWORKCONNECTIVITYSTATUS = DESCRIPTOR.message_types_by_name['NetworkConnectivityStatus'] _NETWORKINTERFACE = DESCRIPTOR.message_types_by_name['NetworkInterface'] _WIFIPASSWORD = DESCRIPTOR.message_types_by_name['WifiPassword'] _ENCRYPTEDMESSAGE = DESCRIPTOR.message_types_by_name['EncryptedMessage'] _WIFICONFIG = DESCRIPTOR.message_types_by_name['WifiConfig'] _WIFINETWORK = DESCRIPTOR.message_types_by_name['WifiNetwork'] _SYSTEMUPDATE = DESCRIPTOR.message_types_by_name['SystemUpdate'] _ERRORRESPONSE = DESCRIPTOR.message_types_by_name['ErrorResponse'] _COMMONAPIGETSYSTEMINFOREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIGetSystemInfoRequest'] _COMMONAPIGETSYSTEMINFORESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIGetSystemInfoResponse'] _COMMONAPISETLOCALSITECONFIGREQUEST = DESCRIPTOR.message_types_by_name['CommonAPISetLocalSiteConfigRequest'] _COMMONAPISETLOCALSITECONFIGRESPONSE = DESCRIPTOR.message_types_by_name['CommonAPISetLocalSiteConfigResponse'] _COMMONAPICHECKFORUPDATEREQUEST = DESCRIPTOR.message_types_by_name['CommonAPICheckForUpdateRequest'] _COMMONAPICHECKFORUPDATERESPONSE = DESCRIPTOR.message_types_by_name['CommonAPICheckForUpdateResponse'] _COMMONAPICLEARUPDATEREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIClearUpdateRequest'] _COMMONAPICLEARUPDATERESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIClearUpdateResponse'] _COMMONAPIPERFORMUPDATEREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIPerformUpdateRequest'] _COMMONAPIPERFORMUPDATERESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIPerformUpdateResponse'] _COMMONAPIFACTORYRESETREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIFactoryResetRequest'] _COMMONAPIFACTORYRESETRESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIFactoryResetResponse'] _COMMONAPIGETNETWORKINGSTATUSREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIGetNetworkingStatusRequest'] _COMMONAPIGETNETWORKINGSTATUSRESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIGetNetworkingStatusResponse'] _COMMONAPIWIFISCANREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIWifiScanRequest'] _COMMONAPIWIFISCANRESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIWifiScanResponse'] _COMMONAPICONFIGUREWIFIREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIConfigureWifiRequest'] _COMMONAPICONFIGUREWIFIRESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIConfigureWifiResponse'] _COMMONAPICONFIGUREWIFIWITHENCRYPTEDPASSWORDREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIConfigureWifiWithEncryptedPasswordRequest'] _COMMONAPICONFIGUREWIFIWITHENCRYPTEDPASSWORDRESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIConfigureWifiWithEncryptedPasswordResponse'] _COMMONAPIDEVICECERTREQUEST = DESCRIPTOR.message_types_by_name['CommonAPIDeviceCertRequest'] _COMMONAPIDEVICECERTRESPONSE = DESCRIPTOR.message_types_by_name['CommonAPIDeviceCertResponse'] _ALERTLOG = DESCRIPTOR.message_types_by_name['AlertLog'] _ALERTMATRIX = DESCRIPTOR.message_types_by_name['AlertMatrix'] _ENERGYSITENETDEVICE = DESCRIPTOR.message_types_by_name['EnergySiteNetDevice'] _ENERGYSITENETRECENTLYADDEDDEVICE = DESCRIPTOR.message_types_by_name['EnergySiteNetRecentlyAddedDevice'] _ENERGYSITENETRECENTLYREMOVEDDEVICE = DESCRIPTOR.message_types_by_name['EnergySiteNetRecentlyRemovedDevice'] _ENERGYSITENETCONFIG = DESCRIPTOR.message_types_by_name['EnergySiteNetConfig'] _ENERGYSITENETAPIADDDEVICEREQUEST = DESCRIPTOR.message_types_by_name['EnergySiteNetAPIAddDeviceRequest'] _ENERGYSITENETAPIADDDEVICERESPONSE = DESCRIPTOR.message_types_by_name['EnergySiteNetAPIAddDeviceResponse'] _ENERGYSITENETAPIREMOVEDEVICEREQUEST = DESCRIPTOR.message_types_by_name['EnergySiteNetAPIRemoveDeviceRequest'] _ENERGYSITENETAPIREMOVEDEVICERESPONSE = DESCRIPTOR.message_types_by_name['EnergySiteNetAPIRemoveDeviceResponse'] _ENERGYSITENETAPIGETCONFIGREQUEST = DESCRIPTOR.message_types_by_name['EnergySiteNetAPIGetConfigRequest'] _ENERGYSITENETAPIGETCONFIGRESPONSE = DESCRIPTOR.message_types_by_name['EnergySiteNetAPIGetConfigResponse'] _DEVICEVITAL = DESCRIPTOR.message_types_by_name['DeviceVital'] _STRINGVALUE = DESCRIPTOR.message_types_by_name['StringValue'] _UINT32VALUE = DESCRIPTOR.message_types_by_name['UInt32Value'] _INT32VALUE = DESCRIPTOR.message_types_by_name['Int32Value'] _UINT64VALUE = DESCRIPTOR.message_types_by_name['UInt64Value'] _FLOATVALUE = DESCRIPTOR.message_types_by_name['FloatValue'] _CONNECTIONPARAMETERS = DESCRIPTOR.message_types_by_name['ConnectionParameters'] _TESLAHARDWAREID = DESCRIPTOR.message_types_by_name['TeslaHardwareId'] _TESLAENERGYECUATTRIBUTES = DESCRIPTOR.message_types_by_name['TeslaEnergyEcuAttributes'] _GENERATORATTRIBUTES = DESCRIPTOR.message_types_by_name['GeneratorAttributes'] _PVINVERTERATTRIBUTES = DESCRIPTOR.message_types_by_name['PVInverterAttributes'] _METERATTRIBUTES = DESCRIPTOR.message_types_by_name['MeterAttributes'] _DEVICEATTRIBUTES = DESCRIPTOR.message_types_by_name['DeviceAttributes'] _DEVICE = DESCRIPTOR.message_types_by_name['Device'] _SITECONTROLLERCONNECTEDDEVICE = DESCRIPTOR.message_types_by_name['SiteControllerConnectedDevice'] _SITECONTROLLERCONNECTEDDEVICEWITHVITALS = DESCRIPTOR.message_types_by_name['SiteControllerConnectedDeviceWithVitals'] _DEVICESWITHVITALS = DESCRIPTOR.message_types_by_name['DevicesWithVitals'] _SITECONTROLLERCONNECTEDDEVICESTORE = DESCRIPTOR.message_types_by_name['SiteControllerConnectedDeviceStore'] _BATTERYSYSTEMCAPABILITIES = DESCRIPTOR.message_types_by_name['BatterySystemCapabilities'] _STATUS = DESCRIPTOR.message_types_by_name['Status'] _MANIFEST = DESCRIPTOR.message_types_by_name['Manifest'] _MESSAGEENVELOPE = DESCRIPTOR.message_types_by_name['MessageEnvelope'] _COMMONMESSAGES = DESCRIPTOR.message_types_by_name['CommonMessages'] _TEGMESSAGES = DESCRIPTOR.message_types_by_name['TEGMessages'] _TEGSETTINGS = DESCRIPTOR.message_types_by_name['TEGSettings'] _TEGAPIGETCONFIGREQUEST = DESCRIPTOR.message_types_by_name['TEGAPIGetConfigRequest'] _TEGAPIGETCONFIGRESPONSE = DESCRIPTOR.message_types_by_name['TEGAPIGetConfigResponse'] _TEGAPITRIGGERISLANDINGBLACKSTARTREQUEST = DESCRIPTOR.message_types_by_name['TEGAPITriggerIslandingBlackStartRequest'] _TEGAPITRIGGERISLANDINGBLACKSTARTRESPONSE = DESCRIPTOR.message_types_by_name['TEGAPITriggerIslandingBlackStartResponse'] _TEGAPISETISLANDMODEREQUEST = DESCRIPTOR.message_types_by_name['TEGAPISetIslandModeRequest'] _TEGAPISETISLANDMODERESPONSE = DESCRIPTOR.message_types_by_name['TEGAPISetIslandModeResponse'] _TEGAPITRIGGERASSETMANIFESTUPLOADREQUEST = DESCRIPTOR.message_types_by_name['TEGAPITriggerAssetManifestUploadRequest'] _TEGAPITRIGGERASSETMANIFESTUPLOADRESPONSE = DESCRIPTOR.message_types_by_name['TEGAPITriggerAssetManifestUploadResponse'] _ENERGYSITENETMESSAGES = DESCRIPTOR.message_types_by_name['EnergySiteNetMessages'] _LOCALAUTHAPIREQUIREDFACTORSREQUEST = DESCRIPTOR.message_types_by_name['LocalAuthAPIRequiredFactorsRequest'] _LOCALAUTHAPIREQUIREDFACTORSRESPONSE = DESCRIPTOR.message_types_by_name['LocalAuthAPIRequiredFactorsResponse'] _LOCALAUTHAPILOGINREQUEST = DESCRIPTOR.message_types_by_name['LocalAuthAPILoginRequest'] _LOCALAUTHAPILOGINRESPONSE = DESCRIPTOR.message_types_by_name['LocalAuthAPILoginResponse'] _LOCALAUTHAPILOGOUTREQUEST = DESCRIPTOR.message_types_by_name['LocalAuthAPILogoutRequest'] _LOCALAUTHAPILOGOUTRESPONSE = DESCRIPTOR.message_types_by_name['LocalAuthAPILogoutResponse'] _LOCALAUTHAPICHECKAUTHSTATUSREQUEST = DESCRIPTOR.message_types_by_name['LocalAuthAPICheckAuthStatusRequest'] _LOCALAUTHAPICHECKAUTHSTATUSRESPONSE = DESCRIPTOR.message_types_by_name['LocalAuthAPICheckAuthStatusResponse'] ExternalAuth = _reflection.GeneratedProtocolMessageType('ExternalAuth', (_message.Message,), { 'DESCRIPTOR' : _EXTERNALAUTH, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.ExternalAuth) }) _sym_db.RegisterMessage(ExternalAuth) Participant = _reflection.GeneratedProtocolMessageType('Participant', (_message.Message,), { 'DESCRIPTOR' : _PARTICIPANT, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.Participant) }) _sym_db.RegisterMessage(Participant) EcuId = _reflection.GeneratedProtocolMessageType('EcuId', (_message.Message,), { 'DESCRIPTOR' : _ECUID, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EcuId) }) _sym_db.RegisterMessage(EcuId) Din = _reflection.GeneratedProtocolMessageType('Din', (_message.Message,), { 'DESCRIPTOR' : _DIN, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.Din) }) _sym_db.RegisterMessage(Din) FirmwareVersion = _reflection.GeneratedProtocolMessageType('FirmwareVersion', (_message.Message,), { 'DESCRIPTOR' : _FIRMWAREVERSION, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.FirmwareVersion) }) _sym_db.RegisterMessage(FirmwareVersion) AccumulatedEnergy = _reflection.GeneratedProtocolMessageType('AccumulatedEnergy', (_message.Message,), { 'DESCRIPTOR' : _ACCUMULATEDENERGY, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.AccumulatedEnergy) }) _sym_db.RegisterMessage(AccumulatedEnergy) InstACMeasurement = _reflection.GeneratedProtocolMessageType('InstACMeasurement', (_message.Message,), { 'DESCRIPTOR' : _INSTACMEASUREMENT, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.InstACMeasurement) }) _sym_db.RegisterMessage(InstACMeasurement) InstDCMeasurement = _reflection.GeneratedProtocolMessageType('InstDCMeasurement', (_message.Message,), { 'DESCRIPTOR' : _INSTDCMEASUREMENT, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.InstDCMeasurement) }) _sym_db.RegisterMessage(InstDCMeasurement) GridComplianceStatus = _reflection.GeneratedProtocolMessageType('GridComplianceStatus', (_message.Message,), { 'DESCRIPTOR' : _GRIDCOMPLIANCESTATUS, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.GridComplianceStatus) }) _sym_db.RegisterMessage(GridComplianceStatus) NetworkInterfaceIPv4Config = _reflection.GeneratedProtocolMessageType('NetworkInterfaceIPv4Config', (_message.Message,), { 'DESCRIPTOR' : _NETWORKINTERFACEIPV4CONFIG, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.NetworkInterfaceIPv4Config) }) _sym_db.RegisterMessage(NetworkInterfaceIPv4Config) Rssi = _reflection.GeneratedProtocolMessageType('Rssi', (_message.Message,), { 'DESCRIPTOR' : _RSSI, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.Rssi) }) _sym_db.RegisterMessage(Rssi) NetworkConnectivityStatus = _reflection.GeneratedProtocolMessageType('NetworkConnectivityStatus', (_message.Message,), { 'DESCRIPTOR' : _NETWORKCONNECTIVITYSTATUS, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.NetworkConnectivityStatus) }) _sym_db.RegisterMessage(NetworkConnectivityStatus) NetworkInterface = _reflection.GeneratedProtocolMessageType('NetworkInterface', (_message.Message,), { 'DESCRIPTOR' : _NETWORKINTERFACE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.NetworkInterface) }) _sym_db.RegisterMessage(NetworkInterface) WifiPassword = _reflection.GeneratedProtocolMessageType('WifiPassword', (_message.Message,), { 'DESCRIPTOR' : _WIFIPASSWORD, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.WifiPassword) }) _sym_db.RegisterMessage(WifiPassword) EncryptedMessage = _reflection.GeneratedProtocolMessageType('EncryptedMessage', (_message.Message,), { 'DESCRIPTOR' : _ENCRYPTEDMESSAGE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EncryptedMessage) }) _sym_db.RegisterMessage(EncryptedMessage) WifiConfig = _reflection.GeneratedProtocolMessageType('WifiConfig', (_message.Message,), { 'DESCRIPTOR' : _WIFICONFIG, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.WifiConfig) }) _sym_db.RegisterMessage(WifiConfig) WifiNetwork = _reflection.GeneratedProtocolMessageType('WifiNetwork', (_message.Message,), { 'DESCRIPTOR' : _WIFINETWORK, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.WifiNetwork) }) _sym_db.RegisterMessage(WifiNetwork) SystemUpdate = _reflection.GeneratedProtocolMessageType('SystemUpdate', (_message.Message,), { 'DESCRIPTOR' : _SYSTEMUPDATE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.SystemUpdate) }) _sym_db.RegisterMessage(SystemUpdate) ErrorResponse = _reflection.GeneratedProtocolMessageType('ErrorResponse', (_message.Message,), { 'DESCRIPTOR' : _ERRORRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.ErrorResponse) }) _sym_db.RegisterMessage(ErrorResponse) CommonAPIGetSystemInfoRequest = _reflection.GeneratedProtocolMessageType('CommonAPIGetSystemInfoRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIGETSYSTEMINFOREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIGetSystemInfoRequest) }) _sym_db.RegisterMessage(CommonAPIGetSystemInfoRequest) CommonAPIGetSystemInfoResponse = _reflection.GeneratedProtocolMessageType('CommonAPIGetSystemInfoResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIGETSYSTEMINFORESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIGetSystemInfoResponse) }) _sym_db.RegisterMessage(CommonAPIGetSystemInfoResponse) CommonAPISetLocalSiteConfigRequest = _reflection.GeneratedProtocolMessageType('CommonAPISetLocalSiteConfigRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPISETLOCALSITECONFIGREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPISetLocalSiteConfigRequest) }) _sym_db.RegisterMessage(CommonAPISetLocalSiteConfigRequest) CommonAPISetLocalSiteConfigResponse = _reflection.GeneratedProtocolMessageType('CommonAPISetLocalSiteConfigResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPISETLOCALSITECONFIGRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPISetLocalSiteConfigResponse) }) _sym_db.RegisterMessage(CommonAPISetLocalSiteConfigResponse) CommonAPICheckForUpdateRequest = _reflection.GeneratedProtocolMessageType('CommonAPICheckForUpdateRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPICHECKFORUPDATEREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPICheckForUpdateRequest) }) _sym_db.RegisterMessage(CommonAPICheckForUpdateRequest) CommonAPICheckForUpdateResponse = _reflection.GeneratedProtocolMessageType('CommonAPICheckForUpdateResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPICHECKFORUPDATERESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPICheckForUpdateResponse) }) _sym_db.RegisterMessage(CommonAPICheckForUpdateResponse) CommonAPIClearUpdateRequest = _reflection.GeneratedProtocolMessageType('CommonAPIClearUpdateRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPICLEARUPDATEREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIClearUpdateRequest) }) _sym_db.RegisterMessage(CommonAPIClearUpdateRequest) CommonAPIClearUpdateResponse = _reflection.GeneratedProtocolMessageType('CommonAPIClearUpdateResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPICLEARUPDATERESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIClearUpdateResponse) }) _sym_db.RegisterMessage(CommonAPIClearUpdateResponse) CommonAPIPerformUpdateRequest = _reflection.GeneratedProtocolMessageType('CommonAPIPerformUpdateRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIPERFORMUPDATEREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIPerformUpdateRequest) }) _sym_db.RegisterMessage(CommonAPIPerformUpdateRequest) CommonAPIPerformUpdateResponse = _reflection.GeneratedProtocolMessageType('CommonAPIPerformUpdateResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIPERFORMUPDATERESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIPerformUpdateResponse) }) _sym_db.RegisterMessage(CommonAPIPerformUpdateResponse) CommonAPIFactoryResetRequest = _reflection.GeneratedProtocolMessageType('CommonAPIFactoryResetRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIFACTORYRESETREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIFactoryResetRequest) }) _sym_db.RegisterMessage(CommonAPIFactoryResetRequest) CommonAPIFactoryResetResponse = _reflection.GeneratedProtocolMessageType('CommonAPIFactoryResetResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIFACTORYRESETRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIFactoryResetResponse) }) _sym_db.RegisterMessage(CommonAPIFactoryResetResponse) CommonAPIGetNetworkingStatusRequest = _reflection.GeneratedProtocolMessageType('CommonAPIGetNetworkingStatusRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIGETNETWORKINGSTATUSREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIGetNetworkingStatusRequest) }) _sym_db.RegisterMessage(CommonAPIGetNetworkingStatusRequest) CommonAPIGetNetworkingStatusResponse = _reflection.GeneratedProtocolMessageType('CommonAPIGetNetworkingStatusResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIGETNETWORKINGSTATUSRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIGetNetworkingStatusResponse) }) _sym_db.RegisterMessage(CommonAPIGetNetworkingStatusResponse) CommonAPIWifiScanRequest = _reflection.GeneratedProtocolMessageType('CommonAPIWifiScanRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIWIFISCANREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIWifiScanRequest) }) _sym_db.RegisterMessage(CommonAPIWifiScanRequest) CommonAPIWifiScanResponse = _reflection.GeneratedProtocolMessageType('CommonAPIWifiScanResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIWIFISCANRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIWifiScanResponse) }) _sym_db.RegisterMessage(CommonAPIWifiScanResponse) CommonAPIConfigureWifiRequest = _reflection.GeneratedProtocolMessageType('CommonAPIConfigureWifiRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPICONFIGUREWIFIREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIConfigureWifiRequest) }) _sym_db.RegisterMessage(CommonAPIConfigureWifiRequest) CommonAPIConfigureWifiResponse = _reflection.GeneratedProtocolMessageType('CommonAPIConfigureWifiResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPICONFIGUREWIFIRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIConfigureWifiResponse) }) _sym_db.RegisterMessage(CommonAPIConfigureWifiResponse) CommonAPIConfigureWifiWithEncryptedPasswordRequest = _reflection.GeneratedProtocolMessageType('CommonAPIConfigureWifiWithEncryptedPasswordRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPICONFIGUREWIFIWITHENCRYPTEDPASSWORDREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIConfigureWifiWithEncryptedPasswordRequest) }) _sym_db.RegisterMessage(CommonAPIConfigureWifiWithEncryptedPasswordRequest) CommonAPIConfigureWifiWithEncryptedPasswordResponse = _reflection.GeneratedProtocolMessageType('CommonAPIConfigureWifiWithEncryptedPasswordResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPICONFIGUREWIFIWITHENCRYPTEDPASSWORDRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIConfigureWifiWithEncryptedPasswordResponse) }) _sym_db.RegisterMessage(CommonAPIConfigureWifiWithEncryptedPasswordResponse) CommonAPIDeviceCertRequest = _reflection.GeneratedProtocolMessageType('CommonAPIDeviceCertRequest', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIDEVICECERTREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIDeviceCertRequest) }) _sym_db.RegisterMessage(CommonAPIDeviceCertRequest) CommonAPIDeviceCertResponse = _reflection.GeneratedProtocolMessageType('CommonAPIDeviceCertResponse', (_message.Message,), { 'DESCRIPTOR' : _COMMONAPIDEVICECERTRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonAPIDeviceCertResponse) }) _sym_db.RegisterMessage(CommonAPIDeviceCertResponse) AlertLog = _reflection.GeneratedProtocolMessageType('AlertLog', (_message.Message,), { 'DESCRIPTOR' : _ALERTLOG, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.AlertLog) }) _sym_db.RegisterMessage(AlertLog) AlertMatrix = _reflection.GeneratedProtocolMessageType('AlertMatrix', (_message.Message,), { 'DESCRIPTOR' : _ALERTMATRIX, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.AlertMatrix) }) _sym_db.RegisterMessage(AlertMatrix) EnergySiteNetDevice = _reflection.GeneratedProtocolMessageType('EnergySiteNetDevice', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETDEVICE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetDevice) }) _sym_db.RegisterMessage(EnergySiteNetDevice) EnergySiteNetRecentlyAddedDevice = _reflection.GeneratedProtocolMessageType('EnergySiteNetRecentlyAddedDevice', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETRECENTLYADDEDDEVICE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetRecentlyAddedDevice) }) _sym_db.RegisterMessage(EnergySiteNetRecentlyAddedDevice) EnergySiteNetRecentlyRemovedDevice = _reflection.GeneratedProtocolMessageType('EnergySiteNetRecentlyRemovedDevice', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETRECENTLYREMOVEDDEVICE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetRecentlyRemovedDevice) }) _sym_db.RegisterMessage(EnergySiteNetRecentlyRemovedDevice) EnergySiteNetConfig = _reflection.GeneratedProtocolMessageType('EnergySiteNetConfig', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETCONFIG, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetConfig) }) _sym_db.RegisterMessage(EnergySiteNetConfig) EnergySiteNetAPIAddDeviceRequest = _reflection.GeneratedProtocolMessageType('EnergySiteNetAPIAddDeviceRequest', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETAPIADDDEVICEREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetAPIAddDeviceRequest) }) _sym_db.RegisterMessage(EnergySiteNetAPIAddDeviceRequest) EnergySiteNetAPIAddDeviceResponse = _reflection.GeneratedProtocolMessageType('EnergySiteNetAPIAddDeviceResponse', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETAPIADDDEVICERESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetAPIAddDeviceResponse) }) _sym_db.RegisterMessage(EnergySiteNetAPIAddDeviceResponse) EnergySiteNetAPIRemoveDeviceRequest = _reflection.GeneratedProtocolMessageType('EnergySiteNetAPIRemoveDeviceRequest', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETAPIREMOVEDEVICEREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetAPIRemoveDeviceRequest) }) _sym_db.RegisterMessage(EnergySiteNetAPIRemoveDeviceRequest) EnergySiteNetAPIRemoveDeviceResponse = _reflection.GeneratedProtocolMessageType('EnergySiteNetAPIRemoveDeviceResponse', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETAPIREMOVEDEVICERESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetAPIRemoveDeviceResponse) }) _sym_db.RegisterMessage(EnergySiteNetAPIRemoveDeviceResponse) EnergySiteNetAPIGetConfigRequest = _reflection.GeneratedProtocolMessageType('EnergySiteNetAPIGetConfigRequest', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETAPIGETCONFIGREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetAPIGetConfigRequest) }) _sym_db.RegisterMessage(EnergySiteNetAPIGetConfigRequest) EnergySiteNetAPIGetConfigResponse = _reflection.GeneratedProtocolMessageType('EnergySiteNetAPIGetConfigResponse', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETAPIGETCONFIGRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetAPIGetConfigResponse) }) _sym_db.RegisterMessage(EnergySiteNetAPIGetConfigResponse) DeviceVital = _reflection.GeneratedProtocolMessageType('DeviceVital', (_message.Message,), { 'DESCRIPTOR' : _DEVICEVITAL, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.DeviceVital) }) _sym_db.RegisterMessage(DeviceVital) StringValue = _reflection.GeneratedProtocolMessageType('StringValue', (_message.Message,), { 'DESCRIPTOR' : _STRINGVALUE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.StringValue) }) _sym_db.RegisterMessage(StringValue) UInt32Value = _reflection.GeneratedProtocolMessageType('UInt32Value', (_message.Message,), { 'DESCRIPTOR' : _UINT32VALUE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.UInt32Value) }) _sym_db.RegisterMessage(UInt32Value) Int32Value = _reflection.GeneratedProtocolMessageType('Int32Value', (_message.Message,), { 'DESCRIPTOR' : _INT32VALUE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.Int32Value) }) _sym_db.RegisterMessage(Int32Value) UInt64Value = _reflection.GeneratedProtocolMessageType('UInt64Value', (_message.Message,), { 'DESCRIPTOR' : _UINT64VALUE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.UInt64Value) }) _sym_db.RegisterMessage(UInt64Value) FloatValue = _reflection.GeneratedProtocolMessageType('FloatValue', (_message.Message,), { 'DESCRIPTOR' : _FLOATVALUE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.FloatValue) }) _sym_db.RegisterMessage(FloatValue) ConnectionParameters = _reflection.GeneratedProtocolMessageType('ConnectionParameters', (_message.Message,), { 'DESCRIPTOR' : _CONNECTIONPARAMETERS, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.ConnectionParameters) }) _sym_db.RegisterMessage(ConnectionParameters) TeslaHardwareId = _reflection.GeneratedProtocolMessageType('TeslaHardwareId', (_message.Message,), { 'DESCRIPTOR' : _TESLAHARDWAREID, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TeslaHardwareId) }) _sym_db.RegisterMessage(TeslaHardwareId) TeslaEnergyEcuAttributes = _reflection.GeneratedProtocolMessageType('TeslaEnergyEcuAttributes', (_message.Message,), { 'DESCRIPTOR' : _TESLAENERGYECUATTRIBUTES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TeslaEnergyEcuAttributes) }) _sym_db.RegisterMessage(TeslaEnergyEcuAttributes) GeneratorAttributes = _reflection.GeneratedProtocolMessageType('GeneratorAttributes', (_message.Message,), { 'DESCRIPTOR' : _GENERATORATTRIBUTES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.GeneratorAttributes) }) _sym_db.RegisterMessage(GeneratorAttributes) PVInverterAttributes = _reflection.GeneratedProtocolMessageType('PVInverterAttributes', (_message.Message,), { 'DESCRIPTOR' : _PVINVERTERATTRIBUTES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.PVInverterAttributes) }) _sym_db.RegisterMessage(PVInverterAttributes) MeterAttributes = _reflection.GeneratedProtocolMessageType('MeterAttributes', (_message.Message,), { 'DESCRIPTOR' : _METERATTRIBUTES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.MeterAttributes) }) _sym_db.RegisterMessage(MeterAttributes) DeviceAttributes = _reflection.GeneratedProtocolMessageType('DeviceAttributes', (_message.Message,), { 'DESCRIPTOR' : _DEVICEATTRIBUTES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.DeviceAttributes) }) _sym_db.RegisterMessage(DeviceAttributes) Device = _reflection.GeneratedProtocolMessageType('Device', (_message.Message,), { 'DESCRIPTOR' : _DEVICE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.Device) }) _sym_db.RegisterMessage(Device) SiteControllerConnectedDevice = _reflection.GeneratedProtocolMessageType('SiteControllerConnectedDevice', (_message.Message,), { 'DESCRIPTOR' : _SITECONTROLLERCONNECTEDDEVICE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.SiteControllerConnectedDevice) }) _sym_db.RegisterMessage(SiteControllerConnectedDevice) SiteControllerConnectedDeviceWithVitals = _reflection.GeneratedProtocolMessageType('SiteControllerConnectedDeviceWithVitals', (_message.Message,), { 'DESCRIPTOR' : _SITECONTROLLERCONNECTEDDEVICEWITHVITALS, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.SiteControllerConnectedDeviceWithVitals) }) _sym_db.RegisterMessage(SiteControllerConnectedDeviceWithVitals) DevicesWithVitals = _reflection.GeneratedProtocolMessageType('DevicesWithVitals', (_message.Message,), { 'DESCRIPTOR' : _DEVICESWITHVITALS, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.DevicesWithVitals) }) _sym_db.RegisterMessage(DevicesWithVitals) SiteControllerConnectedDeviceStore = _reflection.GeneratedProtocolMessageType('SiteControllerConnectedDeviceStore', (_message.Message,), { 'DESCRIPTOR' : _SITECONTROLLERCONNECTEDDEVICESTORE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.SiteControllerConnectedDeviceStore) }) _sym_db.RegisterMessage(SiteControllerConnectedDeviceStore) BatterySystemCapabilities = _reflection.GeneratedProtocolMessageType('BatterySystemCapabilities', (_message.Message,), { 'DESCRIPTOR' : _BATTERYSYSTEMCAPABILITIES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.BatterySystemCapabilities) }) _sym_db.RegisterMessage(BatterySystemCapabilities) Status = _reflection.GeneratedProtocolMessageType('Status', (_message.Message,), { 'DESCRIPTOR' : _STATUS, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.Status) }) _sym_db.RegisterMessage(Status) Manifest = _reflection.GeneratedProtocolMessageType('Manifest', (_message.Message,), { 'DESCRIPTOR' : _MANIFEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.Manifest) }) _sym_db.RegisterMessage(Manifest) MessageEnvelope = _reflection.GeneratedProtocolMessageType('MessageEnvelope', (_message.Message,), { 'DESCRIPTOR' : _MESSAGEENVELOPE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.MessageEnvelope) }) _sym_db.RegisterMessage(MessageEnvelope) CommonMessages = _reflection.GeneratedProtocolMessageType('CommonMessages', (_message.Message,), { 'DESCRIPTOR' : _COMMONMESSAGES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.CommonMessages) }) _sym_db.RegisterMessage(CommonMessages) TEGMessages = _reflection.GeneratedProtocolMessageType('TEGMessages', (_message.Message,), { 'DESCRIPTOR' : _TEGMESSAGES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGMessages) }) _sym_db.RegisterMessage(TEGMessages) TEGSettings = _reflection.GeneratedProtocolMessageType('TEGSettings', (_message.Message,), { 'DESCRIPTOR' : _TEGSETTINGS, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGSettings) }) _sym_db.RegisterMessage(TEGSettings) TEGAPIGetConfigRequest = _reflection.GeneratedProtocolMessageType('TEGAPIGetConfigRequest', (_message.Message,), { 'DESCRIPTOR' : _TEGAPIGETCONFIGREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGAPIGetConfigRequest) }) _sym_db.RegisterMessage(TEGAPIGetConfigRequest) TEGAPIGetConfigResponse = _reflection.GeneratedProtocolMessageType('TEGAPIGetConfigResponse', (_message.Message,), { 'DESCRIPTOR' : _TEGAPIGETCONFIGRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGAPIGetConfigResponse) }) _sym_db.RegisterMessage(TEGAPIGetConfigResponse) TEGAPITriggerIslandingBlackStartRequest = _reflection.GeneratedProtocolMessageType('TEGAPITriggerIslandingBlackStartRequest', (_message.Message,), { 'DESCRIPTOR' : _TEGAPITRIGGERISLANDINGBLACKSTARTREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGAPITriggerIslandingBlackStartRequest) }) _sym_db.RegisterMessage(TEGAPITriggerIslandingBlackStartRequest) TEGAPITriggerIslandingBlackStartResponse = _reflection.GeneratedProtocolMessageType('TEGAPITriggerIslandingBlackStartResponse', (_message.Message,), { 'DESCRIPTOR' : _TEGAPITRIGGERISLANDINGBLACKSTARTRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGAPITriggerIslandingBlackStartResponse) }) _sym_db.RegisterMessage(TEGAPITriggerIslandingBlackStartResponse) TEGAPISetIslandModeRequest = _reflection.GeneratedProtocolMessageType('TEGAPISetIslandModeRequest', (_message.Message,), { 'DESCRIPTOR' : _TEGAPISETISLANDMODEREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGAPISetIslandModeRequest) }) _sym_db.RegisterMessage(TEGAPISetIslandModeRequest) TEGAPISetIslandModeResponse = _reflection.GeneratedProtocolMessageType('TEGAPISetIslandModeResponse', (_message.Message,), { 'DESCRIPTOR' : _TEGAPISETISLANDMODERESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGAPISetIslandModeResponse) }) _sym_db.RegisterMessage(TEGAPISetIslandModeResponse) TEGAPITriggerAssetManifestUploadRequest = _reflection.GeneratedProtocolMessageType('TEGAPITriggerAssetManifestUploadRequest', (_message.Message,), { 'DESCRIPTOR' : _TEGAPITRIGGERASSETMANIFESTUPLOADREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGAPITriggerAssetManifestUploadRequest) }) _sym_db.RegisterMessage(TEGAPITriggerAssetManifestUploadRequest) TEGAPITriggerAssetManifestUploadResponse = _reflection.GeneratedProtocolMessageType('TEGAPITriggerAssetManifestUploadResponse', (_message.Message,), { 'DESCRIPTOR' : _TEGAPITRIGGERASSETMANIFESTUPLOADRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.TEGAPITriggerAssetManifestUploadResponse) }) _sym_db.RegisterMessage(TEGAPITriggerAssetManifestUploadResponse) EnergySiteNetMessages = _reflection.GeneratedProtocolMessageType('EnergySiteNetMessages', (_message.Message,), { 'DESCRIPTOR' : _ENERGYSITENETMESSAGES, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.EnergySiteNetMessages) }) _sym_db.RegisterMessage(EnergySiteNetMessages) LocalAuthAPIRequiredFactorsRequest = _reflection.GeneratedProtocolMessageType('LocalAuthAPIRequiredFactorsRequest', (_message.Message,), { 'DESCRIPTOR' : _LOCALAUTHAPIREQUIREDFACTORSREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.LocalAuthAPIRequiredFactorsRequest) }) _sym_db.RegisterMessage(LocalAuthAPIRequiredFactorsRequest) LocalAuthAPIRequiredFactorsResponse = _reflection.GeneratedProtocolMessageType('LocalAuthAPIRequiredFactorsResponse', (_message.Message,), { 'DESCRIPTOR' : _LOCALAUTHAPIREQUIREDFACTORSRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.LocalAuthAPIRequiredFactorsResponse) }) _sym_db.RegisterMessage(LocalAuthAPIRequiredFactorsResponse) LocalAuthAPILoginRequest = _reflection.GeneratedProtocolMessageType('LocalAuthAPILoginRequest', (_message.Message,), { 'DESCRIPTOR' : _LOCALAUTHAPILOGINREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.LocalAuthAPILoginRequest) }) _sym_db.RegisterMessage(LocalAuthAPILoginRequest) LocalAuthAPILoginResponse = _reflection.GeneratedProtocolMessageType('LocalAuthAPILoginResponse', (_message.Message,), { 'DESCRIPTOR' : _LOCALAUTHAPILOGINRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.LocalAuthAPILoginResponse) }) _sym_db.RegisterMessage(LocalAuthAPILoginResponse) LocalAuthAPILogoutRequest = _reflection.GeneratedProtocolMessageType('LocalAuthAPILogoutRequest', (_message.Message,), { 'DESCRIPTOR' : _LOCALAUTHAPILOGOUTREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.LocalAuthAPILogoutRequest) }) _sym_db.RegisterMessage(LocalAuthAPILogoutRequest) LocalAuthAPILogoutResponse = _reflection.GeneratedProtocolMessageType('LocalAuthAPILogoutResponse', (_message.Message,), { 'DESCRIPTOR' : _LOCALAUTHAPILOGOUTRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.LocalAuthAPILogoutResponse) }) _sym_db.RegisterMessage(LocalAuthAPILogoutResponse) LocalAuthAPICheckAuthStatusRequest = _reflection.GeneratedProtocolMessageType('LocalAuthAPICheckAuthStatusRequest', (_message.Message,), { 'DESCRIPTOR' : _LOCALAUTHAPICHECKAUTHSTATUSREQUEST, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.LocalAuthAPICheckAuthStatusRequest) }) _sym_db.RegisterMessage(LocalAuthAPICheckAuthStatusRequest) LocalAuthAPICheckAuthStatusResponse = _reflection.GeneratedProtocolMessageType('LocalAuthAPICheckAuthStatusResponse', (_message.Message,), { 'DESCRIPTOR' : _LOCALAUTHAPICHECKAUTHSTATUSRESPONSE, '__module__' : 'tesla_pb2' # @@protoc_insertion_point(class_scope:teslapower.LocalAuthAPICheckAuthStatusResponse) }) _sym_db.RegisterMessage(LocalAuthAPICheckAuthStatusResponse) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _EXTERNALAUTHTYPE._serialized_start=13104 _EXTERNALAUTHTYPE._serialized_end=13255 _DELIVERYCHANNEL._serialized_start=13258 _DELIVERYCHANNEL._serialized_end=13402 _TESLASERVICE._serialized_start=13404 _TESLASERVICE._serialized_end=13472 _EXTERNALAUTH._serialized_start=87 _EXTERNALAUTH._serialized_end=145 _PARTICIPANT._serialized_start=147 _PARTICIPANT._serialized_end=250 _ECUID._serialized_start=252 _ECUID._serialized_end=301 _DIN._serialized_start=303 _DIN._serialized_end=323 _FIRMWAREVERSION._serialized_start=325 _FIRMWAREVERSION._serialized_end=376 _ACCUMULATEDENERGY._serialized_start=378 _ACCUMULATEDENERGY._serialized_end=500 _INSTACMEASUREMENT._serialized_start=503 _INSTACMEASUREMENT._serialized_end=844 _INSTDCMEASUREMENT._serialized_start=846 _INSTDCMEASUREMENT._serialized_end=943 _GRIDCOMPLIANCESTATUS._serialized_start=946 _GRIDCOMPLIANCESTATUS._serialized_end=1080 _NETWORKINTERFACEIPV4CONFIG._serialized_start=1082 _NETWORKINTERFACEIPV4CONFIG._serialized_end=1204 _RSSI._serialized_start=1206 _RSSI._serialized_end=1314 _NETWORKCONNECTIVITYSTATUS._serialized_start=1317 _NETWORKCONNECTIVITYSTATUS._serialized_end=1518 _NETWORKINTERFACE._serialized_start=1521 _NETWORKINTERFACE._serialized_end=1772 _WIFIPASSWORD._serialized_start=1774 _WIFIPASSWORD._serialized_end=1803 _ENCRYPTEDMESSAGE._serialized_start=1805 _ENCRYPTEDMESSAGE._serialized_end=1859 _WIFICONFIG._serialized_start=1861 _WIFICONFIG._serialized_end=1967 _WIFINETWORK._serialized_start=1970 _WIFINETWORK._serialized_end=2106 _SYSTEMUPDATE._serialized_start=2109 _SYSTEMUPDATE._serialized_end=2389 _ERRORRESPONSE._serialized_start=2391 _ERRORRESPONSE._serialized_end=2458 _COMMONAPIGETSYSTEMINFOREQUEST._serialized_start=2460 _COMMONAPIGETSYSTEMINFOREQUEST._serialized_end=2491 _COMMONAPIGETSYSTEMINFORESPONSE._serialized_start=2494 _COMMONAPIGETSYSTEMINFORESPONSE._serialized_end=2749 _COMMONAPISETLOCALSITECONFIGREQUEST._serialized_start=2751 _COMMONAPISETLOCALSITECONFIGREQUEST._serialized_end=2787 _COMMONAPISETLOCALSITECONFIGRESPONSE._serialized_start=2789 _COMMONAPISETLOCALSITECONFIGRESPONSE._serialized_end=2826 _COMMONAPICHECKFORUPDATEREQUEST._serialized_start=2828 _COMMONAPICHECKFORUPDATEREQUEST._serialized_end=2860 _COMMONAPICHECKFORUPDATERESPONSE._serialized_start=2862 _COMMONAPICHECKFORUPDATERESPONSE._serialized_end=2895 _COMMONAPICLEARUPDATEREQUEST._serialized_start=2897 _COMMONAPICLEARUPDATEREQUEST._serialized_end=2926 _COMMONAPICLEARUPDATERESPONSE._serialized_start=2928 _COMMONAPICLEARUPDATERESPONSE._serialized_end=2958 _COMMONAPIPERFORMUPDATEREQUEST._serialized_start=2960 _COMMONAPIPERFORMUPDATEREQUEST._serialized_end=2991 _COMMONAPIPERFORMUPDATERESPONSE._serialized_start=2993 _COMMONAPIPERFORMUPDATERESPONSE._serialized_end=3025 _COMMONAPIFACTORYRESETREQUEST._serialized_start=3027 _COMMONAPIFACTORYRESETREQUEST._serialized_end=3057 _COMMONAPIFACTORYRESETRESPONSE._serialized_start=3059 _COMMONAPIFACTORYRESETRESPONSE._serialized_end=3090 _COMMONAPIGETNETWORKINGSTATUSREQUEST._serialized_start=3092 _COMMONAPIGETNETWORKINGSTATUSREQUEST._serialized_end=3129 _COMMONAPIGETNETWORKINGSTATUSRESPONSE._serialized_start=3132 _COMMONAPIGETNETWORKINGSTATUSRESPONSE._serialized_end=3404 _COMMONAPIWIFISCANREQUEST._serialized_start=3406 _COMMONAPIWIFISCANREQUEST._serialized_end=3513 _COMMONAPIWIFISCANRESPONSE._serialized_start=3515 _COMMONAPIWIFISCANRESPONSE._serialized_end=3589 _COMMONAPICONFIGUREWIFIREQUEST._serialized_start=3591 _COMMONAPICONFIGUREWIFIREQUEST._serialized_end=3703 _COMMONAPICONFIGUREWIFIRESPONSE._serialized_start=3706 _COMMONAPICONFIGUREWIFIRESPONSE._serialized_end=3860 _COMMONAPICONFIGUREWIFIWITHENCRYPTEDPASSWORDREQUEST._serialized_start=3863 _COMMONAPICONFIGUREWIFIWITHENCRYPTEDPASSWORDREQUEST._serialized_end=4080 _COMMONAPICONFIGUREWIFIWITHENCRYPTEDPASSWORDRESPONSE._serialized_start=4083 _COMMONAPICONFIGUREWIFIWITHENCRYPTEDPASSWORDRESPONSE._serialized_end=4274 _COMMONAPIDEVICECERTREQUEST._serialized_start=4276 _COMMONAPIDEVICECERTREQUEST._serialized_end=4304 _COMMONAPIDEVICECERTRESPONSE._serialized_start=4306 _COMMONAPIDEVICECERTRESPONSE._serialized_end=4371 _ALERTLOG._serialized_start=4373 _ALERTLOG._serialized_end=4397 _ALERTMATRIX._serialized_start=4399 _ALERTMATRIX._serialized_end=4426 _ENERGYSITENETDEVICE._serialized_start=4429 _ENERGYSITENETDEVICE._serialized_end=4561 _ENERGYSITENETRECENTLYADDEDDEVICE._serialized_start=4563 _ENERGYSITENETRECENTLYADDEDDEVICE._serialized_end=4656 _ENERGYSITENETRECENTLYREMOVEDDEVICE._serialized_start=4658 _ENERGYSITENETRECENTLYREMOVEDDEVICE._serialized_end=4753 _ENERGYSITENETCONFIG._serialized_start=4756 _ENERGYSITENETCONFIG._serialized_end=4969 _ENERGYSITENETAPIADDDEVICEREQUEST._serialized_start=4971 _ENERGYSITENETAPIADDDEVICEREQUEST._serialized_end=5054 _ENERGYSITENETAPIADDDEVICERESPONSE._serialized_start=5056 _ENERGYSITENETAPIADDDEVICERESPONSE._serialized_end=5160 _ENERGYSITENETAPIREMOVEDEVICEREQUEST._serialized_start=5162 _ENERGYSITENETAPIREMOVEDEVICEREQUEST._serialized_end=5229 _ENERGYSITENETAPIREMOVEDEVICERESPONSE._serialized_start=5231 _ENERGYSITENETAPIREMOVEDEVICERESPONSE._serialized_end=5342 _ENERGYSITENETAPIGETCONFIGREQUEST._serialized_start=5344 _ENERGYSITENETAPIGETCONFIGREQUEST._serialized_end=5378 _ENERGYSITENETAPIGETCONFIGRESPONSE._serialized_start=5380 _ENERGYSITENETAPIGETCONFIGRESPONSE._serialized_end=5464 _DEVICEVITAL._serialized_start=5467 _DEVICEVITAL._serialized_end=5603 _STRINGVALUE._serialized_start=5605 _STRINGVALUE._serialized_end=5633 _UINT32VALUE._serialized_start=5635 _UINT32VALUE._serialized_end=5663 _INT32VALUE._serialized_start=5665 _INT32VALUE._serialized_end=5692 _UINT64VALUE._serialized_start=5694 _UINT64VALUE._serialized_end=5722 _FLOATVALUE._serialized_start=5724 _FLOATVALUE._serialized_end=5751 _CONNECTIONPARAMETERS._serialized_start=5754 _CONNECTIONPARAMETERS._serialized_end=5980 _TESLAHARDWAREID._serialized_start=5983 _TESLAHARDWAREID._serialized_end=6181 _TESLAENERGYECUATTRIBUTES._serialized_start=6184 _TESLAENERGYECUATTRIBUTES._serialized_end=6469 _GENERATORATTRIBUTES._serialized_start=6471 _GENERATORATTRIBUTES._serialized_end=6555 _PVINVERTERATTRIBUTES._serialized_start=6557 _PVINVERTERATTRIBUTES._serialized_end=6608 _METERATTRIBUTES._serialized_start=6610 _METERATTRIBUTES._serialized_end=6650 _DEVICEATTRIBUTES._serialized_start=6653 _DEVICEATTRIBUTES._serialized_end=6951 _DEVICE._serialized_start=6954 _DEVICE._serialized_end=7793 _SITECONTROLLERCONNECTEDDEVICE._serialized_start=7795 _SITECONTROLLERCONNECTEDDEVICE._serialized_end=7878 _SITECONTROLLERCONNECTEDDEVICEWITHVITALS._serialized_start=7881 _SITECONTROLLERCONNECTEDDEVICEWITHVITALS._serialized_end=8038 _DEVICESWITHVITALS._serialized_start=8040 _DEVICESWITHVITALS._serialized_end=8129 _SITECONTROLLERCONNECTEDDEVICESTORE._serialized_start=8131 _SITECONTROLLERCONNECTEDDEVICESTORE._serialized_end=8249 _BATTERYSYSTEMCAPABILITIES._serialized_start=8251 _BATTERYSYSTEMCAPABILITIES._serialized_end=8326 _STATUS._serialized_start=8328 _STATUS._serialized_end=8406 _MANIFEST._serialized_start=8409 _MANIFEST._serialized_end=8741 _MESSAGEENVELOPE._serialized_start=8744 _MESSAGEENVELOPE._serialized_end=9028 _COMMONMESSAGES._serialized_start=9031 _COMMONMESSAGES._serialized_end=10841 _TEGMESSAGES._serialized_start=10844 _TEGMESSAGES._serialized_end=11540 _TEGSETTINGS._serialized_start=11542 _TEGSETTINGS._serialized_end=11555 _TEGAPIGETCONFIGREQUEST._serialized_start=11557 _TEGAPIGETCONFIGREQUEST._serialized_end=11581 _TEGAPIGETCONFIGRESPONSE._serialized_start=11584 _TEGAPIGETCONFIGRESPONSE._serialized_end=11904 _TEGAPITRIGGERISLANDINGBLACKSTARTREQUEST._serialized_start=11906 _TEGAPITRIGGERISLANDINGBLACKSTARTREQUEST._serialized_end=11947 _TEGAPITRIGGERISLANDINGBLACKSTARTRESPONSE._serialized_start=11949 _TEGAPITRIGGERISLANDINGBLACKSTARTRESPONSE._serialized_end=11991 _TEGAPISETISLANDMODEREQUEST._serialized_start=11993 _TEGAPISETISLANDMODEREQUEST._serialized_end=12050 _TEGAPISETISLANDMODERESPONSE._serialized_start=12052 _TEGAPISETISLANDMODERESPONSE._serialized_end=12097 _TEGAPITRIGGERASSETMANIFESTUPLOADREQUEST._serialized_start=12099 _TEGAPITRIGGERASSETMANIFESTUPLOADREQUEST._serialized_end=12140 _TEGAPITRIGGERASSETMANIFESTUPLOADRESPONSE._serialized_start=12142 _TEGAPITRIGGERASSETMANIFESTUPLOADRESPONSE._serialized_end=12184 _ENERGYSITENETMESSAGES._serialized_start=12187 _ENERGYSITENETMESSAGES._serialized_end=12683 _LOCALAUTHAPIREQUIREDFACTORSREQUEST._serialized_start=12685 _LOCALAUTHAPIREQUIREDFACTORSREQUEST._serialized_end=12721 _LOCALAUTHAPIREQUIREDFACTORSRESPONSE._serialized_start=12723 _LOCALAUTHAPIREQUIREDFACTORSRESPONSE._serialized_end=12796 _LOCALAUTHAPILOGINREQUEST._serialized_start=12798 _LOCALAUTHAPILOGINREQUEST._serialized_end=12904 _LOCALAUTHAPILOGINRESPONSE._serialized_start=12906 _LOCALAUTHAPILOGINRESPONSE._serialized_end=12949 _LOCALAUTHAPILOGOUTREQUEST._serialized_start=12951 _LOCALAUTHAPILOGOUTREQUEST._serialized_end=12978 _LOCALAUTHAPILOGOUTRESPONSE._serialized_start=12980 _LOCALAUTHAPILOGOUTRESPONSE._serialized_end=13008 _LOCALAUTHAPICHECKAUTHSTATUSREQUEST._serialized_start=13010 _LOCALAUTHAPICHECKAUTHSTATUSREQUEST._serialized_end=13046 _LOCALAUTHAPICHECKAUTHSTATUSRESPONSE._serialized_start=13048 _LOCALAUTHAPICHECKAUTHSTATUSRESPONSE._serialized_end=13101 # @@protoc_insertion_point(module_scope) ================================================ FILE: examples/vitals.py ================================================ # pyPowerWall Vitals # -*- coding: utf-8 -*- """ This script pulls the Powerwall Vitals API Author: Jason A. Cox For more information see https://github.com/jasonacox/pypowerwall * /api/devices/vitals produces a protobuf binary payload """ import pypowerwall # Update with your details password='password' email='email@example.com' host = "10.0.1.23" timezone = "America/LosAngeles" # Make sure binary polling allowed if pypowerwall.version_tuple < (0,0,3): print("\n*** WARNING: Minimum pypowerwall version 0.0.3 required for proper function! ***\n\n") # Connect to Powerwall pw = pypowerwall.Powerwall(host,password,email,timezone) # Display Vitals print("Vitals: %r\n" % pw.vitals()) # Below is an alternative manual way to parse the protobuf payload """ import struct # Pull vitals payload - binary format in protobuf stream = pw.poll('/api/devices/vitals') streamsize = len(stream) print("Size of stream = %d" % streamsize) # Walk through payload index = 0 skip = False skipdata = "" while(index < streamsize): key = "" value = "" meta = "" # check for kv signal if(streamsize-index > 3 and stream[index] == ord('\x12') and stream[index+2] == ord('\x0a')): # print skip data if skip: print(" > Skipped: %s" % skipdata) skip = False skipdata = "" # Parse payload meta=stream[index+1] index += 3 # grab key starting with size value size = stream[index] index += 1 if(size > 0): key = stream[index:index+size].decode() index += size delimiter = stream[index] index += 1 if(delimiter == ord('!')): # numerical value # DOUBLE v = stream[index:index+8] v = struct.unpack(' 0): value = stream[index:index+size].decode() index += size if(delimiter == ord('0')): # boolean value if(stream[index] == 1): value = "TRUE" else: value = "FALSE" index += 1 # Print it print("[%d] %s: %s" % (meta,key,value)) continue skip = True if(chr(stream[index]).isalnum()): skipdata += " %c" % chr(stream[index]) else: skipdata += " 0x%02d" % stream[index] index += 1 # end while """ ================================================ FILE: proxy/.dockerignore ================================================ # Credentials and auth files - must never be baked into image .powerwall .auth .pypowerwall.auth .pypowerwall.site .pypowerwall.fleetapi .fleetapi* .cachefile config.json fleet_tokens.json tedapi_rsa_* # Certificates and keys *.pem *.der *.key # Build/upload scripts and local-only files upload.sh upload-beta.sh .beta_version perf_test.py localtest.sh testproxy.sh uploadtest.sh # Docs API.md README.md HELP.md RELEASE.md # Symlink / local dev copy (replaced by cp in upload-beta.sh, restored after) teslapy # Dev noise .DS_Store __pycache__/ *.pyc *.pyo tests/ ================================================ FILE: proxy/API.md ================================================ # PyPowerwall Proxy Server API This document describes the HTTP API endpoints provided by the PyPowerwall Proxy Server. These endpoints allow users and applications to access Tesla Powerwall metrics and control features via web or API calls. --- Jump To: [Quick Examples](#quick-examples) | [Control](#control-endpoints) | [Convenience /pw](#convenience-pw-endpoints) | [Fans](#fans-endpoints) | [Raw API](#powerwall-api-endpoints) | [Optional APIs](#optional-api-endpoints-tedapi-cloud-fleetapi) | [Cache](#cache-and-error-handling) | [Notes](#notes) ## Overview The proxy server exposes a RESTful API for accessing Powerwall data, including site, battery, solar, vitals, alerts, and more. It can be run locally or in a container, and supports both local gateway and cloud modes. **Base URL:** - By default: `http://:8675/` - If using a reverse proxy, set the `PROXY_BASE_URL` environment variable accordingly. **Setup:** - See [proxy/README.md](https://github.com/jasonacox/pypowerwall/blob/main/proxy/README.md) for setup instructions. - See the main project [README.md](https://github.com/jasonacox/pypowerwall/blob/main/README.md) for general usage. --- ## Common Endpoints ### Metrics and Status | Endpoint | Description | |---------------------------------|--------------------------------------------------| | `/aggregates` | Site, solar, battery, and load metrics (JSON) | | `/soe` | Battery state of energy (JSON) | | `/api/system_status/soe` | Battery state of energy (95% scale, JSON) | | `/api/system_status/grid_status`| Grid status (JSON) | | `/vitals` | Device vitals (JSON) | | `/strings` | Solar string data (JSON) | | `/temps` | Powerwall temperatures (JSON) | | `/alerts` | Alerts (JSON array) | | `/alerts/pw` | Alerts (JSON object) | | `/stats` | Internal proxy stats (JSON) | | `/stats/clear` | Clear internal stats (JSON) | | `/health` | Connection health status and cache info (JSON) | | `/health/reset` | Reset health counters and clear cache (JSON) | | `/freq` | Frequency, current, voltage, grid status (JSON) | | `/pod` | Powerwall battery data (JSON) | | `/json` | Combined metrics and status (JSON) | | `/version` | Firmware version info (JSON) | | `/help` | HTML help and stats page | | `/example.html` or `/` | HTML page showing power flow animation | ### CSV Output | Endpoint | Description | |------------------|--------------------------------------------------| | `/csv` | Grid, Home, Solar, Battery, Level (CSV) | | `/csv/v2` | Adds GridStatus and Reserve (CSV) | _Add `?headers` to include CSV headers._ **Aggregates Variants** - `/aggregates` Processed & cached combined metrics. - `/pw/aggregates` Same as above via convenience namespace. - `/api/meters/aggregates` Raw gateway API payload (unprocessed fields). ### Quick Examples ```bash # Get site aggregates curl http://localhost:8675/aggregates # Get battery state of energy curl http://localhost:8675/soe # Get device vitals curl http://localhost:8675/vitals # Check connection health and cache status curl http://localhost:8675/health # Get alerts curl http://localhost:8675/alerts # Get power summary (shortcut) curl http://localhost:8675/pw/power # CSV Examples curl "http://localhost:8675/csv/v2?headers" ``` ## Control Endpoints | Endpoint | Description | |-------------------------|--------------------------------------------------| | `/control/reserve` | Get/set battery reserve (POST/GET) | | `/control/mode` | Get/set battery mode (POST/GET) | | `/control/grid_charging`| Get/set grid charging enable (POST/GET) | | `/control/grid_export` | Get/set grid export policy (POST/GET) | | `/control/max_backup` | Schedule/cancel/query max backup event (POST/GET, v1r only) | > **Note:** Control endpoints require `PW_CONTROL_SECRET` to be set. See [Control Examples](#control-examples) below. ### Control API Usage & Security Control operations are DISABLED by default. To enable, set the environment variable `PW_CONTROL_SECRET` (any non-empty value). All control POST requests must include a `token` parameter matching this secret. **v1r LAN mode:** Control commands are sent directly over the wired LAN via config file writes — no cloud setup or Tesla account needed. Just set `PW_CONTROL_SECRET` alongside your v1r configuration (`PW_HOST`, `PW_GW_PWD`, `PW_RSA_KEY_PATH`). **Other modes (WiFi TEDAPI, local, cloud):** Control requires FleetAPI or Cloud API access. Set `PW_EMAIL` and run cloud setup before using control endpoints. Security guidelines: 1. Use HTTPS (terminate TLS at a reverse proxy like nginx, Caddy, Traefik) if exposing beyond localhost. 2. Do not expose the control endpoints publicly unless necessary. Prefer firewall / VPN restrictions. 3. Rotate the secret periodically; treat it like a password. A restart is required after changing it. 4. Limit clients allowed to call these endpoints (IP allowlists, auth gateway, etc.). 5. Log monitoring: watch for unusual spikes in control POST requests. Supported control values: - Reserve: integer 0–100 (% of battery to reserve) - Mode: `self_consumption`, `backup`, `autonomous`, `time_of_use` - Grid Charging: `true` or `false` - Grid Export: `battery_ok`, `pv_only`, `never` - Max Backup: duration in seconds (min 60), or `cancel` to stop (v1r only) ### Control Examples ```bash # Get current reserve curl 'http://localhost:8675/control/reserve?token=' # Set reserve to 20% curl -X POST -d 'value=20&token=' http://localhost:8675/control/reserve # Get current operating mode curl 'http://localhost:8675/control/mode?token=' # Set operating mode curl -X POST -d 'value=backup&token=' http://localhost:8675/control/mode # Get grid charging state curl 'http://localhost:8675/control/grid_charging?token=' # Enable grid charging curl -X POST -d 'value=true&token=' http://localhost:8675/control/grid_charging # Get grid export policy curl 'http://localhost:8675/control/grid_export?token=' # Set grid export policy (options: battery_ok, pv_only, never) curl -X POST -d 'value=pv_only&token=' http://localhost:8675/control/grid_export # Get max backup event status (v1r only) curl http://localhost:8675/control/max_backup # Schedule max backup for 1 hour (v1r only) curl -X POST -d 'value=3600&token=' http://localhost:8675/control/max_backup # Cancel max backup (v1r only) curl -X POST -d 'value=cancel&token=' http://localhost:8675/control/max_backup ``` POST success responses return a JSON object with the updated field, or an error object on failure. GET requests return the current setting. Missing or invalid `token` returns an authorization error. Max backup sets the Powerwall reserve to 100% for the specified duration (like Storm Watch in the Tesla app). It uses the TEGMessages protobuf command pathway over v1r LAN — only available in v1r mode. The gateway requires cancelling any existing event before scheduling a new one; `schedule` does this automatically. The gateway leaves expired events lingering; the proxy automatically cancels them when detected on GET (mirroring Tesla app behavior). Mode clarification: - `self_consumption` / `autonomous`: Maximize local solar usage (firmware may use either term; treat as equivalent). - `backup`: Preserve charge for outage protection. - `time_of_use`: Optimize around configured TOU rates. --- ## Convenience /pw Endpoints The proxy provides shorthand endpoints under `/pw/` that map to common library calls. All return JSON. | Endpoint | Description | |---------------------------|-----------------------------------------| | `/pw/level` | Battery state of energy (%) | | `/pw/power` | Site, solar, battery, load power (W) | | `/pw/site` | Site power data | | `/pw/solar` | Solar power data | | `/pw/battery` | Battery power data | | `/pw/battery_blocks` | Battery block details | | `/pw/load` | Load power data | | `/pw/grid` | Grid power data | | `/pw/home` | Home consumption data | | `/pw/vitals` | Device vitals | | `/pw/temps` | Temperature metrics | | `/pw/strings` | Solar string data | | `/pw/din` | Device identifier | | `/pw/uptime` | Uptime (seconds) | | `/pw/version` | Firmware version | | `/pw/status` | Status summary | | `/pw/system_status` | System status | | `/pw/grid_status` | Grid status | | `/pw/aggregates` | Aggregated meter data | | `/pw/site_name` | Site name | | `/pw/alerts` | Alerts array/object | | `/pw/is_connected` | Connection boolean | | `/pw/get_reserve` | Current reserve setting (%) | | `/pw/get_mode` | Current operating mode | | `/pw/get_time_remaining` | Estimated backup time remaining | --- ## Fans Endpoints Available when TEDAPI provides fan telemetry (e.g., Powerwall 3 systems): | Endpoint | Description | |--------------|-----------------------------------------------------| | `/fans` | Raw fan speed objects keyed by internal component | | `/fans/pw` | Simplified fan RPM (FANn_actual / FANn_target) | If fan data is unavailable, these return an empty JSON object `{}`. Update interval: Fan metrics refresh with standard polling (same cadence as vitals/strings) and appear only when TEDAPI + compatible hardware (e.g., PW3) are present. ## Powerwall API Endpoints | Endpoint | Description | |-----------------------------------|--------------------------------------------------| | `/api/meters/aggregates` | Raw aggregates from Powerwall API | | `/api/status` | Powerwall Firmware and Uptime Status | | `/api/site_info/site_name` | Site name information | | `/api/meters/site` | Site meter data | | `/api/meters/solar` | Solar meter data | | `/api/sitemaster` | Sitemaster status | | `/api/powerwalls` | Powerwall details | | `/api/customer/registration` | Customer registration info | | `/api/system_status` | System status information | | `/api/system_status/grid_status` | Grid status details | | `/api/system/update/status` | System update status | | `/api/site_info` | Site information | | `/api/system_status/grid_faults` | Grid fault information | | `/api/operation` | Operation status | | `/api/site_info/grid_codes` | Grid codes information | | `/api/solars` | Solar system information | | `/api/solars/brands` | Solar system brands | | `/api/customer` | Customer information | | `/api/meters` | Meter information | | `/api/installer` | Installer information | | `/api/networks` | Network configuration | | `/api/system/networks` | System network status | | `/api/meters/readings` | Meter readings data | ## Optional API Endpoints (TEDAPI, Cloud, FleetAPI) _These endpoints require specific configuration to be enabled._ | Endpoint | Description | |-------------------------|--------------------------------------------------| | `/tedapi/config` | TEDAPI configuration | | `/tedapi/status` | TEDAPI status information | | `/tedapi/components` | TEDAPI component data | | `/tedapi/battery` | TEDAPI battery metrics | | `/tedapi/controller` | TEDAPI controller data | | `/cloud/battery` | Cloud API battery information | | `/cloud/power` | Cloud API power metrics | | `/cloud/config` | Cloud API configuration | | `/fleetapi/info` | Tesla Fleet API system information | | `/fleetapi/status` | Tesla Fleet API status data | --- ## Cache and Error Handling The proxy server implements robust error handling and caching: - **Cached Responses**: Key endpoints (`/aggregates`, `/soe`, `/vitals`, `/strings`) cache responses for improved reliability - **TTL Behavior**: After cache TTL expires (default 30 seconds), endpoints return `null` instead of stale data - **Network Resilience**: Graceful handling of network errors with configurable retry and fallback behavior - **Health Monitoring**: Track connection health and cache status via `/health` endpoint - **SOE Scaling Note**: `/soe` reports true 0–100% whereas `/api/system_status/soe` reports a 0–95% firmware-limited scale. Environment Variables Influencing Behavior: - `PW_CACHE_TTL` Cache duration (seconds) for key endpoints (default 30). - `PW_GRACEFUL_DEGRADATION` If enabled, reduces hard failures under transient errors. - `PW_FAIL_FAST` Return quickly on errors instead of longer retries. - `PW_SUPPRESS_NETWORK_ERRORS` Suppress repetitive network error logs. - `PW_NETWORK_ERROR_RATE_LIMIT` Rate limit interval (seconds) for repeated network error messages. - `PW_CONTROL_SECRET` Enables control endpoints & required `token` value. Authentication Overview: - Read-only endpoints generally need no client token; underlying gateway/cloud auth is handled internally. - Control endpoints always require `token=`. Error Responses (examples): | Scenario | HTTP | JSON | |----------|------|------| | Control disabled | 200 | `{ "error": "Control Commands Disabled - Set PW_CONTROL_SECRET to enable" }` | | Missing/invalid token | 403 | `{ "error": "Unauthorized" }` | | Invalid value | 400 | `{ "error": "Invalid Value" }` | | Upstream failure | 500 | `{ "error": "Request Failed" }` | Sample JSON Snippets: ```json // /aggregates - abbreviated { "site": { "instant_power": -2626, }, "battery": { "instant_power": -2280.0000000000005, }, "load": { "instant_power": 946.25, }, "solar": { "instant_power": 5860, } } // /health - abbreviated { "pypowerwall": "0.14.1 Proxy t81", "cache_ttl_seconds": 30, "graceful_degradation": true, "fail_fast_mode": false, "health_check_enabled": true, "startup_time": "2025-09-05T23:21:42", "current_time": "2025-09-14T11:58:57.239988", "proxy_stats": {}, "connection_health": {}, "cached_data": {}, "endpoint_statistics": {} } // POST /control/reserve success {"reserve": "Set Successfully"} // POST /control/reserve invalid token {"error": "Unauthorized"} // GET /control/max_backup (active event) {"manual_backup": {"start_time": 1772813197, "duration_seconds": 3600, "end_time": 1772816797, "active": true, "priority": 18446744073709551615}, "backup_events": []} // GET /control/max_backup (no active event) {"manual_backup": null, "backup_events": []} // POST /control/max_backup schedule success {"max_backup": "Scheduled for 3600 seconds"} // POST /control/max_backup cancel success {"max_backup": "Cancelled"} // /fans/pw {"FAN1_actual": 1180, "FAN1_target": 1200, "FAN2_actual": 1175, "FAN2_target": 1200} ``` For configuration options, see [proxy/README.md](https://github.com/jasonacox/pypowerwall/blob/main/proxy/README.md). --- ## Notes - All endpoints return JSON unless otherwise noted. - Key metric endpoints (`/aggregates`, `/soe`, `/vitals`, `/strings`) return `null` when no fresh or valid cached data is available (after TTL expiry). - Some endpoints require local mode or specific configuration (see server documentation). - For more details, see the main project [README.md](https://github.com/jasonacox/pypowerwall/blob/main/README.md). ### API Changes Refer to `proxy/RELEASE.md` for history (e.g., t82 added `/control/grid_charging` & `/control/grid_export`, t89 added `/control/max_backup`). ================================================ FILE: proxy/Dockerfile ================================================ FROM python:3.10-alpine WORKDIR /app # Install system dependencies RUN apk add --no-cache git curl # Install pypowerwall and proxy dependencies COPY requirements.txt /tmp/requirements.txt RUN pip3 install --no-cache-dir -r /tmp/requirements.txt # Copy proxy server files (only runtime-needed files) COPY server.py transform.py __init__.py /app/ COPY web/ /app/web/ EXPOSE 8675 CMD ["python3", "server.py"] ================================================ FILE: proxy/Dockerfile.beta ================================================ FROM python:3.10-alpine WORKDIR /app # Install git (and build dependencies if needed) RUN apk add --no-cache git curl COPY beta.txt /app/requirements.txt RUN pip3 install --no-cache-dir -r requirements.txt # Copy proxy server files (only runtime-needed files) COPY server.py transform.py __init__.py /app/ COPY web/ /app/web/ # Copy local pypowerwall source for beta testing (placed here by upload-beta.sh) COPY pypowerwall/ /app/pypowerwall/ EXPOSE 8675 CMD ["python3", "server.py"] ================================================ FILE: proxy/HELP.md ================================================ # pyPowerwall Proxy Help Besides providing authentication and payload caching, the Proxy exposes several APIs that aggregating Powerwall data into simple JSON output for convenient processing. It also provides several read-only pass through Powerwall API calls. See [README](https://github.com/jasonacox/pypowerwall/blob/main/proxy/README.md) for setup instructions. Please see [API.md](./API.md) for all proxy endpoints and usage. ## Release Notes Release notes are in the [RELEASE.md](https://github.com/jasonacox/pypowerwall/blob/main/proxy/RELEASE.md) file. ================================================ FILE: proxy/README.md ================================================ # pyPowerwall Proxy Server ![Docker Pulls](https://img.shields.io/docker/pulls/jasonacox/pypowerwall) This pyPowerwall Caching Proxy handles authentication to the Powerwall Gateway and will proxy API calls to /api/meters/aggregates (power metrics), /api/system_status/soe (battery level), and many others (see [API](https://github.com/jasonacox/pypowerwall/blob/main/proxy/API.md) for full list). With the instructions below, you can containerize this proxy and run it as an endpoint for tools like telegraf to pull metrics without needing to authenticate. **Cache**: Because pyPowerwall is designed to cache the auth and high frequency API calls and use HTTP persistent connections. This will help reduce the load on the Gateway and prevent crash/restart issues that can happen if too many session are created on the Gateway. Logic in pypowerwall will also activate cooldown modes if the Gateway responds with errors indicating overload. **Local or Cloud**: The proxy uses the built in abstraction of pypowerwall to operate in two modes: `local mode` and `cloud mode`. Local mode will connect directly with your Powerwall's Tesla Energy Gateway (TEG) to pull realtime data. Cloud mode will connect to the Tesla cloud APIs to pull realtime data. Cloud mode has lower fidelity than local mode and does not include some data points available on the the local API. **Control Mode**: An optional mode allows the proxy to send control commands to set backup reserve percentage and mode of the Powerwall. This requires that you set and use the `PW_CONTROL_SECRET` environmental variable. For safety reasons, this mode is disabled by default and should be used with caution. ## Quick Start 1. Run the Docker Container to listen on port 8675. Update the `-e` values for your Powerwall (see [Environmental Settings](https://github.com/jasonacox/pypowerwall/tree/main/proxy#environmental-settings) for options). Below are multiple examples depending on your desired access method. The local TEDAPI "full mode" access is recommended and works for all Powerwall systems (2, +, 3) but requires access to the Powerwall 192.168.91.1 (see [here](https://github.com/jasonacox/pypowerwall?tab=readme-ov-file#tedapi-mode---option-4)). The "cloud" mode example works for all systems and is required for Solar Only systems. ```bash # Local Access - TEDAPI "full mode" - Requires route to Powerwall 192.168.91.1 endpoint docker run \ -d \ -p 8675:8675 \ -e PW_PORT='8675' \ -e PW_HOST='192.168.91.1' \ -e PW_GW_PWD='Gateway_Password' \ -e PW_TIMEZONE='America/Chicago' \ -e TZ='America/Chicago' \ -e PW_CACHE_EXPIRE='5' \ -e PW_DEBUG='no' \ -e PW_HTTPS='no' \ -e PW_STYLE='clear' \ --name pypowerwall \ --restart unless-stopped \ jasonacox/pypowerwall # Local Access (Legacy) - Basic Metrics for PW2 and Pw+ systems (does not work for PW3) docker run \ -d \ -p 8675:8675 \ -e PW_PORT='8675' \ -e PW_PASSWORD='password' \ -e PW_EMAIL='email@example.com' \ -e PW_HOST='LAN_IP_of_Powerwall_Gateway' \ -e PW_GW_PWD='Optional_GW_Password_for_TEDAPI_hybrid_mode' \ -e PW_TIMEZONE='America/Los_Angeles' \ -e TZ='America/Los_Angeles' \ -e PW_CACHE_EXPIRE='5' \ -e PW_DEBUG='no' \ -e PW_HTTPS='no' \ -e PW_STYLE='clear' \ --name pypowerwall \ --restart unless-stopped \ jasonacox/pypowerwall # Note for TEDAPI hybrid mode PW_HOST must be set to 192.168.91.1 # Cloud Mode Setup - Basic Metrics for all Powerwall and Solar Only Systems docker run \ -d \ -p 8675:8675 \ -e PW_PORT='8675' \ -e PW_EMAIL='email@example.com' \ -e PW_HOST='' \ -e PW_TIMEZONE='America/Los_Angeles' \ -e TZ='America/Los_Angeles' \ -e PW_CACHE_EXPIRE='5' \ -e PW_DEBUG='no' \ -e PW_HTTPS='no' \ -e PW_STYLE='clear' \ --name pypowerwall \ --restart unless-stopped \ jasonacox/pypowerwall # Required login process for Cloud Mode docker exec -it pypowerwall python3 -m pypowerwall setup -email=email@example.com docker restart pypowerwall ``` 2. Test the Proxy ```bash # Get Powerwall Data curl -i http://localhost:8675/soe curl -i http://localhost:8675/aggregates curl -i http://localhost:8675/vitals curl -i http://localhost:8675/strings # Get Proxy Stats curl -i http://localhost:8675/stats # Clear Proxy Stats curl -i http://localhost:8675/stats/clear ``` ## Build Your Own This folder contains the `server.py` script that runs a simple python based webserver that makes the pyPowerwall API calls. The `Dockerfile` here will allow you to containerize the proxy server for clean installation and running. 1. Build the Docker Container ```bash # Build for local architecture docker build -t pypowerwall:latest . # Build for all architectures - requires Docker experimental docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t pypowerwall:latest . ``` 2. Setup the Docker Container to listen on port 8675. ```bash docker run \ -d \ -p 8675:8675 \ --name pypowerwall \ --restart unless-stopped \ pypowerwall ``` 3. Test the Proxy ```bash curl -i http://localhost:8675/soe curl -i http://localhost:8675/aggregates ``` Browse to http://localhost:8675/ to see Powerwall web interface. ## Power Flow Animation - Passthrough The Proxy will pass authenticated calls through to the Powerwall Web Interface allowing the display of the Power Flow Animation: [![flow.png](https://raw.githubusercontent.com/jasonacox/pypowerwall/main/docs/flow.png)](https://raw.githubusercontent.com/jasonacox/pypowerwall/main/docs/flow.png) This is available by directly accessing the proxy endpoint, https://localhost:8675 (replace localhost with the address of host running pyPowerWall Proxy). You can embed this animation within an iFrame. See [web/example.html](web/example.html). ## Browser Cache Control By default resources sent for the power flow animation passthrough are not cached by the browser. This includes fairly large CSS, JavaScript and Image PNG files which are downloaded every time the browser reloads the animation. Performance can be improved by directing the web browser to cache these resources locally - only reloading if the data in the cache is old, a period known as `max-age`. You can control this with an optional environment variable `PW_BROWSER_CACHE` which takes a value in seconds. For example, * PW_BROWSER_CACHE=86400 - set `max-age` to 24 hours. If `PW_BROWSER_CACHE` is not set, or set to zero, then no caching takes place. If you need to force a reload of the browser cache before `max-age` then most browsers will do this if you hold down the `shift` key while reloading the page. ## HTTPS Support (Experimental) The Proxy now supports https protocol using the optional environmental variable `PW_HTTPS`. This is useful for placing data in secured iFrame, including the power flow animation available via the Powerwall portal (https://localhost:8675/). There are three settings for PW_HTTPS: * PW_HTTPS='no' - This is default - run in HTTP mode only. * PW_HTTPS='http' - Run in HTTP mode but simulate HTTPS when behind https proxy. * PW_HTTPS='yes' - Run in HTTPS mode using self-signed certificate. ## Network Robustness for Weak WiFi The proxy includes advanced network error handling designed for environments with weak WiFi or unstable network connections. These features help ensure reliable operation with monitoring tools like Telegraf: ### Cache and Health Features * **Graceful Degradation** (PW_GRACEFUL_DEGRADATION=yes): Returns cached data when fresh data is unavailable, improving reliability for monitoring systems * **Health Monitoring** (PW_HEALTH_CHECK=yes): Tracks connection health and automatically enters degraded mode after consecutive failures * **Data Freshness** (PW_CACHE_TTL=30): Controls maximum age for cached data - returns null instead of stale data after TTL expires * **Fail-Fast Mode** (PW_FAIL_FAST=no): When enabled, returns immediately in degraded mode instead of waiting for timeouts ### Error Handling * **Error Suppression** (PW_SUPPRESS_NETWORK_ERRORS=no): Suppresses individual network error logs, showing summary reports every 5 minutes instead * **Rate Limiting** (PW_NETWORK_ERROR_RATE_LIMIT=5): Limits network error logging to N errors per minute per function ### Health Monitoring Endpoints * **`/health`** - Returns connection health status, cache information, and feature configuration * **`/health/reset`** - Resets health counters and clears cached data * **`/stats`** - Includes connection health metrics when health monitoring is enabled ### Example Configuration for Poor Network Conditions ```bash docker run \ -d \ -p 8675:8675 \ -e PW_HOST='192.168.91.1' \ -e PW_GW_PWD='Gateway_Password' \ -e PW_TIMEOUT='3' \ -e PW_SUPPRESS_NETWORK_ERRORS='yes' \ -e PW_FAIL_FAST='yes' \ -e PW_CACHE_TTL='60' \ --name pypowerwall \ --restart unless-stopped \ jasonacox/pypowerwall ``` ### Data Quality Guarantees The proxy prioritizes data freshness over availability. Key endpoints (`/aggregates`, `/soe`, `/vitals`, `/strings`) return: - Fresh data when available - Cached data if recent (within PW_CACHE_TTL) - `null` when no fresh or recent cached data exists (never returns fake/zero values) This ensures monitoring systems can distinguish between actual zero values and missing/stale data. ## Troubleshooting Help If you see python errors, make sure you entered your credentials correctly in `docker run`. ```bash # See the logs docker logs pypowerwall # Stop the server docker stop pypowerwall # Start the server docker start pypowerwall ``` Content does not render in iFrame or prompts you for a login: * Browser may be set to never accept third party cookies. The web app requires cookies and in an iFrame it will look like a third party, [see here](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB#security)). * iFrame doesn't render. Make sure the browser is not running in incognito mode. Try other browsers. ## API Help Documentation for using the API is located in [API.md](https://github.com/jasonacox/pypowerwall/blob/main/proxy/API.md#release-notes). ## Environmental Settings The pyPowerwall Proxy will react to the following environmental variables with (defaults): Powerwall Settings * PW_GW_PWD - Powerwall gateway (or PW3) password [required for TEDAPI extended metrics mode] * PW_EMAIL - Powerwall customer email ("email@example.com") [required for cloudmode] * PW_HOST - Powerwall hostname or IP address ("hostname") [required for local mode, e.g. 192.168.91.1] * PW_TIMEZONE - Local timezone ("America/Los_Angeles") [optional] * PW_PASSWORD - Powerwall customer password ("password") [optional PW2 local access mode] Proxy Settings * PW_BIND_ADDRESS - IP address ("") - Required * PW_PORT - TCP port ("8675") * PW_DEBUG - Turn on debug logging ("no") * PW_CACHE_EXPIRE - Time to cache responses from Powerwall in sec ("5") * PW_BROWSER_CACHE - Sets Cache-Control for browser in sec ("0" = no-cache) * PW_TIMEOUT - Timeout waiting for Powerwall to respond in sec ("10") * PW_POOL_MAXSIZE - Concurrent connections to Powerwall ("15") * PW_HTTPS - Set https mode - see HTTPS section above ("no") Network Robustness Settings * PW_SUPPRESS_NETWORK_ERRORS - Suppress individual network error logs ("no") - When enabled, shows summary reports every 5 minutes instead * PW_NETWORK_ERROR_RATE_LIMIT - Limit network errors logged per minute per function ("5") * PW_FAIL_FAST - Return immediately when connection is degraded ("no") - Reduces timeout delays in poor network conditions * PW_GRACEFUL_DEGRADATION - Return cached data when fresh data unavailable ("yes") - Improves reliability for monitoring tools * PW_HEALTH_CHECK - Enable connection health monitoring and degraded mode detection ("yes") * PW_CACHE_TTL - Maximum age in seconds for cached data before returning null ("30") - Ensures data freshness over availability UI and Advanced Settings * PW_STYLE - Background color style for iframe [animation](http://localhost:8675/example.html) ("clear") - options: * clear (uses `transparent`) * black or dakboard (uses `#000` ![#000](https://via.placeholder.com/12/000/000000.png?text=+)) * white (uses `#ffffff` ![#ffffff](https://via.placeholder.com/12/ffffff/000000.png?text=+)) * grafana (uses `#161719` ![#161719](https://via.placeholder.com/12/161719/000000.png?text=+)) * grafana-dark (uses `#111217` ![#111217](https://via.placeholder.com/12/111217/000000.png?text=+)) * PW_AUTH_PATH - Location (path) for authentication and cache files ("") * PW_AUTH_MODE - Use `cookie` (default) or `token` for authentication * PW_CACHE_FILE - Proxy cache file path, with override PW_AUTH_PATH if provided (".powerwall") * PW_SITEID - For `cloud mode`, if you have multiple sites configured, use this site ID ("") * PW_CONTROL_SECRET - If provided, will activate the Powerwall control commands to adjust Powerwall backup reserve level and mode (disabled by default) * PROXY_BASE_URL - If you are using a reverse proxy to put pypowerwall in a subdirectory, set it here to adjust the URLs for the flow animation (`/` by default) ## Control Mode If the `PW_CONTROL_SECRET` environmental variable is set, the proxy will activate control endpoints for setting backup reserve, operation mode, grid charging, and grid export. **v1r LAN Control (Powerwall 3):** In v1r mode, control commands are sent directly over the wired LAN via config file writes — no cloud setup or Tesla account needed. Just set `PW_CONTROL_SECRET` alongside your v1r configuration. **Cloud Control (all other modes):** For WiFi TEDAPI, local, or cloud modes, the proxy connects to the Tesla cloud (FleetAPI or Cloud API) for control commands. The `PW_EMAIL` must match your Tesla account and you need to **Setup Cloud** (see details below in script) before using this mode. _WARNING_: Activating control mode means that the proxy can make changes to your system. This will be available to anyone who can access the proxy. For safety reasons, this mode is disabled by default and should be used with caution. ```bash # Run Proxy - v1r LAN mode with control (no cloud needed) docker run \ -d \ -p 8675:8675 \ -e PW_PORT='8675' \ -e PW_HOST='10.42.1.40' \ -e PW_GW_PWD='Gateway_Password' \ -e PW_TIMEZONE='America/Los_Angeles' \ -e TZ='America/Los_Angeles' \ -e PW_RSA_KEY_PATH='/app/.auth/tedapi_rsa_private.pem' \ -e PW_CONTROL_SECRET='YourSecretToken' \ -v /path/to/tedapi_rsa_private.pem:/app/.auth/tedapi_rsa_private.pem:ro \ --name pypowerwall \ --restart unless-stopped \ jasonacox/pypowerwall # Run Proxy - TEDAPI/local mode with cloud control docker run \ -d \ -p 8675:8675 \ -e PW_PORT='8675' \ -e PW_GW_PWD='Gateway_Password' \ -e PW_HOST='192.168.91.1' \ -e PW_TIMEZONE='America/Los_Angeles' \ -e TZ='America/Los_Angeles' \ -e PW_EMAIL='email@example.com' \ -e PW_CONTROL_SECRET='YourSecretToken' \ --name pypowerwall \ --restart unless-stopped \ jasonacox/pypowerwall # Setup Cloud (only needed for non-v1r modes) docker exec -it pypowerwall python3 -m pypowerwall setup -email=email@example.com docker restart pypowerwall ``` APIs * Use `GET` method to read and `POST` to set. * Mode: `/control/mode` value=$MODE token=$PW_CONTROL_SECRET * Reserve: `/control/reserve` value=$RESERVE token=$PW_CONTROL_SECRET Examples ```bash export MODE=self_consumption export RESERVE=20 export PW_CONTROL_SECRET=YourSecretToken # Set Mode curl -X POST -d "value=$MODE&token=$PW_CONTROL_SECRET" http://localhost:8675/control/mode # Set Reserve curl -X POST -d "value=$RESERVE&token=$PW_CONTROL_SECRET" http://localhost:8675/control/reserve # Enable Grid Charging (true/false) curl -X POST -d "value=true&token=$PW_CONTROL_SECRET" http://localhost:8675/control/grid_charging # Set Grid Export (battery_ok, pv_only, or never) curl -X POST -d "value=battery_ok&token=$PW_CONTROL_SECRET" http://localhost:8675/control/grid_export # Schedule Max Backup for 1 hour (v1r only - sets reserve to 100%) curl -X POST -d "value=3600&token=$PW_CONTROL_SECRET" http://localhost:8675/control/max_backup # Cancel Max Backup (v1r only) curl -X POST -d "value=cancel&token=$PW_CONTROL_SECRET" http://localhost:8675/control/max_backup # Read Settings curl http://localhost:8675/control/mode curl http://localhost:8675/control/reserve curl http://localhost:8675/control/grid_charging curl http://localhost:8675/control/grid_export curl http://localhost:8675/control/max_backup ``` ## Performance Testing The proxy includes a performance testing script (`perf_test.py`) that helps analyze the response times and performance characteristics of your Powerwall proxy and underlying Powerwall system. This tool is invaluable for identifying slow endpoints, validating caching improvements, and ensuring optimal performance across all API routes. ### Purpose The performance test script: * **Tests response times** for all commonly used API endpoints based on real production usage patterns * **Provides comprehensive metrics** including average, minimum, and maximum response times * **Identifies optimization opportunities** by calculating impact scores (response time × usage frequency) * **Validates caching effectiveness** by showing dramatic improvements in cached vs uncached performance * **Monitors system health** across the full range of API calls your applications typically make ### Usage ```bash # Basic usage - test against default proxy (localhost:8675) cd proxy python perf_test.py # Test against different host/port python perf_test.py --host 192.168.1.100 --port 8675 # Custom number of test requests per route (default: 5) python perf_test.py --requests 10 # Test with timeout adjustment (default: 10 seconds) python perf_test.py --timeout 30 # Full example with all options python perf_test.py --host myproxy.local --port 9999 --requests 3 --timeout 15 ``` ### Output The script provides detailed performance analysis including: * **Per-route metrics**: Average, min, max response times with color-coded performance indicators * **Impact analysis**: Routes sorted by performance impact (response time × usage frequency) * **Optimization candidates**: Identifies the most critical routes for performance improvements * **Response size tracking**: Monitors payload sizes to identify potential bandwidth issues * **Overall statistics**: System-wide performance summary Example output shows routes color-coded by performance: * 🟢 **Green**: Good performance (< 100ms average) * 🟡 **Yellow**: Moderate performance (100ms - 500ms average) * 🔴 **Red**: Slow performance (> 500ms average) **Sample Output:** ``` Route Avg (ms) Min (ms) Max (ms) Usage Impact Size (B) ---------------------------------------------------------------------------------------------------- 🟡 /temps/pw 749.3 2.3 3731.4 3880 2907 2 🟡 /pod 669.3 1.6 3339.4 3880 2597 2016 🟢 /alerts/pw 399.8 2.7 1983.1 3881 1551 340 🟢 /api/meters/aggregates 145.2 2.7 709.5 7992 1160 2838 🟢 /strings 205.0 2.8 1010.1 3945 809 1801 🟢 /freq 196.7 1.7 974.5 3946 776 2284 🟢 /csv/v2 229.7 1.9 1139.2 1923 442 44 🟢 /csv 100.7 2.6 489.0 2614 263 39 🟢 /vitals 61.0 2.8 289.4 3946 241 7974 🟢 /api/system_status/grid_status 18.7 1.3 86.8 7992 149 68 🟢 /api/powerwalls 2.8 2.3 3.6 7992 22 7398 🟢 /api/sitemaster 2.5 1.8 3.2 7990 20 116 🟢 /soe 4.4 2.6 8.7 3880 17 34 🟢 /fans/pw 4.0 2.8 6.8 3880 15 2 🟢 /api/system_status/soe 1.7 1.2 2.4 7992 14 34 🟢 /version 28.7 1.5 135.6 461 13 47 🟢 /api/troubleshooting/problems 2.7 2.0 4.0 4049 11 16 🟢 /aggregates 2.5 2.0 3.3 3880 10 2838 🟢 /api/auth/toggle/supported 3.0 2.4 4.1 2071 6 31 🟢 /api/site_info 2.3 1.9 3.1 651 1 426 🟢 /stats 2.1 1.5 2.9 324 1 1845 🟢 /csv/v2?headers 293.2 2.3 1451.9 1 0 100 🟢 /api/status 3.8 2.6 7.0 2 0 312 🟢 /api/site_info/site_name 2.9 2.2 4.0 1 0 59 🟢 /api/customer/registration 2.5 1.6 3.8 1 0 41 🟢 /api/system_status/grid_faults 1.9 1.8 2.3 1 0 2 🟢 /api/networks 1.5 1.1 2.2 1 0 10 -------------------------------------------------------------------------------- OVERALL STATISTICS: Fastest route: 1.5ms Slowest route: 749.3ms Average response time: 116.2ms Total usage count: 87,176 🎯 TOP CANDIDATES (slow + high usage): 1. /temps/pw (749.3ms × 3880 = 2907s impact) 2. /pod (669.3ms × 3880 = 2597s impact) 3. /alerts/pw (399.8ms × 3881 = 1551s impact) 4. /api/meters/aggregates (145.2ms × 7992 = 1160s impact) 5. /strings (205.0ms × 3945 = 809s impact) 6. /freq (196.7ms × 3946 = 776s impact) 7. /csv/v2 (229.7ms × 1923 = 442s impact) 8. /csv (100.7ms × 2614 = 263s impact) 9. /csv/v2?headers (293.2ms × 1 = 0s impact) ``` ### When to Use * **After proxy setup**: Establish baseline performance metrics * **Performance optimization**: Before/after testing when implementing caching or other improvements * **System monitoring**: Regular checks to ensure consistent performance * **Troubleshooting**: Identify which specific routes are experiencing performance issues * **Capacity planning**: Understand system behavior under different loads The script tests 27 different API routes based on real production usage patterns, ensuring comprehensive coverage of your proxy's performance characteristics. ## Release Notes Release notes are in the [RELEASE.md](https://github.com/jasonacox/pypowerwall/blob/main/proxy/RELEASE.md) file. ================================================ FILE: proxy/RELEASE.md ================================================ ## pyPowerwall Proxy Release Notes ### Proxy t89 (6 Mar 2026) * Added `/control/max_backup` endpoint for scheduling, cancelling, and querying max backup events over v1r LAN * Uses TEGMessages protobuf commands (fields 45-50) — same mechanism as the Tesla app's Storm Watch * Auto-cancels existing events before scheduling new ones; auto-cleans expired events on GET queries ### Proxy t88 (6 Jan 2026) * Upgraded to pyPowerwall v0.14.6 with support for firmware 25.42.2+ gzip-compressed TEDAPI responses * Added gzip decompression support for Gateway firmware 25.42.2 and later * Improved error handling for UnicodeDecodeError in DIN decode operations * Maintains backward compatibility with older firmware versions ### Proxy t87 (29 Dec 2025) * Updated Proxy power flow animation to match Powerflow Dashboard color scheme. | Swatch | Hex | RGB | Use Case | |------|------|------|---------| | image | `#FADE2A` | `rgb(250, 222, 42)` | Solar | | image | `#73BF69` | `rgb(115, 191, 105)` | Powerwall Metrics (Note `#00D000` used for energy flow.) | | image | `#5794F2` | `rgb(87, 148, 242)` | Home | | image | `#B877D9` | `rgb(184, 119, 217)` | Grid | ### Proxy t86 (20 Dec 2025) * **Performance Caching System**: - Added comprehensive performance caching layer for high-impact API routes - Implemented `cached_route_handler()` pattern for consistent cache management across endpoints - Added performance caching to: `/aggregates`, `/api/meters/aggregates`, `/vitals`, `/strings`, `/temps/pw`, `/alerts/pw`, `/freq`, `/pod`, `/json`, `/csv`, `/csv/v2` endpoints - Shared cache optimization: `/aggregates` and `/api/meters/aggregates` use same cache key for identical payloads - Optimized `/csv` and `/json` endpoints from 9 API calls to 6 calls (33% reduction) using aggregates consolidation - Eliminated 400-600ms overhead from redundant `get_components()` fallback calls - Typical performance improvements: 99.6% faster cached responses (764ms → 2.9ms for `/aggregates`) - Cache memory monitoring added to `/stats` endpoint with detailed memory usage breakdown - Average overall response time improvement: 58% reduction (165.7ms → 70.2ms) **Performance Metrics Comparison:** | API Route | Before (ms) | After (ms) | Improvement | Usage Count | Impact Reduction | |-----------|-------------|------------|-------------|-------------|------------------| | `/api/meters/aggregates` | 821.5 | 151.3 | **81.6%** ⚡ | 7,992 | 5,355 seconds saved | | `/aggregates` | 764.8 | 150.7 | **80.3%** ⚡ | 3,880 | 2,383 seconds saved | | `/strings` | 545.7 | 37.3 | **93.2%** ⚡ | 3,945 | 2,006 seconds saved | | `/vitals` | 339.3 | 33.9 | **90.0%** ⚡ | 3,946 | 1,205 seconds saved | | `/alerts/pw` | 382.9 | 87.8 | **77.1%** 🚀 | 3,881 | 1,145 seconds saved | | `/temps/pw` | 266.0 | 253.6 | **4.7%** ✅ | 3,880 | 48 seconds saved | *Total Impact Reduction: ~12,142 seconds (3.4 hours) of response time saved per 8-hour period* * **Performance Testing Tool**: - Added `perf_test.py` script for comprehensive API performance testing and analysis - Tests 27 production API routes with impact scoring (response_time × usage_frequency) - Provides min/max/average response times with color-coded performance indicators * **Bug Fixes**: - Fixed undefined variable `cache_ttl_seconds` error in graceful degradation system - Fixed TypeError in `/csv/v2` endpoint: removed invalid `force=False` parameter from `level()`, `grid_status()`, and `get_reserve()` calls - Fixed variable shadowing bug in `grid_status()` method where `type` parameter shadowed Python's built-in `type()` function - Renamed `type` parameter to `output_type` throughout codebase for consistency and correctness * **Code Quality & Maintainability**: - Centralized cache logic in reusable helper functions for improved consistency - Improved error handling and logging in `safe_pw_call()` wrapper - Added unit tests for CSV endpoints (`TestCSVEndpoints` class with 7 test cases) - Enhanced error tracking with network error summaries and endpoint statistics - Enhanced documentation with comprehensive performance testing guide ### Proxy t85 (1 Dec 2025) * **Fix Expansion Pack Energy Data** ([#239](https://github.com/jasonacox/pypowerwall/pull/239)): - Removed complex subtraction-based energy calculation logic (83 lines) from `/pod` endpoint - Expansion packs now automatically appear via TEPOD entries from `vitals()` with accurate energy data - Simplified implementation relies on improved TEDAPI `get_pw3_vitals()` function that processes all BMS components - Better accuracy and reduced complexity for systems with battery expansion packs * Credit: @rlerdorf for expansion pack energy fix implementation ### Proxy t84 (29 Nov 2025) * **Powerwall 3 Battery Expansion Pack Support** ([#227](https://github.com/jasonacox/pypowerwall/issues/227), [#236](https://github.com/jasonacox/pypowerwall/pull/236)): - **Enhanced `/pod` endpoint**: Now detects and reports PW3 battery expansion packs (battery-only units without inverters) - Uses `get_blocks()` TEDAPI method to identify expansion packs with `Type: "BatteryExpansion"` - Calculates expansion pack energy by subtracting known battery values from system totals - For single expansion: displays individual energy metrics (`PW{N}_POD_nom_energy_remaining`, `PW{N}_POD_nom_full_pack_energy`) - For multiple expansions: first entry shows combined totals with "(combined)" suffix, additional entries show `null` values (individual data not exposed by Tesla) - Expansion pack entries include part number, serial number, and placeholder status fields * **TEMSA/MSA Grid Meter Support for Powerwall 3** ([#236](https://github.com/jasonacox/pypowerwall/pull/236)): - **Enhanced `/vitals` endpoint**: Added support for PW3 TEMSA/MSA backup switch grid meter data - PW3 fallback logic: reads MSA data from `components.msa` when `esCan.bus.MSA` is unavailable - Automatic signals array format conversion to expected dictionary structure - Voltage reference mapping: converts PW3 ground-referenced voltages (VL1G/VL2G/VL3G) to neutral-referenced (VL1N/VL2N/VL3N) for consistency - TEMSA block includes grid voltage, current, and instantaneous power readings for monitoring backup switch/grid connection * Credit: @rlerdorf for battery expansion pack and TEMSA/MSA grid meter implementation ### Proxy t83 (5 Oct 2025) * dd curl to Dockerfiles to use in healthchecks instead of wget by @goodoldme in http://github.com/jasonacox/pypowerwall/pull/223. ### Proxy t82 (6 Sep 2025) * **Enhanced Control API**: Added new `/control` routes for grid charging and export management - **GET `/control/grid_charging`**: Retrieve current grid charging configuration and status - **POST `/control/grid_charging`**: Enable/disable grid charging with configurable parameters - **GET `/control/grid_export`**: Get current grid export settings and state - **POST `/control/grid_export`**: Control grid export behavior and limits - Provides comprehensive control over Powerwall grid interaction modes for advanced energy management ### Proxy t81 (9 Aug 2025) * Improve error logging: show poll() target URI on bad payload (TypeError) instead of generic message. * Build descriptive function/endpoint name only when an error occurs (no added overhead on success path). * Refactor safe_pw_call exception handlers to remove redundant code. No API or config changes. ### Proxy t80 (24 Jul 2025) * **Connection Health Robustness Fix** ([#651](https://github.com/jasonacox/Powerwall-Dashboard/issues/651#issuecomment-3114228456)): - Fixed issue where `consecutive_failures` in connection health tracking could reset to zero even when the Powerwall connection was not restored. - Now, health tracking only resets on true, fresh connection success (not when returning cached or fallback responses). - Prevents misleading health status and ensures degraded mode is only exited after real network/API recovery. - Improves reliability of `/health` and monitoring endpoints under extended network outages or degraded conditions. * **Internal Refactoring**: - Audited and updated health tracking logic in `safe_pw_call` and `safe_endpoint_call` wrappers to ensure correct behavior. - No user-facing API changes, but improved accuracy for health metrics and logs. * **Documentation**: - Updated release notes to clarify health tracking behavior and robustness improvements for network error handling. ### Proxy t79 (16 Jul 2025) * **Enhanced Health Endpoint**: Added pypowerwall version and proxy build information to `/health` endpoint for better version tracking and debugging - Health response now includes: `"pypowerwall": "0.13.2 Proxy t79"` combining version and build info in consistent format * **Code Quality**: Added flake8 configuration (`.flake8`) and cleaned up trailing whitespace issues - Configured to ignore common acceptable lint errors (E501, W503, E722) - Fixed trailing whitespace issues throughout proxy codebase ### Proxy t78 (14 Jul 2025) * Power flow animation update: Show an image of a Powerwall 3 instead of a Powerwall 2 if it is a PW3 by @JEMcats in https://github.com/jasonacox/pypowerwall/pull/193 ### Proxy t77 (11 Jul 2025) * **TEDAPI Lock Optimization and Error Handling**: Enhanced proxy stability and performance with comprehensive fixes for TEDAPI-related issues. - **Fixed KeyError exceptions** in proxy server when status response missing `version` or `git_hash` keys by implementing defensive key access with `.get()` method - **Fixed KeyError exceptions** when auth dictionary missing `AuthCookie` or `UserRecord` keys in cookie mode, now uses safe fallbacks - **TEDAPI Performance Improvements**: Optimized core TEDAPI functions (`get_config`, `get_status`, `get_device_controller`, `get_firmware_version`, `get_components`, `get_battery_block`) with cache-before-lock pattern to reduce lock contention - **Removed redundant API calls** in TEDAPI wrapper functions to improve response times - **Enhanced multi-threading support** for concurrent proxy requests with reduced lock timeout errors - **Improved error resilience** for different connection modes (local vs TEDAPI) that return varying data structures * **Enhanced Health Monitoring**: Added comprehensive endpoint statistics tracking for better observability and debugging. - **Endpoint Call Statistics**: Added tracking of successful and failed API calls per endpoint with success rate calculations - **Enhanced `/health` endpoint**: Now includes detailed statistics showing: - Total calls, successful calls, and failed calls per endpoint - Success rate percentage for each endpoint - Time since last success and last failure for each endpoint - Overall proxy response counters (total_gets, total_posts, total_errors, total_timeouts) - **Improved `/health/reset` endpoint**: Now also clears endpoint statistics along with health counters and cache - **Automatic tracking**: All endpoints using `safe_endpoint_call()` automatically tracked (includes `/aggregates`, `/soe`, `/vitals`, `/strings`, etc.) ### Proxy t76 (6 Jul 2025) * **Advanced Network Robustness Features**: Added comprehensive connection health monitoring and graceful degradation for improved reliability under poor network conditions, especially for frequent polling scenarios (e.g., telegraf every 5s). - **Connection Health Monitoring** (`PW_HEALTH_CHECK=yes`, default enabled): - Tracks consecutive failures, total error/success counts, and connection status - Automatically enters "degraded mode" after 5 consecutive failures - Exits degraded mode after 3 consecutive successes - Provides health status via `/health` endpoint for external monitoring - **Fail-Fast Mode** (`PW_FAIL_FAST=yes`, default disabled): - When connection is in degraded state, immediately returns cached/empty data - Prevents timeout delays for rapid polling scenarios - Reduces system load during extended network outages - **Graceful Degradation** (`PW_GRACEFUL_DEGRADATION=yes`, default enabled): - Maintains cache of last successful responses (TTL: 5 minutes) - Returns cached data when fresh data is unavailable - Ensures telegraf and other pollers receive valid data structures even during outages - Automatic cache size management (max 50 entries) - **Telegraf-Optimized Fallbacks**: - `/aggregates` returns minimal valid power structure on failure - `/soe` returns `{"percentage": 0}` on failure - CSV endpoints return zero values instead of empty responses - Maintains data type consistency for monitoring tools - **Enhanced API Endpoints**: - `/health` - Connection health status and feature configuration - `/health/reset` - Reset health counters and clear cache - `/stats` - Now includes connection health metrics when enabled - **Improved Error Handling**: - Enhanced `safe_pw_call()` with health tracking integration - New `safe_endpoint_call()` wrapper with automatic caching for JSON endpoints - Better separation of network vs API errors for targeted handling - **Configuration Options**: - `PW_FAIL_FAST=yes/no` - Enable fail-fast mode (default: no) - `PW_GRACEFUL_DEGRADATION=yes/no` - Enable cached fallbacks (default: yes) - `PW_HEALTH_CHECK=yes/no` - Enable health monitoring (default: yes) - **Operational Benefits**: - Reduced timeout delays during network issues (fail-fast mode) - Improved telegraf reliability with consistent data structures - Better visibility into connection issues via health endpoints - Automatic recovery detection and logging - Memory-efficient caching with automatic cleanup * **Weak WiFi / Network Error Optimization**: Added specialized handling for environments with poor network connectivity. - **Enhanced Exception Coverage**: Now catches all requests and urllib3 timeout/connection exceptions (ReadTimeout, ConnectTimeout, MaxRetryError, etc.) - **Rate Limiting**: Network errors are rate-limited to prevent log spam (default: 5 errors per minute per function) - **Summary Reporting**: Periodic summary reports (every 5 minutes) show network error counts instead of individual error logs - **Configurable Suppression**: - `PW_SUPPRESS_NETWORK_ERRORS=yes` - Completely suppress individual network error logs (summary only) - `PW_NETWORK_ERROR_RATE_LIMIT=N` - Set max network errors logged per minute per function (default: 5) - **Thread Safety**: Added proper locking for all global statistics and error tracking - **Log Level Optimization**: Network errors use INFO level, API errors use WARNING level to reduce noise * **Enhanced Error Handling**: Implemented global exception handling for all pypowerwall function calls to provide clean error logging instead of deep stack traces. - Added `safe_pw_call()` wrapper function that catches and handles pypowerwall-specific exceptions - Catches connection errors (ConnectionError, TimeoutError, OSError) and logs descriptive messages - Catches pypowerwall API exceptions (InvalidConfigurationParameter, TEDAPI, FleetAPI errors) - Maintains API functionality through graceful error responses (returns "TIMEOUT!" for failed calls) - Improves debugging with clean, descriptive error messages identifying the failing function - Error Statistics: Automatically increments `proxystats['errors']` for API errors and `proxystats['timeout']` for connection/timeout errors - Example log messages: `"Powerwall API Error in poll: Connection timeout"`, `"Connection Error in vitals: Network unreachable"` ### Proxy t75 (12 Jun 2025) * Fix errant API base URL check - This PR fixes an API base URL check by removing an unreachable validation branch. ### Proxy t74 (12 May 2025) * Add additional data elements to `/json` route: ```json { "grid": 2423, "home": 3708.5000000000005, "solar": 1307, "battery": -26, "soe": 70.88757396449705, "grid_status": 1, "reserve": 70.0, "time_remaining_hours": 8.076041526223541, "full_pack_energy": 42250, "energy_remaining": 29950.000000000004, "strings": { "A": { "State": "Pv_Active", "Voltage": 188, "Current": 1.5999999999999996, "Power": 300.79999999999995, "Connected": true }, "B": { "State": "Pv_Active", "Voltage": 318, "Current": 1.2999999999999998, "Power": 413.3999999999999, "Connected": true }, "C": { "State": "Pv_Active", "Voltage": 152, "Current": 1.7499999999999998, "Power": 265.99999999999994, "Connected": true }, "D": { "State": "Pv_Active", "Voltage": 190, "Current": 1.7499999999999998, "Power": 332.49999999999994, "Connected": true }, "E": { "State": "Pv_Active", "Voltage": 0, "Current": 0.09999999999999964, "Power": 0.0, "Connected": true }, "F": { "State": "Pv_Active_Parallel", "Voltage": 0, "Current": 0, "Power": 0, "Connected": true } } } ``` ### Proxy t73 (10 May 2025) * Add `/json` route to return basic metrics: ```json { "grid": -3, "home": 917.5, "solar": 5930, "battery": -5030, "soe": 61.391932759907306, "grid_status": 1, "reserve": 20, "time_remaining_hours": 17.03651226158038 } ``` ### Proxy t72 (16 Apr 2025) * Add routes to map library functions into `/pw/` APIs (e.g. /pw/power) ### Proxy t71 (6 Apr 2025) * Add routes for fan speeds: `/fans` and `/fans/pw` (simple enumerated values for dashboard) * Add API routes /pw/* to expose Powerwall() API methods (e.g. /pw/power) by @JohnJ9ml in https://github.com/jasonacox/pypowerwall/pull/166 ### Proxy t70 (25 Mar 2025) pyPowerwall v0.12.9: * Add PVAC fan speeds to TEDAPI vitals monitoring (PVAC_Fan_Speed_Actual_RPM and PVAC_Fan_Speed_Target_RPM). * Avoid divide by zero when nominalFullPackEnergyWh is zero by @rlpm in #150 * Add thread locking to TEDAPI by @Nexarian in #148 Proxy: * Add PROXY_BASE_URL option for reverse proxying by @mccahan in https://github.com/jasonacox/pypowerwall/pull/155 * Fix issue with visualization showing blank with multiple tabs by @mccahan in https://github.com/jasonacox/pypowerwall/pull/156 ### Proxy t69 (15 Mar 2025) * pyPowerwall v0.12.7 - Added new data features (Neurio Vitals, Aggregates Data) and fixed a critical issue (SystemConnectedToGrid Fix) while normalizing Alerts. * Add option to get CSV headers by @mccahan in https://github.com/jasonacox/pypowerwall/pull/149 ```bash curl http://localhost:8675/csv/v2?headers curl http://localhost:8675/csv?headers ``` ### Proxy t68 (20 Jan 2025) * pyPowerwall v0.12.3 - Adds Custom GW IP for TEDAPI. * Add new API /csv/v2 which extends /csv by adding grids status (1/0) and battery reserve (%)setting: ```python # Grid,Home,Solar,Battery,Battery_Level,Grid_Status,Reserve ``` ### Proxy t67 (26 Dec 2024) * pyPowerwall v0.12.2 - Fix bug in cache timeout code that was not honoring pwcacheexpire setting. Raised by @erikgiesele in https://github.com/jasonacox/pypowerwall/issues/122 - PW_CACHE_EXPIRE=0 not possible? (Proxy) * Add WARNING log in proxy for settings below 5s. ### Proxy t66 * pyPowerwall v0.12.0 ### Proxy t65 (22 Nov 2024) * Add `PW_NEG_SOLAR` config option and logic to remove negative solar values for /aggregates and /csv APIs * Update http://pypowerwall:8675/stats and http://pypowerwall:8675/help to show config data. * PR https://github.com/jasonacox/pypowerwall/pull/113 ### Proxy t64 (1 Sep 2024) * Add PW3 features for pypowerwall v0.11.0 Updated APIs with PW3 payloads: * http://localhost:8675/vitals * http://localhost:8675/help (pw3 flag True/False) * http://localhost:8675/tedapi/components * http://localhost:8675/tedapi/battery ### Proxy t63 (15 Jun 2024) * Address pyLint code cleanup and minor command mode fixes. ### Proxy t62 (13 Jun 2024) * Add battery full_pack and remaining energy data to `/pod` API call for all cases. ### Proxy t61 (9 Jun 2024) * Fix 404 bug that would throw error when user requested non-supported URI. * Add TEDAPI mode to stats. ### Proxy t60 (9 Jun 2024) * Add error handling for `/csv` API to accommodate `None` data points. ### Proxy t59 (8 Jun 2024) * Minor fix to send less ambiguous debug information during client disconnects. * Update Neurio block to include correct location and adjust RealPower based on power scale factor. ### Proxy t58 (2 Jun 2024) * Add support for pypowerwall v0.10.0 and TEDAPI with environmental variable `PW_GW_PWD` for Gateway Password. This unlocks new device vitals metrics (as seen with `/vitals`). It requires the user to have access to the Powerwall Gateway at 192.168.91.1, either via WiFi for by adding a route to their host or network. * Add FleetAPI, Cloud and TEDAPI specific GET calls, `/fleetapi`, `/cloud`, and `/tedapi` respectively. ### Proxy t57 (15 May 2024) * Add pypowerwall v0.9.0 capabilities, specifically supporting Tesla FleetAPI for cloud connections (main data and control). ### Proxy t56 (14 May 2024) * Fix error with site_name on Solar Only systems. ### Proxy t55 (4 May 2024) * Fix `/pod` API to add `time_remaining_hours` and `backup_reserve_percent` for cloud mode. * Replaced t54 - Move control to POST see https://github.com/jasonacox/pypowerwall/issues/87 * Added GET APIs to retrieve backup reserve and operating mode settings * Added POST command APIs to set backup reserve and operating mode settings. **Requires setting `PW_CONTROL_SECRET` for the proxy. Use with caution.** ```bash # Set Mode export MODE=self_consumption export RESERVE=20 export PW_CONTROL_SECRET=mySecretKey curl -X POST -d "value=$MODE&token=$PW_CONTROL_SECRET" http://localhost:8675/control/mode # Set Reserve curl -X POST -d "value=$RESERVE&token=$PW_CONTROL_SECRET" http://localhost:8675/control/reserve # Read Settings curl http://localhost:8675/control/mode curl http://localhost:8675/control/reserve ``` ### Proxy t53 (11 Apr 2024) * Add DISABLED API handling logic. ### Proxy t52 (5 Apr 2024) * Update to pyPowerwall proxy v0.8.1 ### Proxy t51 (18 Mar 2024) * Update to pypowerwall 0.8.0 * Minor bug fixes. ### Proxy t43 (17 Mar 2024) * Update to pypowerwall 0.7.12 and add `/api/solar_powerwall` to ALLOWLIST. Using new API, proxy is able to produce `/alerts/` list and some `/strings` data for newer Firmware version (>23.44) that no longer support the vitals API. ### Proxy t42 (3 Mar 2024) * Add Power Flow Animation style (set `PW_STYLE="solar"`) for Solar-Only display. Removes the Powerwall image and related text to display a Grid + Solar + Home powerflow animation. image ### Proxy t41 (25 Feb 2024) * Bug fixes for Solar-Only systems using `cloud mode` (see https://github.com/jasonacox/Powerwall-Dashboard/issues/437). ### Proxy t40 (20 Jan 2024) * Use /api/system_status battery blocks data to augment /pod and /freq macro data APIs. ### Proxy t39 (12 Jan 2024) * Fix Critical Bug - 404 HTTP Status Code Handling (Issue https://github.com/jasonacox/pypowerwall/issues/65). ### Proxy t36 (30 Dec 2023) * Add `PW_AUTH_PATH` to set location for cloud auth and site files. ### Proxy t35 (29 Dec 2023) * Add `cloudmode` support for pypowerwall v0.7.1. ### Proxy t32 (20 Dec 2023) * Fix "flashing animation" problem by matching `hash` variable in index.html to firmware version `git_hash`. ### Proxy t29 (16 Dec 2023) * Default page rendered by proxy (http://pypowerwall/) will render Powerflow Animation * Animation assets (html, css, js, images, fonts, svg) will render from local filesystem instead of pulling from Powerwall TEG portal. * Start prep for possible API removals from Powerwall TEG portal (see NOAPI settings) ### Proxy t28 (14 Oct 2023) * Add a `grafana-dark` style for `PW_STYLE` settings to accommodate placing as iframe in newer Grafana versions (e.g. v9.4.14). See https://github.com/jasonacox/Powerwall-Dashboard/discussions/371. ### Proxy t27 (23 Sep 2023) * Add Add Graceful Exit with SIGTERM to fix condition where container does not stop gracefully as raised in https://github.com/jasonacox/pypowerwall/pull/49 by @rcasta74 . ### Proxy t26 (4 May 2023) * Update default `PW_POOL_MAXSIZE` from 10 to 15 to help address "Connection pool is full" errors reported by @jgleigh in https://github.com/jasonacox/Powerwall-Dashboard/discussions/261 - May the 4th be with you! ### Proxy t25 (21 Mar 2023) * Fix Cache-Control no-cache header and added option to set max-age, fixes #31 by @dkerr64 in https://github.com/jasonacox/pypowerwall/pull/32 ### Proxy t24 (16 Jan 2023) * Added new alerts endpoint ('/alerts/pw') for retrieving the data in dictionary/object format (helps with telegraf usage). ### Proxy t23 (8 Jan 2023) * Updated to Python 3.10 ### Proxy t22 (23 Nov 2022) * Added Powerwall Firmware version display to Power Flow Animation ### Proxy t20 t21 (23 Nov 2022) * Added cache logic to better handle Powerwall firmware upgrades. ### Proxy t19 (15 Oct 2022) * Fix `clear.js` (and others) to hide the compliance link button in the animation caused by the latest Powerwall firmware upgrade (22.26.1-foxtrot) ### Proxy t18 (8 Oct 2022) * Fix Bug with `/version` for version numbers with alpha characters. #24 * Added error handling for socket error when sending response. * Added uptime field for stats ('/stats') API. * Enhanced help API ('/help') to provide HTML stats page and link to API documentation. * Improved logging with timestamps. ### Proxy t17 (26 July 2022) * Released with pyPowerwall v0.6.0 Enhancement * Added HTTP persistent connections for API requests to Powerwall Gateway by @mcbirse in #21 * Requests to Gateway will now re-use persistent http connections which reduces load and increases response time. * Added env PW_POOL_MAXSIZE to proxy server to allow this to be controlled (persistent connections disabled if set to zero). * Added env PW_TIMEOUT to proxy server to allow timeout on requests to be adjusted. ### Proxy t16 (3 July 2022) * Add support for specifying a bind address by @zi0r in https://github.com/jasonacox/pypowerwall/pull/16 * Add shebang for direct execution by @zi0r in https://github.com/jasonacox/pypowerwall/pull/17 ### Proxy t15 * Breaking update to /api/system_status/soe endpoint that now provides the 95% scaled values. This was important to make sure the Power Flow animation matches the Tesla App. The /soe shortcut URL will continue to provide actual battery level (unscaled). See Issue https://github.com/jasonacox/Powerwall-Dashboard/issues/37 ### Proxy t14 * Bug fix to remove scrollbars from web view (see https://github.com/jasonacox/pypowerwall/pull/15 and https://github.com/jasonacox/Powerwall-Dashboard/issues/29) thanks to @danisla. ### Proxy t13 * Added ability to change the style of the power flow animation background color: `clear` (default), `black`, `white`, `grafana` gray, and `dakboard` black. Set using `PW_STYLE` environment variable: ```bash export PW_STYLE="clear" ``` ### Proxy t12 * Added ability to proxy Powerwall web interface for power flow animation (by @danisla). #14 * Added optional HTTPS support for iframe compatibility via `PW_HTTPS` environment variable: ```bash # Turn on experimental HTTPS mode export PW_PORT="8676" export PW_PASSWORD="password" export PW_EMAIL="name@example.com" export PW_HOST="10.0.1.73" export PW_TIMEZONE="America/Los_Angeles" export PW_CACHE_EXPIRE="5" export PW_DEBUG="no" export PW_HTTPS="yes" python3 server.py ``` ### Proxy t11 * Removed memory leak debug function. ### Proxy t10 * Bug Fix - ThreadingHTTPServer daemon_threads related memory leak fix. #13 * Proxy server memory metrics added to /stats response. ### Proxy t9 * Cleaned up /freq macro to better handle vitals response with missing ISLAND or METER metrics. ### Proxy t8 * Backup Switch: Added frequency, current and voltage for Backup Switch device. ### Proxy t7 * Bug Fix: Debug logging continued even when disable. * Force exit added for faster termination instead of waiting on connections to drain. ### Proxy t6 * Added /pod to provide battery state information (e.g. ActiveHeating, ChargeComplete, PermanentlyFaulted) with boolean values as integers (1/0). * Added /version to provide Powerwall TEG Firmware Version in string and integer value calculated from the semantic version (e.g. 21.1.1 = 210101). ### Proxy t5 * Added /alerts to provide list of alerts across devices. * Added /freq to provide Frequency, Current and Voltage data for Home, Grid, Powerwall. ### Proxy t4 * Added /temps (raw) and /temps/pw (aliased) to provide temperature data for Powerwalls. * Added /help to provide link to this page. ### Proxy t3 * Bug fix in NoneType for error counter. ### Proxy t2 * Added support for *allow list* of Powerwall API calls. ### Proxy t1 * Added multi-threading to HTTP handling using python ThreadingHTTPServer library. ================================================ FILE: proxy/__init__.py ================================================ ================================================ FILE: proxy/beta.txt ================================================ # This file is used to install the necessary Python packages for the project. requests protobuf>=3.20.0 python-dotenv pyroute2 bs4 python-dateutil ## TEMPORARY: Use local TeslaPy until next release is published to PyPI requests-oauthlib>=1.3.0 websocket-client>=0.59.0 cryptography ================================================ FILE: proxy/localhost.pem ================================================ -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDIrws/RUeO1Rni ir2ri+DXsCOiprIgLCF8Clrhd4Zyeeuvqjx6pcEKD/4cL42PqbuGErB7tKXr7vhS nghXHtAEOf1EDW7tpU40LvTXYceInoK0L+pS0Em3qeXcGp+7qVl3GczoUwBxqWSN jYzdsUiltiZVhNyLRYXmz/J1DXIOKAyUPmQTzHwS+c2kfVmpobBcgfwTBZW2PQ1H oZ0Iwq5rvwMScFySCnNn55uX+xuLc96T8gScTajb3BEbAbPykrSvk9CJW2MgdsAo 7gk0w1LPtyZuv6wNa+TLPiZ/pZOLBzuiOI7AzoyCalsGGuplSnL4R7bBkKzKdS8j yW60PNjrAgMBAAECggEBAJzs+/+Cvhz7mF0knoI5RB2FF6iFbz5nI9vqAPzTySdV HS5lERva52Nl9A+4Q5r2X7PMg4KIVUJzwGxiNSVi68iSS/BeDML6A3gcy8psJGo5 gP1DhpkxVKOw0BRYIVXObC4M18VHuk4m5oEmEeP9UFB8aedvmEGzoKxHKVHMrMZR uiuvhRYlg4MrJ0hngdoO7jqfg7F9tcw66qwoj0n88/aI9AxFzoYXB2Z/2y1yMeop Ctgqrvl7gMLHB+7jzcJuDnYJzdHJEo3Rgk7yaeLdjCyz66hUXskEe5wPRSj08qCT 2Ps+RaduUP6C9KxiAUTZjj56iAHDkocCX6nLomt98PkCgYEA6o7kk+YN1l/iXV5P E1DuQrpDxlj2ZezAU+3xl3rokqzE/ISD+A3jdMfBraqs4SkTrcTMd2srZbu3AEGd QBWd1KmR1zYUjqOg0Emo17sC3WoX8xOrjFwdjaoXSi0xD86PHEbi1pOwftnnR+hW Y0IuTqKIuW1BvTQikoy7sj+x/U0CgYEA2wds6/rWpFZg2pqPMc1x3ztRmwD44rzz PFg/bD36phTiGsooqdAo58n1YCaOYJt/ny1DPRMb6CXOPfF05O2bcA+OwBrZWU0f yd/vofS4w/Qe3yHAR7qZ5JJrHeu1e2a3L9I6vBbRaV1r0zkmL1p8J0CJYaAzZlNG VaeBzvuL8xcCgYAXxK0S85/5VjQJBBJ9QZkzN87AXalyQKBooNb3Y6QHoOxBLmh1 DWs8HTXaFE56boAo/qU9gKWgJHpx0zRNFyOsNhaqOTeyEJCuKpiqa6/poeOVZSvg CEGSZmb/xD6RfHvyAJjh54td/1S5a6i9XCp3G29BYvnjY1IRiaNHd77gjQKBgEhN YTVc7nH9WaeQEej8yrRIHp4uafpfKWQoNXeD1jPw/NqfFWFJJ9esIWYGFEXrzus6 w9Frd3Dg2f40sMPJc+BAIn1j34/NF8tKMw6hfESjV3WM7K5A+QAtHVMZNiVwONR+ b4kbdzFy918YpHRJSGaktTUW7yC+KJ+p1f3/p6ktAoGBAOXYAxIacvw2A9jfVXhX L6fQmN9BWzFbuJ6NSdO2Jqpbqc/BUZh8My9BX0CNcNaahqE4ohA+l/4mPO0EU7Oz 8AzU7jm42PD1AW5SWdmTJnUsF++pv75quGz4U+sm9UI9IWvw0J8OUs0ydFFh93Dw Ooeq2H0cXKBS9mGQZ8sdidVK -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIC3DCCAcSgAwIBAgIJANA/tohyxHNLMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV BAMTC3B5cG93ZXJ3YWxsMB4XDTIyMDUyMTA2NDQyN1oXDTMyMDUxODA2NDQyN1ow FjEUMBIGA1UEAxMLcHlwb3dlcndhbGwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQDIrws/RUeO1Rniir2ri+DXsCOiprIgLCF8Clrhd4Zyeeuvqjx6pcEK D/4cL42PqbuGErB7tKXr7vhSnghXHtAEOf1EDW7tpU40LvTXYceInoK0L+pS0Em3 qeXcGp+7qVl3GczoUwBxqWSNjYzdsUiltiZVhNyLRYXmz/J1DXIOKAyUPmQTzHwS +c2kfVmpobBcgfwTBZW2PQ1HoZ0Iwq5rvwMScFySCnNn55uX+xuLc96T8gScTajb 3BEbAbPykrSvk9CJW2MgdsAo7gk0w1LPtyZuv6wNa+TLPiZ/pZOLBzuiOI7AzoyC alsGGuplSnL4R7bBkKzKdS8jyW60PNjrAgMBAAGjLTArMBQGA1UdEQQNMAuCCWxv Y2FsaG9zdDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQsFAAOCAQEA xnTkShGWa+/o8886H8HAcHR6AtuMSn7H6wn2Pz5vHttFJsd5qy2Mzcrwvz7Fv8Wg iQkbsAeL730QExkc0+Un3bpj4MvMA/OhUzZlzM1OQCJSiCzpInC2sg7vgbbLbs/z Lrd4CMVrRpHnZ2vWxyTqDefzTkh5W5J0tIvPTxHwNuz0gaoBZWXxFYFl7mu8dE2Y yv0SUOrUkUDFhqbMmj+0rsV87ZHRcJ601IzoL2+/8XXO4lkYGgHMKhgmfchr3hDT QL8BwsJFPdS0BLypv0qU4MEnqgZxwkGeQ1083u2HfQjU9T6pYjOGEoP3LsgfLqZu WDL7pfRDmI3wTlyY5udCfA== -----END CERTIFICATE----- ================================================ FILE: proxy/perf_test.py ================================================ #!/usr/bin/env python3 """ Performance test script for pypowerwall proxy routes. Tests response times for various endpoints to identify slow routes. """ import time import requests import json import statistics from typing import Dict, List, Tuple, Optional import argparse import sys # Disable SSL warnings for self-signed certificates try: from urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) except ImportError: # Older urllib3 versions try: from urllib3.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) except ImportError: # If neither works, just skip the warning suppression pass # Test routes with their usage counts from past 8 hours TEST_ROUTES = { "/version": 461, "/api/sitemaster": 7990, "/api/powerwalls": 7992, "/api/troubleshooting/problems": 4049, "/api/auth/toggle/supported": 2071, "/api/system_status/grid_status": 7992, "/api/system_status/soe": 7992, "/api/meters/aggregates": 7992, "/csv/v2": 1923, "/freq": 3946, "/api/site_info": 651, "/csv": 2614, "/stats": 324, "/vitals": 3946, "/alerts/pw": 3881, "/fans/pw": 3880, "/soe": 3880, "/strings": 3945, "/temps/pw": 3880, "/pod": 3880, "/aggregates": 3880, # Additional minor routes found in production usage "/csv/v2?headers": 1, "/api/status": 2, "/api/customer/registration": 1, "/api/site_info/site_name": 1, "/api/networks": 1, "/api/system_status/grid_faults": 1 } class RoutePerformanceTester: def __init__(self, host: str = "localhost", port: int = 8675, timeout: int = 10): self.host = host self.port = port self.base_url = f"http://{host}:{port}" self.timeout = timeout self.session = requests.Session() def test_route(self, route: str, num_requests: int = 5) -> Dict: """Test a single route and return timing statistics.""" print(f"Testing {route}...", end=" ", flush=True) times = [] errors = [] response_sizes = [] status_codes = [] for i in range(num_requests): try: start_time = time.time() response = self.session.get( f"{self.base_url}{route}", timeout=self.timeout, verify=False ) end_time = time.time() response_time = (end_time - start_time) * 1000 # Convert to milliseconds times.append(response_time) status_codes.append(response.status_code) response_sizes.append(len(response.content)) except requests.exceptions.Timeout: errors.append(f"Request {i+1}: Timeout") except requests.exceptions.ConnectionError: errors.append(f"Request {i+1}: Connection Error") except Exception as e: errors.append(f"Request {i+1}: {str(e)}") if not times: print("FAILED - All requests failed") return { "route": route, "status": "FAILED", "errors": errors, "times": [], "stats": {} } # Calculate statistics stats = { "min_ms": min(times), "max_ms": max(times), "avg_ms": statistics.mean(times), "median_ms": statistics.median(times), "std_dev_ms": statistics.stdev(times) if len(times) > 1 else 0, "success_rate": len(times) / num_requests * 100, "avg_response_size_bytes": statistics.mean(response_sizes) if response_sizes else 0, "status_codes": list(set(status_codes)) } print(f"OK (avg: {stats['avg_ms']:.1f}ms)") return { "route": route, "status": "SUCCESS", "errors": errors, "times": times, "stats": stats, "usage_count": TEST_ROUTES.get(route, 0) } def run_all_tests(self, num_requests: int = 5, sort_by: str = "avg") -> List[Dict]: """Run performance tests on all routes.""" print(f"Testing {len(TEST_ROUTES)} routes with {num_requests} requests each...") print(f"Target: {self.base_url}") print("-" * 60) results = [] for route in TEST_ROUTES.keys(): result = self.test_route(route, num_requests) results.append(result) time.sleep(0.1) # Small delay between routes to avoid overwhelming server # Sort results if sort_by == "avg": results.sort(key=lambda x: x["stats"].get("avg_ms", float('inf')), reverse=True) elif sort_by == "usage": results.sort(key=lambda x: x["usage_count"], reverse=True) elif sort_by == "impact": # Sort by impact (avg_time * usage_count) results.sort(key=lambda x: x["stats"].get("avg_ms", 0) * x["usage_count"], reverse=True) return results def print_summary(self, results: List[Dict], show_errors: bool = False): """Print a formatted summary of test results.""" print("\n" + "=" * 80) print("PERFORMANCE TEST SUMMARY") print("=" * 80) successful_results = [r for r in results if r["status"] == "SUCCESS"] failed_results = [r for r in results if r["status"] == "FAILED"] if failed_results: print(f"\n⚠️ {len(failed_results)} routes FAILED:") for result in failed_results: print(f" - {result['route']}") if show_errors: for error in result['errors']: print(f" {error}") if successful_results: print(f"\n✅ {len(successful_results)} routes tested successfully\n") # Header print(f"{'Route':<35} {'Avg (ms)':<10} {'Min (ms)':<10} {'Max (ms)':<10} {'Usage':<8} {'Impact':<10} {'Size (B)':<10}") print("-" * 100) for result in successful_results: stats = result["stats"] route = result["route"] usage = result["usage_count"] impact = stats["avg_ms"] * usage / 1000 # Impact score in seconds # Color coding for slow routes avg_ms = stats["avg_ms"] if avg_ms > 1000: color = "🔴" # Very slow elif avg_ms > 500: color = "🟡" # Slow else: color = "🟢" # Fast print(f"{color} {route:<33} {avg_ms:<9.1f} {stats['min_ms']:<9.1f} {stats['max_ms']:<9.1f} " f"{usage:<7} {impact:<9.0f} {stats['avg_response_size_bytes']:<9.0f}") # Summary statistics if successful_results: all_avg_times = [r["stats"]["avg_ms"] for r in successful_results] all_usages = [r["usage_count"] for r in successful_results] print("\n" + "-" * 80) print("OVERALL STATISTICS:") print(f" Fastest route: {min(all_avg_times):.1f}ms") print(f" Slowest route: {max(all_avg_times):.1f}ms") print(f" Average response time: {statistics.mean(all_avg_times):.1f}ms") print(f" Total usage count: {sum(all_usages):,}") # Identify caching candidates print("\n🎯 TOP CANDIDATES (slow + high usage):") caching_candidates = [r for r in successful_results if r["stats"]["avg_ms"] > 100] caching_candidates.sort(key=lambda x: x["stats"]["avg_ms"] * x["usage_count"], reverse=True) for i, result in enumerate(caching_candidates[:10], 1): stats = result["stats"] impact = stats["avg_ms"] * result["usage_count"] / 1000 print(f" {i:2d}. {result['route']:<35} ({stats['avg_ms']:.1f}ms × {result['usage_count']} = {impact:.0f}s impact)") def export_json(self, results: List[Dict], filename: str): """Export results to JSON file.""" export_data = { "test_timestamp": time.time(), "test_config": { "host": self.host, "port": self.port, "timeout": self.timeout }, "results": results } with open(filename, 'w') as f: json.dump(export_data, f, indent=2) print(f"\n📁 Results exported to: {filename}") def main(): parser = argparse.ArgumentParser(description="Test pypowerwall proxy route performance") parser.add_argument("--host", default="localhost", help="Proxy host (default: localhost)") parser.add_argument("--port", type=int, default=8675, help="Proxy port (default: 8675)") parser.add_argument("--requests", type=int, default=5, help="Number of requests per route (default: 5)") parser.add_argument("--timeout", type=int, default=10, help="Request timeout in seconds (default: 10)") parser.add_argument("--sort", choices=["avg", "usage", "impact"], default="impact", help="Sort results by: avg (response time), usage (request count), impact (time×usage)") parser.add_argument("--export", help="Export results to JSON file") parser.add_argument("--errors", action="store_true", help="Show detailed error messages") args = parser.parse_args() # Test connection first tester = RoutePerformanceTester(args.host, args.port, args.timeout) print(f"Testing connection to {args.host}:{args.port}...") try: response = tester.session.get(f"{tester.base_url}/stats", timeout=5) print(f"✅ Connection successful (status: {response.status_code})") except Exception as e: print(f"❌ Connection failed: {e}") print("Please check that the proxy is running and accessible.") sys.exit(1) # Run tests results = tester.run_all_tests(args.requests, args.sort) # Print results tester.print_summary(results, args.errors) # Export if requested if args.export: tester.export_json(results, args.export) if __name__ == "__main__": main() ================================================ FILE: proxy/requirements.txt ================================================ pypowerwall==0.15.6 bs4==0.0.2 ================================================ FILE: proxy/server.py ================================================ #!/usr/bin/env python # pyPowerWall Module - Proxy Server Tool # -*- coding: utf-8 -*- """ Python module to interface with Tesla Solar Powerwall Gateway Author: Jason A. Cox For more information see https://github.com/jasonacox/pypowerwall Proxy Server Tool This tool will proxy API calls to /api/meters/aggregates and /api/system_status/soe - You can containerize it and run it as an endpoint for tools like telegraf to pull metrics. Local Powerwall Mode The default mode for this proxy is to connect to a local Powerwall to pull data. This works with the Tesla Energy Gateway (TEG) for Powerwall 1, 2 and +. It will also support pulling /vitals and /strings data if available. Set: PW_HOST to Powerwall Address and PW_PASSWORD to use this mode. Cloud Mode An optional mode is to connect to the Tesla Cloud to pull data. This requires that you have a Tesla Account and have registered your Tesla Solar System or Powerwall with the Tesla App. It requires that you run the setup 'python -m pypowerwall setup' process to create the required API keys and tokens. This mode doesn't support /vitals or /strings data. Set: PW_EMAIL and leave PW_HOST blank to use this mode. Control Mode An optional mode is to enable control commands to set backup reserve percentage and mode of the Powerwall. This requires that you set and use the PW_CONTROL_SECRET environmental variable. This mode is disabled by default and should be used with caution. Set: PW_CONTROL_SECRET to enable this mode. Error Handling Global exception handling has been implemented for all pypowerwall function calls to provide clean error logging instead of deep stack traces. Connection errors, API errors, and unexpected exceptions are caught and logged with descriptive messages while maintaining API functionality through graceful error responses. Weak WiFi / Network Error Handling For environments with weak WiFi or unstable network connections, use: - PW_SUPPRESS_NETWORK_ERRORS=yes to completely suppress individual network error logs (summary reports every 5 minutes) - PW_NETWORK_ERROR_RATE_LIMIT=N to limit network errors to N per minute per function (default: 5) - PW_FAIL_FAST=yes to return immediately when connection is degraded instead of attempting new requests (reduces timeout delays) - PW_GRACEFUL_DEGRADATION=yes to return cached data when fresh data is unavailable (default: yes, improves telegraf reliability) - PW_HEALTH_CHECK=yes to enable connection health monitoring and automatic degraded mode detection (default: yes) - PW_CACHE_TTL=N to set maximum age in seconds for cached data before returning null instead of stale data (default: 30) - Consider reducing PW_TIMEOUT to fail faster (e.g., PW_TIMEOUT=3) Monitoring & Health Endpoints - /health - returns connection health status and feature configuration - /health/reset - resets health counters and clears cache - /stats - includes connection health metrics when enabled Data Freshness & Cache Behavior The proxy prioritizes data freshness over availability. When fresh data cannot be retrieved and cached data exceeds PW_CACHE_TTL seconds old, endpoints return null instead of stale/zero values. This ensures monitoring systems like telegraf can distinguish between actual zero values and missing/stale data, preventing false alerts and misleading metrics. Telegraf Compatibility Key endpoints return null when no fresh or reasonably recent cached data is available, allowing telegraf to handle missing data appropriately: - /aggregates returns null when no power data is available - /soe returns null when battery level data is unavailable - /vitals and /strings return null when device data is unavailable - CSV endpoints continue to return zero values for backwards compatibility """ import datetime import json import logging import os import resource import signal import ssl import sys import time import threading from http.server import BaseHTTPRequestHandler, HTTPServer from socketserver import ThreadingMixIn from typing import Optional from urllib.parse import urlparse, parse_qs import requests import urllib3 # Robust import of transform helpers to support multiple invocation patterns: # 1. python -m proxy.server (package-relative import works) # 2. python proxy/server.py from project root (absolute package import works) # 3. Executing from within the proxy directory (plain module import) try: # Prefer relative when executed as a package module from .transform import get_static, inject_js # type: ignore except ImportError: # noqa: BLE001 - fall back to other strategies try: from proxy.transform import get_static, inject_js # type: ignore except ImportError: # noqa: BLE001 from transform import get_static, inject_js # type: ignore # Last resort import pypowerwall from pypowerwall import parse_version from pypowerwall.exceptions import ( PyPowerwallInvalidConfigurationParameter, InvalidBatteryReserveLevelException, ) from pypowerwall.tedapi.exceptions import ( PyPowerwallTEDAPINoTeslaAuthFile, PyPowerwallTEDAPITeslaNotConnected, PyPowerwallTEDAPINotImplemented, PyPowerwallTEDAPIInvalidPayload, ) from pypowerwall.fleetapi.exceptions import ( PyPowerwallFleetAPINoTeslaAuthFile, PyPowerwallFleetAPITeslaNotConnected, PyPowerwallFleetAPINotImplemented, PyPowerwallFleetAPIInvalidPayload, ) BUILD = "t88" ALLOWLIST = [ "/api/status", "/api/site_info/site_name", "/api/meters/site", "/api/meters/solar", "/api/sitemaster", "/api/powerwalls", "/api/customer/registration", "/api/system_status", "/api/system_status/grid_status", "/api/system/update/status", "/api/site_info", "/api/system_status/grid_faults", "/api/operation", "/api/site_info/grid_codes", "/api/solars", "/api/solars/brands", "/api/customer", "/api/meters", "/api/installer", "/api/networks", "/api/system/networks", "/api/meters/readings", "/api/synchrometer/ct_voltage_references", "/api/troubleshooting/problems", "/api/auth/toggle/supported", "/api/solar_powerwall", ] DISABLED = [ "/api/customer/registration", ] web_root = os.path.join(os.path.dirname(__file__), "web") # Configuration for Proxy - Check for environmental variables # and always use those if available (required for Docker) bind_address = os.getenv("PW_BIND_ADDRESS", "") password = os.getenv("PW_PASSWORD", "") email = os.getenv("PW_EMAIL", "email@example.com") host = os.getenv("PW_HOST", "") timezone = os.getenv("PW_TIMEZONE", "America/Los_Angeles") debugmode = os.getenv("PW_DEBUG", "no").lower() == "yes" cache_expire = int(os.getenv("PW_CACHE_EXPIRE", "5")) browser_cache = int(os.getenv("PW_BROWSER_CACHE", "0")) timeout = int(os.getenv("PW_TIMEOUT", "5")) pool_maxsize = int(os.getenv("PW_POOL_MAXSIZE", "15")) https_mode = os.getenv("PW_HTTPS", "no") port = int(os.getenv("PW_PORT", "8675")) style = os.getenv("PW_STYLE", "clear") + ".js" siteid = os.getenv("PW_SITEID", None) authpath = os.getenv("PW_AUTH_PATH", "") authmode = os.getenv("PW_AUTH_MODE", "cookie") cf = ".powerwall" if authpath: cf = os.path.join(authpath, ".powerwall") cachefile = os.getenv("PW_CACHE_FILE", cf) control_secret = os.getenv("PW_CONTROL_SECRET", "") gw_pwd = os.getenv("PW_GW_PWD", None) rsa_key_path = os.getenv("PW_RSA_KEY_PATH", None) wifi_host = os.getenv("PW_WIFI_HOST", None) neg_solar = os.getenv("PW_NEG_SOLAR", "yes").lower() == "yes" api_base_url = os.getenv( "PROXY_BASE_URL", "/" ) # Prefix for public API calls, e.g. if you have everything behind a reverse proxy # Network error handling configuration for weak WiFi scenarios suppress_network_errors = os.getenv("PW_SUPPRESS_NETWORK_ERRORS", "no").lower() == "yes" network_error_rate_limit = int( os.getenv("PW_NETWORK_ERROR_RATE_LIMIT", "5") ) # errors per minute per function # Additional robustness features for poor network conditions fail_fast_mode = ( os.getenv("PW_FAIL_FAST", "no").lower() == "yes" ) # Return cached/empty data instead of retrying graceful_degradation = ( os.getenv("PW_GRACEFUL_DEGRADATION", "yes").lower() == "yes" ) # Return partial data on errors health_check_enabled = ( os.getenv("PW_HEALTH_CHECK", "yes").lower() == "yes" ) # Track connection health degradation_cache_ttl_seconds = int( os.getenv("PW_CACHE_TTL", "30") ) # Maximum age for cached data before returning None # Global Stats proxystats = { "pypowerwall": "%s Proxy %s" % (pypowerwall.version, BUILD), "mode": "Unknown", "gets": 0, "posts": 0, "errors": 0, "timeout": 0, "uri": {}, "ts": int(time.time()), "start": int(time.time()), "clear": int(time.time()), "uptime": "", "mem": 0, "site_name": "", "cloudmode": False, "fleetapi": False, "tedapi": False, "pw3": False, "tedapi_mode": "off", "siteid": None, "counter": 0, "cf": cachefile, "config": { "PW_BIND_ADDRESS": bind_address, "PW_PASSWORD": "*" * len(password) if password else None, "PW_EMAIL": email, "PW_HOST": host, "PW_TIMEZONE": timezone, "PW_DEBUG": debugmode, "PW_CACHE_EXPIRE": cache_expire, "PW_BROWSER_CACHE": browser_cache, "PW_TIMEOUT": timeout, "PW_POOL_MAXSIZE": pool_maxsize, "PW_HTTPS": https_mode, "PW_PORT": port, "PW_STYLE": style, "PW_SITEID": siteid, "PW_AUTH_PATH": authpath, "PW_AUTH_MODE": authmode, "PW_CACHE_FILE": cachefile, "PW_CONTROL_SECRET": "*" * len(control_secret) if control_secret else None, "PW_GW_PWD": "*" * len(gw_pwd) if gw_pwd else None, "PW_RSA_KEY_PATH": rsa_key_path, "PW_WIFI_HOST": wifi_host, "PW_NEG_SOLAR": neg_solar, "PW_SUPPRESS_NETWORK_ERRORS": suppress_network_errors, "PW_NETWORK_ERROR_RATE_LIMIT": network_error_rate_limit, "PW_FAIL_FAST": fail_fast_mode, "PW_GRACEFUL_DEGRADATION": graceful_degradation, "PW_HEALTH_CHECK": health_check_enabled, "PW_CACHE_TTL": degradation_cache_ttl_seconds, }, } proxystats_lock = threading.RLock() if https_mode == "yes": # run https mode with self-signed cert cookiesuffix = "path=/;SameSite=None;Secure;" httptype = "HTTPS" elif https_mode == "http": # run http mode but simulate https for proxy behind https proxy cookiesuffix = "path=/;SameSite=None;Secure;" httptype = "HTTP" else: # run in http mode cookiesuffix = "path=/;" httptype = "HTTP" # Logging log = logging.getLogger("proxy") logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.INFO) log.setLevel(logging.INFO) if debugmode: log.info( "pyPowerwall [%s] Proxy Server [%s] - %s Port %d - DEBUG" % (pypowerwall.version, BUILD, httptype, port) ) pypowerwall.set_debug(True) log.setLevel(logging.DEBUG) else: log.info( "pyPowerwall [%s] Proxy Server [%s] - %s Port %d" % (pypowerwall.version, BUILD, httptype, port) ) log.info("pyPowerwall Proxy Started") # Log network error handling configuration if suppress_network_errors: log.info("Network error logging suppressed (PW_SUPPRESS_NETWORK_ERRORS=yes)") else: log.info( f"Network error rate limiting: {network_error_rate_limit} errors/minute per function" ) # Log additional robustness features if fail_fast_mode: log.info( "Fail-fast mode enabled (PW_FAIL_FAST=yes) - degraded connections return immediately" ) if graceful_degradation: log.info( f"Graceful degradation enabled (PW_GRACEFUL_DEGRADATION=yes) - cached data TTL: {degradation_cache_ttl_seconds}s" ) if health_check_enabled: log.info("Connection health monitoring enabled (PW_HEALTH_CHECK=yes)") # Rate limiter for network error logging to prevent spam _error_counts = {} _error_counts_lock = threading.RLock() _network_error_summary = {} _last_summary_time = time.time() def should_log_network_error(func_name, max_per_minute=5): """ Rate limit network error logging to prevent log spam. Allow max_per_minute errors per function per minute. """ current_time = time.time() minute_bucket = int(current_time // 60) key = f"{func_name}_{minute_bucket}" with _error_counts_lock: _error_counts[key] = _error_counts.get(key, 0) + 1 # Clean up old entries (keep only current and previous minute) current_keys = { f"{func_name}_{minute_bucket}", f"{func_name}_{minute_bucket-1}", } keys_to_remove = [ k for k in _error_counts.keys() if k not in current_keys and k.startswith(f"{func_name}_") ] for k in keys_to_remove: del _error_counts[k] return _error_counts[key] <= max_per_minute def track_network_error(func_name, error_type): """Track network errors for summary reporting.""" global _network_error_summary, _last_summary_time with _error_counts_lock: if func_name not in _network_error_summary: _network_error_summary[func_name] = {} if error_type not in _network_error_summary[func_name]: _network_error_summary[func_name][error_type] = 0 _network_error_summary[func_name][error_type] += 1 # Log summary every 5 minutes if there are errors current_time = time.time() if current_time - _last_summary_time > 300: # 5 minutes if _network_error_summary: log.warning("Network Error Summary (last 5 minutes):") for func, errors in _network_error_summary.items(): for error_type, count in errors.items(): log.warning(f" {func}: {count} {error_type} errors") _network_error_summary.clear() _last_summary_time = current_time # Connection health tracking and caching for graceful degradation _connection_health = { "consecutive_failures": 0, "last_success_time": time.time(), "total_failures": 0, "total_successes": 0, "is_degraded": False, } _connection_health_lock = threading.RLock() # Cache for last known good responses (graceful degradation) _last_good_responses = {} _last_good_responses_lock = threading.RLock() # Performance cache for frequently-hit endpoints (separate from degradation cache) _performance_cache = {} _performance_cache_lock = threading.RLock() # Endpoint call tracking for success/failure statistics _endpoint_stats = {} _endpoint_stats_lock = threading.RLock() # Health thresholds HEALTH_FAILURE_THRESHOLD = 5 # consecutive failures before degraded mode HEALTH_RECOVERY_THRESHOLD = 3 # consecutive successes to exit degraded mode def update_connection_health(success=True): """Update connection health metrics and degraded mode status.""" global _connection_health with _connection_health_lock: if success: _connection_health["consecutive_failures"] = 0 _connection_health["last_success_time"] = time.time() _connection_health["total_successes"] += 1 # Check if we should exit degraded mode if _connection_health["is_degraded"]: if ( _connection_health["total_successes"] % HEALTH_RECOVERY_THRESHOLD == 0 ): _connection_health["is_degraded"] = False if not suppress_network_errors: log.info("Connection health recovered - exiting degraded mode") else: _connection_health["consecutive_failures"] += 1 _connection_health["total_failures"] += 1 # Check if we should enter degraded mode if not _connection_health["is_degraded"]: if ( _connection_health["consecutive_failures"] >= HEALTH_FAILURE_THRESHOLD ): _connection_health["is_degraded"] = True if not suppress_network_errors: log.warning( f"Connection health degraded after {HEALTH_FAILURE_THRESHOLD} consecutive failures - entering graceful degradation mode" ) def get_cached_response(endpoint): """Get cached response for graceful degradation.""" if not graceful_degradation: return None with _last_good_responses_lock: if endpoint in _last_good_responses: cached_data, timestamp = _last_good_responses[endpoint] age = time.time() - timestamp if age < degradation_cache_ttl_seconds: if debugmode: log.debug(f"Using cached response for {endpoint} (age: {age:.1f}s)") return cached_data else: # Cache expired - remove entry and return None if debugmode: log.debug( f"Cache expired for {endpoint} (age: {age:.1f}s > {degradation_cache_ttl_seconds}s)" ) del _last_good_responses[endpoint] return None def cache_response(endpoint, response): """Cache successful response for graceful degradation.""" if not graceful_degradation or response is None: return with _last_good_responses_lock: _last_good_responses[endpoint] = (response, time.time()) # Limit cache size to prevent memory growth if len(_last_good_responses) > 50: # Remove oldest entries oldest_key = min( _last_good_responses.keys(), key=lambda k: _last_good_responses[k][1] ) del _last_good_responses[oldest_key] def get_performance_cached(cache_key): """ Get cached endpoint response for performance optimization. Uses standard cache_expire TTL (typically 5 seconds). Args: cache_key: The cache key (e.g., '/csv/v2', '/json', '/freq', '/pod') Returns: Cached response string if available and fresh, None otherwise """ with _performance_cache_lock: if cache_key not in _performance_cache: return None data, timestamp = _performance_cache[cache_key] age = time.time() - timestamp # Use standard cache_expire (same as pypowerwall's internal cache) if age < cache_expire: log.debug(f"Performance cache hit for {cache_key} (age: {age:.2f}s)") return data else: log.debug(f"Performance cache expired for {cache_key} (age: {age:.2f}s)") return None def cache_performance_response(cache_key, data): """ Cache endpoint response for performance optimization. Args: cache_key: The cache key (e.g., '/csv/v2', '/json', '/freq', '/pod') data: The response string to cache """ with _performance_cache_lock: _performance_cache[cache_key] = (data, time.time()) log.debug(f"Cached performance response for {cache_key}") def performance_cached(cache_key): """ Decorator for performance caching of route handlers. Args: cache_key: The cache key to use (e.g., '/vitals', '/strings', '/freq') Returns: Decorator function that wraps route handlers with caching logic """ def decorator(func): def wrapper(*args, **kwargs): # Try cache first cached_response = get_performance_cached(cache_key) if cached_response is not None: return cached_response # Cache miss - generate fresh data result = func(*args, **kwargs) # Only cache non-None results if result is not None: cache_performance_response(cache_key, result) return result return wrapper return decorator def cached_route_handler(cache_key, data_generator): """ Helper function for performance-cached route handling. Args: cache_key: The cache key to use for this route data_generator: Function that generates the response data Returns: Cached response if available, otherwise fresh data (and caches it) """ # Try cache first cached_response = get_performance_cached(cache_key) if cached_response is not None: return cached_response # Cache miss - generate fresh data result = data_generator() # Only cache non-None results if result is not None: cache_performance_response(cache_key, result) return result def track_endpoint_call(endpoint, success=True): """Track endpoint call success/failure statistics.""" with _endpoint_stats_lock: if endpoint not in _endpoint_stats: _endpoint_stats[endpoint] = { "total_calls": 0, "successful_calls": 0, "failed_calls": 0, "last_success_time": None, "last_failure_time": None, } _endpoint_stats[endpoint]["total_calls"] += 1 current_time = time.time() if success: _endpoint_stats[endpoint]["successful_calls"] += 1 _endpoint_stats[endpoint]["last_success_time"] = current_time else: _endpoint_stats[endpoint]["failed_calls"] += 1 _endpoint_stats[endpoint]["last_failure_time"] = current_time # Limit endpoint stats size to prevent memory growth if len(_endpoint_stats) > 100: # Remove oldest entries (by last activity) oldest_endpoint = min( _endpoint_stats.keys(), key=lambda k: max( _endpoint_stats[k]["last_success_time"] or 0, _endpoint_stats[k]["last_failure_time"] or 0, ), ) del _endpoint_stats[oldest_endpoint] # Global wrapper for pypowerwall function calls def safe_pw_call(pw_func, *args, **kwargs): """ Safely call a pypowerwall function with global exception handling. Returns None on any exception and logs a clean error message. Optimized for weak WiFi connections with fast failure and concise logging. Includes health tracking and graceful degradation support. """ global proxystats def get_descriptive_name(): """Build descriptive function name with arguments for better debugging.""" func_name = getattr(pw_func, "__name__", str(pw_func)) if func_name == "poll" and args: # For poll() calls, include the URI endpoint being called return f"{func_name}('{args[0]}')" if args[0] else func_name elif args: # For other functions, show first argument if it exists first_arg = str(args[0])[:50] # Limit to 50 chars to keep logs readable return f"{func_name}({first_arg})" else: return func_name # In fail-fast mode with degraded connection, return None immediately if fail_fast_mode and health_check_enabled: with _connection_health_lock: if _connection_health["is_degraded"]: return None try: result = pw_func(*args, **kwargs) # Only update health tracking on true, fresh connection success if health_check_enabled and result is not None: update_connection_health(success=True) return result except ( PyPowerwallInvalidConfigurationParameter, InvalidBatteryReserveLevelException, PyPowerwallTEDAPINoTeslaAuthFile, PyPowerwallTEDAPITeslaNotConnected, PyPowerwallTEDAPINotImplemented, PyPowerwallTEDAPIInvalidPayload, PyPowerwallFleetAPINoTeslaAuthFile, PyPowerwallFleetAPITeslaNotConnected, PyPowerwallFleetAPINotImplemented, PyPowerwallFleetAPIInvalidPayload, ) as e: descriptive_name = get_descriptive_name() log.warning(f"Powerwall API Error in {descriptive_name}: {str(e)}") with proxystats_lock: proxystats["errors"] = proxystats["errors"] + 1 return None except ( ConnectionError, TimeoutError, OSError, requests.exceptions.RequestException, requests.exceptions.Timeout, requests.exceptions.ReadTimeout, requests.exceptions.ConnectTimeout, requests.exceptions.ConnectionError, urllib3.exceptions.ReadTimeoutError, urllib3.exceptions.ConnectTimeoutError, urllib3.exceptions.TimeoutError, urllib3.exceptions.MaxRetryError, ) as e: func_name = getattr(pw_func, "__name__", str(pw_func)) descriptive_name = get_descriptive_name() error_type = type(e).__name__ # Update health tracking on network failure if health_check_enabled: update_connection_health(success=False) # Track error for summary reporting track_network_error(func_name, error_type) # Rate limit individual error logging to prevent spam if not suppress_network_errors and should_log_network_error( func_name, network_error_rate_limit ): if "timeout" in error_type.lower(): log.info(f"Network timeout in {descriptive_name}: {error_type}") else: log.info(f"Network error in {descriptive_name}: {error_type}") with proxystats_lock: proxystats["timeout"] = proxystats["timeout"] + 1 return None except Exception as e: descriptive_name = get_descriptive_name() error_type = type(e).__name__ # Update health tracking on unexpected failure if health_check_enabled: update_connection_health(success=False) # Log unexpected errors - focus on function and likely payload issues if error_type == "TypeError": log.warning(f"Bad payload response in {descriptive_name} - likely null/malformed data from Powerwall") else: if debugmode: log.error(f"Unexpected error in {descriptive_name}: {error_type}: {str(e)}") else: log.warning(f"Unexpected error in {descriptive_name}: {error_type}") with proxystats_lock: proxystats["errors"] = proxystats["errors"] + 1 return None def safe_endpoint_call(endpoint_name, pw_func, *args, jsonformat=True, **kwargs): """ Safely call a pypowerwall function for an endpoint with caching and graceful degradation. Args: endpoint_name: Name of the endpoint for caching (e.g., '/aggregates') pw_func: The pypowerwall function to call *args: Arguments to pass to the function jsonformat: Whether to return JSON formatted response (default True) **kwargs: Keyword arguments to pass to the function Returns: Response data on success, cached data if available and fresh enough, None if no data available """ # Try to get fresh data if jsonformat: result = safe_pw_call(pw_func, *args, jsonformat=True, **kwargs) else: result = safe_pw_call(pw_func, *args, **kwargs) # Only treat as a true success if result is not None and is not a cached response if result is not None: cache_response(endpoint_name, result) track_endpoint_call(endpoint_name, success=True) return result # Failed to get fresh data - track failure track_endpoint_call(endpoint_name, success=False) # Try cached response (do NOT reset consecutive_failures if using cache) cached_result = get_cached_response(endpoint_name) if cached_result is not None: # Do not call update_connection_health(success=True) here return cached_result # No fresh or cached data available return None # Ensure api_base_url ends with a / if not api_base_url.endswith("/"): api_base_url += "/" log.info(f"Added trailing / to API Base URL: {api_base_url}") # Check for cache expire time limit below 5s if cache_expire < 5: log.warning("Cache expiration set below 5s (PW_CACHE_EXPIRE=%d)" % cache_expire) # Signal handler - Exit on SIGTERM # noinspection PyUnusedLocal def sig_term_handle(signum, frame): raise SystemExit # Register signal handler signal.signal(signal.SIGTERM, sig_term_handle) # Get Value Function - Key to Value or Return Null def get_value(a, key): if key in a: return a[key] else: log.debug("Missing key in payload [%s]" % key) return None # Connect to Powerwall # TODO: Add support for multiple Powerwalls try: pw = pypowerwall.Powerwall( host=host, password=password, email=email, timezone=timezone, pwcacheexpire=cache_expire, timeout=timeout, poolmaxsize=pool_maxsize, siteid=siteid, authpath=authpath, authmode=authmode, cachefile=cachefile, auto_select=True, retry_modes=True, gw_pwd=gw_pwd, rsa_key_path=rsa_key_path, wifi_host=wifi_host, ) except Exception as e: log.error(f"Powerwall Connection Error: {str(e)}") log.error("Fatal Error: Unable to connect. Please fix config and restart.") while True: try: time.sleep(5) # Infinite loop to keep container running except (KeyboardInterrupt, SystemExit): sys.exit(0) site_name = safe_pw_call(pw.site_name) or "Unknown" if pw.cloudmode or pw.fleetapi: if pw.fleetapi: proxystats["mode"] = "FleetAPI" log.info("pyPowerwall Proxy Server - FleetAPI Mode") else: proxystats["mode"] = "Cloud" log.info("pyPowerwall Proxy Server - Cloud Mode") log.info("Connected to Site ID %s (%s)" % (pw.client.siteid, site_name.strip())) if siteid is not None and siteid != str(pw.client.siteid): log.info("Switch to Site ID %s" % siteid) if not pw.client.change_site(siteid): log.error("Fatal Error: Unable to connect. Please fix config and restart.") while True: try: time.sleep(5) # Infinite loop to keep container running except (KeyboardInterrupt, SystemExit): sys.exit(0) else: log.info("pyPowerwall Proxy Server - Local Mode") log.info("Connected to Energy Gateway %s (%s)" % (host, site_name.strip())) if pw.tedapi: proxystats["tedapi"] = True proxystats["tedapi_mode"] = pw.tedapi_mode proxystats["pw3"] = pw.tedapi.pw3 log.info(f"TEDAPI Mode Enabled for Device Vitals ({pw.tedapi_mode})") # Set mode string with transport detail def build_mode_string(control=False): """Build mode display string from active transports.""" if not pw.tedapi: return "Local" parts = [pw.tedapi_mode] tedapi = pw.tedapi if getattr(tedapi, 'v1r', False) and getattr(tedapi, 'wifi_session', None): parts.append("wifi") if control: parts.append("control") return f"Local ({'+'.join(parts)})" proxystats["mode"] = build_mode_string() pw_control = None if control_secret: log.info("Control Commands Activating - WARNING: Use with caution!") try: if pw.cloudmode or pw.fleetapi: pw_control = pw elif pw.tedapi and pw.tedapi.v1r: pw_control = pw log.info("Control Mode: Using TEDapi LAN control (v1r filestore)") else: pw_control = pypowerwall.Powerwall( "", password, email, siteid=siteid, authpath=authpath, authmode=authmode, cachefile=cachefile, auto_select=True, ) except Exception as e: log.error("Control Mode Failed: Unable to connect to cloud - Run Setup") control_secret = "" if pw_control: if pw.tedapi and pw.tedapi.v1r and not pw.cloudmode and not pw.fleetapi: log.info(f"Control Mode Enabled: LAN Mode ({pw.tedapi_mode}+control)") else: log.info(f"Control Mode Enabled: Cloud Mode ({pw_control.mode}) Connected") # Update mode string to include control transport if not pw.cloudmode and not pw.fleetapi and pw.tedapi: proxystats["mode"] = build_mode_string(control=True) else: log.error("Control Mode Failed: Unable to connect to cloud - Run Setup") control_secret = None def get_transport_health(): """Build transport health status dict for /health endpoint.""" transports = {} tedapi = getattr(pw, 'tedapi', None) if tedapi and hasattr(tedapi, 'v1r') and tedapi.v1r: # v1r LAN transport v1r_info = { "active": True, "status": "ok" if tedapi.din else "unavailable", "host": tedapi.gw_ip, "leader_din": tedapi.din, } if tedapi.lan_last_success: v1r_info["last_success_age_seconds"] = round(time.time() - tedapi.lan_last_success, 1) transports["v1r_lan"] = v1r_info # WiFi TEDAPI transport (follower fallback) if tedapi.wifi_session: cooldown_remaining = max(0, tedapi.wifi_cooldown - time.time()) if tedapi.wifi_available: wifi_status = "ok" elif cooldown_remaining > 0: wifi_status = "degraded" else: wifi_status = "unavailable" transports["wifi_tedapi"] = { "active": True, "status": wifi_status, "host": tedapi.wifi_host, "available": tedapi.wifi_available, "cooldown_remaining_seconds": round(cooldown_remaining, 0), } else: transports["wifi_tedapi"] = {"active": False} elif tedapi: # Standard WiFi TEDAPI transports["wifi_tedapi"] = { "active": True, "status": "ok" if tedapi.din else "unavailable", "host": tedapi.gw_ip, } # Control transport if pw_control: if tedapi and tedapi.v1r: transports["lan_control"] = { "active": True, "status": "ok", "mode": "v1r_filestore", } else: transports["cloud_control"] = { "active": True, "status": "ok", "mode": getattr(pw_control, 'mode', 'unknown'), } elif control_secret: transports["cloud_control"] = {"active": False, "status": "failed"} return transports class ThreadingHTTPServer(ThreadingMixIn, HTTPServer): daemon_threads = True # pylint: disable=arguments-differ,global-variable-not-assigned # noinspection PyPep8Naming class Handler(BaseHTTPRequestHandler): def log_message(self, log_format, *args): if debugmode: log.debug("%s %s" % (self.address_string(), log_format % args)) else: pass def address_string(self): # replace function to avoid lookup delays hostaddr, hostport = self.client_address[:2] return hostaddr def do_POST(self): global proxystats contenttype = "application/json" message = '{"error": "Invalid Request"}' # If set, remove the api_base_url from the requested path. This allows installing the # the proxy on a path without impacting the use of Telegraf or other integrations. Python 3.9+ request_path = self.path new_path = request_path.removeprefix(api_base_url) if new_path is not request_path: request_path = "/" + new_path if request_path.startswith("/control"): # curl -X POST -d "value=20&token=1234" http://localhost:8675/control/reserve # curl -X POST -d "value=backup&token=1234" http://localhost:8675/control/mode message = None if not control_secret: message = '{"error": "Control Commands Disabled - Set PW_CONTROL_SECRET to enable"}' else: try: action = urlparse(request_path).path.split("/")[2] post_data = self.rfile.read(int(self.headers["Content-Length"])) query_params = parse_qs(post_data.decode("utf-8")) value = query_params.get("value", [""])[0] token = query_params.get("token", [""])[0] except Exception as er: message = '{"error": "Control Command Error: Invalid Request"}' log.error(f"Control Command Error: {er}") if not message: # Check if unable to connect (cloud mode needs client, tedapi needs tedapi) has_tedapi_control = pw.tedapi and pw.tedapi.v1r if not has_tedapi_control and pw_control.client is None: message = '{"error": "Control Command Error: Unable to connect to cloud mode - Run Setup"}' log.error( "Control Command Error: Unable to connect to cloud mode - Run Setup" ) else: if token == control_secret: if action == "reserve": # ensure value is an integer if not value: # return current reserve level in json string message = '{"reserve": %s}' % ( safe_pw_call(pw_control.get_reserve) or 0 ) elif value.isdigit(): result = safe_pw_call( pw_control.set_reserve, int(value) ) message = json.dumps( result if result is not None else {"error": "Failed to set reserve"} ) log.info(f"Control Command: Set Reserve to {value}") else: message = ( '{"error": "Control Command Value Invalid"}' ) elif action == "mode": if not value: # return current mode in json string message = '{"mode": "%s"}' % ( safe_pw_call(pw_control.get_mode) or "unknown" ) elif value in [ "self_consumption", "backup", "autonomous", ]: result = safe_pw_call(pw_control.set_mode, value) message = json.dumps( result if result is not None else {"error": "Failed to set mode"} ) log.info(f"Control Command: Set Mode to {value}") else: message = ( '{"error": "Control Command Value Invalid"}' ) elif action == "grid_charging": # if empty or not a string, return current status if not value: # return current grid_charging status in json string message = '{"grid_charging": %s}' % ( "true" if safe_pw_call(pw_control.get_grid_charging) else "false" ) elif isinstance(value, str) and value.lower() in ["true", "false"]: bool_value = value.lower() == "true" result = safe_pw_call( pw_control.set_grid_charging, bool_value ) if result is not None: message = '{"grid_charging": "Set Successfully"}' else: message = '{"error": "Failed to set grid_charging"}' log.info( f"Control Command: Set Grid Charging to {value}" ) else: message = ( '{"error": "Control Command Value Invalid"}' ) elif action == "grid_export": if not value: # return current grid_export status in json string message = '{"grid_export": %s}' % ( str( safe_pw_call(pw_control.get_grid_export) ).lower() or "false" ) elif isinstance(value, str) and value.lower() in ["battery_ok", "pv_only", "never"]: result = safe_pw_call( pw_control.set_grid_export, value.lower() ) if result is not None: message = '{"grid_export": "Set Successfully"}' else: message = '{"error": "Failed to set grid_export"}' log.info( f"Control Command: Set Grid Export to {value}" ) else: message = ( '{"error": "Control Command Value Invalid"}' ) elif action == "max_backup": if not pw.tedapi or not pw.tedapi.v1r: message = '{"error": "max_backup requires v1r LAN transport"}' elif not value: # Return current backup events result = safe_pw_call(pw.tedapi.get_backup_events) message = json.dumps( result if result is not None else {"error": "Failed to get backup events"} ) elif value.lower() == "cancel": result = safe_pw_call(pw.tedapi.cancel_max_backup) if result: message = '{"max_backup": "Cancelled"}' else: message = '{"error": "Failed to cancel max backup"}' log.info("Control Command: Cancel Max Backup") elif value.isdigit(): result = safe_pw_call( pw.tedapi.schedule_max_backup, int(value) ) if result: message = '{"max_backup": "Scheduled for %s seconds"}' % value else: message = '{"error": "Failed to schedule max backup"}' log.info(f"Control Command: Schedule Max Backup for {value}s") else: message = '{"error": "Control Command Value Invalid - use seconds or cancel"}' else: message = '{"error": "Invalid Command Action"}' else: message = ( '{"unauthorized": "Control Command Token Invalid"}' ) if "error" in message: self.send_response(400) with proxystats_lock: proxystats["errors"] = proxystats["errors"] + 1 elif "unauthorized" in message: self.send_response(401) else: self.send_response(200) with proxystats_lock: proxystats["posts"] = proxystats["posts"] + 1 self.send_header("Content-type", contenttype) self.send_header("Content-Length", str(len(message))) self.send_header("Access-Control-Allow-Origin", "*") self.end_headers() self.wfile.write(message.encode("utf8")) def do_GET(self): global proxystats self.send_response(200) contenttype = "application/json" # If set, remove the api_base_url from the requested path. This allows installing the # the proxy on a path without impacting the use of Telegraf or other integrations. Python 3.9+ request_path = self.path new_path = request_path.removeprefix(api_base_url) if new_path is not request_path: request_path = "/" + new_path if request_path == "/aggregates" or request_path == "/api/meters/aggregates": # Meters - JSON def generate_aggregates(): # Both routes deliver same payload, use shared cache key aggregates = safe_endpoint_call( "/aggregates", pw.poll, "/api/meters/aggregates" ) # Parse aggregates if it's a JSON string if isinstance(aggregates, str): try: aggregates = json.loads(aggregates) except (json.JSONDecodeError, TypeError): aggregates = None if aggregates and not neg_solar and "solar" in aggregates: solar = aggregates["solar"] if solar and "instant_power" in solar and solar["instant_power"] < 0: # Shift energy from solar to load if "load" in aggregates and "instant_power" in aggregates["load"]: aggregates["load"]["instant_power"] -= solar["instant_power"] # Finally, clamp solar to 0 solar["instant_power"] = 0 try: if aggregates: return json.dumps(aggregates) else: # No data available - return None to indicate stale/missing data return None except: log.error(f"JSON encoding error in payload: {aggregates}") return None message = cached_route_handler("/aggregates", generate_aggregates) elif request_path == "/soe": # Battery Level - JSON message: str = safe_endpoint_call( "/soe", pw.poll, "/api/system_status/soe", jsonformat=True ) # Return None if no current data available (better than fake 0%) elif request_path == "/api/system_status/soe": # Force 95% Scale level = safe_pw_call(pw.level, scale=True) message: str = ( json.dumps({"percentage": level}) if level is not None else None ) elif request_path == "/api/system_status/grid_status": # Grid Status - JSON message: str = safe_pw_call( pw.poll, "/api/system_status/grid_status", jsonformat=True ) elif request_path.startswith("/csv") or request_path.startswith("/csv/v2"): # CSV Output - Grid,Home,Solar,Battery,Level # CSV2 Output - Grid,Home,Solar,Battery,Level,GridStatus,Reserve # Add ?headers to include CSV headers, e.g. http://localhost:8675/csv?headers contenttype = "text/plain; charset=utf-8" # Determine endpoint and whether to include headers is_v2 = request_path.startswith("/csv/v2") include_headers = "headers" in request_path cache_key = f"/csv/v2{'_headers' if include_headers else ''}" if is_v2 else f"/csv{'_headers' if include_headers else ''}" def generate_csv(): # Optimization: Use single aggregates call for all power values aggregates = safe_endpoint_call("/aggregates", pw.poll, "/api/meters/aggregates", jsonformat=False) if aggregates: grid = aggregates.get('site', {}).get('instant_power', 0) solar = aggregates.get('solar', {}).get('instant_power', 0) battery = aggregates.get('battery', {}).get('instant_power', 0) home = aggregates.get('load', {}).get('instant_power', 0) else: grid = solar = battery = home = 0 # Apply negative solar correction if configured if not neg_solar and solar < 0: # Shift energy from solar to load home -= solar solar = 0 # Get battery level - poll() handles caching internally batterylevel = safe_pw_call(pw.level) or 0 if is_v2: # Get grid status and reserve - these use cached data internally gridstatus = 1 if safe_pw_call(pw.grid_status) == "UP" else 0 reserve = safe_pw_call(pw.get_reserve) or 0 # Build CSV response if is_v2: result = "" if include_headers: result += ( "Grid,Home,Solar,Battery,BatteryLevel,GridStatus,Reserve\n" ) result += "%0.2f,%0.2f,%0.2f,%0.2f,%0.2f,%d,%d\n" % ( grid, home, solar, battery, batterylevel, gridstatus, reserve, ) else: result = "" if include_headers: result += "Grid,Home,Solar,Battery,BatteryLevel\n" result += "%0.2f,%0.2f,%0.2f,%0.2f,%0.2f\n" % ( grid, home, solar, battery, batterylevel, ) return result message = cached_route_handler(cache_key, generate_csv) elif request_path == "/vitals": # Vitals Data - JSON message = cached_route_handler( "/vitals", lambda: safe_endpoint_call("/vitals", pw.vitals, jsonformat=True) ) elif request_path == "/strings": # Strings Data - JSON message = cached_route_handler( "/strings", lambda: safe_endpoint_call("/strings", pw.strings, jsonformat=True) ) elif request_path == "/stats": # Give Internal Stats with proxystats_lock: proxystats["ts"] = int(time.time()) delta = proxystats["ts"] - proxystats["start"] proxystats["uptime"] = str(datetime.timedelta(seconds=delta)) proxystats["mem"] = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss proxystats["site_name"] = safe_pw_call(pw.site_name) proxystats["cloudmode"] = pw.cloudmode proxystats["fleetapi"] = pw.fleetapi if (pw.cloudmode or pw.fleetapi) and pw.client is not None: proxystats["siteid"] = pw.client.siteid proxystats["counter"] = pw.client.counter # Add connection health stats if enabled if health_check_enabled: with _connection_health_lock: proxystats["connection_health"] = { "consecutive_failures": _connection_health[ "consecutive_failures" ], "total_failures": _connection_health["total_failures"], "total_successes": _connection_health["total_successes"], "is_degraded": _connection_health["is_degraded"], "last_success_time": _connection_health[ "last_success_time" ], "cache_size": len(_last_good_responses) if graceful_degradation else 0, } # Add cache memory usage statistics proxystats["mem_cache"] = {} with _error_counts_lock: proxystats["mem_cache"]["error_counts"] = { "entries": len(_error_counts), "size_bytes": sys.getsizeof(_error_counts) + sum( sys.getsizeof(k) + sys.getsizeof(v) for k, v in _error_counts.items() ), } proxystats["mem_cache"]["network_error_summary"] = { "entries": len(_network_error_summary), "size_bytes": sys.getsizeof(_network_error_summary) + sum( sys.getsizeof(k) + sys.getsizeof(v) + sum( sys.getsizeof(ek) + sys.getsizeof(ev) for ek, ev in v.items() ) for k, v in _network_error_summary.items() ), } with _last_good_responses_lock: proxystats["mem_cache"]["degradation_cache"] = { "entries": len(_last_good_responses), "size_bytes": sys.getsizeof(_last_good_responses) + sum( sys.getsizeof(k) + sys.getsizeof(v) + sys.getsizeof(v[0]) + sys.getsizeof(v[1]) for k, v in _last_good_responses.items() ), } with _performance_cache_lock: proxystats["mem_cache"]["performance_cache"] = { "entries": len(_performance_cache), "size_bytes": sys.getsizeof(_performance_cache) + sum( sys.getsizeof(k) + sys.getsizeof(v) + sys.getsizeof(v[0]) + sys.getsizeof(v[1]) for k, v in _performance_cache.items() ), } with _endpoint_stats_lock: proxystats["mem_cache"]["endpoint_stats"] = { "entries": len(_endpoint_stats), "size_bytes": sys.getsizeof(_endpoint_stats) + sum( sys.getsizeof(k) + sys.getsizeof(v) + sum( sys.getsizeof(ek) + sys.getsizeof(ev) for ek, ev in v.items() ) for k, v in _endpoint_stats.items() ), } # Add total cache memory usage total_cache_bytes = sum( cache_info["size_bytes"] for cache_info in proxystats["mem_cache"].values() ) proxystats["mem_cache"]["total_cache_bytes"] = total_cache_bytes proxystats["mem_cache"]["total_cache_mb"] = round(total_cache_bytes / 1024 / 1024, 2) message: str = json.dumps(proxystats) elif request_path == "/stats/clear": # Clear Internal Stats log.debug("Clear internal stats") with proxystats_lock: proxystats["gets"] = 0 proxystats["errors"] = 0 proxystats["uri"] = {} proxystats["clear"] = int(time.time()) message: str = json.dumps(proxystats) elif request_path == "/health": # Connection Health and Cache Status health_info = { "pypowerwall": "%s Proxy %s" % (pypowerwall.version, BUILD), "mode": proxystats.get("mode", "Unknown"), "tedapi_mode": proxystats.get("tedapi_mode", "off"), "pypowerwall_cache_expire": cache_expire, "degradation_cache_ttl_seconds": degradation_cache_ttl_seconds, "graceful_degradation": graceful_degradation, "fail_fast_mode": fail_fast_mode, "health_check_enabled": health_check_enabled, "startup_time": datetime.datetime.fromtimestamp( proxystats["start"] ).isoformat(), "current_time": datetime.datetime.now().isoformat(), } # Add transport status for v1r/hybrid modes health_info["transports"] = get_transport_health() # Add overall proxy response counters with proxystats_lock: health_info["proxy_stats"] = { "total_gets": proxystats["gets"], "total_posts": proxystats["posts"], "total_errors": proxystats["errors"], "total_timeouts": proxystats["timeout"], } if health_check_enabled: with _connection_health_lock: health_info["connection_health"] = { "consecutive_failures": _connection_health[ "consecutive_failures" ], "total_failures": _connection_health["total_failures"], "total_successes": _connection_health["total_successes"], "is_degraded": _connection_health["is_degraded"], "last_success_time": _connection_health["last_success_time"], "last_success_age_seconds": time.time() - _connection_health["last_success_time"], } if graceful_degradation: with _last_good_responses_lock: cached_endpoints = {} current_time = time.time() for endpoint, (data, timestamp) in _last_good_responses.items(): age = current_time - timestamp cached_endpoints[endpoint] = { "age_seconds": age, "is_expired": age >= degradation_cache_ttl_seconds, } health_info["cached_data"] = { "cache_size": len(_last_good_responses), "endpoints": cached_endpoints, } # Add endpoint call statistics with _endpoint_stats_lock: endpoint_stats = {} current_time = time.time() for endpoint, stats in _endpoint_stats.items(): success_rate = ( (stats["successful_calls"] / stats["total_calls"] * 100) if stats["total_calls"] > 0 else 0 ) endpoint_info = { "total_calls": stats["total_calls"], "successful_calls": stats["successful_calls"], "failed_calls": stats["failed_calls"], "success_rate_percent": round(success_rate, 2), } if stats["last_success_time"]: endpoint_info["last_success_age_seconds"] = ( current_time - stats["last_success_time"] ) if stats["last_failure_time"]: endpoint_info["last_failure_age_seconds"] = ( current_time - stats["last_failure_time"] ) endpoint_stats[endpoint] = endpoint_info if endpoint_stats: health_info["endpoint_statistics"] = endpoint_stats message: str = json.dumps(health_info) elif request_path == "/health/reset": # Reset Health Counters and Clear Cache cache_size_before = 0 if health_check_enabled: with _connection_health_lock: _connection_health["consecutive_failures"] = 0 _connection_health["total_failures"] = 0 _connection_health["total_successes"] = 0 _connection_health["is_degraded"] = False _connection_health["last_success_time"] = time.time() if graceful_degradation: with _last_good_responses_lock: cache_size_before = len(_last_good_responses) _last_good_responses.clear() # Reset endpoint statistics endpoint_stats_count = 0 with _endpoint_stats_lock: endpoint_stats_count = len(_endpoint_stats) _endpoint_stats.clear() log.info( "Health counters, cache, and endpoint statistics reset via /health/reset endpoint" ) message: str = json.dumps( { "status": "reset_complete", "health_counters_reset": health_check_enabled, "cache_cleared": graceful_degradation, "cache_entries_removed": cache_size_before if graceful_degradation else 0, "endpoint_stats_cleared": endpoint_stats_count, } ) elif request_path == "/temps": # Temps of Powerwalls message: str = safe_pw_call(pw.temps, jsonformat=True) or json.dumps({}) elif request_path == "/temps/pw": # Temps of Powerwalls with Simple Keys def generate_temps_pw(): pwtemp = {} idx = 1 temps = safe_pw_call(pw.temps) if temps: for i in temps: key = "PW%d_temp" % idx pwtemp[key] = temps[i] idx = idx + 1 return json.dumps(pwtemp) message = cached_route_handler("/temps/pw", generate_temps_pw) elif request_path == "/alerts": # Alerts message: str = safe_pw_call(pw.alerts, jsonformat=True) or json.dumps([]) elif request_path == "/alerts/pw": # Alerts in dictionary/object format def generate_alerts_pw(): pwalerts = {} alerts = safe_pw_call(pw.alerts) if alerts is None: return None else: for alert in alerts: pwalerts[alert] = 1 return json.dumps(pwalerts) or json.dumps({}) message = cached_route_handler("/alerts/pw", generate_alerts_pw) elif request_path == "/freq": # Frequency, Current, Voltage and Grid Status def generate_freq(): fcv = {} idx = 1 # Pull freq, current, voltage of each Powerwall via system_status d = safe_pw_call(pw.system_status) or {} if "battery_blocks" in d: for block in d["battery_blocks"]: fcv["PW%d_name" % idx] = None # Placeholder for vitals fcv["PW%d_PINV_Fout" % idx] = get_value(block, "f_out") fcv["PW%d_PINV_VSplit1" % idx] = None # Placeholder for vitals fcv["PW%d_PINV_VSplit2" % idx] = None # Placeholder for vitals fcv["PW%d_PackagePartNumber" % idx] = get_value( block, "PackagePartNumber" ) fcv["PW%d_PackageSerialNumber" % idx] = get_value( block, "PackageSerialNumber" ) fcv["PW%d_p_out" % idx] = get_value(block, "p_out") fcv["PW%d_q_out" % idx] = get_value(block, "q_out") fcv["PW%d_v_out" % idx] = get_value(block, "v_out") fcv["PW%d_f_out" % idx] = get_value(block, "f_out") fcv["PW%d_i_out" % idx] = get_value(block, "i_out") idx = idx + 1 # Pull freq, current, voltage of each Powerwall via vitals if available vitals = safe_pw_call(pw.vitals) or {} idx = 1 for device in vitals: d = vitals[device] if device.startswith("TEPINV"): # PW freq fcv["PW%d_name" % idx] = device fcv["PW%d_PINV_Fout" % idx] = get_value(d, "PINV_Fout") fcv["PW%d_PINV_VSplit1" % idx] = get_value(d, "PINV_VSplit1") fcv["PW%d_PINV_VSplit2" % idx] = get_value(d, "PINV_VSplit2") idx = idx + 1 if device.startswith("TESYNC") or device.startswith("TEMSA"): # Island and Meter Metrics from Backup Gateway or Backup Switch for i in d: if i.startswith("ISLAND") or i.startswith("METER"): fcv[i] = d[i] fcv["grid_status"] = safe_pw_call(pw.grid_status, "numeric") return json.dumps(fcv) message = cached_route_handler("/freq", generate_freq) elif request_path == "/pod": # Powerwall Battery Data def generate_pod(): pod = {} # Get Individual Powerwall Battery Data d = safe_pw_call(pw.system_status) or {} if "battery_blocks" in d: idx = 1 for block in d["battery_blocks"]: # Vital Placeholders pod["PW%d_name" % idx] = None pod["PW%d_POD_ActiveHeating" % idx] = None pod["PW%d_POD_ChargeComplete" % idx] = None pod["PW%d_POD_ChargeRequest" % idx] = None pod["PW%d_POD_DischargeComplete" % idx] = None pod["PW%d_POD_PermanentlyFaulted" % idx] = None pod["PW%d_POD_PersistentlyFaulted" % idx] = None pod["PW%d_POD_enable_line" % idx] = None pod["PW%d_POD_available_charge_power" % idx] = None pod["PW%d_POD_available_dischg_power" % idx] = None pod["PW%d_POD_nom_energy_remaining" % idx] = None pod["PW%d_POD_nom_energy_to_be_charged" % idx] = None pod["PW%d_POD_nom_full_pack_energy" % idx] = None # Additional System Status Data pod["PW%d_POD_nom_energy_remaining" % idx] = get_value( block, "nominal_energy_remaining" ) # map pod["PW%d_POD_nom_full_pack_energy" % idx] = get_value( block, "nominal_full_pack_energy" ) # map pod["PW%d_PackagePartNumber" % idx] = get_value( block, "PackagePartNumber" ) pod["PW%d_PackageSerialNumber" % idx] = get_value( block, "PackageSerialNumber" ) pod["PW%d_pinv_state" % idx] = get_value(block, "pinv_state") pod["PW%d_pinv_grid_state" % idx] = get_value( block, "pinv_grid_state" ) pod["PW%d_p_out" % idx] = get_value(block, "p_out") pod["PW%d_q_out" % idx] = get_value(block, "q_out") pod["PW%d_v_out" % idx] = get_value(block, "v_out") pod["PW%d_f_out" % idx] = get_value(block, "f_out") pod["PW%d_i_out" % idx] = get_value(block, "i_out") pod["PW%d_energy_charged" % idx] = get_value( block, "energy_charged" ) pod["PW%d_energy_discharged" % idx] = get_value( block, "energy_discharged" ) pod["PW%d_off_grid" % idx] = int(get_value(block, "off_grid") or 0) pod["PW%d_vf_mode" % idx] = int(get_value(block, "vf_mode") or 0) pod["PW%d_wobble_detected" % idx] = int( get_value(block, "wobble_detected") or 0 ) pod["PW%d_charge_power_clamped" % idx] = int( get_value(block, "charge_power_clamped") or 0 ) pod["PW%d_backup_ready" % idx] = int( get_value(block, "backup_ready") or 0 ) pod["PW%d_OpSeqState" % idx] = get_value(block, "OpSeqState") pod["PW%d_version" % idx] = get_value(block, "version") idx = idx + 1 # Augment with Vitals Data if available vitals = safe_pw_call(pw.vitals) or {} idx = 1 for device in vitals: v = vitals[device] if device.startswith("TEPOD"): pod["PW%d_name" % idx] = device pod["PW%d_POD_ActiveHeating" % idx] = int( get_value(v, "POD_ActiveHeating") or 0 ) pod["PW%d_POD_ChargeComplete" % idx] = int( get_value(v, "POD_ChargeComplete") or 0 ) pod["PW%d_POD_ChargeRequest" % idx] = int( get_value(v, "POD_ChargeRequest") or 0 ) pod["PW%d_POD_DischargeComplete" % idx] = int( get_value(v, "POD_DischargeComplete") or 0 ) pod["PW%d_POD_PermanentlyFaulted" % idx] = int( get_value(v, "POD_PermanentlyFaulted") or 0 ) pod["PW%d_POD_PersistentlyFaulted" % idx] = int( get_value(v, "POD_PersistentlyFaulted") or 0 ) pod["PW%d_POD_enable_line" % idx] = int( get_value(v, "POD_enable_line") or 0 ) pod["PW%d_POD_available_charge_power" % idx] = get_value( v, "POD_available_charge_power" ) pod["PW%d_POD_available_dischg_power" % idx] = get_value( v, "POD_available_dischg_power" ) pod["PW%d_POD_nom_energy_remaining" % idx] = get_value( v, "POD_nom_energy_remaining" ) pod["PW%d_POD_nom_energy_to_be_charged" % idx] = get_value( v, "POD_nom_energy_to_be_charged" ) pod["PW%d_POD_nom_full_pack_energy" % idx] = get_value( v, "POD_nom_full_pack_energy" ) idx = idx + 1 # Note: Expansion packs are now included in vitals() as TEPOD entries, # so they're automatically picked up by the loop above. # Aggregate data pod["nominal_full_pack_energy"] = get_value(d, "nominal_full_pack_energy") pod["nominal_energy_remaining"] = get_value(d, "nominal_energy_remaining") pod["time_remaining_hours"] = safe_pw_call(pw.get_time_remaining) pod["backup_reserve_percent"] = safe_pw_call(pw.get_reserve) return json.dumps(pod) message = cached_route_handler("/pod", generate_pod) elif request_path == "/json": # JSON - Grid,Home,Solar,Battery,Level,GridStatus,Reserve,TimeRemaining,FullEnergy,RemainingEnergy,Strings def generate_json(): # Optimization: Use single aggregates call for all power values (like CSV endpoint) aggregates = safe_endpoint_call("/aggregates", pw.poll, "/api/meters/aggregates", jsonformat=False) if aggregates: grid = aggregates.get('site', {}).get('instant_power', 0) solar = aggregates.get('solar', {}).get('instant_power', 0) battery = aggregates.get('battery', {}).get('instant_power', 0) home = aggregates.get('load', {}).get('instant_power', 0) else: grid = solar = battery = home = 0 # Apply negative solar correction if configured if not neg_solar and solar < 0: # Shift energy from solar to load home -= solar solar = 0 # Get remaining data d = safe_pw_call(pw.system_status) or {} values = { "grid": grid, "home": home, "solar": solar, "battery": battery, "soe": safe_pw_call(pw.level) or 0, "grid_status": int(safe_pw_call(pw.grid_status) == "UP"), "reserve": safe_pw_call(pw.get_reserve) or 0, "time_remaining_hours": safe_pw_call(pw.get_time_remaining) or 0, "full_pack_energy": get_value(d, "nominal_full_pack_energy") or 0, "energy_remaining": get_value(d, "nominal_energy_remaining") or 0, "strings": safe_pw_call(pw.strings, jsonformat=False) or {}, } return json.dumps(values) message = cached_route_handler("/json", generate_json) elif request_path == "/version": # Firmware Version version = safe_pw_call(pw.version) v = {} if version is None: v["version"] = "SolarOnly" v["vint"] = 0 message: str = json.dumps(v) else: v["version"] = version v["vint"] = parse_version(version) message: str = json.dumps(v) elif request_path == "/help": # Display friendly help screen link and stats with proxystats_lock: proxystats["ts"] = int(time.time()) delta = proxystats["ts"] - proxystats["start"] proxystats["uptime"] = str(datetime.timedelta(seconds=delta)) proxystats["mem"] = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss proxystats["site_name"] = safe_pw_call(pw.site_name) proxystats["cloudmode"] = pw.cloudmode proxystats["fleetapi"] = pw.fleetapi if (pw.cloudmode or pw.fleetapi) and pw.client is not None: proxystats["siteid"] = pw.client.siteid proxystats["counter"] = pw.client.counter proxystats["authmode"] = pw.authmode contenttype = "text/html" message: str = """ \n\n \n \n \n\n

pyPowerwall [%VER%] Proxy [%BUILD%]

\n\n

Click here for API help.

\n\n \n """ message = message.replace("%VER%", pypowerwall.version).replace( "%BUILD%", BUILD ) with proxystats_lock: for i in proxystats: if i != "uri" and i != "config": message += f'\n' for i in proxystats["uri"]: message += f'\n' message += """ """ message += "
StatValue
{i}{proxystats[i]}
URI: {i}{proxystats["uri"][i]}
Config:
Click to view """ with proxystats_lock: for i in proxystats["config"]: message += f'\n' message += """
{i}{proxystats["config"][i]}
\n" message += f"\n

Page refresh: {str(datetime.datetime.fromtimestamp(time.time()))}

\n\n" elif request_path == "/api/troubleshooting/problems": # Simulate old API call and respond with empty list message = '{"problems": []}' # message = pw.poll('/api/troubleshooting/problems') or '{"problems": []}' elif request_path.startswith("/tedapi"): # TEDAPI Specific Calls if pw.tedapi: message = '{"error": "Use /tedapi/config, /tedapi/status, /tedapi/components, /tedapi/battery, /tedapi/controller"}' if request_path == "/tedapi/config": message = json.dumps(pw.tedapi.get_config()) if request_path == "/tedapi/status": message = json.dumps(pw.tedapi.get_status()) if request_path == "/tedapi/components": message = json.dumps(pw.tedapi.get_components()) if request_path == "/tedapi/battery": message = json.dumps(pw.tedapi.get_battery_blocks()) if request_path == "/tedapi/controller": message = json.dumps(pw.tedapi.get_device_controller()) else: message = '{"error": "TEDAPI not enabled"}' elif request_path.startswith("/cloud"): # Cloud API Specific Calls if pw.cloudmode and not pw.fleetapi: message = '{"error": "Use /cloud/battery, /cloud/power, /cloud/config"}' if request_path == "/cloud/battery": message = json.dumps(pw.client.get_battery()) if request_path == "/cloud/power": message = json.dumps(pw.client.get_site_power()) if request_path == "/cloud/config": message = json.dumps(pw.client.get_site_config()) else: message = '{"error": "Cloud API not enabled"}' elif request_path.startswith("/fleetapi"): # FleetAPI Specific Calls if pw.fleetapi: message = '{"error": "Use /fleetapi/info, /fleetapi/status"}' if request_path == "/fleetapi/info": message = json.dumps(pw.client.get_site_info()) if request_path == "/fleetapi/status": message = json.dumps(pw.client.get_live_status()) else: message = '{"error": "FleetAPI not enabled"}' elif request_path in DISABLED: # Disabled API Calls message = '{"status": "404 Response - API Disabled"}' elif request_path in ALLOWLIST: # Allowed API Calls - Proxy to Powerwall message: str = safe_pw_call(pw.poll, request_path, jsonformat=True) elif request_path.startswith("/control/reserve"): # Current battery reserve level if not pw_control: message = '{"error": "Control Commands Disabled - Set PW_CONTROL_SECRET to enable"}' else: message = '{"reserve": %s}' % ( safe_pw_call(pw_control.get_reserve) or 0 ) elif request_path.startswith("/control/mode"): # Current operating mode if not pw_control: message = '{"error": "Control Commands Disabled - Set PW_CONTROL_SECRET to enable"}' else: message = '{"mode": "%s"}' % ( safe_pw_call(pw_control.get_mode) or "unknown" ) elif request_path.startswith("/control/grid_charging"): # Current grid charging state if not pw_control: message = '{"error": "Control Commands Disabled - Set PW_CONTROL_SECRET to enable"}' else: message = '{"grid_charging": %s}' % ( "true" if safe_pw_call(pw_control.get_grid_charging) else "false" ) elif request_path.startswith("/control/grid_export"): # Current grid export state if not pw_control: message = '{"error": "Control Commands Disabled - Set PW_CONTROL_SECRET to enable"}' else: # battery_ok, pv_only, and never message = '{"grid_export": "%s"}' % ( safe_pw_call(pw_control.get_grid_export) or "unknown" ) elif request_path.startswith("/control/max_backup"): # Current backup events (requires v1r) if not pw_control: message = '{"error": "Control Commands Disabled - Set PW_CONTROL_SECRET to enable"}' elif not pw.tedapi or not pw.tedapi.v1r: message = '{"error": "max_backup requires v1r LAN transport"}' else: result = safe_pw_call(pw.tedapi.get_backup_events) if result is not None: # Auto-cancel expired events (gateway leaves them lingering) mb = result.get('manual_backup') if mb and not mb.get('active'): safe_pw_call(pw.tedapi.cancel_max_backup) result['manual_backup'] = None message = json.dumps(result) else: message = '{"error": "Failed to get backup events"}' elif request_path == "/fans": # Fan speeds in raw format message = json.dumps( safe_pw_call(pw.tedapi.get_fan_speeds) if pw.tedapi else {} ) elif request_path.startswith("/fans/pw"): # Fan speeds in simplified format (e.g. FAN1_actual, FAN1_target) if pw.tedapi: fans = {} fan_speeds = safe_pw_call(pw.tedapi.get_fan_speeds) or {} for i, (_, value) in enumerate(sorted(fan_speeds.items())): key = f"FAN{i+1}" fans[f"{key}_actual"] = value.get("PVAC_Fan_Speed_Actual_RPM") fans[f"{key}_target"] = value.get("PVAC_Fan_Speed_Target_RPM") message = json.dumps(fans) else: message = "{}" elif self.path.startswith("/pw/"): # Map library functions into /pw/ API calls path = self.path[4:] # Remove '/pw/' prefix simple_mappings = { "level": lambda: {"level": safe_pw_call(pw.level)}, "power": lambda: safe_pw_call(pw.power), "site": lambda: safe_pw_call(pw.site, True), "solar": lambda: safe_pw_call(pw.solar, True), "battery": lambda: safe_pw_call(pw.battery, True), "battery_blocks": lambda: safe_pw_call(pw.battery_blocks), "load": lambda: safe_pw_call(pw.load, True), "grid": lambda: safe_pw_call(pw.grid, True), "home": lambda: safe_pw_call(pw.home, True), "vitals": lambda: safe_pw_call(pw.vitals), "temps": lambda: safe_pw_call(pw.temps), "strings": lambda: safe_pw_call(pw.strings, False, True), "din": lambda: {"din": safe_pw_call(pw.din)}, "uptime": lambda: {"uptime": safe_pw_call(pw.uptime)}, "version": lambda: {"version": safe_pw_call(pw.version)}, "status": lambda: safe_pw_call(pw.status), "system_status": lambda: safe_pw_call(pw.system_status, False), "grid_status": lambda: json.loads( safe_pw_call(pw.grid_status, "json") or "{}" ), "aggregates": lambda: safe_pw_call( pw.poll, "/api/meters/aggregates", False ), "site_name": lambda: {"site_name": safe_pw_call(pw.site_name)}, "alerts": lambda: {"alerts": safe_pw_call(pw.alerts)}, "is_connected": lambda: {"is_connected": safe_pw_call(pw.is_connected)}, "get_reserve": lambda: {"reserve": safe_pw_call(pw.get_reserve)}, "get_mode": lambda: {"mode": safe_pw_call(pw.get_mode)}, "get_time_remaining": lambda: { "time_remaining": safe_pw_call(pw.get_time_remaining) }, } # Check if the path is in the simple mappings if path in simple_mappings: result = simple_mappings[path]() else: result = {"error": "Invalid Request"} message = json.dumps(result) else: # Everything else - Set auth headers required for web application proxystats["gets"] = proxystats["gets"] + 1 if pw.authmode == "token": # Create bogus cookies self.send_header("Set-Cookie", f"AuthCookie=1234567890;{cookiesuffix}") self.send_header("Set-Cookie", f"UserRecord=1234567890;{cookiesuffix}") else: # Safely access auth cookies with fallback auth_cookie = ( pw.client.auth.get("AuthCookie", "1234567890") if pw.client.auth else "1234567890" ) user_record = ( pw.client.auth.get("UserRecord", "1234567890") if pw.client.auth else "1234567890" ) self.send_header( "Set-Cookie", f"AuthCookie={auth_cookie};{cookiesuffix}" ) self.send_header( "Set-Cookie", f"UserRecord={user_record};{cookiesuffix}" ) # Serve static assets from web root first, if found. # pylint: disable=attribute-defined-outside-init if request_path == "/" or request_path == "": request_path = "/index.html" fcontent, ftype = get_static(web_root, request_path) # Replace {VARS} with current data status = safe_pw_call(pw.status) or {} # convert fcontent to string fcontent = fcontent.decode("utf-8") # fix the following variables that if they are None, return "" fcontent = fcontent.replace( "{VERSION}", status.get("version", "") or "" ) fcontent = fcontent.replace("{HASH}", status.get("git_hash", "") or "") fcontent = fcontent.replace("{EMAIL}", email) static_asset_prefix = ( api_base_url + "viz-static/" ) # prefix for static files so they can be detected by a reverse proxy easily fcontent = fcontent.replace("{STYLE}", static_asset_prefix + style) fcontent = fcontent.replace("{ASSET_PREFIX}", static_asset_prefix) fcontent = fcontent.replace("{API_BASE_URL}", api_base_url + "api") # convert fcontent back to bytes fcontent = bytes(fcontent, "utf-8") else: fcontent, ftype = get_static(web_root, request_path) if fcontent: log.debug( "Served from local web root: {} type {}".format(request_path, ftype) ) # If not found, serve from Powerwall web server elif pw.cloudmode or pw.fleetapi: log.debug("Cloud Mode - File not found: {}".format(request_path)) fcontent = bytes("Not Found", "utf-8") ftype = "text/plain" else: # Proxy request to Powerwall web server. proxy_path = request_path if proxy_path.startswith("/"): proxy_path = proxy_path[1:] pw_url = "https://{}/{}".format(pw.host, proxy_path) log.debug("Proxy request to: {}".format(pw_url)) try: if pw.authmode == "token": r = pw.client.session.get( url=pw_url, headers=pw.auth, verify=False, stream=True, timeout=pw.timeout, ) else: r = pw.client.session.get( url=pw_url, cookies=pw.auth, verify=False, stream=True, timeout=pw.timeout, ) fcontent = r.content ftype = r.headers["content-type"] except AttributeError: # Display 404 log.debug("File not found: {}".format(request_path)) fcontent = bytes("Not Found", "utf-8") ftype = "text/plain" self.send_response(404) return # Allow browser caching, if user permits, only for CSS, JavaScript and PNG images... if browser_cache > 0 and ( ftype == "text/css" or ftype == "application/javascript" or ftype == "image/png" ): self.send_header("Cache-Control", "max-age={}".format(browser_cache)) else: self.send_header("Cache-Control", "no-cache, no-store") # Inject transformations if request_path.split("?")[0] == "/": if os.path.exists(os.path.join(web_root, style)): fcontent = bytes(inject_js(fcontent, style), "utf-8") self.send_header("Content-type", "{}".format(ftype)) self.end_headers() try: self.wfile.write(fcontent) except Exception as exc: if "Broken pipe" in str(exc): log.debug(f"Client disconnected before payload sent [doGET]: {exc}") return log.error( f"Error occured while sending PROXY response to client [doGET]: {exc}" ) return # Count if message is None: with proxystats_lock: proxystats["timeout"] = proxystats["timeout"] + 1 # Return null/empty response instead of timeout message for API endpoints if request_path.startswith("/api/") or request_path in [ "/aggregates", "/soe", "/vitals", "/strings", ]: message = "null" # JSON null for API endpoints else: message = "TIMEOUT!" elif message == "ERROR!": with proxystats_lock: proxystats["errors"] = proxystats["errors"] + 1 message = "ERROR!" else: with proxystats_lock: proxystats["gets"] = proxystats["gets"] + 1 if request_path in proxystats["uri"]: proxystats["uri"][request_path] = ( proxystats["uri"][request_path] + 1 ) else: proxystats["uri"][request_path] = 1 # Send headers and payload try: self.send_header("Content-type", contenttype) self.send_header("Content-Length", str(len(message))) self.send_header("Access-Control-Allow-Origin", "*") self.end_headers() self.wfile.write(message.encode("utf8")) except Exception as exc: log.debug(f"Socket broken sending API response to client [doGET]: {exc}") # noinspection PyTypeChecker def main() -> None: with ThreadingHTTPServer((bind_address, port), Handler) as server: if https_mode == "yes": # Activate HTTPS log.debug("Activating HTTPS") # pylint: disable=deprecated-method server.socket = ssl.wrap_socket( server.socket, certfile=os.path.join(os.path.dirname(__file__), "localhost.pem"), server_side=True, ssl_version=ssl.PROTOCOL_TLSv1_2, ca_certs=None, do_handshake_on_connect=True, ) # noinspection PyBroadException try: server.serve_forever() except (Exception, KeyboardInterrupt, SystemExit): print(" CANCEL \n") log.info("pyPowerwall Proxy Stopped") sys.exit(0) if __name__ == "__main__": main() ================================================ FILE: proxy/tests/__init__.py ================================================ ================================================ FILE: proxy/tests/test_api_endpoints.py ================================================ import json import unittest from http import HTTPStatus from io import BytesIO from unittest.mock import Mock, patch from proxy.server import Handler from proxy.tests.test_csv_endpoints import BaseDoGetTest, common_patches class TestFreqEndpoint(BaseDoGetTest): """Test cases for /freq endpoint""" @common_patches @patch('proxy.server.pw') @patch('proxy.server.safe_pw_call') def test_freq_basic_output(self, proxystats_lock, mock_safe_pw_call, mock_pw): """Test /freq endpoint basic output with battery_blocks and vitals""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/freq" # Mock system_status call with battery_blocks def safe_pw_call_side_effect(*args, **kwargs): if args[0] == mock_pw.system_status: return { 'battery_blocks': [ { 'PackagePartNumber': 'PW123', 'PackageSerialNumber': 'SN001', 'f_out': 60.0, 'p_out': 1000, 'q_out': 50, 'v_out': 240.0, 'i_out': 4.2 } ] } elif args[0] == mock_pw.vitals: return { 'TEPINV1': { 'PINV_Fout': 59.98, 'PINV_VSplit1': 120.5, 'PINV_VSplit2': 119.8 } } elif args[0] == mock_pw.grid_status: return 1 # UP return None mock_safe_pw_call.side_effect = safe_pw_call_side_effect self.handler.do_GET() self.handler.send_response.assert_called_with(HTTPStatus.OK) result = self.get_written_text() data = json.loads(result) # Verify battery_blocks data self.assertEqual(data['PW1_PackagePartNumber'], 'PW123') self.assertEqual(data['PW1_f_out'], 60.0) self.assertEqual(data['PW1_v_out'], 240.0) # Verify vitals data self.assertEqual(data['PW1_name'], 'TEPINV1') self.assertEqual(data['PW1_PINV_Fout'], 59.98) self.assertEqual(data['PW1_PINV_VSplit1'], 120.5) # Verify grid status self.assertEqual(data['grid_status'], 1) @common_patches @patch('proxy.server.pw') @patch('proxy.server.safe_pw_call') def test_freq_with_meter_data(self, proxystats_lock, mock_safe_pw_call, mock_pw): """Test /freq endpoint with TESYNC/TEMSA meter data""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/freq" def safe_pw_call_side_effect(*args, **kwargs): if args[0] == mock_pw.system_status: return {'battery_blocks': []} elif args[0] == mock_pw.vitals: return { 'TESYNC1': { 'ISLAND_FreqL1_Load': 60.01, 'METER_X_CTA_InstRealPower': 5000 } } elif args[0] == mock_pw.grid_status: return 1 return None mock_safe_pw_call.side_effect = safe_pw_call_side_effect self.handler.do_GET() result = self.get_written_text() data = json.loads(result) # Verify meter/island metrics are included self.assertEqual(data['ISLAND_FreqL1_Load'], 60.01) self.assertEqual(data['METER_X_CTA_InstRealPower'], 5000) @common_patches @patch('proxy.server.pw') @patch('proxy.server.safe_pw_call') def test_freq_cache_behavior(self, proxystats_lock, mock_safe_pw_call, mock_pw): """Test /freq endpoint caching""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/freq" call_count = 0 def safe_pw_call_side_effect(*args, **kwargs): nonlocal call_count call_count += 1 if args[0] == mock_pw.system_status: return {'battery_blocks': []} elif args[0] == mock_pw.vitals: return {} elif args[0] == mock_pw.grid_status: return 1 return None mock_safe_pw_call.side_effect = safe_pw_call_side_effect # First call - should hit the API self.handler.do_GET() first_call_count = call_count # Second call - should use cache self.handler.wfile = BytesIO() self.handler.do_GET() second_call_count = call_count # Verify cache was used (no new API calls) self.assertEqual(first_call_count, second_call_count) class TestPodEndpoint(BaseDoGetTest): """Test cases for /pod endpoint""" @common_patches @patch('proxy.server.pw') @patch('proxy.server.safe_pw_call') def test_pod_basic_output(self, proxystats_lock, mock_safe_pw_call, mock_pw): """Test /pod endpoint basic output""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/pod" def safe_pw_call_side_effect(*args, **kwargs): if args[0] == mock_pw.system_status: return { 'battery_blocks': [ { 'PackagePartNumber': 'PW2-123', 'PackageSerialNumber': 'TG123456', 'nominal_energy_remaining': 13500, 'nominal_full_pack_energy': 14000, 'pinv_state': 'PV_Active', 'p_out': 1500, 'v_out': 240.5, 'f_out': 60.0 } ], 'nominal_full_pack_energy': 14000, 'nominal_energy_remaining': 13500 } elif args[0] == mock_pw.vitals: return { 'TEPOD1': { 'POD_ActiveHeating': 0, 'POD_ChargeComplete': 0, 'POD_available_charge_power': 5000, 'POD_nom_energy_remaining': 13500, 'POD_nom_full_pack_energy': 14000 } } elif args[0] == mock_pw.get_time_remaining: return 18.5 elif args[0] == mock_pw.get_reserve: return 20.0 return None mock_safe_pw_call.side_effect = safe_pw_call_side_effect self.handler.do_GET() self.handler.send_response.assert_called_with(HTTPStatus.OK) result = self.get_written_text() data = json.loads(result) # Verify battery block data self.assertEqual(data['PW1_PackagePartNumber'], 'PW2-123') self.assertEqual(data['PW1_POD_nom_energy_remaining'], 13500) self.assertEqual(data['PW1_pinv_state'], 'PV_Active') # Verify vitals overlay self.assertEqual(data['PW1_name'], 'TEPOD1') self.assertEqual(data['PW1_POD_available_charge_power'], 5000) # Verify aggregates self.assertEqual(data['nominal_full_pack_energy'], 14000) self.assertEqual(data['time_remaining_hours'], 18.5) self.assertEqual(data['backup_reserve_percent'], 20.0) @common_patches @patch('proxy.server.pw') @patch('proxy.server.safe_pw_call') def test_pod_multiple_batteries(self, proxystats_lock, mock_safe_pw_call, mock_pw): """Test /pod endpoint with multiple Powerwalls""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/pod" def safe_pw_call_side_effect(*args, **kwargs): if args[0] == mock_pw.system_status: return { 'battery_blocks': [ {'PackageSerialNumber': 'SN001', 'p_out': 1000}, {'PackageSerialNumber': 'SN002', 'p_out': 1200} ], 'nominal_full_pack_energy': 28000, 'nominal_energy_remaining': 25000 } elif args[0] == mock_pw.vitals: return { 'TEPOD1': {'POD_nom_energy_remaining': 12500}, 'TEPOD2': {'POD_nom_energy_remaining': 12500} } elif args[0] == mock_pw.get_time_remaining: return 20.0 elif args[0] == mock_pw.get_reserve: return 15.0 return None mock_safe_pw_call.side_effect = safe_pw_call_side_effect self.handler.do_GET() result = self.get_written_text() data = json.loads(result) # Verify both batteries are present self.assertEqual(data['PW1_PackageSerialNumber'], 'SN001') self.assertEqual(data['PW2_PackageSerialNumber'], 'SN002') self.assertEqual(data['PW1_name'], 'TEPOD1') self.assertEqual(data['PW2_name'], 'TEPOD2') @common_patches @patch('proxy.server.pw') @patch('proxy.server.safe_pw_call') def test_pod_null_handling(self, proxystats_lock, mock_safe_pw_call, mock_pw): """Test /pod endpoint with null values""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/pod" # All calls return None mock_safe_pw_call.return_value = None self.handler.do_GET() result = self.get_written_text() data = json.loads(result) # Should return empty/null aggregates self.assertIsNone(data.get('nominal_full_pack_energy')) self.assertIsNone(data.get('time_remaining_hours')) class TestJsonEndpoint(BaseDoGetTest): """Test cases for /json endpoint""" @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_json_basic_output(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /json endpoint basic output""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/json" # Mock aggregates call mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 100}, 'solar': {'instant_power': 5000}, 'battery': {'instant_power': -2000}, 'load': {'instant_power': 3100} } # Mock other calls def safe_pw_call_side_effect(*args, **kwargs): if args[0] == mock_pw.level: return 75.5 elif args[0] == mock_pw.grid_status: return "UP" elif args[0] == mock_pw.get_reserve: return 20.0 elif args[0] == mock_pw.get_time_remaining: return 15.5 elif args[0] == mock_pw.system_status: return { 'nominal_full_pack_energy': 14000, 'nominal_energy_remaining': 10570 } elif args[0] == mock_pw.strings: return {'A': {'Connected': True, 'Current': 5.5}} return None mock_safe_pw_call.side_effect = safe_pw_call_side_effect self.handler.do_GET() self.handler.send_response.assert_called_with(HTTPStatus.OK) result = self.get_written_text() data = json.loads(result) # Verify all fields self.assertEqual(data['grid'], 100) self.assertEqual(data['home'], 3100) self.assertEqual(data['solar'], 5000) self.assertEqual(data['battery'], -2000) self.assertEqual(data['soe'], 75.5) self.assertEqual(data['grid_status'], 1) # UP = 1 self.assertEqual(data['reserve'], 20.0) self.assertEqual(data['time_remaining_hours'], 15.5) self.assertEqual(data['full_pack_energy'], 14000) self.assertEqual(data['energy_remaining'], 10570) self.assertIn('A', data['strings']) @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_json_negative_solar_correction(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /json endpoint with negative solar correction""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/json" # Mock aggregates with negative solar mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 100}, 'solar': {'instant_power': -50}, 'battery': {'instant_power': 200}, 'load': {'instant_power': 250} } mock_safe_pw_call.side_effect = lambda *args, **kwargs: ( 50.0 if args[0] == mock_pw.level else "UP" if args[0] == mock_pw.grid_status else 20.0 if args[0] == mock_pw.get_reserve else 10.0 if args[0] == mock_pw.get_time_remaining else {} if args[0] == mock_pw.system_status else {} if args[0] == mock_pw.strings else None ) self.handler.do_GET() result = self.get_written_text() data = json.loads(result) # Verify solar clamped to 0 and home adjusted self.assertEqual(data['solar'], 0) self.assertEqual(data['home'], 300) # 250 - (-50) @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_json_aggregates_optimization(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /json endpoint uses single aggregates call""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/json" mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 100}, 'solar': {'instant_power': 200}, 'battery': {'instant_power': -50}, 'load': {'instant_power': 250} } # Mock safe_pw_call with appropriate return values mock_safe_pw_call.side_effect = lambda *args, **kwargs: ( 50.0 if args[0] == mock_pw.level else "UP" if args[0] == mock_pw.grid_status else 20.0 if args[0] == mock_pw.get_reserve else 10.0 if args[0] == mock_pw.get_time_remaining else {} if args[0] == mock_pw.system_status else {} if args[0] == mock_pw.strings else None ) self.handler.do_GET() # Verify aggregates was called once mock_safe_endpoint_call.assert_called_once_with( "/aggregates", mock_pw.poll, "/api/meters/aggregates", jsonformat=False ) # Verify individual power methods were NOT called for call in mock_safe_pw_call.call_args_list: method = call[0][0] # None of these should be called since we use aggregates self.assertNotEqual(method, mock_pw.grid) self.assertNotEqual(method, mock_pw.solar) self.assertNotEqual(method, mock_pw.battery) self.assertNotEqual(method, mock_pw.home) @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_json_null_aggregates(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /json endpoint with null aggregates""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/json" # Aggregates returns None (timeout/error) mock_safe_endpoint_call.return_value = None mock_safe_pw_call.return_value = 0 self.handler.do_GET() result = self.get_written_text() data = json.loads(result) # All power values should be 0 self.assertEqual(data['grid'], 0) self.assertEqual(data['home'], 0) self.assertEqual(data['solar'], 0) self.assertEqual(data['battery'], 0) ================================================ FILE: proxy/tests/test_csv_endpoints.py ================================================ import json import unittest from contextlib import contextmanager from http import HTTPStatus from io import BytesIO from unittest.mock import Mock, patch import proxy from proxy.server import Handler class MockPowerwall: """Mock Powerwall object for testing""" def __init__(self): self.level_value = 50.0 self.grid_value = 100.0 self.solar_value = 500.0 self.battery_value = -200.0 self.home_value = 400.0 self.grid_status_value = "UP" self.reserve_value = 20.0 self.cloudmode = False self.fleetapi = False self.authmode = "cookie" self.timeout = 5 self.auth = {} self.client = None def level(self): return self.level_value def grid(self): return self.grid_value def solar(self): return self.solar_value def battery(self): return self.battery_value def home(self): return self.home_value def grid_status(self): return self.grid_status_value def get_reserve(self): return self.reserve_value class UnittestHandler(Handler): """A testable version of Handler that doesn't auto-handle requests""" def __init__(self): # Skip the parent __init__ to avoid automatic handling # Instead, set up the minimal attributes needed for testing self.path = "" self.send_response = Mock() self.send_header = Mock() self.end_headers = Mock() self.wfile = BytesIO() self.rfile = BytesIO() self.headers = {} self.client_address = ('127.0.0.1', 12345) self.server = Mock() self.request_version = 'HTTP/1.1' self.command = 'GET' def common_patches(func): """Decorator to apply common patches to test methods""" @patch('proxy.server.api_base_url', '') @patch('proxy.server.proxystats', { 'gets': 0, 'posts': 0, 'errors': 0, 'timeout': 0, 'uri': {}, 'start': 1000, 'clear': 0 }) @patch('proxy.server.proxystats_lock') def wrapper(*args, **kwargs): return func(*args, **kwargs) return wrapper @contextmanager def standard_test_patches(): """Context manager for standard test patches""" with patch('proxy.server.proxystats_lock'), \ patch('proxy.server.proxystats', { 'gets': 0, 'posts': 0, 'errors': 0, 'timeout': 0, 'uri': {}, 'start': 1000, 'clear': 0 }), \ patch('proxy.server.api_base_url', ''): yield class BaseDoGetTest(unittest.TestCase): """Base test class with common setup and helper methods""" def setUp(self): """Common setup for all test cases""" # Use our testable handler self.handler = UnittestHandler() # Mock wfile.write for easier testing self.handler.wfile = Mock() self.handler.wfile.write = Mock() def get_written_json(self): """Helper to extract and parse JSON from written response""" written_data = self.handler.wfile.write.call_args[0][0] return json.loads(written_data.decode('utf8')) def get_written_text(self): """Helper to extract text from written response""" written_data = self.handler.wfile.write.call_args[0][0] return written_data.decode('utf8') def assert_json_response(self, expected_key, expected_value): """Helper to assert JSON response contains expected key-value""" result = self.get_written_json() self.assertIn(expected_key, result) self.assertEqual(result[expected_key], expected_value) def do_get(self, path: str) -> str: """ Run Handler.do_GET for a given path under the standard patches and return the response body as text. """ self.handler.path = path self.handler.command = "GET" with standard_test_patches(): self.handler.do_GET() return self.get_written_text() class TestDoGetAggregatesEndpoints(BaseDoGetTest): """Test cases for aggregates-related endpoints""" @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.get_performance_cached', return_value=None) # Force cache miss @patch('proxy.server.cache_performance_response') # Mock cache write def test_aggregates_endpoint(self, proxystats_lock, mock_cache_write, mock_cache_get, mock_safe_call, mock_pw): """Test /aggregates endpoint""" self.handler.path = "/aggregates" mock_pw.poll = Mock() mock_safe_call.return_value = { "solar": {"instant_power": 1000} } self.handler.do_GET() self.handler.send_response.assert_called_with(HTTPStatus.OK) mock_safe_call.assert_called_once_with( "/aggregates", mock_pw.poll, "/api/meters/aggregates" ) self.assertEqual(proxy.server.proxystats["gets"], 1) proxystats_lock.__enter__.assert_called_once() proxystats_lock.__exit__.assert_called_once() result = self.get_written_json() self.assertEqual(result["solar"]["instant_power"], 1000) @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.get_performance_cached', return_value=None) # Force cache miss @patch('proxy.server.cache_performance_response') # Mock cache write def test_aggregates_with_negative_solar_adjustment(self, proxystats_lock, mock_cache_write, mock_cache_get, mock_safe_call, mock_pw): """Test aggregates with negative solar power adjustment""" self.handler.path = "/aggregates" mock_pw.poll = Mock() mock_safe_call.return_value = { "solar": {"instant_power": -500}, "load": {"instant_power": 2000} } self.handler.do_GET() self.handler.send_response.assert_called_with(HTTPStatus.OK) self.assertEqual(proxy.server.proxystats["gets"], 1) proxystats_lock.__enter__.assert_called_once() proxystats_lock.__exit__.assert_called_once() result = self.get_written_json() self.assertEqual(result["solar"]["instant_power"], 0) # Assert: load has been increased by the magnitude of negative solar # 2000 - (-500) = 2500 self.assertIn("load", result) self.assertEqual(result["load"]["instant_power"], 2500) @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.cache_performance_response') def test_cache_stores_processed_data(self, proxystats_lock, mock_cache_write, mock_safe_call, mock_pw): """Test that cache stores data AFTER negative solar processing""" with patch('proxy.server.get_performance_cached', return_value=None): # Force fresh data generation self.handler.path = "/aggregates" mock_pw.poll = Mock() mock_safe_call.return_value = { "solar": {"instant_power": -300}, "load": {"instant_power": 1500} } self.handler.do_GET() # Verify the cache was written with the PROCESSED data (solar=0, load=1800) mock_cache_write.assert_called_once() cache_key, cached_json = mock_cache_write.call_args[0] self.assertEqual(cache_key, "/aggregates") cached_data = json.loads(cached_json) self.assertEqual(cached_data["solar"]["instant_power"], 0) # Should be clamped to 0 self.assertEqual(cached_data["load"]["instant_power"], 1800) # Should be 1500 - (-300) = 1800 @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.cache_performance_response') def test_cache_hit_returns_processed_data(self, proxystats_lock, mock_cache_write, mock_safe_call, mock_pw): """Test that cache hits return already-processed data correctly""" # Simulate cached data that already has negative solar adjustment applied cached_processed_data = json.dumps({ "solar": {"instant_power": 0}, "load": {"instant_power": 1800} }) with patch('proxy.server.get_performance_cached', return_value=cached_processed_data): self.handler.path = "/aggregates" mock_pw.poll = Mock() self.handler.do_GET() # safe_endpoint_call should NOT be called when cache hits mock_safe_call.assert_not_called() # cache_performance_response should NOT be called when cache hits mock_cache_write.assert_not_called() # Verify the cached processed data is returned correctly result = self.get_written_json() self.assertEqual(result["solar"]["instant_power"], 0) self.assertEqual(result["load"]["instant_power"], 1800) @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.cache_performance_response') def test_cache_preserves_multiple_adjustments(self, proxystats_lock, mock_cache_write, mock_safe_call, mock_pw): """Test cache behavior with multiple different negative solar scenarios""" test_scenarios = [ { "input": {"solar": {"instant_power": -100}, "load": {"instant_power": 800}}, "expected": {"solar": {"instant_power": 0}, "load": {"instant_power": 900}} }, { "input": {"solar": {"instant_power": -750}, "load": {"instant_power": 2000}}, "expected": {"solar": {"instant_power": 0}, "load": {"instant_power": 2750}} } ] for i, scenario in enumerate(test_scenarios): with self.subTest(scenario=i): mock_cache_write.reset_mock() mock_safe_call.reset_mock() with patch('proxy.server.get_performance_cached', return_value=None): self.handler.path = "/aggregates" mock_safe_call.return_value = scenario["input"] self.handler.do_GET() # Verify correct processing and caching mock_cache_write.assert_called_once() cache_key, cached_json = mock_cache_write.call_args[0] cached_data = json.loads(cached_json) self.assertEqual(cached_data["solar"]["instant_power"], scenario["expected"]["solar"]["instant_power"]) self.assertEqual(cached_data["load"]["instant_power"], scenario["expected"]["load"]["instant_power"]) @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', True) # Test with neg_solar ENABLED @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.get_performance_cached', return_value=None) @patch('proxy.server.cache_performance_response') def test_cache_respects_neg_solar_setting(self, proxystats_lock, mock_cache_write, mock_cache_get, mock_safe_call, mock_pw): """Test that cache respects neg_solar configuration setting""" self.handler.path = "/aggregates" mock_pw.poll = Mock() mock_safe_call.return_value = { "solar": {"instant_power": -200}, "load": {"instant_power": 1000} } self.handler.do_GET() # When neg_solar=True, negative solar should be preserved (no adjustment) mock_cache_write.assert_called_once() cache_key, cached_json = mock_cache_write.call_args[0] cached_data = json.loads(cached_json) self.assertEqual(cached_data["solar"]["instant_power"], -200) # Should preserve negative self.assertEqual(cached_data["load"]["instant_power"], 1000) # Should remain unchanged class TestDoGetStatsEndpoints(BaseDoGetTest): """Test cases for stats-related endpoints""" def test_stats_endpoint(self): """Test /stats endpoint - using context manager approach""" with standard_test_patches(), \ patch('proxy.server.safe_pw_call') as mock_safe_call, \ patch('proxy.server.resource') as mock_resource, \ patch('proxy.server.time') as mock_time, \ patch('proxy.server.pw') as mock_pw, \ patch('proxy.server.health_check_enabled', False): self.handler.path = "/stats" mock_time.time.return_value = 2000 mock_resource.getrusage.return_value = Mock(ru_maxrss=1024) mock_safe_call.return_value = "Test Site" mock_pw.cloudmode = False mock_pw.fleetapi = False self.handler.do_GET() result = self.get_written_json() self.assertEqual(result["ts"], 2000) self.assertEqual(result["mem"], 1024) def test_stats_clear_endpoint(self): """Test /stats/clear endpoint - using context manager with custom proxystats""" with patch('proxy.server.proxystats_lock'), \ patch('proxy.server.proxystats', {'gets': 10, 'errors': 2, 'uri': {'/test': 5}, 'clear': 0}) as mock_stats, \ patch('proxy.server.api_base_url', ''), \ patch('proxy.server.time') as mock_time: self.handler.path = "/stats/clear" mock_time.time.return_value = 3000 self.handler.do_GET() # Check that stats were cleared self.assertEqual(mock_stats["gets"], 1) self.assertEqual(mock_stats["errors"], 0) self.assertEqual(mock_stats["uri"], {'/stats/clear': 1}) self.assertEqual(mock_stats["clear"], 3000) class TestCSVEndpoints(BaseDoGetTest): """Test cases for CSV endpoints""" def setUp(self): """Clear performance cache before each test""" super().setUp() # Clear the performance cache to prevent test interference with patch.dict('proxy.server._performance_cache', {}, clear=True): pass @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_csv_basic_output(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /csv endpoint basic output""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/csv" mock_pw.poll = Mock() # Mock the aggregates call mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 100.5}, 'solar': {'instant_power': 200.25}, 'battery': {'instant_power': -50.75}, 'load': {'instant_power': 250.0} } # Mock the level call mock_safe_pw_call.return_value = 45.5 self.handler.do_GET() self.handler.send_response.assert_called_with(HTTPStatus.OK) result = self.get_written_text() self.assertEqual(result, "100.50,250.00,200.25,-50.75,45.50\n") @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_csv_with_headers(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /csv endpoint with headers""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/csv?headers" mock_pw.poll = Mock() mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 100}, 'solar': {'instant_power': 200}, 'battery': {'instant_power': -50}, 'load': {'instant_power': 250} } mock_safe_pw_call.return_value = 45.5 self.handler.do_GET() result = self.get_written_text() self.assertIn("Grid,Home,Solar,Battery,BatteryLevel\n", result) self.assertIn("100.00,250.00,200.00,-50.00,45.50\n", result) @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_csv_fractional_values(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /csv endpoint with fractional values""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/csv" mock_pw.poll = Mock() mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 123.456}, 'solar': {'instant_power': 234.567}, 'battery': {'instant_power': -345.678}, 'load': {'instant_power': 456.789} } mock_safe_pw_call.return_value = 67.89 self.handler.do_GET() result = self.get_written_text() self.assertEqual(result, "123.46,456.79,234.57,-345.68,67.89\n") @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', True) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_csv_negative_solar_enabled(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /csv endpoint with negative solar enabled""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/csv" mock_pw.poll = Mock() mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 100}, 'solar': {'instant_power': -50}, 'battery': {'instant_power': 200}, 'load': {'instant_power': 250} } mock_safe_pw_call.return_value = 50.0 self.handler.do_GET() result = self.get_written_text() self.assertEqual(result, "100.00,250.00,-50.00,200.00,50.00\n") @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_csv_negative_solar_disabled(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /csv endpoint with negative solar disabled (clamped to 0)""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/csv" mock_pw.poll = Mock() mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 100}, 'solar': {'instant_power': -50}, 'battery': {'instant_power': 200}, 'load': {'instant_power': 250} } mock_safe_pw_call.return_value = 50.0 self.handler.do_GET() result = self.get_written_text() # Solar should be clamped to 0, and load adjusted: 250 - (-50) = 300 self.assertEqual(result, "100.00,300.00,0.00,200.00,50.00\n") @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_csv_with_null_values(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /csv endpoint with null aggregates""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/csv" mock_pw.poll = Mock() # Return None for aggregates (timeout/error case) mock_safe_endpoint_call.return_value = None mock_safe_pw_call.return_value = 0 self.handler.do_GET() result = self.get_written_text() self.assertEqual(result, "0.00,0.00,0.00,0.00,0.00\n") @common_patches @patch('proxy.server.pw') @patch('proxy.server.neg_solar', False) @patch('proxy.server.safe_endpoint_call') @patch('proxy.server.safe_pw_call') def test_csv_zero_values(self, proxystats_lock, mock_safe_pw_call, mock_safe_endpoint_call, mock_pw): """Test /csv endpoint with zero values""" with patch.dict('proxy.server._performance_cache', {}, clear=True): self.handler.path = "/csv" mock_pw.poll = Mock() mock_safe_endpoint_call.return_value = { 'site': {'instant_power': 0}, 'solar': {'instant_power': 0}, 'battery': {'instant_power': 0}, 'load': {'instant_power': 0} } mock_safe_pw_call.return_value = 0 self.handler.do_GET() result = self.get_written_text() self.assertEqual(result, "0.00,0.00,0.00,0.00,0.00\n") ================================================ FILE: proxy/transform.py ================================================ import os import logging from bs4 import BeautifulSoup as Soup logging.basicConfig( format="%(asctime)s [%(name)s] [%(levelname)s] %(message)s", datefmt="%m/%d/%Y %I:%M:%S %p", ) logger = logging.getLogger(os.path.basename(__file__)) if os.environ.get("LOG_LEVEL", "").lower() == "debug": logger.setLevel(logging.DEBUG) else: logger.setLevel(logging.INFO) def get_static(web_root, fpath): if fpath.split("?")[0] == "/": fpath = "index.html" if fpath.startswith("/"): fpath = fpath[1:] freq = os.path.join(web_root, fpath) # Prevent path traversal attacks by validating resolved path stays within web_root real_path = os.path.realpath(freq) real_web_root = os.path.realpath(web_root) if not real_path.startswith(real_web_root + os.sep) and real_path != real_web_root: logger.warning(f"Path traversal attempt detected: {fpath}") return None, None if os.path.exists(freq): if freq.lower().endswith(".js"): ftype = "application/javascript" elif freq.lower().endswith(".css"): ftype = "text/css" elif freq.lower().endswith(".png"): ftype = "image/png" elif freq.lower().endswith(".html"): ftype = "text/html" elif freq.lower().endswith(".otf"): ftype = "font/opentype" elif freq.lower().endswith(".woff"): ftype = "font/woff" elif freq.lower().endswith(".woff2"): ftype = "font/woff2" elif freq.lower().endswith(".ttf"): ftype = "font/ttf" elif freq.lower().endswith(".svg"): ftype = "image/svg+xml" elif freq.lower().endswith(".eot"): ftype = "application/vnd.ms-fontobject" elif freq.lower().endswith(".json"): ftype = "application/json" elif freq.lower().endswith(".xml"): ftype = "application/xml" else: ftype = "text/plain" with open(freq, "rb") as f: return f.read(), ftype return None, None def inject_js(htmlsrc, *args): soup = Soup(htmlsrc, "html.parser") for fpath in args: logger.debug("Inserting Javascript file: {}".format(fpath)) script = soup.new_tag("script") script["type"] = "text/javascript" script["src"] = fpath soup.body.append(script) return str(soup) ================================================ FILE: proxy/upload-beta.sh ================================================ #!/bin/bash echo "Build and Push jasonacox/pypowerwall to Docker Hub" echo "Usage: $0 [beta_number]" echo " If beta_number is not provided, auto-increments from last beta version" echo "" last_path=$(basename $PWD) if [ "$last_path" == "proxy" ]; then # Remove test link rm -rf pypowerwall cp -r ../pypowerwall . # Determine version PROXY=`grep "BUILD = " server.py | cut -d\" -f2` PYPOWERWALL=`echo -n "import pypowerwall print(pypowerwall.version)" | (cd ..; python3)` # Handle beta numbering BETA_FILE=".beta_version" if [ -n "$1" ]; then # Use provided beta number BETA_NUM="$1" echo "$BETA_NUM" > "$BETA_FILE" else # Auto-increment beta number if [ -f "$BETA_FILE" ]; then BETA_NUM=$(cat "$BETA_FILE") BETA_NUM=$((BETA_NUM + 1)) else BETA_NUM=1 fi echo "$BETA_NUM" > "$BETA_FILE" fi VER="${PYPOWERWALL}${PROXY}-beta${BETA_NUM}" # Check with user before proceeding echo "Build and push jasonacox/pypowerwall:${VER} to Docker Hub?" echo "Beta version: ${BETA_NUM} (stored in ${BETA_FILE})" read -p "Press [Enter] to continue or Ctrl-C to cancel..." # Build jasonacox/pypowerwall:x.y.z echo "* BUILD jasonacox/pypowerwall:${VER}" docker buildx build -f Dockerfile.beta --no-cache --platform linux/amd64,linux/arm64 --push -t jasonacox/pypowerwall:${VER} . echo "" # Verify echo "* VERIFY jasonacox/pypowerwall:${VER}" docker buildx imagetools inspect jasonacox/pypowerwall:${VER} | grep Platform echo "" echo "* VERIFY jasonacox/pypowerwall:latest" docker buildx imagetools inspect jasonacox/pypowerwall | grep Platform echo "" # Restore link for testing rm -rf pypowerwall ln -s ../pypowerwall pypowerwall else # Exit script if last_path is not "proxy" echo "Current directory is not 'proxy'." exit 0 fi ================================================ FILE: proxy/web/LICENSE ================================================ /** * @license * Lodash * Copyright JS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ /*! Copyright (c) 2017 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ /*! * jQuery JavaScript Library v2.2.4 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2016-05-20T17:23Z */ /*! * Sizzle CSS Selector Engine v2.2.1 * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2015-10-17 */ /* object-assign (c) Sindre Sorhus @license MIT */ /*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/react-select */ /*! Copyright (c) 2016 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ /*! * Bootstrap v3.4.1 (https://getbootstrap.com/) * Copyright 2011-2019 Twitter, Inc. * Licensed under the MIT license */ /** @license React v16.13.1 * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /** @license React v16.13.1 * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /** @license React v0.19.1 * scheduler.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /** @license React v16.10.1 * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ /*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */ ================================================ FILE: proxy/web/bogus/api.auth.toggle.supported.json ================================================ {"toggle_auth_supported":true} ================================================ FILE: proxy/web/bogus/api.customer.json ================================================ {"registered":true} ================================================ FILE: proxy/web/bogus/api.customer.registration.json ================================================ {"privacy_notice":null,"limited_warranty":null,"grid_services":null,"marketing":null,"registered":true,"timed_out_registration":false} ================================================ FILE: proxy/web/bogus/api.installer.json ================================================ {"company":"Tesla","customer_id":"","phone":"","email":"","location":"","mounting":"","wiring":"","backup_configuration":"Whole Home","solar_installation":"New","solar_installation_type":"PV Panel","run_sitemaster":true,"verified_config":true,"installation_types":["Residential"]} ================================================ FILE: proxy/web/bogus/api.meters.aggregates.json ================================================ {"site":{"last_communication_time":"2023-12-16T08:33:19.496043714-08:00","instant_power":27,"instant_reactive_power":-223,"instant_apparent_power":224.62858233092243,"frequency":0,"energy_exported":4319958.270189472,"energy_imported":6800365.841005325,"instant_average_voltage":211.11967293457045,"instant_average_current":4.986000000000001,"i_a_current":0,"i_b_current":0,"i_c_current":0,"last_phase_voltage_communication_time":"0001-01-01T00:00:00Z","last_phase_power_communication_time":"0001-01-01T00:00:00Z","last_phase_energy_communication_time":"0001-01-01T00:00:00Z","timeout":1500000000,"num_meters_aggregated":1,"instant_total_current":4.986000000000001},"battery":{"last_communication_time":"2023-12-16T08:33:19.470811519-08:00","instant_power":-990,"instant_reactive_power":10,"instant_apparent_power":990.050503762308,"frequency":60.019000000000005,"energy_exported":12319540,"energy_imported":13853641,"instant_average_voltage":243.95,"instant_average_current":22.3,"i_a_current":0,"i_b_current":0,"i_c_current":0,"last_phase_voltage_communication_time":"0001-01-01T00:00:00Z","last_phase_power_communication_time":"0001-01-01T00:00:00Z","last_phase_energy_communication_time":"0001-01-01T00:00:00Z","timeout":1500000000,"num_meters_aggregated":2,"instant_total_current":22.3},"load":{"last_communication_time":"2023-12-16T08:33:19.470811519-08:00","instant_power":866.25,"instant_reactive_power":-202.75,"instant_apparent_power":889.6609607035705,"frequency":0,"energy_exported":0,"energy_imported":27290482.570815854,"instant_average_voltage":211.11967293457045,"instant_average_current":4.103123067401045,"i_a_current":0,"i_b_current":0,"i_c_current":0,"last_phase_voltage_communication_time":"0001-01-01T00:00:00Z","last_phase_power_communication_time":"0001-01-01T00:00:00Z","last_phase_energy_communication_time":"0001-01-01T00:00:00Z","timeout":1500000000,"instant_total_current":4.103123067401045},"solar":{"last_communication_time":"2023-12-16T08:33:19.478393964-08:00","instant_power":1840,"instant_reactive_power":0,"instant_apparent_power":1840,"frequency":60.016000000000005,"energy_exported":26344176,"energy_imported":0,"instant_average_voltage":243.5,"instant_average_current":7.553366174055829,"i_a_current":0,"i_b_current":0,"i_c_current":0,"last_phase_voltage_communication_time":"0001-01-01T00:00:00Z","last_phase_power_communication_time":"0001-01-01T00:00:00Z","last_phase_energy_communication_time":"0001-01-01T00:00:00Z","timeout":1000000000,"num_meters_aggregated":1,"instant_total_current":7.553366174055829}} ================================================ FILE: proxy/web/bogus/api.meters.json ================================================ [{"serial":"VAH1234AB1234","short_id":"73533","type":"neurio_w2_tcp","connected":true,"cts":[{"type":"solarRGM","valid":[true,false,false,false],"inverted":[false,false,false,false],"real_power_scale_factor":2}],"ip_address":"PWRview-73533","mac":"01-23-45-56-78-90"},{"serial":"JBL12345Y1F012synchrometerY","short_id":"1232100-00-E--TG123456789EGG","type":"synchrometerY"},{"serial":"JBL12345Y1F012synchrometerX","short_id":"1232100-00-E--TG123456789EGG","type":"synchrometerX","cts":[{"type":"site","valid":[true,true,false,false],"inverted":[false,false,false,false]}]}] ================================================ FILE: proxy/web/bogus/api.meters.readings.json ================================================ TIMEOUT! ================================================ FILE: proxy/web/bogus/api.meters.site.json ================================================ [{"id":0,"location":"site","type":"synchrometerX","cts":[true,true,false,false],"inverted":[false,false,false,false],"connection":{"short_id":"1232100-00-E--TG123456789E4G","device_serial":"JBL12345Y1F012synchrometerX","https_conf":{}},"Cached_readings":{"last_communication_time":"2023-12-16T11:48:34.135766872-08:00","instant_power":2495,"instant_reactive_power":-212,"instant_apparent_power":2503.9906149983867,"frequency":0,"energy_exported":4507438.170261594,"energy_imported":6995047.554439916,"instant_average_voltage":210.8945063295865,"instant_average_current":20.984,"i_a_current":13.3045,"i_b_current":7.6795,"i_c_current":0,"last_phase_voltage_communication_time":"2023-12-16T11:48:34.035339849-08:00","v_l1n":121.72,"v_l2n":121.78,"last_phase_power_communication_time":"2023-12-16T11:48:34.135766872-08:00","real_power_a":1584,"real_power_b":911,"reactive_power_a":-129,"reactive_power_b":-83,"last_phase_energy_communication_time":"0001-01-01T00:00:00Z","serial_number":"JBL12345Y1F012","version":"fa0c1ad02efda3","timeout":1500000000,"instant_total_current":20.984}}] ================================================ FILE: proxy/web/bogus/api.meters.solar.json ================================================ null ================================================ FILE: proxy/web/bogus/api.networks.json ================================================ [{"network_name":"ethernet_tesla_internal_default","interface":"EthType","enabled":true,"dhcp":true,"extra_ips":[{"ip":"192.168.90.2","netmask":24}],"active":true,"primary":true,"lastTeslaConnected":true,"lastInternetConnected":true,"iface_network_info":{"network_name":"ethernet_tesla_internal_default","ip_networks":[{"IP":"","Mask":"////AA=="}],"gateway":"","interface":"EthType","state":"DeviceStateReady","state_reason":"DeviceStateReasonNone","signal_strength":0,"hw_address":""}},{"network_name":"gsm_tesla_internal_default","interface":"GsmType","enabled":true,"dhcp":null,"active":true,"primary":false,"lastTeslaConnected":false,"lastInternetConnected":false,"iface_network_info":{"network_name":"gsm_tesla_internal_default","ip_networks":[{"IP":"","Mask":"/////w=="}],"gateway":"","interface":"GsmType","state":"DeviceStateReady","state_reason":"DeviceStateReasonNone","signal_strength":71,"hw_address":""}}] ================================================ FILE: proxy/web/bogus/api.operation.json ================================================ {"real_mode":"self_consumption","backup_reserve_percent":81,"freq_shift_load_shed_soe":65,"freq_shift_load_shed_delta_f":-0.32} ================================================ FILE: proxy/web/bogus/api.powerwalls.json ================================================ {"enumerating":false,"updating":false,"checking_if_offgrid":false,"running_phase_detection":false,"phase_detection_last_error":"no phase information","bubble_shedding":false,"on_grid_check_error":"on grid check not run","grid_qualifying":false,"grid_code_validating":false,"phase_detection_not_available":true,"powerwalls":[{"Type":"","PackagePartNumber":"2012170-25-E","PackageSerialNumber":"TG1234567890G1","type":"SolarPowerwall","grid_state":"Grid_Uncompliant","grid_reconnection_time_seconds":0,"under_phase_detection":false,"updating":false,"commissioning_diagnostic":{"name":"Commissioning","category":"InternalComms","disruptive":false,"inputs":null,"checks":[{"name":"CAN connectivity","status":"fail","start_time":"2023-12-16T08:34:17.3068631-08:00","end_time":"2023-12-16T08:34:17.3068696-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null},{"name":"Enable switch","status":"fail","start_time":"2023-12-16T08:34:17.306875474-08:00","end_time":"2023-12-16T08:34:17.306880724-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null},{"name":"Internal communications","status":"fail","start_time":"2023-12-16T08:34:17.306886099-08:00","end_time":"2023-12-16T08:34:17.306891223-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null},{"name":"Firmware up-to-date","status":"fail","start_time":"2023-12-16T08:34:17.306896598-08:00","end_time":"2023-12-16T08:34:17.306901723-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null}],"alert":false},"update_diagnostic":{"name":"Firmware Update","category":"InternalComms","disruptive":true,"inputs":null,"checks":[{"name":"Solar Inverter firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Solar Safety firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Grid code","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Powerwall firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Battery firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Inverter firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Grid code","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null}],"alert":false},"bc_type":null,"in_config":true},{"Type":"","PackagePartNumber":"3012170-05-B","PackageSerialNumber":"TG1234567890G1","type":"ACPW","grid_state":"Grid_Uncompliant","grid_reconnection_time_seconds":0,"under_phase_detection":false,"updating":false,"commissioning_diagnostic":{"name":"Commissioning","category":"InternalComms","disruptive":false,"inputs":null,"checks":[{"name":"CAN connectivity","status":"fail","start_time":"2023-12-16T08:34:17.320856307-08:00","end_time":"2023-12-16T08:34:17.320940302-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null},{"name":"Enable switch","status":"fail","start_time":"2023-12-16T08:34:17.320949301-08:00","end_time":"2023-12-16T08:34:17.320955301-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null},{"name":"Internal communications","status":"fail","start_time":"2023-12-16T08:34:17.320960676-08:00","end_time":"2023-12-16T08:34:17.320966176-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null},{"name":"Firmware up-to-date","status":"fail","start_time":"2023-12-16T08:34:17.32097155-08:00","end_time":"2023-12-16T08:34:17.3209768-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null}],"alert":false},"update_diagnostic":{"name":"Firmware Update","category":"InternalComms","disruptive":true,"inputs":null,"checks":[{"name":"Powerwall firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Battery firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Inverter firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Grid code","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null}],"alert":false},"bc_type":null,"in_config":true}],"gateway_din":"1232100-00-E--TG1234567890G1","sync":{"updating":false,"commissioning_diagnostic":{"name":"Commissioning","category":"InternalComms","disruptive":false,"inputs":null,"checks":[{"name":"CAN connectivity","status":"fail","start_time":"2023-12-16T08:34:17.321101293-08:00","end_time":"2023-12-16T08:34:17.321107918-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null},{"name":"Firmware up-to-date","status":"fail","start_time":"2023-12-16T08:34:17.321113792-08:00","end_time":"2023-12-16T08:34:17.321118917-08:00","message":"Cannot perform this action with site controller running. From landing page, either \"STOP SYSTEM\" or \"RUN WIZARD\" to proceed.","results":{},"debug":{},"checks":null}],"alert":false},"update_diagnostic":{"name":"Firmware Update","category":"InternalComms","disruptive":true,"inputs":null,"checks":[{"name":"Synchronizer firmware","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Islanding configuration","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null},{"name":"Grid code","status":"not_run","start_time":null,"end_time":null,"progress":0,"results":null,"debug":null,"checks":null}],"alert":false}},"msa":null,"states":null} ================================================ FILE: proxy/web/bogus/api.site_info.grid_codes.json ================================================ TIMEOUT! ================================================ FILE: proxy/web/bogus/api.site_info.json ================================================ {"max_system_energy_kWh":27,"max_system_power_kW":10.8,"site_name":"Tesla Energy Gateway","timezone":"America/Los_Angeles","max_site_meter_power_kW":1000000000,"min_site_meter_power_kW":-1000000000,"nominal_system_energy_kWh":27,"nominal_system_power_kW":10.8,"panel_max_current":100,"grid_code":{"grid_code":"60Hz_240V_s_UL1741SA:2019_California","grid_voltage_setting":240,"grid_freq_setting":60,"grid_phase_setting":"Split","country":"United States","state":"California","utility":"Southern California Edison"}} ================================================ FILE: proxy/web/bogus/api.site_info.site_name.json ================================================ {"site_name":"Tesla Energy Gateway","timezone":"America/Los_Angeles"} ================================================ FILE: proxy/web/bogus/api.sitemaster.json ================================================ {"status":"StatusUp","running":true,"connected_to_tesla":true,"power_supply_mode":false,"can_reboot":"Yes"} ================================================ FILE: proxy/web/bogus/api.solars.brands.json ================================================ ["ABB","Ablerex Electronics","Advanced Energy Industries","Advanced Solar Photonics","AE Solar Energy","AEconversion Gmbh","AEG Power Solutions","Aero-Sharp","Afore New Energy Technology Shanghai Co","Agepower Limit","Alpha ESS Co","Alpha Technologies","Altenergy Power System","American Electric Technologies","AMETEK Solidstate Control","Andalay Solar","Apparent","Asian Power Devices","AU Optronics","Auxin Solar","Ballard Power Systems","Beacon Power","Beijing Hua Xin Liu He Investment (Australia) Pty","Beijing Kinglong New Energy","Bergey Windpower","Beyond Building Group","Beyond Building Systems","BYD Auto Industry Company Limited","Canadian Solar","Carlo Gavazzi","CFM Equipment Distributors","Changzhou Nesl Solartech","Chiconypower","Chilicon","Chilicon Power","Chint Power Systems America","Chint Solar Zhejiang","Concept by US","Connect Renewable Energy","Danfoss","Danfoss Solar","Darfon Electronics","DASS tech","Delta Energy Systems","Destin Power","Diehl AKO Stiftung","Diehl AKO Stiftung \u0026 KG","Direct Grid Technologies","Dow Chemical","DYNAPOWER COMPANY","E-Village Solar","EAST GROUP CO LTD","Eaton","Eguana Technologies","Elettronica Santerno","Eltek","Emerson Network Power","Enecsys","Energy Storage Australia Pty","EnluxSolar","Enphase Energy","Eoplly New Energy Technology","EPC Power","ET Solar Industry","ETM Electromatic","Exeltech","Flextronics Industrial","Flextronics International USA","Fronius","FSP Group","GAF","GE Energy","Gefran","Geoprotek","Global Mainstream Dynamic Energy Technology","Green Power Technologies","GreenVolts","GridPoint","Growatt","Gsmart Ningbo Energy Storage Technology Co","Guangzhou Sanjing Electric Co","Hangzhou Sunny Energy Science and Technology Co","Hansol Technics","Hanwha Q CELLS \u0026 Advanced Materials Corporation","Heart Transverter","Helios","HiQ Solar","HiSEL Power","Home Director","Hoymiles Converter Technology","Huawei Technologies","Huawei Technologies Co","HYOSUNG","i-Energy Corporation","Ideal Power","Ideal Power Converters","IMEON ENERGY","Ingeteam","Involar","INVOLAR","INVT Solar Technology Shenzhen Co","iPower","IST Energy","Jema Energy","Jiangsu GoodWe Power Supply Technology Co","Jiangsu Weiheng Intelligent Technology Co","Jiangsu Zeversolar New Energy","Jiangsu Zeversolar New Energy Co","Jiangyin Hareon Power","Jinko Solar","KACO","Kehua Hengsheng Co","Kostal Solar Electric","LeadSolar Energy","Leatec Fine Ceramics","LG Electronics","Lixma Tech","Mage Solar","Mage Solar USA","Mariah Power","MIL-Systems","Ming Shen Energy Technology","Mohr Power","Motech Industries","NeoVolta","Nextronex Energy Systems","Nidec ASI","Ningbo Ginlong Technologies","Ningbo Ginlong Technologies Co","Northern Electric","ONE SUN MEXICO DE C.V.","Open Energy","OPTI International","OPTI-Solar","OutBack Power Technologies","Panasonic Corporation Eco Solutions Company","Perfect Galaxy","Petra Solar","Petra Systems","Phoenixtec Power","Phono Solar Technology","Pika Energy","Power Electronics","Power-One","Powercom","PowerWave Energy Pty","Princeton Power Systems","PurpleRubik New Energy Technology Co","PV Powered","Redback Technologies Limited","RedEarth Energy Storage Pty","REFU Elektronik","Renac Power Technology Co","Renergy","Renesola Zhejiang","Renovo Power Systems","Resonix","Rhombus Energy Solutions","Ritek Corporation","Sainty Solar","Samil Power","SanRex","SANYO","Sapphire Solar Pty","Satcon Technology","SatCon Technology","Schneider","Schneider Inverters USA","Schuco USA","Selectronic Australia","Senec GmbH","Shanghai Sermatec Energy Technology Co","Shanghai Trannergy Power Electronics Co","Sharp","Shenzhen BYD","Shenzhen Growatt","Shenzhen Growatt Co","Shenzhen INVT Electric Co","SHENZHEN KSTAR NEW ENERGY COMPANY LIMITED","Shenzhen Litto New Energy Co","Shenzhen Sinexcel Electric","Shenzhen Sinexcel Electric Co","Shenzhen SOFARSOLAR Co","Siemens Industry","Silicon Energy","Sineng Electric Co","SMA","Sol-Ark","Solar Juice Pty","Solar Liberty","Solar Power","Solarbine","SolarBridge Technologies","SolarCity","SolarEdge Technologies","Solargate","Solaria Corporation","Solarmax","SolarWorld","SolaX Power Co","SolaX Power Network Technology (Zhe jiang)","SolaX Power Network Technology Zhejiang Co","Solectria Renewables","Solis","Sonnen GmbH","Sonnetek","Southwest Windpower","Sparq Systems","Sputnik Engineering","STARFISH HERO CO","Sungrow Power Supply","Sungrow Power Supply Co","Sunna Tech","SunPower","SunPower (Original Mfr.Fronius)","Sunset","Sustainable Energy Technologies","Sustainable Solar Services","Suzhou Hypontech Co","Suzhou Solarwii Micro Grid Technology Co","Sysgration","Tabuchi Electric","Talesun Solar","Tesla","The Trustee for Soltaro Unit Trust","TMEIC","TOPPER SUN Energy Tech","Toshiba International","Trannergy","Trina Energy Storage Solutions (Jiangsu)","Trina Energy Storage Solutions Jiangsu Co","Trina Solar Co","Ubiquiti Networks International","United Renewable Energy Co","Westinghouse Solar","Windterra Systems","Xantrex Technology","Xiamen Kehua Hengsheng","Xiamen Kehua Hengsheng Co","Xslent Energy Technologies","Yaskawa Solectria Solar","Yes! Solar","Zhongli Talesun Solar","ZIGOR","シャープ (Sharp)","パナソニック (Panasonic)","三菱電機 (Mitsubishi)","京セラ (Kyocera)","東芝 (Toshiba)","長州産業 (Choshu Sangyou)","カナディアン ソーラー ================================================ FILE: proxy/web/bogus/api.solars.json ================================================ [{"brand":"Tesla","model":"Solar Inverter 7.6","power_rating_watts":7600}] ================================================ FILE: proxy/web/bogus/api.status.json ================================================ {"din":"1232100-00-E--TG1234567890G1","start_time":"2023-10-13 04:01:45 +0800","up_time_seconds":"1541h38m20.998412744s","is_new":false,"version":"23.28.2 27626f98","git_hash":"27626f98a66cad5c665bbe1d4d788cdb3e94fd33","commission_count":0,"device_type":"teg","teg_type":"unknown","sync_type":"v2.1","cellular_disabled":false,"can_reboot":true} ================================================ FILE: proxy/web/bogus/api.synchrometer.ct_voltage_references.json ================================================ {"ct1":"Phase1","ct2":"Phase2","ct3":"Phase1"} ================================================ FILE: proxy/web/bogus/api.system.networks.json ================================================ TIMEOUT! ================================================ FILE: proxy/web/bogus/api.system.update.status.json ================================================ {"state":"/update_succeeded","info":{"status":["nonactionable"]},"current_time":1702756114429,"last_status_time":1702753309227,"version":"23.28.2 27626f98","offline_updating":false,"offline_update_error":"","estimated_bytes_per_second":null} ================================================ FILE: proxy/web/bogus/api.system_status.grid_faults.json ================================================ [] ================================================ FILE: proxy/web/bogus/api.system_status.grid_status.json ================================================ {"grid_status":"SystemGridConnected","grid_services_active":false} ================================================ FILE: proxy/web/bogus/api.system_status.grid_status.json-offline ================================================ {"grid_status":"SystemIslandedActive","grid_services_active":true} ================================================ FILE: proxy/web/bogus/api.system_status.grid_status.json-transition ================================================ {"grid_status":"SystemTransitionToGrid","grid_services_active":false} ================================================ FILE: proxy/web/bogus/api.system_status.json ================================================ {"command_source":"Configuration","battery_target_power":-3866.6666666666665,"battery_target_reactive_power":0,"nominal_full_pack_energy":25995,"nominal_energy_remaining":16693,"max_power_energy_remaining":0,"max_power_energy_to_be_charged":0,"max_charge_power":10800,"max_discharge_power":10800,"max_apparent_power":10800,"instantaneous_max_discharge_power":24000,"instantaneous_max_charge_power":14000,"instantaneous_max_apparent_power":11520,"hardware_capability_charge_power":0,"hardware_capability_discharge_power":0,"grid_services_power":-0,"system_island_state":"SystemGridConnected","available_blocks":2,"available_charger_blocks":0,"battery_blocks":[{"Type":"","PackagePartNumber":"2012170-25-E","PackageSerialNumber":"TG123456789012","disabled_reasons":[],"pinv_state":"PINV_GridFollowing","pinv_grid_state":"Grid_Compliant","nominal_energy_remaining":8528,"nominal_full_pack_energy":13305,"p_out":-1990,"q_out":20,"v_out":243.70000000000002,"f_out":60.007999999999996,"i_out":40.900000000000006,"energy_charged":7036162,"energy_discharged":6249327,"off_grid":false,"vf_mode":false,"wobble_detected":false,"charge_power_clamped":false,"backup_ready":true,"OpSeqState":"Active","version":"27626f98a66cad"},{"Type":"","PackagePartNumber":"3012170-05-B","PackageSerialNumber":"TG123456789012","disabled_reasons":[],"pinv_state":"PINV_GridFollowing","pinv_grid_state":"Grid_Compliant","nominal_energy_remaining":8165,"nominal_full_pack_energy":12690,"p_out":-1890.0000000000002,"q_out":20,"v_out":243.70000000000002,"f_out":60.007999999999996,"i_out":39.400000000000006,"energy_charged":6835113,"energy_discharged":6076726,"off_grid":false,"vf_mode":false,"wobble_detected":false,"charge_power_clamped":false,"backup_ready":true,"OpSeqState":"Active","version":"27626f98a66cad"}],"ffr_power_availability_high":11600,"ffr_power_availability_low":11600,"load_charge_constraint":0,"max_sustained_ramp_rate":2700000,"grid_faults":[],"can_reboot":"Yes","smart_inv_delta_p":0,"smart_inv_delta_q":0,"last_toggle_timestamp":"2023-10-13T04:08:05.957195-07:00","solar_real_power_limit":3909.4999669342515,"score":10000,"blocks_controlled":2,"primary":true,"auxiliary_load":0,"all_enable_lines_high":true,"inverter_nominal_usable_power":11600,"expected_energy_remaining":0} ================================================ FILE: proxy/web/bogus/api.system_status.soe.json ================================================ {"percentage": 20.109166592431226} ================================================ FILE: proxy/web/bogus/api.troubleshooting.problems.json ================================================ {"problems":[]} ================================================ FILE: proxy/web/example.html ================================================ pyPowerwall Proxy iFrame Example

Tesla Powerwall Power Flows

iFrame Example

Firmware

================================================ FILE: proxy/web/index.html ================================================ Tesla Energy - Setup
================================================ FILE: proxy/web/viz-static/1.17c71172308436a079d1.js ================================================ (window.webpackJsonp = window.webpackJsonp || []).push([ [1], { 1154: function (e, t, r) { "use strict"; r.r(t), r.d(t, "initialCurrentTransformer", function () { return u; }), r.d(t, "initialCurrentTransformersState", function () { return m; }), r.d(t, "default", function () { return g; }), r.d(t, "hasSolarCurrentTransformersSelector", function () { return f; }); var i = r(27), s = r(18), n = r.n(s), a = r(2), c = r(12), E = r(8), l = r(37), o = r(151); function d(e, t) { var r = Object.keys(e); if (Object.getOwnPropertySymbols) { var i = Object.getOwnPropertySymbols(e); t && (i = i.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), r.push.apply(r, i); } return r; } function R(e) { for (var t = 1; t < arguments.length; t++) { var r = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(r), !0).forEach(function (t) { _(e, t, r[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : d(Object(r)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t)); }); } return e; } function _(e, t, r) { return t in e ? Object.defineProperty(e, t, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = r), e; } const T = Object(i.values)(E.n), S = ["ampRating", "phaseSequence", "inverted"], u = { id: 1, connectionType: null, isRevenueGradeSolarMeter: !1, ampRating: null, phaseSequence: null, watts: null, amps: null, volts: null, realPowerScaleFactor: 1, reactivePower: null, apparentPower: null, powerFactor: null, inverted: !1, }, m = [R(R({}, u), {}, { id: 1 }), R(R({}, u), {}, { id: 2 }), R(R({}, u), {}, { id: 3 }), R(R({}, u), {}, { id: 4 })], p = { instant_power: 0, last_communication_time: null }, C = { isFetching: !1, isCreating: !1, isSetting: !1, didInvalidate: !1, inverterMeterReadings: { enabled: !1, isFetching: !1, didInvalidate: !1 }, items: [{ id: 1, connectionType: null, shortID: "", serial: "", macAddress: "", ipAddress: "", status: null, verified: !1, location: c.CurrentTransformerConnectionTypes.SITE, currentTransformers: m }], readSerials: [], synchrometerSettings: { isFetching: !1, didInvalidate: !1, ctVoltageReferences: { ct1: c.SyncCTVoltageReferenceType.DEFAULT, ct2: c.SyncCTVoltageReferenceType.DEFAULT, ct3: c.SyncCTVoltageReferenceType.DEFAULT }, ctVoltageReferenceOptions: { ct1: [c.SyncCTVoltageReferenceType.PHASE1], ct2: [c.SyncCTVoltageReferenceType.PHASE2], ct3: [c.SyncCTVoltageReferenceType.PHASE3] }, }, aggregates: Object(i.reduce)(T, (e, t) => ((e[t] = R({}, p)), e), {}), }; function g(e = C, t) { switch (t.type) { case a.ADD_METER: return R(R({}, e), {}, { items: [...e.items, R(R({}, C.items[0]), {}, { id: t.id })] }); case a.REMOVE_METER: let r = e.items.filter((e) => e.id !== t.id); return r.length || (r = [R(R({}, C.items[0]), {}, { id: t.id })]), R(R({}, e), {}, { items: r }); case a.REQUEST_METER_CONFIG: case a.REQUEST_METER_AMP_RATINGS: case a.REQUEST_DETECT_METER: case a.REQUEST_DELETE_METER: case a.REQUEST_DELETE_METER_CTS: case a.REQUEST_COMMISSION_METER: case a.REQUEST_METER_READINGS: case a.REQUEST_METER_FLIP_CT: case a.REQUEST_METER_AGGREGATES: return R(R({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case a.REQUEST_SET_METER_AMP_RATINGS: case a.REQUEST_SET_METER_CTS: return R(R({}, e), {}, { isSetting: !0, didInvalidate: !1 }); case a.REQUEST_CREATE_METER: return R(R({}, e), {}, { isCreating: !0, didInvalidate: !1 }); case a.RECEIVE_CREATE_METER_SUCCESS: let s = 0, E = Object(i.cloneDeep)(e.items.find((e, r) => (e.id === t.id && (s = r), e.id === t.id))); return ( (E.shortID = t.shortID), (E.serial = t.serial), (E.location = t.location), t.macAddress && t.macAddress.match(l.c) && (E.macAddress = t.macAddress), t.ipAddress && t.ipAddress.match(l.b) && (E.ipAddress = t.ipAddress), (E.connectionType = t.connectionType), (E.verified = !!t.connected), (E.location = t.location), R(R({}, e), {}, { isCreating: !1, items: [...e.items.slice(0, s), E, ...e.items.slice(s + 1)] }) ); case a.RECEIVE_DETECT_METER_SUCCESS: let d = 0, _ = Object(i.cloneDeep)(e.items.find((e, r) => (e.id === t.id && (d = r), e.id === t.id))); return (_.verified = !0), (_.connectionType = c.ConnectionTypes.NEURIO_W1_WIRED), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: [...e.items.slice(0, d), _, ...e.items.slice(d + 1)] }); case a.RECEIVE_METER_CONFIG_SUCCESS: return R( R({}, e), {}, { isFetching: null != t.isFetching ? t.isFetching : e.isFetching, didInvalidate: !1, items: t.meters .sort((e, t) => { const r = e.type, i = t.type; if (null != r && null != i) { if (r < i) return -1; if (r > i) return 1; } return 0; }) .map((t, r) => { let s = Object(o.y)({ connectionType: t.type }), n = t.type === c.ConnectionTypes.MSA, a = Object(o.q)({ connectionType: t.type }), E = Object(i.cloneDeep)(m); if ( (Object(o.s)(t.type) && E.forEach((e, t) => { e.phaseSequence = c.NeurioOrderedPhaseSequences[t]; }), s && E.splice(-1, 1), n && E.splice(-2, 2), a) ) { let e = Object(i.isEmpty)(t.cts) ? c.CurrentTransformerConnectionTypes.SITE : t.cts[0].type; E.forEach((t, r) => { E[r].connectionType = e; }); } Array.isArray(t.cts) || (t.cts = []), t.cts.forEach((e, t) => { (s && t >= 3) || e.valid.forEach((t, r) => { t && (!s || (s && r < 3)) && ((E[r].realPowerScaleFactor = null != e.real_power_scale_factor ? e.real_power_scale_factor : 1), 2 === Math.trunc(E[r].realPowerScaleFactor) && e.type === c.CurrentTransformerConnectionTypes.SOLAR ? (E[r].connectionType = c.CurrentTransformerConnectionTypes.DOUBLED_SOLAR) : (E[r].connectionType = e.type), (E[r].isRevenueGradeSolarMeter = e.type === c.CurrentTransformerConnectionTypes.SOLAR_RGM), (E[r].inverted = e.inverted[r])); }); }); const d = t.mac && t.mac.match(l.c) ? t.mac : C.items[0].macAddress, _ = t.ip_address && t.ip_address.match(l.b) ? t.ip_address : C.items[0].ipAddress, T = Object(o.v)(t.type) && (e.items || []).find(({ serial: e, shortID: r }) => e === t.serial && r === t.short_id), S = (T && T.status) || c.Statuses.UNKNOWN; return R( R({}, C.items[0]), {}, { id: r + 1, connectionType: t.type, location: t.location, shortID: t.short_id, serial: t.serial, macAddress: d, ipAddress: _, status: t.connected ? c.Statuses.SUCCESS_METER : S, verified: !!t.connected || s || a || n, currentTransformers: E, } ); }), } ); case a.RECEIVE_DELETE_METER_SUCCESS: let g = 0; for (let r = 0; r < e.items.length; r++) if (e.items[r].id === t.id) { g = r; break; } let f = [R(R({}, C.items[0]), {}, { id: t.id })]; return e.items.length > 1 && (f = [...e.items.slice(0, g), ...e.items.slice(g + 1)]), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: f }); case a.RECEIVE_METER_CONFIG_UPDATE: let I = e.items.findIndex((e) => (t.serial ? e.serial === t.serial : t.ip_address ? e.ip_address === t.ip_address : e.id === t.id)), O = Object(i.cloneDeep)(e.items[I]); return !O || (Object(o.s)(O.connectionType) && t.serial !== O.serial) ? R(R({}, e), {}, { isFetching: !1 }) : ((O.status = t.status), t.serial && (O.serial = t.serial), t.short_id && (O.shortID = t.short_id), t.location && (O.location = t.location), t.mac && t.mac.match(l.c) && (O.macAddress = t.mac), t.ip_address && t.ip_address.match(l.b) && (O.ipAddress = t.ip_address), t.location && (O.location = t.location), R(R({}, e), {}, { isFetching: null != t.isFetching ? t.isFetching : e.isFetching, items: [...e.items.slice(0, I), O, ...e.items.slice(I + 1)] })); case a.RECEIVE_COMMISSION_METER_UPDATE: let h = 0, A = Object(i.cloneDeep)(e.items.find((e, r) => (e.id === t.id && (h = r), e.id === t.id))); return A ? ((A.status = t.status), t.short_id && (A.shortID = t.short_id), t.serial && (A.serial = t.serial), t.location && (A.location = t.location), R(R({}, e), {}, { items: [...e.items.slice(0, h), A, ...e.items.slice(h + 1)] })) : e; case a.RECEIVE_COMMISSION_METER_SUCCESS: let y = 0, M = Object(i.cloneDeep)(e.items.find((e, r) => (e.id === t.id && (y = r), e.id === t.id))); return M ? ((M.verified = !!t.verified), t.shortID && (M.shortID = t.shortID), t.serial && (M.serial = t.serial), t.macAddress && t.macAddress.match(l.c) && (M.macAddress = t.macAddress), t.ipAddress && t.ipAddress.match(l.b) && (M.ipAddress = t.ipAddress), t.location && (M.location = M.location), (M.connectionType = t.connectionType), (M.status = t.status), (M.lastUpdatedAt = t.receivedAt), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: [...e.items.slice(0, y), M, ...e.items.slice(y + 1)] })) : e; case a.RECEIVE_METER_AMP_RATINGS_SUCCESS: let v = 0, b = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (v = r), e.serial === t.serial))); return ( t.ampRatings.length === m.length && t.ampRatings.forEach((e, t) => { let r = b.currentTransformers[t]; r.ampRating !== e && (r.ampRating = e); }), R(R({}, e), {}, { items: [...e.items.slice(0, v), b, ...e.items.slice(v + 1)] }) ); case a.RECEIVE_SET_METER_AMP_RATINGS_SUCCESS: let F = 0, V = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (F = r), e.serial === t.serial))); return ( t.ampRatings.length === m.length && t.ampRatings.forEach((e, t) => { let r = V.currentTransformers[t]; r.ampRating !== e && (r.ampRating = e); }), R(R({}, e), {}, { isSetting: !1, didInvalidate: !1, items: [...e.items.slice(0, F), V, ...e.items.slice(F + 1)] }) ); case a.RECEIVE_SET_METER_CTS_SUCCESS: let D = 0, N = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (D = r), e.serial === t.serial))); return ( N.currentTransformers.forEach((e) => { if (t.ids.length && t.ids.includes(e.id)) (e.connectionType = t.connectionType), (e.realPowerScaleFactor = t.realPowerScaleFactor); else if (Object(o.x)(e.connectionType, t.connectionType)) { const t = ["id", ...S]; for (let r in e) t.includes(r) || (e[r] = u[r]); } }), R(R({}, e), {}, { isSetting: null != t.isSetting && t.isSetting, didInvalidate: !1, items: [...e.items.slice(0, D), N, ...e.items.slice(D + 1)] }) ); case a.RECEIVE_DELETE_METER_CTS_SUCCESS: let U = 0; const j = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (U = r), e.serial === t.serial))); let w = []; return ( m.forEach((e, t) => { (Object(o.y)(j) && t >= 3) || w.push(R(R({}, e), Object(i.pick)(j.currentTransformers[t], S))); }), (j.currentTransformers = w), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: [...e.items.slice(0, U), j, ...e.items.slice(U + 1)] }) ); case a.RECEIVE_METER_READINGS_SUCCESS: let P = e.items, G = e.lastReadingUpdatedAt, L = e.readSerials; if (null != t.readings && !Object(i.isEmpty)(t.readings)) { P = Object(i.cloneDeep)(e.items); for (const e in t.readings) { const r = P.find((t) => t.serial === e), s = !Object(i.isEmpty)(t.readings[e].error); if (null != r && t.readings[e].data && t.readings[e].data.cts && t.readings[e].data.cts.length) { let i = 4; Object(o.y)(r) && (i = 3), r.connectionType === c.ConnectionTypes.MSA && (i = 2); t.readings[e].data.cts.forEach((e, t) => { if (null != r && !s && null != n()(e, (e) => e.ct) && e.ct >= 1 && e.ct <= i) { let t = e.p_W, i = e.v_V, s = e.q_VAR; null != t && (r.currentTransformers[e.ct - 1].watts = t), null != t && null != i && null != s && ((r.currentTransformers[e.ct - 1].amps = 0 !== i ? t / i : 0), (r.currentTransformers[e.ct - 1].volts = i), (r.currentTransformers[e.ct - 1].reactivePower = s), (r.currentTransformers[e.ct - 1].apparentPower = Object(o.a)(t, s)), (r.currentTransformers[e.ct - 1].powerFactor = Object(o.b)(t, s))); } else null != r && 0 === n()(e, (e) => e.ct) && t < i && (r.currentTransformers[t] = R(R({}, r.currentTransformers[t]), {}, { watts: null, amps: null, volts: null, reactivePower: null, apparentPower: null, powerFactor: null })); }); } } const r = Object.keys(t.readings); Object(i.without)(e.readSerials, ...r).forEach((e) => { const t = P.find((t) => t.serial === e); null != t && (t.currentTransformers = t.currentTransformers.map((e) => R(R({}, e), {}, { watts: null, amps: null, volts: null, reactivePower: null, apparentPower: null, powerFactor: null }))); }), (G = Date.now()), (L = r); } return R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, lastReadingUpdatedAt: G, readSerials: L, items: P }); case a.RECEIVE_METER_FLIP_CT_SUCCESS: let Q = 0, Y = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (Q = r), e.serial === t.serial))); return ( t.inverted.length === m.length && t.inverted.forEach((e, t) => { if (Object(o.y)(Y) && t >= 3) return; let r = Y.currentTransformers[t]; r.inverted !== e && ((r.inverted = e), null != r.amps && (r.amps *= -1), null != r.watts && (r.watts *= -1)); }), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: [...e.items.slice(0, Q), Y, ...e.items.slice(Q + 1)] }) ); case a.RECEIVE_METER_AGGREGATES_SUCCESS: return R( R({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, lastMeterReadingAt: Math.max(...Object(i.values)(t.aggregates).map((e) => (null != e.last_communication_time ? Date.parse(e.last_communication_time) : 0))), aggregates: Object(i.reduce)(T, (r, i) => ((r[i] = R(R({}, e.aggregates[i]), n()(t, (e) => e.aggregates[i]) || p)), r), R({}, e.aggregates)), } ); case a.RECEIVE_METER_CONFIG_ERROR: case a.RECEIVE_METER_AMP_RATINGS_ERROR: case a.RECEIVE_DETECT_METER_ERROR: case a.RECEIVE_DELETE_METER_ERROR: case a.RECEIVE_DELETE_METER_CTS_ERROR: case a.RECEIVE_COMMISSION_METER_ERROR: case a.RECEIVE_METER_READINGS_ERROR: case a.RECEIVE_METER_FLIP_CT_ERROR: case a.RECEIVE_METER_AGGREGATES_ERROR: return R(R({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case a.RECEIVE_CREATE_METER_ERROR: return R(R({}, e), {}, { isCreating: !1, didInvalidate: !0 }); case a.RECEIVE_SET_METER_AMP_RATINGS_ERROR: case a.RECEIVE_SET_METER_CTS_ERROR: return R(R({}, e), {}, { isSetting: !1, didInvalidate: !0 }); case a.RESET_METER_CURRENT_TRANSFORMER_READINGS: let k = e.items; return ( e.readSerials.length && ((k = Object(i.cloneDeep)(e.items)), e.readSerials.forEach((e) => { const t = k.find((t) => t.serial === e); null != t && (t.currentTransformers = t.currentTransformers.map((e) => R(R({}, e), {}, { watts: null, amps: null, volts: null, reactivePower: null, apparentPower: null, powerFactor: null }))); })), R(R({}, e), {}, { lastReadingUpdatedAt: null, items: k }) ); case a.REQUEST_SYNC_CT_VOLTAGE_REFERENCES: case a.REQUEST_SET_SYNC_CT_VOLTAGE_REFERENCES: case a.REQUEST_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS: return R(R({}, e), {}, { synchrometerSettings: R(R({}, e.synchrometerSettings), {}, { isFetching: !0, didInvalidate: !1 }) }); case a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS: case a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS: return R(R({}, e), {}, { synchrometerSettings: R(R({}, e.synchrometerSettings), {}, { isFetching: !1, didInvalidate: !1, ctVoltageReferences: t.pairing }) }); case a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR: case a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR: case a.RECEIVE_OPERATION_SETTINGS_ERROR: return R(R({}, e), {}, { synchrometerSettings: R(R({}, e.synchrometerSettings), {}, { isFetching: !1, didInvalidate: !0 }) }); case a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_SUCCESS: return R(R({}, e), {}, { synchrometerSettings: R(R({}, e.synchrometerSettings), {}, { isFetching: !1, didInvalidate: !1, ctVoltageReferenceOptions: t.options }) }); case a.REQUEST_ENABLE_INVERTER_METER_READINGS: return R(R({}, e), {}, { inverterMeterReadings: { enabled: e.inverterMeterReadings.enabled, isFetching: !0, didInvalidate: !1 } }); case a.RECEIVE_ENABLE_INVERTER_METER_READINGS_SUCCESS: return R(R({}, e), {}, { inverterMeterReadings: { enabled: t.enabled, isFetching: !1, didInvalidate: !1 } }); case a.RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR: return R(R({}, e), {}, { inverterMeterReadings: { enabled: e.inverterMeterReadings.enabled, isFetching: !1, didInvalidate: !0 } }); case a.RESET_ALL: case a.RESET_METER_CONFIG: return C; default: return e; } } function f({ meter: e }) { return e.items.some((e) => Object(o.n)(e.currentTransformers)); } }, }, ]); ================================================ FILE: proxy/web/viz-static/39.17c71172308436a079d1.js ================================================ (window.webpackJsonp = window.webpackJsonp || []).push([ [39], { 1083: function (e, t, i) { "use strict"; var r; Object.defineProperty(t, "__esModule", { value: !0 }), (t.GRID_CODES_MODAL = t.GRID_CODE_FILTER_FREQUENCY_WARNING = t.GRIDCODE_ALL_OTHER_SELECTION = t.GRIDCODE_ALL_OTHER_STAR = t.gridCodeNestedLookupKeys = t.GridCodesNestedLookupKey = void 0), (function (e) { (e.country = "country"), (e.state = "state"), (e.distributor = "distributor"), (e.utility = "utility"), (e.retailer = "retailer"), (e.region = "region"), (e.grid_code = "grid_code"); })((r = t.GridCodesNestedLookupKey || (t.GridCodesNestedLookupKey = {}))), (t.gridCodeNestedLookupKeys = [r.country, r.state, r.distributor, r.utility, r.retailer, r.region, r.grid_code]), (t.GRIDCODE_ALL_OTHER_STAR = "*"), (t.GRIDCODE_ALL_OTHER_SELECTION = "All Other"), (t.GRID_CODE_FILTER_FREQUENCY_WARNING = "GRID_CODE_FILTER_FREQUENCY_WARNING"), (t.GRID_CODES_MODAL = "GRID_CODES_MODAL"); }, 1085: function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.emptyGridCodeSelection = t.gridCodeToOption = t.gridCodeConfigToSelections = t.configValueToDropdownSelection = t.dropdownSelectionToConfigValue = t.shouldAutoSelect = t.shouldCollapse = t.resolveNestedLookupStructureBySelections = t.selectSubObject = t.subObjectHasValidGridCodes = t.gridCodePointsToInputs = t.applyGridCodePointsToOverrides = t.applyGridCodeOverridesToPoints = t.parseGridCodeNameForSettings = t.gridCodeSelectionsEqual = t.parseCSVRecordIntoGridCodeConfig = t.serializeGridCodeConfigIntoCSVRecord = t.parseCSVRecordIntoArray = t.parseRegionsCSVIntoNestedLookupStructure = void 0); const r = i(1083), n = i(134), o = i(1086); function d(e) { let t = [""], i = !1; for (let r = 0; r < e.length; r++) { const n = e[r]; '"' !== n ? ("," !== n || i ? (t[t.length - 1] += n) : t.push("")) : (i = !i); } return t; } function _(e) { if (!e) return null; const t = e.split("_"); if (t.length < 4) return null; const [i, r, o] = t, d = parseFloat(i), _ = parseFloat(r); if (isNaN(d) || isNaN(_)) return null; let s; switch (o) { case "1": s = n.PhaseType.SINGLE; break; case "2": s = n.PhaseType.TWO; break; case "3": s = n.PhaseType.THREE; break; case "s": s = n.PhaseType.SPLIT; break; case "WyeLL": s = n.PhaseType.WYE_LL; break; default: return null; } return { grid_code: e, grid_freq_setting: d, grid_voltage_setting: _, grid_phase_setting: s }; } function s(e, t) { return "string" != typeof t || Array.isArray(e) ? null : e[t]; } (t.parseRegionsCSVIntoNestedLookupStructure = function (e, t) { let i = {}; return ( e .split("\n") .slice(1) .forEach((e) => { const r = d(e); if (r.length < 6) return; let n, [o, s, a, l, u, c, g] = r; i[s] || (i[s] = {}), i[s][a] || (i[s][a] = {}), i[s][a][l] || (i[s][a][l] = {}), i[s][a][l][u] || (i[s][a][l][u] = {}), i[s][a][l][u][c] || (i[s][a][l][u][c] = {}), i[s][a][l][u][c][g] || (i[s][a][l][u][c][g] = []), (n = t ? t[o] : _(o)), n && i[s][a][l][u][c][g].push(n); }), i ); }), (t.parseCSVRecordIntoArray = d), (t.serializeGridCodeConfigIntoCSVRecord = function (e) { var t, i, r, n, o, d, _; return [ null !== (t = e.grid_code) && void 0 !== t ? t : "", null !== (i = e.country) && void 0 !== i ? i : "", null !== (r = e.state) && void 0 !== r ? r : "", null !== (n = e.distributor) && void 0 !== n ? n : "", null !== (o = e.utility) && void 0 !== o ? o : "", null !== (d = e.retailer) && void 0 !== d ? d : "", null !== (_ = e.region) && void 0 !== _ ? _ : "", ] .map((e) => (e.includes(",") ? `"${e}"` : e)) .join(","); }), (t.parseCSVRecordIntoGridCodeConfig = function (e) { if (!e) return {}; const [t, i, r, n, o, _, s] = d(e); return { grid_code: t || void 0, country: i || void 0, state: r || void 0, distributor: n || void 0, utility: o || void 0, retailer: _ || void 0, region: s || void 0 }; }), (t.gridCodeSelectionsEqual = function (e, t) { for (let i of r.gridCodeNestedLookupKeys) if (e[i] !== t[i]) return !1; return !0; }), (t.parseGridCodeNameForSettings = _), (t.applyGridCodeOverridesToPoints = function (e, t) { let i = null != t ? t : []; return (null != e ? e : []).map((e) => { const t = i.find((t) => t.name === e.name); return Object.assign(Object.assign({}, e), { override: t ? t.value : null, value: t ? t.value : e.file_value }); }); }), (t.applyGridCodePointsToOverrides = function (e, t) { let i = null != e ? e : []; const r = (null != t ? t : []).filter((e) => !i.find((t) => t.name === e.name)); return i.reduce((e, t) => ("number" == typeof t.override && e.push({ name: t.name, value: t.override }), e), r); }), (t.gridCodePointsToInputs = function (e) { const t = {}; return (null != e ? e : []).forEach((e) => (t[e.name] = "number" == typeof e.override ? e.override.toString() : "")), t; }), (t.subObjectHasValidGridCodes = function e(t, i) { if (Array.isArray(t)) { for (let e of t) if (i(e)) return !0; return !1; } for (let r in t) if (e(t[r], i)) return !0; return !1; }), (t.selectSubObject = s), (t.resolveNestedLookupStructureBySelections = function (e, t, i) { let n = e; for (let e of r.gridCodeNestedLookupKeys) { if (e === i) break; let r = s(n, t[e]); if (!r) return null; n = r; } return n; }), (t.shouldCollapse = function (e) { return !e.length || (1 === e.length && e[0] === r.GRIDCODE_ALL_OTHER_SELECTION); }), (t.shouldAutoSelect = function (e) { return 1 === e.length; }), (t.dropdownSelectionToConfigValue = function (e) { return e === r.GRIDCODE_ALL_OTHER_SELECTION ? r.GRIDCODE_ALL_OTHER_STAR : e; }), (t.configValueToDropdownSelection = function (e) { return e === r.GRIDCODE_ALL_OTHER_STAR ? r.GRIDCODE_ALL_OTHER_SELECTION : e; }), (t.gridCodeConfigToSelections = function (e) { return { country: e.country, state: e.state, distributor: e.distributor, utility: e.utility, retailer: e.retailer, region: e.region, grid_code: e.grid_code }; }), (t.gridCodeToOption = function (e, t) { const i = _(t); return i ? { value: t, label: (0, o.formatGridCodeSettingsSummary)(e, i) } : null; }), (t.emptyGridCodeSelection = { [r.GridCodesNestedLookupKey.country]: void 0, [r.GridCodesNestedLookupKey.state]: void 0, [r.GridCodesNestedLookupKey.distributor]: void 0, [r.GridCodesNestedLookupKey.utility]: void 0, [r.GridCodesNestedLookupKey.retailer]: void 0, [r.GridCodesNestedLookupKey.region]: void 0, [r.GridCodesNestedLookupKey.grid_code]: void 0, }); }, 1086: function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.gridCodePointMessages = t.gridCodeUnitMessages = t.gridCodeLevelMessages = t.formatGridCodeSettingsSummary = t.gridCodeViewMessages = void 0); const r = i(3), n = i(1083), o = i(577); (t.gridCodeViewMessages = (0, r.defineMessages)({ filterFreqWarning: { id: "grid_code_view_filter_freq_warning", defaultMessage: "Carefully select the appropriate grid code to ensure that the system will run at the intended voltage and frequency." }, settingsSummary: { id: "grid_code_view_settings_summary", description: "Provides a summary of the grid code settings: the voltage, frequency, and phase configuration (e.g. Split-Phase, Three-Phase, etc.)", defaultMessage: "{voltage} {frequency} {phase}", }, preconfigured: { id: "grid_code_view_preconfigured_label", description: "Label for a preconfigured grid code (the grid code is present in config but cannot be resolved using the lookup keys)", defaultMessage: "PRECONFIGURED GRID CODE", }, })), (t.formatGridCodeSettingsSummary = function (e, i) { let r = ""; "number" == typeof i.grid_freq_setting && (r = e.formatMessage(o.unitMessages.hertz, { frequency: i.grid_freq_setting })); let n = ""; "number" == typeof i.grid_voltage_setting && (n = e.formatMessage(o.unitMessages.volts, { voltage: i.grid_voltage_setting })); const d = o.phaseMessages[i.grid_phase_setting]; let _ = d ? e.formatMessage(d) : ""; return e.formatMessage(t.gridCodeViewMessages.settingsSummary, { frequency: r, voltage: n, phase: _ }); }), (t.gridCodeLevelMessages = (0, r.defineMessages)({ [n.GridCodesNestedLookupKey.country]: { id: "grid_code_view_country_label", defaultMessage: "COUNTRY" }, [n.GridCodesNestedLookupKey.distributor]: { id: "grid_code_view_distributor_label", defaultMessage: "DNO" }, [n.GridCodesNestedLookupKey.utility]: { id: "grid_code_view_utility_label", defaultMessage: "UTILITY" }, [n.GridCodesNestedLookupKey.retailer]: { id: "grid_code_view_retailer_label", defaultMessage: "RETAILER" }, [n.GridCodesNestedLookupKey.state]: { id: "grid_code_view_region_label", defaultMessage: "REGION" }, [n.GridCodesNestedLookupKey.region]: { id: "grid_code_view_standard_label", defaultMessage: "STANDARD" }, [n.GridCodesNestedLookupKey.grid_code]: { id: "grid_code_view_volt_freq_label", defaultMessage: "VOLTAGE/FREQUENCY" }, })), (t.gridCodeUnitMessages = (0, r.defineMessages)({ grid_code_unit_Hz: { id: "grid_code_unit_Hz", defaultMessage: "Hz" }, grid_code_unit_s: { id: "grid_code_unit_s", defaultMessage: "seconds" }, grid_code_unit_V: { id: "grid_code_unit_V", defaultMessage: "Volts" }, grid_code_unit_V_pu: { id: "grid_code_unit_V_pu", defaultMessage: "V / V_nominal" }, grid_code_unit_enum: { id: "grid_code_unit_enum", defaultMessage: "enumerated value, see manual" }, grid_code_unit_bool: { id: "grid_code_unit_bool", defaultMessage: "0 = no, 1 = yes" }, })), (t.gridCodePointMessages = (0, r.defineMessages)({ grid_code_point_nominal_grid_frequency: { id: "grid_code_point_nominal_grid_frequency", defaultMessage: "Nominal Grid Frequency" }, grid_code_point_nominal_grid_voltage: { id: "grid_code_point_nominal_grid_voltage", defaultMessage: " Nominal Grid Voltage (L-N)" }, grid_code_point_nominal_pinv_voltage: { id: "grid_code_point_nominal_pinv_voltage", defaultMessage: "Nominal Grid Voltage of connected Powerwalls" }, grid_code_point_vf_limit_under_voltage_0_grid_following: { id: "grid_code_point_vf_limit_under_voltage_0_grid_following", defaultMessage: "Under Voltage Reconnect Limit" }, grid_code_point_vf_limit_under_frequency_0_grid_following: { id: "grid_code_point_vf_limit_under_frequency_0_grid_following", defaultMessage: "Under Frequency Reconnect Limit" }, grid_code_point_vf_limit_under_voltage_1_grid_following: { id: "grid_code_point_vf_limit_under_voltage_1_grid_following", defaultMessage: "Under Voltage Trip 1 - Limit" }, grid_code_point_vf_limit_under_frequency_1_grid_following: { id: "grid_code_point_vf_limit_under_frequency_1_grid_following", defaultMessage: "Under Frequency Trip 1 - Limit" }, grid_code_point_vf_timing_under_voltage_1_grid_following: { id: "grid_code_point_vf_timing_under_voltage_1_grid_following", defaultMessage: "Under Voltage Trip 1 - Timing" }, grid_code_point_vf_timing_under_frequency_1_grid_following: { id: "grid_code_point_vf_timing_under_frequency_1_grid_following", defaultMessage: "Under Frequency Trip 1 - Timing" }, grid_code_point_vf_limit_over_voltage_0_grid_following: { id: "grid_code_point_vf_limit_over_voltage_0_grid_following", defaultMessage: "Over Voltage Reconnect Limit" }, grid_code_point_vf_limit_over_frequency_0_grid_following: { id: "grid_code_point_vf_limit_over_frequency_0_grid_following", defaultMessage: "Over Frequency Reconnect Limit" }, grid_code_point_vf_limit_over_voltage_1_grid_following: { id: "grid_code_point_vf_limit_over_voltage_1_grid_following", defaultMessage: "Over Voltage Trip 1 - Limit" }, grid_code_point_vf_limit_over_frequency_1_grid_following: { id: "grid_code_point_vf_limit_over_frequency_1_grid_following", defaultMessage: "Over Frequency Trip 1 - Limit" }, grid_code_point_vf_timing_over_voltage_1_grid_following: { id: "grid_code_point_vf_timing_over_voltage_1_grid_following", defaultMessage: "Over Voltage Trip 1 - Timing" }, grid_code_point_vf_timing_over_frequency_1_grid_following: { id: "grid_code_point_vf_timing_over_frequency_1_grid_following", defaultMessage: "Over Frequency Trip 1 - Timing" }, grid_code_point_vf_timing_qualifying_time_grid_following: { id: "grid_code_point_vf_timing_qualifying_time_grid_following", defaultMessage: "Inverter Grid Requalification time" }, grid_code_point_vf_param_allow_charging_while_qualifying: { id: "grid_code_point_vf_param_allow_charging_while_qualifying", defaultMessage: "Allow battery charging during grid qualification period" }, grid_code_point_PINVrx_SmartInvSelect: { id: "grid_code_point_PINVrx_SmartInvSelect", defaultMessage: "Enabled Smart Inverter Features" }, })); }, 1089: function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return a; }); var r = i(2), n = i(1085); function o(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, r); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(i), !0).forEach(function (t) { _(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : o(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { isRetrieving: !1, isFetching: !1, isSaving: !1, isSetting: !1, didInvalidate: !1, error: null, codes: {}, config: { country: void 0, state: void 0, distributor: void 0, utility: void 0, retailer: void 0, region: void 0, grid_code: void 0, show_all_grid_codes: !1, grid_code_overrides: [], grid_voltage_setting: void 0, grid_phase_setting: void 0, grid_freq_setting: void 0, }, status: null, servicesActive: !1, offGrid: !1, measuredFrequency: null, }; function a(e = s, t) { switch (t.type) { case r.REQUEST_SITE_INFO: return d(d({}, e), {}, { isRetrieving: !0, didInvalidate: !1 }); case r.REQUEST_GRID_CODES: return d(d({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case r.REQUEST_SAVE_OFF_GRID: return d(d({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case r.REQUEST_SAVE_GRID_CODE: return d(d({}, e), {}, { isSaving: !0, isSetting: t.isSetting, didInvalidate: !1 }); case r.RECEIVE_SITE_INFO_SUCCESS: return d(d(d({}, e), l(e, t)), {}, { isRetrieving: !1, didInvalidate: !1 }); case r.RECEIVE_GRID_CODES_SUCCESS: let i = t.gridRegions; return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, codes: Object(n.parseRegionsCSVIntoNestedLookupStructure)(i.regions, i.grid_code_settings) }); case r.RECEIVE_SAVE_GRID_CODE_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt }, l(e, t)); case r.RECEIVE_SAVE_OFF_GRID_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, offGrid: t.offGrid }); case r.RECEIVE_GRID_STATUS_SUCCESS: return d(d({}, e), {}, { status: t.grid_status, servicesActive: t.grid_services_active }); case r.RECEIVE_SITE_INFO_ERROR: return d(d({}, e), {}, { isRetrieving: !1, didInvalidate: !0 }); case r.RECEIVE_GRID_CODES_ERROR: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case r.RECEIVE_SAVE_GRID_CODE_ERROR: case r.RECEIVE_SAVE_OFF_GRID_ERROR: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case r.RESET_ALL: case r.RESET_GRID_CODE_CONFIG: return s; default: return e; } } function l(e, t) { let i = d(d({}, e), {}, { offGrid: null != t.offgrid ? t.offgrid : e.offGrid, measuredFrequency: null != t.measured_frequency ? t.measured_frequency : e.measuredFrequency }), r = t.grid_code; return r ? d(d({}, i), {}, { config: r }) : i; } }, 1096: function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return a; }); var r = i(2), n = i(93); function o(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, r); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(i), !0).forEach(function (t) { _(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : o(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { isFetching: !1, isSaving: !1, didInvalidate: !1, siteName: "", timezone: null, mode: null, backupReserve: null, exportLimit: null, generationLimit: null, solarLimit: null, batteryLimit: null, hecoCommittedDischargePower: null, hecoFromHour: null, hecoFromMinute: null, hecoScheduledDispatchEnabled: null, hecoAlreadySet: null, }; function a(e = s, t) { switch (t.type) { case r.REQUEST_SITE_NAME: case r.REQUEST_SITE_INFO: case r.REQUEST_OPERATION_SETTINGS: case r.REQUEST_TIMEZONE: return d(d({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case r.REQUEST_SAVE_SITE_NAME: case r.REQUEST_SAVE_EXPORT_MODE: case r.REQUEST_SAVE_OPERATION_SETTINGS: case r.REQUEST_SAVE_TIMEZONE: return d(d({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case r.RECEIVE_SITE_NAME_SUCCESS: case r.RECEIVE_SITE_INFO_SUCCESS: const i = t.payload || t; return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, siteName: i.site_name, timezone: i.timezone, netMeterMode: i.net_meter_mode }); case r.RECEIVE_SAVE_SITE_NAME_SUCCESS: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, siteName: t.siteName }); case r.RECEIVE_OPERATION_SETTINGS_SUCCESS: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt }, l(e, t)); case r.RECEIVE_SAVE_OPERATION_SETTINGS_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, lastSavedAt: t.receivedAt }, l(e, t)); case r.RECEIVE_TIMEZONE_SUCCESS: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, timezone: t.time_zone || e.timezone }); case r.RECEIVE_SAVE_TIMEZONE_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, timezone: t.timezone }); case r.RECEIVE_GET_EXTRA_PROGRAMS_SUCCESS: return d( d({}, e), {}, { isSaving: !1, didInvalidate: !1 }, (function (e, t) { let i = (t.extraPrograms || []).find((e) => e.name === n.b.HECO && e.type === n.c.POWER_RANGE); if (i && i.recurring_events.length > 0) return { hecoScheduledDispatchEnabled: !0, hecoCommittedDischargePower: 1e3 * i.recurring_events[0].discharge_power_kw[0], hecoFromHour: i.recurring_events[0].schedule.fromHour, hecoFromMinute: i.recurring_events[0].schedule.fromMinute, hecoAlreadySet: !0, }; return { hecoScheduledDispatchEnabled: !1, hecoAlreadySet: !1 }; })(0, t) ); case r.RECEIVE_POST_EXTRA_PROGRAM_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1 }); case r.RECEIVE_SITEMASTER_SETTINGS_ERROR: case r.RECEIVE_START_SITEMASTER_ERROR: case r.RECEIVE_STOP_SITEMASTER_ERROR: case r.RECEIVE_SITE_INFO_ERROR: case r.RECEIVE_OPERATION_SETTINGS_ERROR: case r.RECEIVE_TIMEZONE_ERROR: case r.RECEIVE_GET_EXTRA_PROGRAMS_ERROR: case r.RECEIVE_POST_EXTRA_PROGRAM_ERROR: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case r.RECEIVE_SAVE_SITE_NAME_ERROR: case r.RECEIVE_SAVE_OPERATION_SETTINGS_ERROR: case r.RECEIVE_SAVE_TIMEZONE_ERROR: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case r.RESET_ALL: case r.RESET_OPERATION_SETTINGS: return s; default: return e; } } function l(e, t) { let i = null != t.backup_reserve_percent ? t.backup_reserve_percent : t.backupReserve, r = null != t.max_pv_export_power_kW ? t.max_pv_export_power_kW : t.solarLimit; return ( n.g.includes(t.mode) || (i = null), { mode: t.mode || e.mode, backupReserve: null != i ? i : e.backupReserve, exportLimit: null != i ? 100 - i : e.backupReserve, solarLimit: void 0 !== r ? r : e.solarLimit, generationLimit: null != t.generationLimit ? t.generationLimit : e.generationLimit, batteryLimit: null != t.batteryLimit ? t.batteryLimit : e.batteryLimit, } ); } }, 1116: function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return l; }); var r = i(27), n = i(2); function o(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, r); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(i), !0).forEach(function (t) { _(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : o(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { id: 1, brand: "", model: "", powerRating: null, port: null, baudrate: null, ip: null, revenueGrade: null }, a = { isFetching: !1, isSaving: !1, isConnecting: !1, didInvalidate: !1, brands: [], models: {}, items: [s] }; function l(e = a, t) { switch (t.type) { case n.ADD_SOLAR: return d(d({}, e), {}, { items: [...e.items, d(d({}, s), {}, { id: t.id })] }); case n.REMOVE_SOLAR: let i = e.items.filter((e, i) => t.index !== i); return d(d({}, e), {}, { items: i.length ? i : a.items }); case n.RECEIVE_SOLAR_CONFIG_SUCCESS: { let i = d({}, e); return t.solars.length && (i.items = t.solars.map((e, t) => ({ brand: e.brand, model: e.model, id: t + 1, powerRating: e.power_rating_watts, ip: e.ip_address || null, revenueGrade: e.revenue_grade || null }))), i; } case n.RECEIVE_SOLAR_BRANDS_SUCCESS: return d(d({}, e), {}, { brands: t.brands }); case n.RECEIVE_SOLAR_MODELS_SUCCESS: return d(d({}, e), {}, { models: d(d({}, e.models), {}, { [t.brand]: t.models }) }); case n.REQUEST_SAVE_SOLAR_INVERTERS: case n.REQUEST_DELETE_SOLAR_INVERTER: return d(d({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case n.RECEIVE_SAVE_SOLAR_INVERTER_SUCCESS: let o = 0, _ = Object(r.cloneDeep)( e.items.find((e, i) => { let r = e.id === t.id; return r && (o = i), r; }) ); return d( d({}, e), {}, { items: [ ...e.items.slice(0, o), d(d({}, _), {}, { brand: t.brand, model: t.model, powerRating: t.power_rating_watts, ip: t.ip_address || null, revenueGrade: t.revenue_grade || null }), ...e.items.slice(o + 1), ], } ); case n.RECEIVE_SAVE_SOLAR_INVERTERS_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, lastUpdatedAt: Date.now() }); case n.RECEIVE_DELETE_SOLAR_INVERTER_SUCCESS: { let i = [...e.items.slice(0, t.index), ...e.items.slice(t.index + 1)]; return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, items: i.length ? i : a.items }); } case n.RECEIVE_SAVE_SOLAR_INVERTERS_ERROR: case n.RECEIVE_DELETE_SOLAR_INVERTER_ERROR: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case n.REQUEST_CONNECT_SOLAR_INVERTER: return d(d({}, e), {}, { isConnecting: !0, didInvalidate: !1 }); case n.RECEIVE_CONNECT_SOLAR_INVERTER_SUCCESS: return d( d({}, e), {}, { isConnecting: !1, didInvalidate: !0, items: [ ...e.items.slice(0, t.index), d(d({}, e.items[t.index]), {}, { brand: t.brand, model: t.model, powerRating: t.power_rating_watts, ip: t.ip_address, revenueGrade: t.revenue_grade || null }), ...e.items.slice(t.index + 1), ], } ); case n.RECEIVE_CONNECT_SOLAR_INVERTER_ERROR: return d(d({}, e), {}, { isConnecting: !1, didInvalidate: !0 }); case n.RESET_ALL: case n.RESET_SOLAR_CONFIG: return a; default: return e; } } }, 1119: function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return l; }); var r = i(27), n = i(2), o = i(22); function d(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, r); } return i; } function _(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(i), !0).forEach(function (t) { s(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : d(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function s(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const a = { isFetching: !1, didInvalidate: !1, chargeTests: [], meterResults: [], inverterResults: [], running: !1, currentStatus: null, hysteresis: null, status: null, error: null, alerts: [] }; function l(e = a, t) { switch (t.type) { case n.REQUEST_RUN_INVERTER_TEST: let i = Object(r.cloneDeep)(e.inverterResults); for (let e = 0; e < i.length; e++) null != i[e].results && i[e].results[o.n.LAST_ERROR] && (i[e].results[o.n.LAST_ERROR] = null); return _(_({}, e), {}, { error: null, inverterResults: i, isFetching: !0, didInvalidate: !1, currentStatus: null }); case n.REQUEST_TEST_RESULTS: case n.REQUEST_TEST_ALERTS: case n.REQUEST_CANCEL_TEST: return _(_({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case n.RECEIVE_TEST_RESULTS: return _( _({}, e), {}, { isFetching: !1, didInvalidate: !1, lastRetrievedAt: t.receivedAt, chargeTests: t.charge_tests || e.chargeTests, meterResults: t.meter_results || e.meterResults, inverterResults: t.inverter_results || e.inverterResults, running: t.running, error: t.error, hysteresis: t.hysteresis, currentStatus: t.running ? t.status : e.currentStatus, status: t.status, } ); case n.RECEIVE_RUN_INVERTER_TEST_SUCCESS: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !1, lastTestedAt: t.receivedAt, running: t.running, currentStatus: t.running ? t.status : e.currentStatus, status: t.status }); case n.RECEIVE_RUN_INVERTER_TEST_ERROR: case n.RECEIVE_TEST_RESULTS_ERROR: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !0, error: t.error }); case n.RECEIVE_TEST_ALERTS_SUCCESS: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !1, alerts: t.alerts }); case n.RECEIVE_CANCEL_TEST_SUCCESS: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !1, running: !1, currentStatus: null, status: o.o.CANCELED }); case n.RECEIVE_TEST_ALERTS_ERROR: case n.RECEIVE_CANCEL_TEST_ERROR: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case n.RESET_ALL: case n.RESET_TESTS: return a; default: return e; } } }, }, ]); ================================================ FILE: proxy/web/viz-static/40.17c71172308436a079d1.js ================================================ (window.webpackJsonp = window.webpackJsonp || []).push([[40], { 1062: function (n, w) {} }]); ================================================ FILE: proxy/web/viz-static/app.css ================================================ .error-item .error-info { margin-left: 10px; cursor: pointer } .error-item a.refresh { color: #fff } .error-item a.error-link { color: #fff; text-decoration: underline } p.error-item { line-height: 20px } .modal { transform: translateZ(0); background-color: rgba(0, 0, 0, .6) } .modal-header { background-color: #f7f7f7 } .modal-body p { color: #666; line-height: 20px } .modal-body .warning-content>p { margin-bottom: 25px } .modal-body .warning-content>p.warning { font-weight: 700 } .modal-body .warning-content ul.warning-list { list-style-type: disc; margin-left: 15px } .modal-body .warning-content ul.warning-list>li { color: #666 } .modal-body .checkbox-content .checkbox { padding-top: 25px } .modal-body .warning-separator { padding-top: 30px } .modal-footer .btn-close { color: #666 } .modal-footer .btn-close:focus, .modal-footer .btn-close:hover { color: #000 } .modal-center, .modal-footer .col-xs-6 { text-align: center } .modal-center { padding: 0 !important } .modal-center .modal-dialog { display: inline-block; text-align: left; vertical-align: middle } .modal-center .modal-dialog.modal-lg { width: 90% } .modal-center:before { content: ""; display: inline-block; height: 100%; vertical-align: middle; margin-right: -2px } .modal-verification p { padding-top: 25px } .modal-error .modal-header { background-color: #c00; color: #fff } .modal-error .modal-header .error-item { margin: 5px 0 0 } .modal-caution .modal-header { background-color: #ffb641; color: #fff } .modal-caution .modal-header .error-item { margin: 5px 0 0 } .modal-fullscreen { background: transparent } .modal-fullscreen .modal-content { background: transparent; border: 0; box-shadow: none } .modal-fullscreen .modal-dialog { margin: 0 auto; width: 100% } .modal-backdrop { position: relative !important } .modal-backdrop.modal-backdrop-fullscreen { background: #fff } .modal-backdrop.modal-backdrop-fullscreen.in { opacity: .97; filter: alpha(opacity=97) } .modal-no-borders .modal-header { border-bottom: none } .modal-no-borders .modal-footer { border-top: none } @media(max-width:767px) { .scan-modal .modal-dialog { width: 90% } } @media(min-width:768px) { .modal-fullscreen .modal-dialog { width: 750px } } @media(min-width:992px) { .modal-fullscreen .modal-dialog { width: 970px } } @media(min-width:1200px) { .modal-fullscreen .modal-dialog { width: 1170px } } .error-boundary>p { color: #c00 } .tds-icon { height: 36px; width: 36px; color: #333 } .tds-icon-inline { width: 1.75em; height: 1.75em; vertical-align: -.5em; color: #333 } .header { padding-top: 25px; padding-bottom: 25px; position: relative } .header .title { font-weight: 300 } .header p { line-height: 20px } .header p.wizard-progress { float: right; color: #ccc !important; font-size: 13px } .header.header-default { background-color: #35454c; color: #fff } .header.header-default p { color: #f7f7f7 } .header.header-default a { color: #fff !important; text-decoration: underline } .header.header-subview { background-color: #f7f7f7; color: #000; border-bottom: 1px solid #ccc } .header.header-subview a { color: #000 !important; text-decoration: underline } .header.header-blank { background-color: #fff } .header.error { background-color: #c00; color: #fff } ul.detailed-errors { margin: 0 } ul.detailed-errors>li { padding-bottom: 10px } .banner-container { letter-spacing: .3px; top: 0; left: 0; right: 0; background-color: #f3a83d; flex-direction: column; margin: 0 auto; box-shadow: 0 5px 15px rgba(0, 0, 0, .5); z-index: 10 } .banner-container .banner-close { top: 5px; right: 5px } .footer { position: fixed; background-color: hsla(0, 0%, 96.9%, .95); height: 60px; bottom: 0; width: 100%; z-index: 400; transform: translateZ(0) } .footer.footer-default, .footer.footer-subview { border-top: 1px solid #ccc } .footer.footer-subview { background-color: #fff } .footer a { display: block; line-height: 60px; font-weight: 600; font-size: 13px; color: #666; white-space: nowrap; cursor: pointer; transition: color .15s ease-in-out } .footer a svg { transition: stroke .15s ease-in-out } .footer a:focus, .footer a:hover { text-decoration: none } .footer a.btn-text:focus, .footer a.btn-text:hover { cursor: default; color: #666 } .footer a.cancel-link.btn-text { text-align: center } .footer a.back-link { float: left } .footer a.back-link svg { stroke: #666; margin-right: 7px } .footer a.back-link:focus, .footer a.back-link:hover { color: #000 } .footer a.back-link:focus svg, .footer a.back-link:hover svg { stroke: #000 } .footer a.cancel-link { margin: 0 auto; text-align: center } .footer a.forward-link { float: right } .footer a.forward-link svg { stroke: #666; margin-left: 7px } .footer a.forward-link.disabled svg { stroke: #ccc } .footer a.forward-link.btn-action { line-height: 36px; padding: 2px 12px; margin-top: 10px } .footer a.forward-link.btn-action svg { stroke: #fff } .footer .back-section .tooltip { left: auto !important } .toast { width: 85%; overflow: hidden; font-size: 14px; background-color: #fff; background-clip: initial; box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .25); border-radius: 3px; transition: all .1s ease-out; margin: 0 auto } .toast:hover { box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .5) } .toast:not(:last-child) { margin-bottom: 10px } @media(min-width:768px) { .toast { width: 360px } } .toast .toast-link { width: 100%; font-size: 14px; margin-bottom: 0 } .toast .toast-link-indicator { max-height: 14px; margin: auto 0 } .toast .toast-title { margin-right: auto } .toast .toast-header { display: flex; align-items: center; color: #fff } .toast .toast-warning-header { background-color: #c53929 } .toast .toast-standard-header { background-color: #35454c } .toast .toast-standard-header .toast-close { color: #fff; opacity: .4; text-shadow: 0 1px 0 #333 } .toast .toast-standard-header .toast-close:hover { opacity: 1 } .toast .toast-body { display: flex; justify-content: space-between } .toast-list { position: fixed; z-index: 20; top: 10px; right: 0; left: 0; display: flex; justify-content: center; flex-direction: column } @media(min-width:768px) { .toast-list { left: auto; right: 25px } } @font-face { font-family: Gotham; src: url(124f233cfa9945f861dcaca7acedd308.otf); font-weight: 100; font-style: normal } @font-face { font-family: Gotham; src: url(2bf15a1686c7a1bf7b577337a07d7049.otf); font-weight: 100; font-style: italic } @font-face { font-family: Gotham; src: url(86a6894da889a3db781418529403290f.otf); font-weight: 200; font-style: normal } @font-face { font-family: Gotham; src: url(a3b0d611359e6fa8356cd88aa9035268.otf); font-weight: 200; font-style: italic } @font-face { font-family: Gotham; src: url(bceda3fae660177ae570735feec62811.otf); font-weight: 300; font-style: normal } @font-face { font-family: Gotham; src: url(d859fee2eba0e67c75c4c92e719d0630.otf); font-weight: 300; font-style: italic } @font-face { font-family: Gotham; src: url(eca1317ee8a99162d0d0e2df77330cec.otf); font-weight: 400; font-style: normal } @font-face { font-family: Gotham; src: url(befdfda70624c396169873b05de57f8a.otf); font-weight: 400; font-style: italic } @font-face { font-family: Gotham; src: url(e19c20e966bde501f94e41cd0322dbe8.otf); font-weight: 600; font-style: normal } @font-face { font-family: Gotham; src: url(653969a51632a4df33358a39d7012f79.otf); font-weight: 600; font-style: italic } @font-face { font-family: Gotham; src: url(722c5f898bbca8b2eb3fce0287688326.otf); font-weight: 700; font-style: normal } @font-face { font-family: Gotham; src: url(ec89c09b066f57efc7687540c998845b.otf); font-weight: 700; font-style: italic } @font-face { font-family: Gotham; src: url(89aec2cc0b804667e95b1adc02e1ac4a.otf); font-weight: 800; font-style: normal } @font-face { font-family: Gotham; src: url(ec6b35b07448e1624cb09323b5fb6e32.otf); font-weight: 800; font-style: italic } @font-face { font-family: Gotham; src: url(b8d72cb0ef934ba1fe847c692d9dfed1.otf); font-weight: 900; font-style: normal } @font-face { font-family: Gotham; src: url(ac2944015a17576924af7c56d88751cb.otf); font-weight: 900; font-style: italic } .text-extra-large { font-size: 32px } .text-larger { font-size: 22px } .text-large { font-size: 19px } .text-medium { font-size: 16px } .text-small { font-size: 12px } .text-break { overflow-wrap: break-word; -webkit-hyphens: auto; hyphens: auto } .flex { display: flex !important } .m-1 { margin: 5px !important } .mx-1 { margin-left: 5px !important; margin-right: 5px !important } .my-1 { margin-bottom: 5px !important } .mt-1, .my-1 { margin-top: 5px !important } .mb-1 { margin-bottom: 5px !important } .ml-1 { margin-left: 5px !important } .mr-1 { margin-right: 5px !important } .p-1 { padding: 5px !important } .px-1 { padding-left: 5px !important; padding-right: 5px !important } .py-1 { padding-bottom: 5px !important } .pt-1, .py-1 { padding-top: 5px !important } .pb-1 { padding-bottom: 5px !important } .pl-1 { padding-left: 5px !important } .pr-1 { padding-right: 5px !important } .m-2 { margin: 10px !important } .mx-2 { margin-left: 10px !important; margin-right: 10px !important } .my-2 { margin-bottom: 10px !important } .mt-2, .my-2 { margin-top: 10px !important } .mb-2 { margin-bottom: 10px !important } .ml-2 { margin-left: 10px !important } .mr-2 { margin-right: 10px !important } .p-2 { padding: 10px !important } .px-2 { padding-left: 10px !important; padding-right: 10px !important } .py-2 { padding-bottom: 10px !important } .pt-2, .py-2 { padding-top: 10px !important } .pb-2 { padding-bottom: 10px !important } .pl-2 { padding-left: 10px !important } .pr-2 { padding-right: 10px !important } .m-3 { margin: 15px !important } .mx-3 { margin-left: 15px !important; margin-right: 15px !important } .my-3 { margin-bottom: 15px !important } .mt-3, .my-3 { margin-top: 15px !important } .mb-3 { margin-bottom: 15px !important } .ml-3 { margin-left: 15px !important } .mr-3 { margin-right: 15px !important } .p-3 { padding: 15px !important } .px-3 { padding-left: 15px !important; padding-right: 15px !important } .py-3 { padding-bottom: 15px !important } .pt-3, .py-3 { padding-top: 15px !important } .pb-3 { padding-bottom: 15px !important } .pl-3 { padding-left: 15px !important } .pr-3 { padding-right: 15px !important } .m-4 { margin: 20px !important } .mx-4 { margin-left: 20px !important; margin-right: 20px !important } .my-4 { margin-bottom: 20px !important } .mt-4, .my-4 { margin-top: 20px !important } .mb-4 { margin-bottom: 20px !important } .ml-4 { margin-left: 20px !important } .mr-4 { margin-right: 20px !important } .p-4 { padding: 20px !important } .px-4 { padding-left: 20px !important; padding-right: 20px !important } .py-4 { padding-bottom: 20px !important } .pt-4, .py-4 { padding-top: 20px !important } .pb-4 { padding-bottom: 20px !important } .pl-4 { padding-left: 20px !important } .pr-4 { padding-right: 20px !important } .m-5 { margin: 25px !important } .mx-5 { margin-left: 25px !important; margin-right: 25px !important } .my-5 { margin-bottom: 25px !important } .mt-5, .my-5 { margin-top: 25px !important } .mb-5 { margin-bottom: 25px !important } .ml-5 { margin-left: 25px !important } .mr-5 { margin-right: 25px !important } .p-5 { padding: 25px !important } .px-5 { padding-left: 25px !important; padding-right: 25px !important } .py-5 { padding-bottom: 25px !important } .pt-5, .py-5 { padding-top: 25px !important } .pb-5 { padding-bottom: 25px !important } .pl-5 { padding-left: 25px !important } .pr-5 { padding-right: 25px !important } .absolute { position: absolute !important } .relative { position: relative !important } @keyframes fade-out { 0% { opacity: 1 } to { opacity: 0 } } @keyframes slide-in-top { 0% { transform: translateY(-150%) } to { transform: translateY(0) } } @keyframes slide-out-top { 0% { transform: translateY(0) } to { transform: translateY(-150%) } } .fade-in { animation: fade-in .3s ease-in-out 1 normal forwards } .fade-out { animation: fade-out .3s ease-in-out 1 normal forwards } .slide-in-top { animation: slide-in-top .2s ease-in-out 1 normal forwards } .slide-out-top { animation: slide-out-top .2s ease-in-out 1 normal forwards } /*! * Bootstrap v3.3.7 (http://getbootstrap.com) * bootstrap-sass (https://github.com/twbs/bootstrap-sass) * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! * Bootstrap v3.4.1 (https://getbootstrap.com/) * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block } audio, canvas, progress, video { vertical-align: initial } a:active, a:hover { outline: 0 } b, strong { font-weight: 700 } mark { background: #ff0 } img { border: 0 } pre { overflow: auto } button, input, optgroup, select, textarea { color: inherit } button { overflow: visible } button, html input[type=button], input[type=reset], input[type=submit] { -webkit-appearance: button; cursor: pointer } button[disabled], html input[disabled] { cursor: default } button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0 } input { line-height: normal } input[type=checkbox], input[type=radio] { box-sizing: border-box; padding: 0 } input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { height: auto } input[type=search] { -webkit-appearance: textfield; box-sizing: initial } input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration { -webkit-appearance: none } table { border-collapse: collapse; border-spacing: 0 } td, th { padding: 0 } /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ @media print { *, :after, :before { color: #000 !important; text-shadow: none !important; background: transparent !important; box-shadow: none !important } a, a:visited { text-decoration: underline } a[href]:after { content: " (" attr(href) ")" } abbr[title]:after { content: " (" attr(title) ")" } a[href^="#"]:after, a[href^="javascript:"]:after { content: "" } blockquote, pre { border: 1px solid #999; page-break-inside: avoid } thead { display: table-header-group } img, tr { page-break-inside: avoid } img { max-width: 100% !important } h2, h3, p { orphans: 3; widows: 3 } h2, h3 { page-break-after: avoid } .navbar { display: none } .btn>.caret, .dropup>.btn>.caret { border-top-color: #000 !important } .label { border: 1px solid #000 } .table { border-collapse: collapse !important } .table td, .table th { background-color: #fff !important } .table-bordered td, .table-bordered th { border: 1px solid #ddd !important } } @font-face { font-family: Glyphicons Halflings; src: url(f4769f9bdb7466be65088239c12046d1.eot); src: url(f4769f9bdb7466be65088239c12046d1.eot?#iefix) format("embedded-opentype"), url(448c34a56d699c29117adc64c43affeb.woff2) format("woff2"), url(fa2772327f55d8198301fdb8bcfc8158.woff) format("woff"), url(e18bbf611f2a2e43afc071aa2f4e1512.ttf) format("truetype"), url(89889688147bd7575d6327160d64e760.svg#glyphicons_halflingsregular) format("svg") } .glyphicon { position: relative; top: 1px; display: inline-block; font-family: Glyphicons Halflings; font-style: normal; font-weight: 400; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale } .glyphicon-asterisk:before { content: "*" } .glyphicon-plus:before { content: "+" } .glyphicon-eur:before, .glyphicon-euro:before { content: "€" } .glyphicon-minus:before { content: "−" } .glyphicon-cloud:before { content: "☁" } .glyphicon-envelope:before { content: "✉" } .glyphicon-pencil:before { content: "✏" } .glyphicon-glass:before { content: "" } .glyphicon-music:before { content: "" } .glyphicon-search:before { content: "" } .glyphicon-heart:before { content: "" } .glyphicon-star:before { content: "" } .glyphicon-star-empty:before { content: "" } .glyphicon-user:before { content: "" } .glyphicon-film:before { content: "" } .glyphicon-th-large:before { content: "" } .glyphicon-th:before { content: "" } .glyphicon-th-list:before { content: "" } .glyphicon-ok:before { content: "" } .glyphicon-remove:before { content: "" } .glyphicon-zoom-in:before { content: "" } .glyphicon-zoom-out:before { content: "" } .glyphicon-off:before { content: "" } .glyphicon-signal:before { content: "" } .glyphicon-cog:before { content: "" } .glyphicon-trash:before { content: "" } .glyphicon-home:before { content: "" } .glyphicon-file:before { content: "" } .glyphicon-time:before { content: "" } .glyphicon-road:before { content: "" } .glyphicon-download-alt:before { content: "" } .glyphicon-download:before { content: "" } .glyphicon-upload:before { content: "" } .glyphicon-inbox:before { content: "" } .glyphicon-play-circle:before { content: "" } .glyphicon-repeat:before { content: "" } .glyphicon-refresh:before { content: "" } .glyphicon-list-alt:before { content: "" } .glyphicon-lock:before { content: "" } .glyphicon-flag:before { content: "" } .glyphicon-headphones:before { content: "" } .glyphicon-volume-off:before { content: "" } .glyphicon-volume-down:before { content: "" } .glyphicon-volume-up:before { content: "" } .glyphicon-qrcode:before { content: "" } .glyphicon-barcode:before { content: "" } .glyphicon-tag:before { content: "" } .glyphicon-tags:before { content: "" } .glyphicon-book:before { content: "" } .glyphicon-bookmark:before { content: "" } .glyphicon-print:before { content: "" } .glyphicon-camera:before { content: "" } .glyphicon-font:before { content: "" } .glyphicon-bold:before { content: "" } .glyphicon-italic:before { content: "" } .glyphicon-text-height:before { content: "" } .glyphicon-text-width:before { content: "" } .glyphicon-align-left:before { content: "" } .glyphicon-align-center:before { content: "" } .glyphicon-align-right:before { content: "" } .glyphicon-align-justify:before { content: "" } .glyphicon-list:before { content: "" } .glyphicon-indent-left:before { content: "" } .glyphicon-indent-right:before { content: "" } .glyphicon-facetime-video:before { content: "" } .glyphicon-picture:before { content: "" } .glyphicon-map-marker:before { content: "" } .glyphicon-adjust:before { content: "" } .glyphicon-tint:before { content: "" } .glyphicon-edit:before { content: "" } .glyphicon-share:before { content: "" } .glyphicon-check:before { content: "" } .glyphicon-move:before { content: "" } .glyphicon-step-backward:before { content: "" } .glyphicon-fast-backward:before { content: "" } .glyphicon-backward:before { content: "" } .glyphicon-play:before { content: "" } .glyphicon-pause:before { content: "" } .glyphicon-stop:before { content: "" } .glyphicon-forward:before { content: "" } .glyphicon-fast-forward:before { content: "" } .glyphicon-step-forward:before { content: "" } .glyphicon-eject:before { content: "" } .glyphicon-chevron-left:before { content: "" } .glyphicon-chevron-right:before { content: "" } .glyphicon-plus-sign:before { content: "" } .glyphicon-minus-sign:before { content: "" } .glyphicon-remove-sign:before { content: "" } .glyphicon-ok-sign:before { content: "" } .glyphicon-question-sign:before { content: "" } .glyphicon-info-sign:before { content: "" } .glyphicon-screenshot:before { content: "" } .glyphicon-remove-circle:before { content: "" } .glyphicon-ok-circle:before { content: "" } .glyphicon-ban-circle:before { content: "" } .glyphicon-arrow-left:before { content: "" } .glyphicon-arrow-right:before { content: "" } .glyphicon-arrow-up:before { content: "" } .glyphicon-arrow-down:before { content: "" } .glyphicon-share-alt:before { content: "" } .glyphicon-resize-full:before { content: "" } .glyphicon-resize-small:before { content: "" } .glyphicon-exclamation-sign:before { content: "" } .glyphicon-gift:before { content: "" } .glyphicon-leaf:before { content: "" } .glyphicon-fire:before { content: "" } .glyphicon-eye-open:before { content: "" } .glyphicon-eye-close:before { content: "" } .glyphicon-warning-sign:before { content: "" } .glyphicon-plane:before { content: "" } .glyphicon-calendar:before { content: "" } .glyphicon-random:before { content: "" } .glyphicon-comment:before { content: "" } .glyphicon-magnet:before { content: "" } .glyphicon-chevron-up:before { content: "" } .glyphicon-chevron-down:before { content: "" } .glyphicon-retweet:before { content: "" } .glyphicon-shopping-cart:before { content: "" } .glyphicon-folder-close:before { content: "" } .glyphicon-folder-open:before { content: "" } .glyphicon-resize-vertical:before { content: "" } .glyphicon-resize-horizontal:before { content: "" } .glyphicon-hdd:before { content: "" } .glyphicon-bullhorn:before { content: "" } .glyphicon-bell:before { content: "" } .glyphicon-certificate:before { content: "" } .glyphicon-thumbs-up:before { content: "" } .glyphicon-thumbs-down:before { content: "" } .glyphicon-hand-right:before { content: "" } .glyphicon-hand-left:before { content: "" } .glyphicon-hand-up:before { content: "" } .glyphicon-hand-down:before { content: "" } .glyphicon-circle-arrow-right:before { content: "" } .glyphicon-circle-arrow-left:before { content: "" } .glyphicon-circle-arrow-up:before { content: "" } .glyphicon-circle-arrow-down:before { content: "" } .glyphicon-globe:before { content: "" } .glyphicon-wrench:before { content: "" } .glyphicon-tasks:before { content: "" } .glyphicon-filter:before { content: "" } .glyphicon-briefcase:before { content: "" } .glyphicon-fullscreen:before { content: "" } .glyphicon-dashboard:before { content: "" } .glyphicon-paperclip:before { content: "" } .glyphicon-heart-empty:before { content: "" } .glyphicon-link:before { content: "" } .glyphicon-phone:before { content: "" } .glyphicon-pushpin:before { content: "" } .glyphicon-usd:before { content: "" } .glyphicon-gbp:before { content: "" } .glyphicon-sort:before { content: "" } .glyphicon-sort-by-alphabet:before { content: "" } .glyphicon-sort-by-alphabet-alt:before { content: "" } .glyphicon-sort-by-order:before { content: "" } .glyphicon-sort-by-order-alt:before { content: "" } .glyphicon-sort-by-attributes:before { content: "" } .glyphicon-sort-by-attributes-alt:before { content: "" } .glyphicon-unchecked:before { content: "" } .glyphicon-expand:before { content: "" } .glyphicon-collapse-down:before { content: "" } .glyphicon-collapse-up:before { content: "" } .glyphicon-log-in:before { content: "" } .glyphicon-flash:before { content: "" } .glyphicon-log-out:before { content: "" } .glyphicon-new-window:before { content: "" } .glyphicon-record:before { content: "" } .glyphicon-save:before { content: "" } .glyphicon-open:before { content: "" } .glyphicon-saved:before { content: "" } .glyphicon-import:before { content: "" } .glyphicon-export:before { content: "" } .glyphicon-send:before { content: "" } .glyphicon-floppy-disk:before { content: "" } .glyphicon-floppy-saved:before { content: "" } .glyphicon-floppy-remove:before { content: "" } .glyphicon-floppy-save:before { content: "" } .glyphicon-floppy-open:before { content: "" } .glyphicon-credit-card:before { content: "" } .glyphicon-transfer:before { content: "" } .glyphicon-cutlery:before { content: "" } .glyphicon-header:before { content: "" } .glyphicon-compressed:before { content: "" } .glyphicon-earphone:before { content: "" } .glyphicon-phone-alt:before { content: "" } .glyphicon-tower:before { content: "" } .glyphicon-stats:before { content: "" } .glyphicon-sd-video:before { content: "" } .glyphicon-hd-video:before { content: "" } .glyphicon-subtitles:before { content: "" } .glyphicon-sound-stereo:before { content: "" } .glyphicon-sound-dolby:before { content: "" } .glyphicon-sound-5-1:before { content: "" } .glyphicon-sound-6-1:before { content: "" } .glyphicon-sound-7-1:before { content: "" } .glyphicon-copyright-mark:before { content: "" } .glyphicon-registration-mark:before { content: "" } .glyphicon-cloud-download:before { content: "" } .glyphicon-cloud-upload:before { content: "" } .glyphicon-tree-conifer:before { content: "" } .glyphicon-tree-deciduous:before { content: "" } .glyphicon-cd:before { content: "" } .glyphicon-save-file:before { content: "" } .glyphicon-open-file:before { content: "" } .glyphicon-level-up:before { content: "" } .glyphicon-copy:before { content: "" } .glyphicon-paste:before { content: "" } .glyphicon-alert:before { content: "" } .glyphicon-equalizer:before { content: "" } .glyphicon-king:before { content: "" } .glyphicon-queen:before { content: "" } .glyphicon-pawn:before { content: "" } .glyphicon-bishop:before { content: "" } .glyphicon-knight:before { content: "" } .glyphicon-baby-formula:before { content: "" } .glyphicon-tent:before { content: "⛺" } .glyphicon-blackboard:before { content: "" } .glyphicon-bed:before { content: "" } .glyphicon-apple:before { content: "" } .glyphicon-erase:before { content: "" } .glyphicon-hourglass:before { content: "⌛" } .glyphicon-lamp:before { content: "" } .glyphicon-duplicate:before { content: "" } .glyphicon-piggy-bank:before { content: "" } .glyphicon-scissors:before { content: "" } .glyphicon-bitcoin:before, .glyphicon-btc:before, .glyphicon-xbt:before { content: "" } .glyphicon-jpy:before, .glyphicon-yen:before { content: "¥" } .glyphicon-rub:before, .glyphicon-ruble:before { content: "₽" } .glyphicon-scale:before { content: "" } .glyphicon-ice-lolly:before { content: "" } .glyphicon-ice-lolly-tasted:before { content: "" } .glyphicon-education:before { content: "" } .glyphicon-option-horizontal:before { content: "" } .glyphicon-option-vertical:before { content: "" } .glyphicon-menu-hamburger:before { content: "" } .glyphicon-modal-window:before { content: "" } .glyphicon-oil:before { content: "" } .glyphicon-grain:before { content: "" } .glyphicon-sunglasses:before { content: "" } .glyphicon-text-size:before { content: "" } .glyphicon-text-color:before { content: "" } .glyphicon-text-background:before { content: "" } .glyphicon-object-align-top:before { content: "" } .glyphicon-object-align-bottom:before { content: "" } .glyphicon-object-align-horizontal:before { content: "" } .glyphicon-object-align-left:before { content: "" } .glyphicon-object-align-vertical:before { content: "" } .glyphicon-object-align-right:before { content: "" } .glyphicon-triangle-right:before { content: "" } .glyphicon-triangle-left:before { content: "" } .glyphicon-triangle-bottom:before { content: "" } .glyphicon-triangle-top:before { content: "" } .glyphicon-console:before { content: "" } .glyphicon-superscript:before { content: "" } .glyphicon-subscript:before { content: "" } .glyphicon-menu-left:before { content: "" } .glyphicon-menu-right:before { content: "" } .glyphicon-menu-down:before { content: "" } .glyphicon-menu-up:before { content: "" } *, :after, :before { box-sizing: border-box } html { font-size: 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } body { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.428571429; color: #333; background-color: #fff } button, input, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit } a { color: #337ab7; text-decoration: none } a:focus, a:hover { color: #23527c; text-decoration: underline } a:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px } figure { margin: 0 } img { vertical-align: middle } .img-responsive { display: block; max-width: 100%; height: auto } .img-rounded { border-radius: 6px } .img-thumbnail { padding: 4px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; transition: all .2s ease-in-out; display: inline-block; max-width: 100%; height: auto } .img-circle { border-radius: 50% } hr { margin-top: 20px; margin-bottom: 20px; border: 0; border-top: 1px solid #eee } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0 } .sr-only-focusable:active, .sr-only-focusable:focus { position: static; width: auto; height: auto; margin: 0; overflow: visible; clip: auto } [role=button] { cursor: pointer } .h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit } .h1 .small, .h1 small, .h2 .small, .h2 small, .h3 .small, .h3 small, .h4 .small, .h4 small, .h5 .small, .h5 small, .h6 .small, .h6 small, h1 .small, h1 small, h2 .small, h2 small, h3 .small, h3 small, h4 .small, h4 small, h5 .small, h5 small, h6 .small, h6 small { font-weight: 400; line-height: 1; color: #777 } .h1, .h2, .h3, h1, h2, h3 { margin-top: 20px; margin-bottom: 10px } .h1 .small, .h1 small, .h2 .small, .h2 small, .h3 .small, .h3 small, h1 .small, h1 small, h2 .small, h2 small, h3 .small, h3 small { font-size: 65% } .h4, .h5, .h6, h4, h5, h6 { margin-top: 10px; margin-bottom: 10px } .h4 .small, .h4 small, .h5 .small, .h5 small, .h6 .small, .h6 small, h4 .small, h4 small, h5 .small, h5 small, h6 .small, h6 small { font-size: 75% } .h1, h1 { font-size: 36px } .h2, h2 { font-size: 30px } .h3, h3 { font-size: 24px } .h4, h4 { font-size: 18px } .h5, h5 { font-size: 14px } .h6, h6 { font-size: 12px } p { margin: 0 0 10px } .lead { margin-bottom: 20px; font-size: 16px; font-weight: 300; line-height: 1.4 } @media(min-width:768px) { .lead { font-size: 21px } } .small, small { font-size: 85% } .mark, mark { padding: .2em; background-color: #fcf8e3 } .text-left { text-align: left } .text-right { text-align: right } .text-center { text-align: center } .text-justify { text-align: justify } .text-nowrap { white-space: nowrap } .initialism, .text-uppercase { text-transform: uppercase } .text-capitalize { text-transform: capitalize } .text-muted { color: #777 } .text-primary { color: #337ab7 } a.text-primary:focus, a.text-primary:hover { color: #286090 } .text-success { color: #3c763d } a.text-success:focus, a.text-success:hover { color: #2b542c } .text-info { color: #31708f } a.text-info:focus, a.text-info:hover { color: #245269 } .text-warning { color: #8a6d3b } a.text-warning:focus, a.text-warning:hover { color: #66512c } .text-danger { color: #a94442 } a.text-danger:focus, a.text-danger:hover { color: #843534 } .bg-primary { color: #fff; background-color: #337ab7 } a.bg-primary:focus, a.bg-primary:hover { background-color: #286090 } .bg-success { background-color: #dff0d8 } a.bg-success:focus, a.bg-success:hover { background-color: #c1e2b3 } .bg-info { background-color: #d9edf7 } a.bg-info:focus, a.bg-info:hover { background-color: #afd9ee } .bg-warning { background-color: #fcf8e3 } a.bg-warning:focus, a.bg-warning:hover { background-color: #f7ecb5 } .bg-danger { background-color: #f2dede } a.bg-danger:focus, a.bg-danger:hover { background-color: #e4b9b9 } .page-header { padding-bottom: 9px; margin: 40px 0 20px; border-bottom: 1px solid #eee } ol, ul { margin-top: 0; margin-bottom: 10px } ol ol, ol ul, ul ol, ul ul { margin-bottom: 0 } .list-inline, .list-unstyled { padding-left: 0; list-style: none } .list-inline { margin-left: -5px } .list-inline>li { display: inline-block; padding-right: 5px; padding-left: 5px } dl { margin-top: 0; margin-bottom: 20px } dd, dt { line-height: 1.428571429 } dt { font-weight: 700 } dd { margin-left: 0 } .dl-horizontal dd:after, .dl-horizontal dd:before { display: table; content: " " } .dl-horizontal dd:after { clear: both } @media(min-width:768px) { .dl-horizontal dt { float: left; width: 160px; clear: left; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } .dl-horizontal dd { margin-left: 180px } } abbr[data-original-title], abbr[title] { cursor: help } .initialism { font-size: 90% } blockquote { padding: 10px 20px; margin: 0 0 20px; font-size: 17.5px; border-left: 5px solid #eee } blockquote ol:last-child, blockquote p:last-child, blockquote ul:last-child { margin-bottom: 0 } blockquote .small, blockquote footer, blockquote small { display: block; font-size: 80%; line-height: 1.428571429; color: #777 } blockquote .small:before, blockquote footer:before, blockquote small:before { content: "— " } .blockquote-reverse, blockquote.pull-right { padding-right: 15px; padding-left: 0; text-align: right; border-right: 5px solid #eee; border-left: 0 } .blockquote-reverse .small:before, .blockquote-reverse footer:before, .blockquote-reverse small:before, blockquote.pull-right .small:before, blockquote.pull-right footer:before, blockquote.pull-right small:before { content: "" } .blockquote-reverse .small:after, .blockquote-reverse footer:after, .blockquote-reverse small:after, blockquote.pull-right .small:after, blockquote.pull-right footer:after, blockquote.pull-right small:after { content: " —" } address { margin-bottom: 20px; font-style: normal; line-height: 1.428571429 } code, kbd, pre, samp { font-family: Menlo, Monaco, Consolas, Courier New, monospace } code { color: #c7254e; background-color: #f9f2f4; border-radius: 4px } code, kbd { padding: 2px 4px; font-size: 90% } kbd { color: #fff; background-color: #333; border-radius: 3px; box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25) } kbd kbd { padding: 0; font-size: 100%; font-weight: 700; box-shadow: none } pre { display: block; padding: 9.5px; margin: 0 0 10px; font-size: 13px; line-height: 1.428571429; color: #333; word-break: break-all; word-wrap: break-word; background-color: #f5f5f5; border: 1px solid #ccc; border-radius: 4px } pre code { padding: 0; font-size: inherit; color: inherit; white-space: pre-wrap; background-color: initial; border-radius: 0 } .pre-scrollable { max-height: 340px; overflow-y: scroll } .container { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto } .container:after, .container:before { display: table; content: " " } .container:after { clear: both } @media(min-width:768px) { .container { width: 750px } } @media(min-width:992px) { .container { width: 970px } } @media(min-width:1200px) { .container { width: 1170px } } .container-fluid { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto } .container-fluid:after, .container-fluid:before { display: table; content: " " } .container-fluid:after { clear: both } .row { margin-right: -15px; margin-left: -15px } .row:after, .row:before { display: table; content: " " } .row:after { clear: both } .row-no-gutters { margin-right: 0; margin-left: 0 } .row-no-gutters [class*=col-] { padding-right: 0; padding-left: 0 } .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { position: relative; min-height: 1px; padding-right: 15px; padding-left: 15px } .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { float: left } .col-xs-1 { width: 8.3333333333% } .col-xs-2 { width: 16.6666666667% } .col-xs-3 { width: 25% } .col-xs-4 { width: 33.3333333333% } .col-xs-5 { width: 41.6666666667% } .col-xs-6 { width: 50% } .col-xs-7 { width: 58.3333333333% } .col-xs-8 { width: 66.6666666667% } .col-xs-9 { width: 75% } .col-xs-10 { width: 83.3333333333% } .col-xs-11 { width: 91.6666666667% } .col-xs-12 { width: 100% } .col-xs-pull-0 { right: auto } .col-xs-pull-1 { right: 8.3333333333% } .col-xs-pull-2 { right: 16.6666666667% } .col-xs-pull-3 { right: 25% } .col-xs-pull-4 { right: 33.3333333333% } .col-xs-pull-5 { right: 41.6666666667% } .col-xs-pull-6 { right: 50% } .col-xs-pull-7 { right: 58.3333333333% } .col-xs-pull-8 { right: 66.6666666667% } .col-xs-pull-9 { right: 75% } .col-xs-pull-10 { right: 83.3333333333% } .col-xs-pull-11 { right: 91.6666666667% } .col-xs-pull-12 { right: 100% } .col-xs-push-0 { left: auto } .col-xs-push-1 { left: 8.3333333333% } .col-xs-push-2 { left: 16.6666666667% } .col-xs-push-3 { left: 25% } .col-xs-push-4 { left: 33.3333333333% } .col-xs-push-5 { left: 41.6666666667% } .col-xs-push-6 { left: 50% } .col-xs-push-7 { left: 58.3333333333% } .col-xs-push-8 { left: 66.6666666667% } .col-xs-push-9 { left: 75% } .col-xs-push-10 { left: 83.3333333333% } .col-xs-push-11 { left: 91.6666666667% } .col-xs-push-12 { left: 100% } .col-xs-offset-0 { margin-left: 0 } .col-xs-offset-1 { margin-left: 8.3333333333% } .col-xs-offset-2 { margin-left: 16.6666666667% } .col-xs-offset-3 { margin-left: 25% } .col-xs-offset-4 { margin-left: 33.3333333333% } .col-xs-offset-5 { margin-left: 41.6666666667% } .col-xs-offset-6 { margin-left: 50% } .col-xs-offset-7 { margin-left: 58.3333333333% } .col-xs-offset-8 { margin-left: 66.6666666667% } .col-xs-offset-9 { margin-left: 75% } .col-xs-offset-10 { margin-left: 83.3333333333% } .col-xs-offset-11 { margin-left: 91.6666666667% } .col-xs-offset-12 { margin-left: 100% } @media(min-width:768px) { .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left } .col-sm-1 { width: 8.3333333333% } .col-sm-2 { width: 16.6666666667% } .col-sm-3 { width: 25% } .col-sm-4 { width: 33.3333333333% } .col-sm-5 { width: 41.6666666667% } .col-sm-6 { width: 50% } .col-sm-7 { width: 58.3333333333% } .col-sm-8 { width: 66.6666666667% } .col-sm-9 { width: 75% } .col-sm-10 { width: 83.3333333333% } .col-sm-11 { width: 91.6666666667% } .col-sm-12 { width: 100% } .col-sm-pull-0 { right: auto } .col-sm-pull-1 { right: 8.3333333333% } .col-sm-pull-2 { right: 16.6666666667% } .col-sm-pull-3 { right: 25% } .col-sm-pull-4 { right: 33.3333333333% } .col-sm-pull-5 { right: 41.6666666667% } .col-sm-pull-6 { right: 50% } .col-sm-pull-7 { right: 58.3333333333% } .col-sm-pull-8 { right: 66.6666666667% } .col-sm-pull-9 { right: 75% } .col-sm-pull-10 { right: 83.3333333333% } .col-sm-pull-11 { right: 91.6666666667% } .col-sm-pull-12 { right: 100% } .col-sm-push-0 { left: auto } .col-sm-push-1 { left: 8.3333333333% } .col-sm-push-2 { left: 16.6666666667% } .col-sm-push-3 { left: 25% } .col-sm-push-4 { left: 33.3333333333% } .col-sm-push-5 { left: 41.6666666667% } .col-sm-push-6 { left: 50% } .col-sm-push-7 { left: 58.3333333333% } .col-sm-push-8 { left: 66.6666666667% } .col-sm-push-9 { left: 75% } .col-sm-push-10 { left: 83.3333333333% } .col-sm-push-11 { left: 91.6666666667% } .col-sm-push-12 { left: 100% } .col-sm-offset-0 { margin-left: 0 } .col-sm-offset-1 { margin-left: 8.3333333333% } .col-sm-offset-2 { margin-left: 16.6666666667% } .col-sm-offset-3 { margin-left: 25% } .col-sm-offset-4 { margin-left: 33.3333333333% } .col-sm-offset-5 { margin-left: 41.6666666667% } .col-sm-offset-6 { margin-left: 50% } .col-sm-offset-7 { margin-left: 58.3333333333% } .col-sm-offset-8 { margin-left: 66.6666666667% } .col-sm-offset-9 { margin-left: 75% } .col-sm-offset-10 { margin-left: 83.3333333333% } .col-sm-offset-11 { margin-left: 91.6666666667% } .col-sm-offset-12 { margin-left: 100% } } @media(min-width:992px) { .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left } .col-md-1 { width: 8.3333333333% } .col-md-2 { width: 16.6666666667% } .col-md-3 { width: 25% } .col-md-4 { width: 33.3333333333% } .col-md-5 { width: 41.6666666667% } .col-md-6 { width: 50% } .col-md-7 { width: 58.3333333333% } .col-md-8 { width: 66.6666666667% } .col-md-9 { width: 75% } .col-md-10 { width: 83.3333333333% } .col-md-11 { width: 91.6666666667% } .col-md-12 { width: 100% } .col-md-pull-0 { right: auto } .col-md-pull-1 { right: 8.3333333333% } .col-md-pull-2 { right: 16.6666666667% } .col-md-pull-3 { right: 25% } .col-md-pull-4 { right: 33.3333333333% } .col-md-pull-5 { right: 41.6666666667% } .col-md-pull-6 { right: 50% } .col-md-pull-7 { right: 58.3333333333% } .col-md-pull-8 { right: 66.6666666667% } .col-md-pull-9 { right: 75% } .col-md-pull-10 { right: 83.3333333333% } .col-md-pull-11 { right: 91.6666666667% } .col-md-pull-12 { right: 100% } .col-md-push-0 { left: auto } .col-md-push-1 { left: 8.3333333333% } .col-md-push-2 { left: 16.6666666667% } .col-md-push-3 { left: 25% } .col-md-push-4 { left: 33.3333333333% } .col-md-push-5 { left: 41.6666666667% } .col-md-push-6 { left: 50% } .col-md-push-7 { left: 58.3333333333% } .col-md-push-8 { left: 66.6666666667% } .col-md-push-9 { left: 75% } .col-md-push-10 { left: 83.3333333333% } .col-md-push-11 { left: 91.6666666667% } .col-md-push-12 { left: 100% } .col-md-offset-0 { margin-left: 0 } .col-md-offset-1 { margin-left: 8.3333333333% } .col-md-offset-2 { margin-left: 16.6666666667% } .col-md-offset-3 { margin-left: 25% } .col-md-offset-4 { margin-left: 33.3333333333% } .col-md-offset-5 { margin-left: 41.6666666667% } .col-md-offset-6 { margin-left: 50% } .col-md-offset-7 { margin-left: 58.3333333333% } .col-md-offset-8 { margin-left: 66.6666666667% } .col-md-offset-9 { margin-left: 75% } .col-md-offset-10 { margin-left: 83.3333333333% } .col-md-offset-11 { margin-left: 91.6666666667% } .col-md-offset-12 { margin-left: 100% } } @media(min-width:1200px) { .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { float: left } .col-lg-1 { width: 8.3333333333% } .col-lg-2 { width: 16.6666666667% } .col-lg-3 { width: 25% } .col-lg-4 { width: 33.3333333333% } .col-lg-5 { width: 41.6666666667% } .col-lg-6 { width: 50% } .col-lg-7 { width: 58.3333333333% } .col-lg-8 { width: 66.6666666667% } .col-lg-9 { width: 75% } .col-lg-10 { width: 83.3333333333% } .col-lg-11 { width: 91.6666666667% } .col-lg-12 { width: 100% } .col-lg-pull-0 { right: auto } .col-lg-pull-1 { right: 8.3333333333% } .col-lg-pull-2 { right: 16.6666666667% } .col-lg-pull-3 { right: 25% } .col-lg-pull-4 { right: 33.3333333333% } .col-lg-pull-5 { right: 41.6666666667% } .col-lg-pull-6 { right: 50% } .col-lg-pull-7 { right: 58.3333333333% } .col-lg-pull-8 { right: 66.6666666667% } .col-lg-pull-9 { right: 75% } .col-lg-pull-10 { right: 83.3333333333% } .col-lg-pull-11 { right: 91.6666666667% } .col-lg-pull-12 { right: 100% } .col-lg-push-0 { left: auto } .col-lg-push-1 { left: 8.3333333333% } .col-lg-push-2 { left: 16.6666666667% } .col-lg-push-3 { left: 25% } .col-lg-push-4 { left: 33.3333333333% } .col-lg-push-5 { left: 41.6666666667% } .col-lg-push-6 { left: 50% } .col-lg-push-7 { left: 58.3333333333% } .col-lg-push-8 { left: 66.6666666667% } .col-lg-push-9 { left: 75% } .col-lg-push-10 { left: 83.3333333333% } .col-lg-push-11 { left: 91.6666666667% } .col-lg-push-12 { left: 100% } .col-lg-offset-0 { margin-left: 0 } .col-lg-offset-1 { margin-left: 8.3333333333% } .col-lg-offset-2 { margin-left: 16.6666666667% } .col-lg-offset-3 { margin-left: 25% } .col-lg-offset-4 { margin-left: 33.3333333333% } .col-lg-offset-5 { margin-left: 41.6666666667% } .col-lg-offset-6 { margin-left: 50% } .col-lg-offset-7 { margin-left: 58.3333333333% } .col-lg-offset-8 { margin-left: 66.6666666667% } .col-lg-offset-9 { margin-left: 75% } .col-lg-offset-10 { margin-left: 83.3333333333% } .col-lg-offset-11 { margin-left: 91.6666666667% } .col-lg-offset-12 { margin-left: 100% } } table { background-color: initial } table col[class*=col-] { position: static; display: table-column; float: none } table td[class*=col-], table th[class*=col-] { position: static; display: table-cell; float: none } caption { padding-top: 8px; padding-bottom: 8px; color: #777 } caption, th { text-align: left } .table { width: 100%; max-width: 100%; margin-bottom: 20px } .table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { padding: 8px; line-height: 1.428571429; vertical-align: top; border-top: 1px solid #ddd } .table>thead>tr>th { vertical-align: bottom; border-bottom: 2px solid #ddd } .table>caption+thead>tr:first-child>td, .table>caption+thead>tr:first-child>th, .table>colgroup+thead>tr:first-child>td, .table>colgroup+thead>tr:first-child>th, .table>thead:first-child>tr:first-child>td, .table>thead:first-child>tr:first-child>th { border-top: 0 } .table>tbody+tbody { border-top: 2px solid #ddd } .table .table { background-color: #fff } .table-condensed>tbody>tr>td, .table-condensed>tbody>tr>th, .table-condensed>tfoot>tr>td, .table-condensed>tfoot>tr>th, .table-condensed>thead>tr>td, .table-condensed>thead>tr>th { padding: 5px } .table-bordered, .table-bordered>tbody>tr>td, .table-bordered>tbody>tr>th, .table-bordered>tfoot>tr>td, .table-bordered>tfoot>tr>th, .table-bordered>thead>tr>td, .table-bordered>thead>tr>th { border: 1px solid #ddd } .table-bordered>thead>tr>td, .table-bordered>thead>tr>th { border-bottom-width: 2px } .table-striped>tbody>tr:nth-of-type(odd) { background-color: #f9f9f9 } .table-hover>tbody>tr:hover, .table>tbody>tr.active>td, .table>tbody>tr.active>th, .table>tbody>tr>td.active, .table>tbody>tr>th.active, .table>tfoot>tr.active>td, .table>tfoot>tr.active>th, .table>tfoot>tr>td.active, .table>tfoot>tr>th.active, .table>thead>tr.active>td, .table>thead>tr.active>th, .table>thead>tr>td.active, .table>thead>tr>th.active { background-color: #f5f5f5 } .table-hover>tbody>tr.active:hover>td, .table-hover>tbody>tr.active:hover>th, .table-hover>tbody>tr:hover>.active, .table-hover>tbody>tr>td.active:hover, .table-hover>tbody>tr>th.active:hover { background-color: #e8e8e8 } .table>tbody>tr.success>td, .table>tbody>tr.success>th, .table>tbody>tr>td.success, .table>tbody>tr>th.success, .table>tfoot>tr.success>td, .table>tfoot>tr.success>th, .table>tfoot>tr>td.success, .table>tfoot>tr>th.success, .table>thead>tr.success>td, .table>thead>tr.success>th, .table>thead>tr>td.success, .table>thead>tr>th.success { background-color: #dff0d8 } .table-hover>tbody>tr.success:hover>td, .table-hover>tbody>tr.success:hover>th, .table-hover>tbody>tr:hover>.success, .table-hover>tbody>tr>td.success:hover, .table-hover>tbody>tr>th.success:hover { background-color: #d0e9c6 } .table>tbody>tr.info>td, .table>tbody>tr.info>th, .table>tbody>tr>td.info, .table>tbody>tr>th.info, .table>tfoot>tr.info>td, .table>tfoot>tr.info>th, .table>tfoot>tr>td.info, .table>tfoot>tr>th.info, .table>thead>tr.info>td, .table>thead>tr.info>th, .table>thead>tr>td.info, .table>thead>tr>th.info { background-color: #d9edf7 } .table-hover>tbody>tr.info:hover>td, .table-hover>tbody>tr.info:hover>th, .table-hover>tbody>tr:hover>.info, .table-hover>tbody>tr>td.info:hover, .table-hover>tbody>tr>th.info:hover { background-color: #c4e3f3 } .table>tbody>tr.warning>td, .table>tbody>tr.warning>th, .table>tbody>tr>td.warning, .table>tbody>tr>th.warning, .table>tfoot>tr.warning>td, .table>tfoot>tr.warning>th, .table>tfoot>tr>td.warning, .table>tfoot>tr>th.warning, .table>thead>tr.warning>td, .table>thead>tr.warning>th, .table>thead>tr>td.warning, .table>thead>tr>th.warning { background-color: #fcf8e3 } .table-hover>tbody>tr.warning:hover>td, .table-hover>tbody>tr.warning:hover>th, .table-hover>tbody>tr:hover>.warning, .table-hover>tbody>tr>td.warning:hover, .table-hover>tbody>tr>th.warning:hover { background-color: #faf2cc } .table>tbody>tr.danger>td, .table>tbody>tr.danger>th, .table>tbody>tr>td.danger, .table>tbody>tr>th.danger, .table>tfoot>tr.danger>td, .table>tfoot>tr.danger>th, .table>tfoot>tr>td.danger, .table>tfoot>tr>th.danger, .table>thead>tr.danger>td, .table>thead>tr.danger>th, .table>thead>tr>td.danger, .table>thead>tr>th.danger { background-color: #f2dede } .table-hover>tbody>tr.danger:hover>td, .table-hover>tbody>tr.danger:hover>th, .table-hover>tbody>tr:hover>.danger, .table-hover>tbody>tr>td.danger:hover, .table-hover>tbody>tr>th.danger:hover { background-color: #ebcccc } .table-responsive { min-height: .01%; overflow-x: auto } @media screen and (max-width:767px) { .table-responsive { width: 100%; margin-bottom: 15px; overflow-y: hidden; -ms-overflow-style: -ms-autohiding-scrollbar; border: 1px solid #ddd } .table-responsive>.table { margin-bottom: 0 } .table-responsive>.table>tbody>tr>td, .table-responsive>.table>tbody>tr>th, .table-responsive>.table>tfoot>tr>td, .table-responsive>.table>tfoot>tr>th, .table-responsive>.table>thead>tr>td, .table-responsive>.table>thead>tr>th { white-space: nowrap } .table-responsive>.table-bordered { border: 0 } .table-responsive>.table-bordered>tbody>tr>td:first-child, .table-responsive>.table-bordered>tbody>tr>th:first-child, .table-responsive>.table-bordered>tfoot>tr>td:first-child, .table-responsive>.table-bordered>tfoot>tr>th:first-child, .table-responsive>.table-bordered>thead>tr>td:first-child, .table-responsive>.table-bordered>thead>tr>th:first-child { border-left: 0 } .table-responsive>.table-bordered>tbody>tr>td:last-child, .table-responsive>.table-bordered>tbody>tr>th:last-child, .table-responsive>.table-bordered>tfoot>tr>td:last-child, .table-responsive>.table-bordered>tfoot>tr>th:last-child, .table-responsive>.table-bordered>thead>tr>td:last-child, .table-responsive>.table-bordered>thead>tr>th:last-child { border-right: 0 } .table-responsive>.table-bordered>tbody>tr:last-child>td, .table-responsive>.table-bordered>tbody>tr:last-child>th, .table-responsive>.table-bordered>tfoot>tr:last-child>td, .table-responsive>.table-bordered>tfoot>tr:last-child>th { border-bottom: 0 } } fieldset { min-width: 0; padding: 0; margin: 0; border: 0 } legend { display: block; width: 100%; margin-bottom: 20px; font-size: 21px; line-height: inherit; color: #333; border: 0; border-bottom: 1px solid #e5e5e5 } label { display: inline-block; max-width: 100%; margin-bottom: 5px; font-weight: 700 } input[type=search] { box-sizing: border-box; -webkit-appearance: none; -moz-appearance: none; appearance: none } input[type=checkbox], input[type=radio] { margin: 4px 0 0; margin-top: 1px\9; line-height: normal } fieldset[disabled] input[type=checkbox], fieldset[disabled] input[type=radio], input[type=checkbox].disabled, input[type=checkbox][disabled], input[type=radio].disabled, input[type=radio][disabled] { cursor: not-allowed } input[type=file] { display: block } input[type=range] { display: block; width: 100% } select[multiple], select[size] { height: auto } input[type=checkbox]:focus, input[type=file]:focus, input[type=radio]:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px } output { padding-top: 7px } .form-control, output { display: block; font-size: 14px; line-height: 1.428571429; color: #555 } .form-control { width: 100%; height: 34px; padding: 6px 12px; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out } .form-control:focus { border-color: #66afe9; outline: 0; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6) } .form-control::-moz-placeholder { color: #999; opacity: 1 } .form-control:-ms-input-placeholder { color: #999 } .form-control::-webkit-input-placeholder { color: #999 } .form-control::-ms-expand { background-color: initial; border: 0 } .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { background-color: #eee; opacity: 1 } .form-control[disabled], fieldset[disabled] .form-control { cursor: not-allowed } textarea.form-control { height: auto } @media screen and (-webkit-min-device-pixel-ratio:0) { input[type=date].form-control, input[type=datetime-local].form-control, input[type=month].form-control, input[type=time].form-control { line-height: 34px } .input-group-sm>.input-group-btn>input[type=date].btn, .input-group-sm>.input-group-btn>input[type=datetime-local].btn, .input-group-sm>.input-group-btn>input[type=month].btn, .input-group-sm>.input-group-btn>input[type=time].btn, .input-group-sm input[type=date], .input-group-sm input[type=datetime-local], .input-group-sm input[type=month], .input-group-sm input[type=time], input[type=date].input-sm, input[type=datetime-local].input-sm, input[type=month].input-sm, input[type=time].input-sm { line-height: 30px } .input-group-lg>.input-group-btn>input[type=date].btn, .input-group-lg>.input-group-btn>input[type=datetime-local].btn, .input-group-lg>.input-group-btn>input[type=month].btn, .input-group-lg>.input-group-btn>input[type=time].btn, .input-group-lg input[type=date], .input-group-lg input[type=datetime-local], .input-group-lg input[type=month], .input-group-lg input[type=time], input[type=date].input-lg, input[type=datetime-local].input-lg, input[type=month].input-lg, input[type=time].input-lg { line-height: 46px } } .form-group { margin-bottom: 15px } .checkbox, .radio { position: relative; display: block; margin-top: 10px; margin-bottom: 10px } .checkbox.disabled label, .radio.disabled label, fieldset[disabled] .checkbox label, fieldset[disabled] .radio label { cursor: not-allowed } .checkbox label, .radio label { min-height: 20px; padding-left: 20px; margin-bottom: 0; font-weight: 400; cursor: pointer } .checkbox-inline input[type=checkbox], .checkbox input[type=checkbox], .radio-inline input[type=radio], .radio input[type=radio] { position: absolute; margin-top: 4px\9; margin-left: -20px } .checkbox+.checkbox, .radio+.radio { margin-top: -5px } .checkbox-inline, .radio-inline { position: relative; display: inline-block; padding-left: 20px; margin-bottom: 0; font-weight: 400; vertical-align: middle; cursor: pointer } .checkbox-inline.disabled, .radio-inline.disabled, fieldset[disabled] .checkbox-inline, fieldset[disabled] .radio-inline { cursor: not-allowed } .checkbox-inline+.checkbox-inline, .radio-inline+.radio-inline { margin-top: 0; margin-left: 10px } .form-control-static { min-height: 34px; padding-top: 7px; padding-bottom: 7px; margin-bottom: 0 } .form-control-static.input-lg, .form-control-static.input-sm, .input-group-lg>.form-control-static.form-control, .input-group-lg>.form-control-static.input-group-addon, .input-group-lg>.input-group-btn>.form-control-static.btn, .input-group-sm>.form-control-static.form-control, .input-group-sm>.form-control-static.input-group-addon, .input-group-sm>.input-group-btn>.form-control-static.btn { padding-right: 0; padding-left: 0 } .input-group-sm>.form-control, .input-group-sm>.input-group-addon, .input-group-sm>.input-group-btn>.btn, .input-sm { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px } .input-group-sm>.input-group-btn>select.btn, .input-group-sm>select.form-control, .input-group-sm>select.input-group-addon, select.input-sm { height: 30px; line-height: 30px } .input-group-sm>.input-group-btn>select[multiple].btn, .input-group-sm>.input-group-btn>textarea.btn, .input-group-sm>select[multiple].form-control, .input-group-sm>select[multiple].input-group-addon, .input-group-sm>textarea.form-control, .input-group-sm>textarea.input-group-addon, select[multiple].input-sm, textarea.input-sm { height: auto } .form-group-sm .form-control { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px } .form-group-sm select.form-control { height: 30px; line-height: 30px } .form-group-sm select[multiple].form-control, .form-group-sm textarea.form-control { height: auto } .form-group-sm .form-control-static { height: 30px; min-height: 32px; padding: 6px 10px; font-size: 12px; line-height: 1.5 } .input-group-lg>.form-control, .input-group-lg>.input-group-addon, .input-group-lg>.input-group-btn>.btn, .input-lg { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px } .input-group-lg>.input-group-btn>select.btn, .input-group-lg>select.form-control, .input-group-lg>select.input-group-addon, select.input-lg { height: 46px; line-height: 46px } .input-group-lg>.input-group-btn>select[multiple].btn, .input-group-lg>.input-group-btn>textarea.btn, .input-group-lg>select[multiple].form-control, .input-group-lg>select[multiple].input-group-addon, .input-group-lg>textarea.form-control, .input-group-lg>textarea.input-group-addon, select[multiple].input-lg, textarea.input-lg { height: auto } .form-group-lg .form-control { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px } .form-group-lg select.form-control { height: 46px; line-height: 46px } .form-group-lg select[multiple].form-control, .form-group-lg textarea.form-control { height: auto } .form-group-lg .form-control-static { height: 46px; min-height: 38px; padding: 11px 16px; font-size: 18px; line-height: 1.3333333 } .has-feedback { position: relative } .has-feedback .form-control { padding-right: 42.5px } .form-control-feedback { position: absolute; top: 0; right: 0; z-index: 2; display: block; width: 34px; height: 34px; line-height: 34px; text-align: center; pointer-events: none } .form-group-lg .form-control+.form-control-feedback, .input-group-lg+.form-control-feedback, .input-group-lg>.form-control+.form-control-feedback, .input-group-lg>.input-group-addon+.form-control-feedback, .input-group-lg>.input-group-btn>.btn+.form-control-feedback, .input-lg+.form-control-feedback { width: 46px; height: 46px; line-height: 46px } .form-group-sm .form-control+.form-control-feedback, .input-group-sm+.form-control-feedback, .input-group-sm>.form-control+.form-control-feedback, .input-group-sm>.input-group-addon+.form-control-feedback, .input-group-sm>.input-group-btn>.btn+.form-control-feedback, .input-sm+.form-control-feedback { width: 30px; height: 30px; line-height: 30px } .has-success .checkbox, .has-success .checkbox-inline, .has-success.checkbox-inline label, .has-success.checkbox label, .has-success .control-label, .has-success .help-block, .has-success .radio, .has-success .radio-inline, .has-success.radio-inline label, .has-success.radio label { color: #3c763d } .has-success .form-control { border-color: #3c763d; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) } .has-success .form-control:focus { border-color: #2b542c; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168 } .has-success .input-group-addon { color: #3c763d; background-color: #dff0d8; border-color: #3c763d } .has-success .form-control-feedback { color: #3c763d } .has-warning .checkbox, .has-warning .checkbox-inline, .has-warning.checkbox-inline label, .has-warning.checkbox label, .has-warning .control-label, .has-warning .help-block, .has-warning .radio, .has-warning .radio-inline, .has-warning.radio-inline label, .has-warning.radio label { color: #8a6d3b } .has-warning .form-control { border-color: #8a6d3b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) } .has-warning .form-control:focus { border-color: #66512c; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b } .has-warning .input-group-addon { color: #8a6d3b; background-color: #fcf8e3; border-color: #8a6d3b } .has-warning .form-control-feedback { color: #8a6d3b } .has-error .checkbox, .has-error .checkbox-inline, .has-error.checkbox-inline label, .has-error.checkbox label, .has-error .control-label, .has-error .help-block, .has-error .radio, .has-error .radio-inline, .has-error.radio-inline label, .has-error.radio label { color: #a94442 } .has-error .form-control { border-color: #a94442; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) } .has-error .form-control:focus { border-color: #843534; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483 } .has-error .input-group-addon { color: #a94442; background-color: #f2dede; border-color: #a94442 } .has-error .form-control-feedback { color: #a94442 } .has-feedback label~.form-control-feedback { top: 25px } .has-feedback label.sr-only~.form-control-feedback { top: 0 } .help-block { display: block; margin-top: 5px; margin-bottom: 10px; color: #737373 } @media(min-width:768px) { .form-inline .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle } .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle } .form-inline .form-control-static { display: inline-block } .form-inline .input-group { display: inline-table; vertical-align: middle } .form-inline .input-group .form-control, .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn { width: auto } .form-inline .input-group>.form-control { width: 100% } .form-inline .control-label { margin-bottom: 0; vertical-align: middle } .form-inline .checkbox, .form-inline .radio { display: inline-block; margin-top: 0; margin-bottom: 0; vertical-align: middle } .form-inline .checkbox label, .form-inline .radio label { padding-left: 0 } .form-inline .checkbox input[type=checkbox], .form-inline .radio input[type=radio] { position: relative; margin-left: 0 } .form-inline .has-feedback .form-control-feedback { top: 0 } } .form-horizontal .checkbox, .form-horizontal .checkbox-inline, .form-horizontal .radio, .form-horizontal .radio-inline { padding-top: 7px; margin-top: 0; margin-bottom: 0 } .form-horizontal .checkbox, .form-horizontal .radio { min-height: 27px } .form-horizontal .form-group { margin-right: -15px; margin-left: -15px } .form-horizontal .form-group:after, .form-horizontal .form-group:before { display: table; content: " " } .form-horizontal .form-group:after { clear: both } @media(min-width:768px) { .form-horizontal .control-label { padding-top: 7px; margin-bottom: 0; text-align: right } } .form-horizontal .has-feedback .form-control-feedback { right: 15px } @media(min-width:768px) { .form-horizontal .form-group-lg .control-label { padding-top: 11px; font-size: 18px } } @media(min-width:768px) { .form-horizontal .form-group-sm .control-label { padding-top: 6px; font-size: 12px } } .btn { display: inline-block; margin-bottom: 0; font-weight: 400; text-align: center; white-space: nowrap; vertical-align: middle; touch-action: manipulation; cursor: pointer; background-image: none; border: 1px solid transparent; padding: 6px 12px; font-size: 14px; line-height: 1.428571429; border-radius: 4px; -webkit-user-select: none; user-select: none } .btn.active.focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn:active:focus, .btn:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px } .btn.focus, .btn:focus, .btn:hover { color: #333; text-decoration: none } .btn.active, .btn:active { background-image: none; outline: 0; box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125) } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { cursor: not-allowed; filter: alpha(opacity=65); opacity: .65; box-shadow: none } a.btn.disabled, fieldset[disabled] a.btn { pointer-events: none } .btn-default { color: #333; background-color: #fff; border-color: #ccc } .btn-default.focus, .btn-default:focus { color: #333; background-color: #e6e6e6; border-color: #8c8c8c } .btn-default:hover { color: #333; background-color: #e6e6e6; border-color: #adadad } .btn-default.active, .btn-default:active, .open>.btn-default.dropdown-toggle { color: #333; background-color: #e6e6e6; background-image: none; border-color: #adadad } .btn-default.active.focus, .btn-default.active:focus, .btn-default.active:hover, .btn-default:active.focus, .btn-default:active:focus, .btn-default:active:hover, .open>.btn-default.dropdown-toggle.focus, .open>.btn-default.dropdown-toggle:focus, .open>.btn-default.dropdown-toggle:hover { color: #333; background-color: #d4d4d4; border-color: #8c8c8c } .btn-default.disabled.focus, .btn-default.disabled:focus, .btn-default.disabled:hover, .btn-default[disabled].focus, .btn-default[disabled]:focus, .btn-default[disabled]:hover, fieldset[disabled] .btn-default.focus, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:hover { background-color: #fff; border-color: #ccc } .btn-default .badge { color: #fff; background-color: #333 } .btn-primary { color: #fff; background-color: #337ab7; border-color: #2e6da4 } .btn-primary.focus, .btn-primary:focus { color: #fff; background-color: #286090; border-color: #122b40 } .btn-primary:hover { color: #fff; background-color: #286090; border-color: #204d74 } .btn-primary.active, .btn-primary:active, .open>.btn-primary.dropdown-toggle { color: #fff; background-color: #286090; background-image: none; border-color: #204d74 } .btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover, .btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover, .open>.btn-primary.dropdown-toggle.focus, .open>.btn-primary.dropdown-toggle:focus, .open>.btn-primary.dropdown-toggle:hover { color: #fff; background-color: #204d74; border-color: #122b40 } .btn-primary.disabled.focus, .btn-primary.disabled:focus, .btn-primary.disabled:hover, .btn-primary[disabled].focus, .btn-primary[disabled]:focus, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary.focus, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:hover { background-color: #337ab7; border-color: #2e6da4 } .btn-primary .badge { color: #337ab7; background-color: #fff } .btn-success { color: #fff; background-color: #5cb85c; border-color: #4cae4c } .btn-success.focus, .btn-success:focus { color: #fff; background-color: #449d44; border-color: #255625 } .btn-success:hover { color: #fff; background-color: #449d44; border-color: #398439 } .btn-success.active, .btn-success:active, .open>.btn-success.dropdown-toggle { color: #fff; background-color: #449d44; background-image: none; border-color: #398439 } .btn-success.active.focus, .btn-success.active:focus, .btn-success.active:hover, .btn-success:active.focus, .btn-success:active:focus, .btn-success:active:hover, .open>.btn-success.dropdown-toggle.focus, .open>.btn-success.dropdown-toggle:focus, .open>.btn-success.dropdown-toggle:hover { color: #fff; background-color: #398439; border-color: #255625 } .btn-success.disabled.focus, .btn-success.disabled:focus, .btn-success.disabled:hover, .btn-success[disabled].focus, .btn-success[disabled]:focus, .btn-success[disabled]:hover, fieldset[disabled] .btn-success.focus, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:hover { background-color: #5cb85c; border-color: #4cae4c } .btn-success .badge { color: #5cb85c; background-color: #fff } .btn-info { color: #fff; background-color: #5bc0de; border-color: #46b8da } .btn-info.focus, .btn-info:focus { color: #fff; background-color: #31b0d5; border-color: #1b6d85 } .btn-info:hover { color: #fff; background-color: #31b0d5; border-color: #269abc } .btn-info.active, .btn-info:active, .open>.btn-info.dropdown-toggle { color: #fff; background-color: #31b0d5; background-image: none; border-color: #269abc } .btn-info.active.focus, .btn-info.active:focus, .btn-info.active:hover, .btn-info:active.focus, .btn-info:active:focus, .btn-info:active:hover, .open>.btn-info.dropdown-toggle.focus, .open>.btn-info.dropdown-toggle:focus, .open>.btn-info.dropdown-toggle:hover { color: #fff; background-color: #269abc; border-color: #1b6d85 } .btn-info.disabled.focus, .btn-info.disabled:focus, .btn-info.disabled:hover, .btn-info[disabled].focus, .btn-info[disabled]:focus, .btn-info[disabled]:hover, fieldset[disabled] .btn-info.focus, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:hover { background-color: #5bc0de; border-color: #46b8da } .btn-info .badge { color: #5bc0de; background-color: #fff } .btn-warning { color: #fff; background-color: #f0ad4e; border-color: #eea236 } .btn-warning.focus, .btn-warning:focus { color: #fff; background-color: #ec971f; border-color: #985f0d } .btn-warning:hover { color: #fff; background-color: #ec971f; border-color: #d58512 } .btn-warning.active, .btn-warning:active, .open>.btn-warning.dropdown-toggle { color: #fff; background-color: #ec971f; background-image: none; border-color: #d58512 } .btn-warning.active.focus, .btn-warning.active:focus, .btn-warning.active:hover, .btn-warning:active.focus, .btn-warning:active:focus, .btn-warning:active:hover, .open>.btn-warning.dropdown-toggle.focus, .open>.btn-warning.dropdown-toggle:focus, .open>.btn-warning.dropdown-toggle:hover { color: #fff; background-color: #d58512; border-color: #985f0d } .btn-warning.disabled.focus, .btn-warning.disabled:focus, .btn-warning.disabled:hover, .btn-warning[disabled].focus, .btn-warning[disabled]:focus, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning.focus, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:hover { background-color: #f0ad4e; border-color: #eea236 } .btn-warning .badge { color: #f0ad4e; background-color: #fff } .btn-danger { color: #fff; background-color: #d9534f; border-color: #d43f3a } .btn-danger.focus, .btn-danger:focus { color: #fff; background-color: #c9302c; border-color: #761c19 } .btn-danger:hover { color: #fff; background-color: #c9302c; border-color: #ac2925 } .btn-danger.active, .btn-danger:active, .open>.btn-danger.dropdown-toggle { color: #fff; background-color: #c9302c; background-image: none; border-color: #ac2925 } .btn-danger.active.focus, .btn-danger.active:focus, .btn-danger.active:hover, .btn-danger:active.focus, .btn-danger:active:focus, .btn-danger:active:hover, .open>.btn-danger.dropdown-toggle.focus, .open>.btn-danger.dropdown-toggle:focus, .open>.btn-danger.dropdown-toggle:hover { color: #fff; background-color: #ac2925; border-color: #761c19 } .btn-danger.disabled.focus, .btn-danger.disabled:focus, .btn-danger.disabled:hover, .btn-danger[disabled].focus, .btn-danger[disabled]:focus, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger.focus, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:hover { background-color: #d9534f; border-color: #d43f3a } .btn-danger .badge { color: #d9534f; background-color: #fff } .btn-link { font-weight: 400; color: #337ab7; border-radius: 0 } .btn-link, .btn-link.active, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: initial; box-shadow: none } .btn-link, .btn-link:active, .btn-link:focus, .btn-link:hover { border-color: transparent } .btn-link:focus, .btn-link:hover { color: #23527c; text-decoration: underline; background-color: initial } .btn-link[disabled]:focus, .btn-link[disabled]:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:hover { color: #777; text-decoration: none } .btn-group-lg>.btn, .btn-lg { padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px } .btn-group-sm>.btn, .btn-sm { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px } .btn-group-xs>.btn, .btn-xs { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 3px } .btn-block { display: block; width: 100% } .btn-block+.btn-block { margin-top: 5px } input[type=button].btn-block, input[type=reset].btn-block, input[type=submit].btn-block { width: 100% } .fade { opacity: 0; transition: opacity .15s linear } .fade.in { opacity: 1 } .collapse { display: none } .collapse.in { display: block } tr.collapse.in { display: table-row } tbody.collapse.in { display: table-row-group } .collapsing { position: relative; height: 0; overflow: hidden; transition-property: height, visibility; transition-duration: .35s; transition-timing-function: ease } .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; border-top: 4px dashed; border-top: 4px solid\9; border-right: 4px solid transparent; border-left: 4px solid transparent } .dropdown, .dropup { position: relative } .dropdown-toggle:focus { outline: 0 } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; font-size: 14px; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, .15); border-radius: 4px; box-shadow: 0 6px 12px rgba(0, 0, 0, .175) } .dropdown-menu.pull-right { right: 0; left: auto } .dropdown-menu .divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5 } .dropdown-menu>li>a { display: block; padding: 3px 20px; clear: both; font-weight: 400; line-height: 1.428571429; color: #333; white-space: nowrap } .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover { color: #262626; text-decoration: none; background-color: #f5f5f5 } .dropdown-menu>.active>a, .dropdown-menu>.active>a:focus, .dropdown-menu>.active>a:hover { color: #fff; text-decoration: none; background-color: #337ab7; outline: 0 } .dropdown-menu>.disabled>a, .dropdown-menu>.disabled>a:focus, .dropdown-menu>.disabled>a:hover { color: #777 } .dropdown-menu>.disabled>a:focus, .dropdown-menu>.disabled>a:hover { text-decoration: none; cursor: not-allowed; background-color: initial; background-image: none; filter: progid:DXImageTransform.Microsoft.gradient(enabled=false) } .open>.dropdown-menu { display: block } .open>a { outline: 0 } .dropdown-menu-right { right: 0; left: auto } .dropdown-menu-left { right: auto; left: 0 } .dropdown-header { display: block; padding: 3px 20px; font-size: 12px; line-height: 1.428571429; color: #777; white-space: nowrap } .dropdown-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 990 } .pull-right>.dropdown-menu { right: 0; left: auto } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { content: ""; border-top: 0; border-bottom: 4px dashed; border-bottom: 4px solid\9 } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 2px } @media(min-width:768px) { .navbar-right .dropdown-menu { right: 0; left: auto } .navbar-right .dropdown-menu-left { left: 0; right: auto } } .btn-group, .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle } .btn-group-vertical>.btn, .btn-group>.btn { position: relative; float: left } .btn-group-vertical>.btn.active, .btn-group-vertical>.btn:active, .btn-group-vertical>.btn:focus, .btn-group-vertical>.btn:hover, .btn-group>.btn.active, .btn-group>.btn:active, .btn-group>.btn:focus, .btn-group>.btn:hover { z-index: 2 } .btn-group .btn+.btn, .btn-group .btn+.btn-group, .btn-group .btn-group+.btn, .btn-group .btn-group+.btn-group { margin-left: -1px } .btn-toolbar { margin-left: -5px } .btn-toolbar:after, .btn-toolbar:before { display: table; content: " " } .btn-toolbar:after { clear: both } .btn-toolbar .btn, .btn-toolbar .btn-group, .btn-toolbar .input-group { float: left } .btn-toolbar>.btn, .btn-toolbar>.btn-group, .btn-toolbar>.input-group { margin-left: 5px } .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0 } .btn-group>.btn:first-child { margin-left: 0 } .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0 } .btn-group>.btn:last-child:not(:first-child), .btn-group>.dropdown-toggle:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0 } .btn-group>.btn-group { float: left } .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn { border-radius: 0 } .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child, .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle { border-top-right-radius: 0; border-bottom-right-radius: 0 } .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child { border-top-left-radius: 0; border-bottom-left-radius: 0 } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0 } .btn-group>.btn+.dropdown-toggle { padding-right: 8px; padding-left: 8px } .btn-group-lg.btn-group>.btn+.dropdown-toggle, .btn-group>.btn-lg+.dropdown-toggle { padding-right: 12px; padding-left: 12px } .btn-group.open .dropdown-toggle { box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125) } .btn-group.open .dropdown-toggle.btn-link { box-shadow: none } .btn .caret { margin-left: 0 } .btn-group-lg>.btn .caret, .btn-lg .caret { border-width: 5px 5px 0 } .dropup .btn-group-lg>.btn .caret, .dropup .btn-lg .caret { border-width: 0 5px 5px } .btn-group-vertical>.btn, .btn-group-vertical>.btn-group, .btn-group-vertical>.btn-group>.btn { display: block; float: none; width: 100%; max-width: 100% } .btn-group-vertical>.btn-group:after, .btn-group-vertical>.btn-group:before { display: table; content: " " } .btn-group-vertical>.btn-group:after { clear: both } .btn-group-vertical>.btn-group>.btn { float: none } .btn-group-vertical>.btn+.btn, .btn-group-vertical>.btn+.btn-group, .btn-group-vertical>.btn-group+.btn, .btn-group-vertical>.btn-group+.btn-group { margin-top: -1px; margin-left: 0 } .btn-group-vertical>.btn:not(:first-child):not(:last-child) { border-radius: 0 } .btn-group-vertical>.btn:first-child:not(:last-child) { border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0 } .btn-group-vertical>.btn:last-child:not(:first-child) { border-top-left-radius: 0; border-top-right-radius: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px } .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { border-radius: 0 } .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child, .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0 } .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child { border-top-left-radius: 0; border-top-right-radius: 0 } .btn-group-justified { display: table; width: 100%; table-layout: fixed; border-collapse: initial } .btn-group-justified>.btn, .btn-group-justified>.btn-group { display: table-cell; float: none; width: 1% } .btn-group-justified>.btn-group .btn { width: 100% } .btn-group-justified>.btn-group .dropdown-menu { left: auto } [data-toggle=buttons]>.btn-group>.btn input[type=checkbox], [data-toggle=buttons]>.btn-group>.btn input[type=radio], [data-toggle=buttons]>.btn input[type=checkbox], [data-toggle=buttons]>.btn input[type=radio] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none } .input-group { position: relative; display: table; border-collapse: initial } .input-group[class*=col-] { float: none; padding-right: 0; padding-left: 0 } .input-group .form-control { position: relative; z-index: 2; float: left; width: 100%; margin-bottom: 0 } .input-group .form-control:focus { z-index: 3 } .input-group-addon, .input-group-btn, .input-group .form-control { display: table-cell } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0 } .input-group-addon, .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle } .input-group-addon { padding: 6px 12px; font-size: 14px; font-weight: 400; line-height: 1; color: #555; text-align: center; background-color: #eee; border: 1px solid #ccc; border-radius: 4px } .input-group-addon.input-sm, .input-group-sm>.input-group-addon, .input-group-sm>.input-group-btn>.input-group-addon.btn { padding: 5px 10px; font-size: 12px; border-radius: 3px } .input-group-addon.input-lg, .input-group-lg>.input-group-addon, .input-group-lg>.input-group-btn>.input-group-addon.btn { padding: 10px 16px; font-size: 18px; border-radius: 6px } .input-group-addon input[type=checkbox], .input-group-addon input[type=radio] { margin-top: 0 } .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle), .input-group .form-control:first-child { border-top-right-radius: 0; border-bottom-right-radius: 0 } .input-group-addon:first-child { border-right: 0 } .input-group-addon:last-child, .input-group-btn:first-child>.btn-group:not(:first-child)>.btn, .input-group-btn:first-child>.btn:not(:first-child), .input-group-btn:last-child>.btn, .input-group-btn:last-child>.btn-group>.btn, .input-group-btn:last-child>.dropdown-toggle, .input-group .form-control:last-child { border-top-left-radius: 0; border-bottom-left-radius: 0 } .input-group-addon:last-child { border-left: 0 } .input-group-btn { font-size: 0; white-space: nowrap } .input-group-btn, .input-group-btn>.btn { position: relative } .input-group-btn>.btn+.btn { margin-left: -1px } .input-group-btn>.btn:active, .input-group-btn>.btn:focus, .input-group-btn>.btn:hover { z-index: 2 } .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group { margin-right: -1px } .input-group-btn:last-child>.btn, .input-group-btn:last-child>.btn-group { z-index: 2; margin-left: -1px } .nav { padding-left: 0; margin-bottom: 0; list-style: none } .nav:after, .nav:before { display: table; content: " " } .nav:after { clear: both } .nav>li, .nav>li>a { position: relative; display: block } .nav>li>a { padding: 10px 15px } .nav>li>a:focus, .nav>li>a:hover { text-decoration: none; background-color: #eee } .nav>li.disabled>a { color: #777 } .nav>li.disabled>a:focus, .nav>li.disabled>a:hover { color: #777; text-decoration: none; cursor: not-allowed; background-color: initial } .nav .open>a, .nav .open>a:focus, .nav .open>a:hover { background-color: #eee; border-color: #337ab7 } .nav .nav-divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5 } .nav>li>a>img { max-width: none } .nav-tabs { border-bottom: 1px solid #ddd } .nav-tabs>li { float: left; margin-bottom: -1px } .nav-tabs>li>a { margin-right: 2px; line-height: 1.428571429; border: 1px solid transparent; border-radius: 4px 4px 0 0 } .nav-tabs>li>a:hover { border-color: #eee #eee #ddd } .nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover { color: #555; cursor: default; background-color: #fff; border: 1px solid; border-color: #ddd #ddd transparent } .nav-pills>li { float: left } .nav-pills>li>a { border-radius: 4px } .nav-pills>li+li { margin-left: 2px } .nav-pills>li.active>a, .nav-pills>li.active>a:focus, .nav-pills>li.active>a:hover { color: #fff; background-color: #337ab7 } .nav-stacked>li { float: none } .nav-stacked>li+li { margin-top: 2px; margin-left: 0 } .nav-justified, .nav-tabs.nav-justified { width: 100% } .nav-justified>li, .nav-tabs.nav-justified>li { float: none } .nav-justified>li>a, .nav-tabs.nav-justified>li>a { margin-bottom: 5px; text-align: center } .nav-justified>.dropdown .dropdown-menu { top: auto; left: auto } @media(min-width:768px) { .nav-justified>li, .nav-tabs.nav-justified>li { display: table-cell; width: 1% } .nav-justified>li>a, .nav-tabs.nav-justified>li>a { margin-bottom: 0 } } .nav-tabs-justified, .nav-tabs.nav-justified { border-bottom: 0 } .nav-tabs-justified>li>a, .nav-tabs.nav-justified>li>a { margin-right: 0; border-radius: 4px } .nav-tabs-justified>.active>a, .nav-tabs-justified>.active>a:focus, .nav-tabs-justified>.active>a:hover, .nav-tabs.nav-justified>.active>a { border: 1px solid #ddd } @media(min-width:768px) { .nav-tabs-justified>li>a, .nav-tabs.nav-justified>li>a { border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0 } .nav-tabs-justified>.active>a, .nav-tabs-justified>.active>a:focus, .nav-tabs-justified>.active>a:hover, .nav-tabs.nav-justified>.active>a { border-bottom-color: #fff } } .tab-content>.tab-pane { display: none } .tab-content>.active { display: block } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0 } .navbar { position: relative; min-height: 50px; margin-bottom: 20px; border: 1px solid transparent } .navbar:after, .navbar:before { display: table; content: " " } .navbar:after { clear: both } @media(min-width:768px) { .navbar { border-radius: 4px } } .navbar-header:after, .navbar-header:before { display: table; content: " " } .navbar-header:after { clear: both } @media(min-width:768px) { .navbar-header { float: left } } .navbar-collapse { padding-right: 15px; padding-left: 15px; overflow-x: visible; border-top: 1px solid transparent; box-shadow: inset 0 1px 0 hsla(0, 0%, 100%, .1); -webkit-overflow-scrolling: touch } .navbar-collapse:after, .navbar-collapse:before { display: table; content: " " } .navbar-collapse:after { clear: both } .navbar-collapse.in { overflow-y: auto } @media(min-width:768px) { .navbar-collapse { width: auto; border-top: 0; box-shadow: none } .navbar-collapse.collapse { display: block !important; height: auto !important; padding-bottom: 0; overflow: visible !important } .navbar-collapse.in { overflow-y: visible } .navbar-fixed-bottom .navbar-collapse, .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse { padding-right: 0; padding-left: 0 } } .navbar-fixed-bottom, .navbar-fixed-top { position: fixed; right: 0; left: 0; z-index: 1030 } .navbar-fixed-bottom .navbar-collapse, .navbar-fixed-top .navbar-collapse { max-height: 340px } @media(max-device-width:480px)and (orientation:landscape) { .navbar-fixed-bottom .navbar-collapse, .navbar-fixed-top .navbar-collapse { max-height: 200px } } @media(min-width:768px) { .navbar-fixed-bottom, .navbar-fixed-top { border-radius: 0 } } .navbar-fixed-top { top: 0; border-width: 0 0 1px } .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; border-width: 1px 0 0 } .container-fluid>.navbar-collapse, .container-fluid>.navbar-header, .container>.navbar-collapse, .container>.navbar-header { margin-right: -15px; margin-left: -15px } @media(min-width:768px) { .container-fluid>.navbar-collapse, .container-fluid>.navbar-header, .container>.navbar-collapse, .container>.navbar-header { margin-right: 0; margin-left: 0 } } .navbar-static-top { z-index: 1000; border-width: 0 0 1px } @media(min-width:768px) { .navbar-static-top { border-radius: 0 } } .navbar-brand { float: left; height: 50px; padding: 15px; font-size: 18px; line-height: 20px } .navbar-brand:focus, .navbar-brand:hover { text-decoration: none } .navbar-brand>img { display: block } @media(min-width:768px) { .navbar>.container-fluid .navbar-brand, .navbar>.container .navbar-brand { margin-left: -15px } } .navbar-toggle { position: relative; float: right; padding: 9px 10px; margin-right: 15px; margin-top: 8px; margin-bottom: 8px; background-color: initial; background-image: none; border: 1px solid transparent; border-radius: 4px } .navbar-toggle:focus { outline: 0 } .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px } .navbar-toggle .icon-bar+.icon-bar { margin-top: 4px } @media(min-width:768px) { .navbar-toggle { display: none } } .navbar-nav { margin: 7.5px -15px } .navbar-nav>li>a { padding-top: 10px; padding-bottom: 10px; line-height: 20px } @media(max-width:767px) { .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0; background-color: initial; border: 0; box-shadow: none } .navbar-nav .open .dropdown-menu .dropdown-header, .navbar-nav .open .dropdown-menu>li>a { padding: 5px 15px 5px 25px } .navbar-nav .open .dropdown-menu>li>a { line-height: 20px } .navbar-nav .open .dropdown-menu>li>a:focus, .navbar-nav .open .dropdown-menu>li>a:hover { background-image: none } } @media(min-width:768px) { .navbar-nav { float: left; margin: 0 } .navbar-nav>li { float: left } .navbar-nav>li>a { padding-top: 15px; padding-bottom: 15px } } .navbar-form { padding: 10px 15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; box-shadow: inset 0 1px 0 hsla(0, 0%, 100%, .1), 0 1px 0 hsla(0, 0%, 100%, .1); margin: 8px -15px } @media(min-width:768px) { .navbar-form .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle } .navbar-form .form-control { display: inline-block; width: auto; vertical-align: middle } .navbar-form .form-control-static { display: inline-block } .navbar-form .input-group { display: inline-table; vertical-align: middle } .navbar-form .input-group .form-control, .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn { width: auto } .navbar-form .input-group>.form-control { width: 100% } .navbar-form .control-label { margin-bottom: 0; vertical-align: middle } .navbar-form .checkbox, .navbar-form .radio { display: inline-block; margin-top: 0; margin-bottom: 0; vertical-align: middle } .navbar-form .checkbox label, .navbar-form .radio label { padding-left: 0 } .navbar-form .checkbox input[type=checkbox], .navbar-form .radio input[type=radio] { position: relative; margin-left: 0 } .navbar-form .has-feedback .form-control-feedback { top: 0 } } @media(max-width:767px) { .navbar-form .form-group { margin-bottom: 5px } .navbar-form .form-group:last-child { margin-bottom: 0 } } @media(min-width:768px) { .navbar-form { width: auto; padding-top: 0; padding-bottom: 0; margin-right: 0; margin-left: 0; border: 0; box-shadow: none } } .navbar-nav>li>.dropdown-menu { margin-top: 0; border-top-left-radius: 0; border-top-right-radius: 0 } .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu { margin-bottom: 0; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0 } .navbar-btn { margin-top: 8px; margin-bottom: 8px } .btn-group-sm>.navbar-btn.btn, .navbar-btn.btn-sm { margin-top: 10px; margin-bottom: 10px } .btn-group-xs>.navbar-btn.btn, .navbar-btn.btn-xs { margin-top: 14px; margin-bottom: 14px } .navbar-text { margin-top: 15px; margin-bottom: 15px } @media(min-width:768px) { .navbar-text { float: left; margin-right: 15px; margin-left: 15px } } @media(min-width:768px) { .navbar-left { float: left !important } .navbar-right { float: right !important; margin-right: -15px } .navbar-right~.navbar-right { margin-right: 0 } } .navbar-default { background-color: #f8f8f8; border-color: #e7e7e7 } .navbar-default .navbar-brand { color: #777 } .navbar-default .navbar-brand:focus, .navbar-default .navbar-brand:hover { color: #5e5e5e; background-color: initial } .navbar-default .navbar-nav>li>a, .navbar-default .navbar-text { color: #777 } .navbar-default .navbar-nav>li>a:focus, .navbar-default .navbar-nav>li>a:hover { color: #333; background-color: initial } .navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus, .navbar-default .navbar-nav>.active>a:hover { color: #555; background-color: #e7e7e7 } .navbar-default .navbar-nav>.disabled>a, .navbar-default .navbar-nav>.disabled>a:focus, .navbar-default .navbar-nav>.disabled>a:hover { color: #ccc; background-color: initial } .navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:focus, .navbar-default .navbar-nav>.open>a:hover { color: #555; background-color: #e7e7e7 } @media(max-width:767px) { .navbar-default .navbar-nav .open .dropdown-menu>li>a { color: #777 } .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus, .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover { color: #333; background-color: initial } .navbar-default .navbar-nav .open .dropdown-menu>.active>a, .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus, .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover { color: #555; background-color: #e7e7e7 } .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a, .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus, .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover { color: #ccc; background-color: initial } } .navbar-default .navbar-toggle { border-color: #ddd } .navbar-default .navbar-toggle:focus, .navbar-default .navbar-toggle:hover { background-color: #ddd } .navbar-default .navbar-toggle .icon-bar { background-color: #888 } .navbar-default .navbar-collapse, .navbar-default .navbar-form { border-color: #e7e7e7 } .navbar-default .navbar-link { color: #777 } .navbar-default .navbar-link:hover { color: #333 } .navbar-default .btn-link { color: #777 } .navbar-default .btn-link:focus, .navbar-default .btn-link:hover { color: #333 } .navbar-default .btn-link[disabled]:focus, .navbar-default .btn-link[disabled]:hover, fieldset[disabled] .navbar-default .btn-link:focus, fieldset[disabled] .navbar-default .btn-link:hover { color: #ccc } .navbar-inverse { background-color: #222; border-color: #090909 } .navbar-inverse .navbar-brand { color: #9d9d9d } .navbar-inverse .navbar-brand:focus, .navbar-inverse .navbar-brand:hover { color: #fff; background-color: initial } .navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-text { color: #9d9d9d } .navbar-inverse .navbar-nav>li>a:focus, .navbar-inverse .navbar-nav>li>a:hover { color: #fff; background-color: initial } .navbar-inverse .navbar-nav>.active>a, .navbar-inverse .navbar-nav>.active>a:focus, .navbar-inverse .navbar-nav>.active>a:hover { color: #fff; background-color: #090909 } .navbar-inverse .navbar-nav>.disabled>a, .navbar-inverse .navbar-nav>.disabled>a:focus, .navbar-inverse .navbar-nav>.disabled>a:hover { color: #444; background-color: initial } .navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:focus, .navbar-inverse .navbar-nav>.open>a:hover { color: #fff; background-color: #090909 } @media(max-width:767px) { .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header { border-color: #090909 } .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #090909 } .navbar-inverse .navbar-nav .open .dropdown-menu>li>a { color: #9d9d9d } .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus, .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover { color: #fff; background-color: initial } .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a, .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus, .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover { color: #fff; background-color: #090909 } .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a, .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus, .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover { color: #444; background-color: initial } } .navbar-inverse .navbar-toggle { border-color: #333 } .navbar-inverse .navbar-toggle:focus, .navbar-inverse .navbar-toggle:hover { background-color: #333 } .navbar-inverse .navbar-toggle .icon-bar { background-color: #fff } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #101010 } .navbar-inverse .navbar-link { color: #9d9d9d } .navbar-inverse .navbar-link:hover { color: #fff } .navbar-inverse .btn-link { color: #9d9d9d } .navbar-inverse .btn-link:focus, .navbar-inverse .btn-link:hover { color: #fff } .navbar-inverse .btn-link[disabled]:focus, .navbar-inverse .btn-link[disabled]:hover, fieldset[disabled] .navbar-inverse .btn-link:focus, fieldset[disabled] .navbar-inverse .btn-link:hover { color: #444 } .breadcrumb { padding: 8px 15px; margin-bottom: 20px; list-style: none; background-color: #f5f5f5; border-radius: 4px } .breadcrumb>li { display: inline-block } .breadcrumb>li+li:before { padding: 0 5px; color: #ccc; content: "/ " } .breadcrumb>.active { color: #777 } .pagination { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 4px } .pagination>li { display: inline } .pagination>li>a, .pagination>li>span { position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.428571429; color: #337ab7; text-decoration: none; background-color: #fff; border: 1px solid #ddd } .pagination>li>a:focus, .pagination>li>a:hover, .pagination>li>span:focus, .pagination>li>span:hover { z-index: 2; color: #23527c; background-color: #eee; border-color: #ddd } .pagination>li:first-child>a, .pagination>li:first-child>span { margin-left: 0; border-top-left-radius: 4px; border-bottom-left-radius: 4px } .pagination>li:last-child>a, .pagination>li:last-child>span { border-top-right-radius: 4px; border-bottom-right-radius: 4px } .pagination>.active>a, .pagination>.active>a:focus, .pagination>.active>a:hover, .pagination>.active>span, .pagination>.active>span:focus, .pagination>.active>span:hover { z-index: 3; color: #fff; cursor: default; background-color: #337ab7; border-color: #337ab7 } .pagination>.disabled>a, .pagination>.disabled>a:focus, .pagination>.disabled>a:hover, .pagination>.disabled>span, .pagination>.disabled>span:focus, .pagination>.disabled>span:hover { color: #777; cursor: not-allowed; background-color: #fff; border-color: #ddd } .pagination-lg>li>a, .pagination-lg>li>span { padding: 10px 16px; font-size: 18px; line-height: 1.3333333 } .pagination-lg>li:first-child>a, .pagination-lg>li:first-child>span { border-top-left-radius: 6px; border-bottom-left-radius: 6px } .pagination-lg>li:last-child>a, .pagination-lg>li:last-child>span { border-top-right-radius: 6px; border-bottom-right-radius: 6px } .pagination-sm>li>a, .pagination-sm>li>span { padding: 5px 10px; font-size: 12px; line-height: 1.5 } .pagination-sm>li:first-child>a, .pagination-sm>li:first-child>span { border-top-left-radius: 3px; border-bottom-left-radius: 3px } .pagination-sm>li:last-child>a, .pagination-sm>li:last-child>span { border-top-right-radius: 3px; border-bottom-right-radius: 3px } .pager { padding-left: 0; margin: 20px 0; text-align: center; list-style: none } .pager:after, .pager:before { display: table; content: " " } .pager:after { clear: both } .pager li { display: inline } .pager li>a, .pager li>span { display: inline-block; padding: 5px 14px; background-color: #fff; border: 1px solid #ddd; border-radius: 15px } .pager li>a:focus, .pager li>a:hover { text-decoration: none; background-color: #eee } .pager .next>a, .pager .next>span { float: right } .pager .previous>a, .pager .previous>span { float: left } .pager .disabled>a, .pager .disabled>a:focus, .pager .disabled>a:hover, .pager .disabled>span { color: #777; cursor: not-allowed; background-color: #fff } .label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: initial; border-radius: .25em } .label:empty { display: none } .btn .label { position: relative; top: -1px } a.label:focus, a.label:hover { color: #fff; text-decoration: none; cursor: pointer } .label-default { background-color: #777 } .label-default[href]:focus, .label-default[href]:hover { background-color: #5e5e5e } .label-primary { background-color: #337ab7 } .label-primary[href]:focus, .label-primary[href]:hover { background-color: #286090 } .label-success { background-color: #5cb85c } .label-success[href]:focus, .label-success[href]:hover { background-color: #449d44 } .label-info { background-color: #5bc0de } .label-info[href]:focus, .label-info[href]:hover { background-color: #31b0d5 } .label-warning { background-color: #f0ad4e } .label-warning[href]:focus, .label-warning[href]:hover { background-color: #ec971f } .label-danger { background-color: #d9534f } .label-danger[href]:focus, .label-danger[href]:hover { background-color: #c9302c } .badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 12px; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: middle; background-color: #777; border-radius: 10px } .badge:empty { display: none } .btn .badge { position: relative; top: -1px } .btn-group-xs>.btn .badge, .btn-xs .badge { top: 0; padding: 1px 5px } .list-group-item.active>.badge, .nav-pills>.active>a>.badge { color: #337ab7; background-color: #fff } .list-group-item>.badge { float: right } .list-group-item>.badge+.badge { margin-right: 5px } .nav-pills>li>a>.badge { margin-left: 3px } a.badge:focus, a.badge:hover { color: #fff; text-decoration: none; cursor: pointer } .jumbotron { padding-top: 30px; padding-bottom: 30px; margin-bottom: 30px; background-color: #eee } .jumbotron, .jumbotron .h1, .jumbotron h1 { color: inherit } .jumbotron p { margin-bottom: 15px; font-size: 21px; font-weight: 200 } .jumbotron>hr { border-top-color: #d5d5d5 } .container-fluid .jumbotron, .container .jumbotron { padding-right: 15px; padding-left: 15px; border-radius: 6px } .jumbotron .container { max-width: 100% } @media screen and (min-width:768px) { .jumbotron { padding-top: 48px; padding-bottom: 48px } .container-fluid .jumbotron, .container .jumbotron { padding-right: 60px; padding-left: 60px } .jumbotron .h1, .jumbotron h1 { font-size: 63px } } .thumbnail { display: block; padding: 4px; margin-bottom: 20px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; transition: border .2s ease-in-out } .thumbnail>img, .thumbnail a>img { display: block; max-width: 100%; height: auto; margin-right: auto; margin-left: auto } .thumbnail .caption { padding: 9px; color: #333 } a.thumbnail.active, a.thumbnail:focus, a.thumbnail:hover { border-color: #337ab7 } .alert { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px } .alert h4 { margin-top: 0; color: inherit } .alert .alert-link { font-weight: 700 } .alert>p, .alert>ul { margin-bottom: 0 } .alert>p+p { margin-top: 5px } .alert-dismissable, .alert-dismissible { padding-right: 35px } .alert-dismissable .close, .alert-dismissible .close { position: relative; top: -2px; right: -21px; color: inherit } .alert-success { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6 } .alert-success hr { border-top-color: #c9e2b3 } .alert-success .alert-link { color: #2b542c } .alert-info { color: #31708f; background-color: #d9edf7; border-color: #bce8f1 } .alert-info hr { border-top-color: #a6e1ec } .alert-info .alert-link { color: #245269 } .alert-warning { color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc } .alert-warning hr { border-top-color: #f7e1b5 } .alert-warning .alert-link { color: #66512c } .alert-danger { color: #a94442; background-color: #f2dede; border-color: #ebccd1 } .alert-danger hr { border-top-color: #e4b9c0 } .alert-danger .alert-link { color: #843534 } @keyframes progress-bar-stripes { 0% { background-position: 40px 0 } to { background-position: 0 0 } } .progress { height: 20px; margin-bottom: 20px; overflow: hidden; background-color: #f5f5f5; border-radius: 4px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1) } .progress-bar { float: left; width: 0; height: 100%; font-size: 12px; line-height: 20px; color: #fff; text-align: center; background-color: #337ab7; box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); transition: width .6s ease } .progress-bar-striped, .progress-striped .progress-bar { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent); background-size: 40px 40px } .progress-bar.active, .progress.active .progress-bar { animation: progress-bar-stripes 2s linear infinite } .progress-bar-success { background-color: #5cb85c } .progress-striped .progress-bar-success { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent) } .progress-bar-info { background-color: #5bc0de } .progress-striped .progress-bar-info { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent) } .progress-bar-warning { background-color: #f0ad4e } .progress-striped .progress-bar-warning { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent) } .progress-bar-danger { background-color: #d9534f } .progress-striped .progress-bar-danger { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent) } .media { margin-top: 15px } .media:first-child { margin-top: 0 } .media, .media-body { overflow: hidden; zoom: 1 } .media-body { width: 10000px } .media-object { display: block } .media-object.img-thumbnail { max-width: none } .media-right, .media>.pull-right { padding-left: 10px } .media-left, .media>.pull-left { padding-right: 10px } .media-body, .media-left, .media-right { display: table-cell; vertical-align: top } .media-middle { vertical-align: middle } .media-bottom { vertical-align: bottom } .media-heading { margin-top: 0; margin-bottom: 5px } .media-list { padding-left: 0; list-style: none } .list-group { padding-left: 0; margin-bottom: 20px } .list-group-item { position: relative; display: block; padding: 10px 15px; margin-bottom: -1px; background-color: #fff; border: 1px solid #ddd } .list-group-item:first-child { border-top-left-radius: 4px; border-top-right-radius: 4px } .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px } .list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover { color: #777; cursor: not-allowed; background-color: #eee } .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading { color: inherit } .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text { color: #777 } .list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover { z-index: 2; color: #fff; background-color: #337ab7; border-color: #337ab7 } .list-group-item.active .list-group-item-heading, .list-group-item.active .list-group-item-heading>.small, .list-group-item.active .list-group-item-heading>small, .list-group-item.active:focus .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading>.small, .list-group-item.active:focus .list-group-item-heading>small, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading>.small, .list-group-item.active:hover .list-group-item-heading>small { color: inherit } .list-group-item.active .list-group-item-text, .list-group-item.active:focus .list-group-item-text, .list-group-item.active:hover .list-group-item-text { color: #c7ddef } a.list-group-item, button.list-group-item { color: #555 } a.list-group-item .list-group-item-heading, button.list-group-item .list-group-item-heading { color: #333 } a.list-group-item:focus, a.list-group-item:hover, button.list-group-item:focus, button.list-group-item:hover { color: #555; text-decoration: none; background-color: #f5f5f5 } button.list-group-item { width: 100%; text-align: left } .list-group-item-success { color: #3c763d; background-color: #dff0d8 } a.list-group-item-success, button.list-group-item-success { color: #3c763d } a.list-group-item-success .list-group-item-heading, button.list-group-item-success .list-group-item-heading { color: inherit } a.list-group-item-success:focus, a.list-group-item-success:hover, button.list-group-item-success:focus, button.list-group-item-success:hover { color: #3c763d; background-color: #d0e9c6 } a.list-group-item-success.active, a.list-group-item-success.active:focus, a.list-group-item-success.active:hover, button.list-group-item-success.active, button.list-group-item-success.active:focus, button.list-group-item-success.active:hover { color: #fff; background-color: #3c763d; border-color: #3c763d } .list-group-item-info { color: #31708f; background-color: #d9edf7 } a.list-group-item-info, button.list-group-item-info { color: #31708f } a.list-group-item-info .list-group-item-heading, button.list-group-item-info .list-group-item-heading { color: inherit } a.list-group-item-info:focus, a.list-group-item-info:hover, button.list-group-item-info:focus, button.list-group-item-info:hover { color: #31708f; background-color: #c4e3f3 } a.list-group-item-info.active, a.list-group-item-info.active:focus, a.list-group-item-info.active:hover, button.list-group-item-info.active, button.list-group-item-info.active:focus, button.list-group-item-info.active:hover { color: #fff; background-color: #31708f; border-color: #31708f } .list-group-item-warning { color: #8a6d3b; background-color: #fcf8e3 } a.list-group-item-warning, button.list-group-item-warning { color: #8a6d3b } a.list-group-item-warning .list-group-item-heading, button.list-group-item-warning .list-group-item-heading { color: inherit } a.list-group-item-warning:focus, a.list-group-item-warning:hover, button.list-group-item-warning:focus, button.list-group-item-warning:hover { color: #8a6d3b; background-color: #faf2cc } a.list-group-item-warning.active, a.list-group-item-warning.active:focus, a.list-group-item-warning.active:hover, button.list-group-item-warning.active, button.list-group-item-warning.active:focus, button.list-group-item-warning.active:hover { color: #fff; background-color: #8a6d3b; border-color: #8a6d3b } .list-group-item-danger { color: #a94442; background-color: #f2dede } a.list-group-item-danger, button.list-group-item-danger { color: #a94442 } a.list-group-item-danger .list-group-item-heading, button.list-group-item-danger .list-group-item-heading { color: inherit } a.list-group-item-danger:focus, a.list-group-item-danger:hover, button.list-group-item-danger:focus, button.list-group-item-danger:hover { color: #a94442; background-color: #ebcccc } a.list-group-item-danger.active, a.list-group-item-danger.active:focus, a.list-group-item-danger.active:hover, button.list-group-item-danger.active, button.list-group-item-danger.active:focus, button.list-group-item-danger.active:hover { color: #fff; background-color: #a94442; border-color: #a94442 } .list-group-item-heading { margin-top: 0; margin-bottom: 5px } .list-group-item-text { margin-bottom: 0; line-height: 1.3 } .panel { margin-bottom: 20px; background-color: #fff; border: 1px solid transparent; border-radius: 4px; box-shadow: 0 1px 1px rgba(0, 0, 0, .05) } .panel-body { padding: 15px } .panel-body:after, .panel-body:before { display: table; content: " " } .panel-body:after { clear: both } .panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent; border-top-left-radius: 3px; border-top-right-radius: 3px } .panel-heading>.dropdown .dropdown-toggle, .panel-title { color: inherit } .panel-title { margin-top: 0; margin-bottom: 0; font-size: 16px } .panel-title>.small, .panel-title>.small>a, .panel-title>a, .panel-title>small, .panel-title>small>a { color: inherit } .panel-footer { padding: 10px 15px; background-color: #f5f5f5; border-top: 1px solid #ddd; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px } .panel>.list-group, .panel>.panel-collapse>.list-group { margin-bottom: 0 } .panel>.list-group .list-group-item, .panel>.panel-collapse>.list-group .list-group-item { border-width: 1px 0; border-radius: 0 } .panel>.list-group:first-child .list-group-item:first-child, .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child { border-top: 0; border-top-left-radius: 3px; border-top-right-radius: 3px } .panel>.list-group:last-child .list-group-item:last-child, .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child { border-bottom: 0; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px } .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child { border-top-left-radius: 0; border-top-right-radius: 0 } .list-group+.panel-footer, .panel-heading+.list-group .list-group-item:first-child { border-top-width: 0 } .panel>.panel-collapse>.table, .panel>.table, .panel>.table-responsive>.table { margin-bottom: 0 } .panel>.panel-collapse>.table caption, .panel>.table-responsive>.table caption, .panel>.table caption { padding-right: 15px; padding-left: 15px } .panel>.table-responsive:first-child>.table:first-child, .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child, .panel>.table:first-child, .panel>.table:first-child>tbody:first-child>tr:first-child, .panel>.table:first-child>thead:first-child>tr:first-child { border-top-left-radius: 3px; border-top-right-radius: 3px } .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child, .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child, .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child, .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child, .panel>.table:first-child>thead:first-child>tr:first-child td:first-child, .panel>.table:first-child>thead:first-child>tr:first-child th:first-child { border-top-left-radius: 3px } .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child, .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child, .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child, .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child, .panel>.table:first-child>thead:first-child>tr:first-child td:last-child, .panel>.table:first-child>thead:first-child>tr:first-child th:last-child { border-top-right-radius: 3px } .panel>.table-responsive:last-child>.table:last-child, .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child, .panel>.table:last-child, .panel>.table:last-child>tbody:last-child>tr:last-child, .panel>.table:last-child>tfoot:last-child>tr:last-child { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px } .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child, .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child, .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child, .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child, .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child, .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child { border-bottom-left-radius: 3px } .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child, .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child, .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child, .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child, .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child, .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child { border-bottom-right-radius: 3px } .panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { border-top: 1px solid #ddd } .panel>.table>tbody:first-child>tr:first-child td, .panel>.table>tbody:first-child>tr:first-child th { border-top: 0 } .panel>.table-bordered, .panel>.table-responsive>.table-bordered { border: 0 } .panel>.table-bordered>tbody>tr>td:first-child, .panel>.table-bordered>tbody>tr>th:first-child, .panel>.table-bordered>tfoot>tr>td:first-child, .panel>.table-bordered>tfoot>tr>th:first-child, .panel>.table-bordered>thead>tr>td:first-child, .panel>.table-bordered>thead>tr>th:first-child, .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child, .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child, .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child, .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child, .panel>.table-responsive>.table-bordered>thead>tr>td:first-child, .panel>.table-responsive>.table-bordered>thead>tr>th:first-child { border-left: 0 } .panel>.table-bordered>tbody>tr>td:last-child, .panel>.table-bordered>tbody>tr>th:last-child, .panel>.table-bordered>tfoot>tr>td:last-child, .panel>.table-bordered>tfoot>tr>th:last-child, .panel>.table-bordered>thead>tr>td:last-child, .panel>.table-bordered>thead>tr>th:last-child, .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child, .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child, .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child, .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child, .panel>.table-responsive>.table-bordered>thead>tr>td:last-child, .panel>.table-responsive>.table-bordered>thead>tr>th:last-child { border-right: 0 } .panel>.table-bordered>tbody>tr:first-child>td, .panel>.table-bordered>tbody>tr:first-child>th, .panel>.table-bordered>tbody>tr:last-child>td, .panel>.table-bordered>tbody>tr:last-child>th, .panel>.table-bordered>tfoot>tr:last-child>td, .panel>.table-bordered>tfoot>tr:last-child>th, .panel>.table-bordered>thead>tr:first-child>td, .panel>.table-bordered>thead>tr:first-child>th, .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td, .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th, .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td, .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th, .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td, .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th, .panel>.table-responsive>.table-bordered>thead>tr:first-child>td, .panel>.table-responsive>.table-bordered>thead>tr:first-child>th { border-bottom: 0 } .panel>.table-responsive { margin-bottom: 0; border: 0 } .panel-group { margin-bottom: 20px } .panel-group .panel { margin-bottom: 0; border-radius: 4px } .panel-group .panel+.panel { margin-top: 5px } .panel-group .panel-heading { border-bottom: 0 } .panel-group .panel-heading+.panel-collapse>.list-group, .panel-group .panel-heading+.panel-collapse>.panel-body { border-top: 1px solid #ddd } .panel-group .panel-footer { border-top: 0 } .panel-group .panel-footer+.panel-collapse .panel-body { border-bottom: 1px solid #ddd } .panel-default { border-color: #ddd } .panel-default>.panel-heading { color: #333; background-color: #f5f5f5; border-color: #ddd } .panel-default>.panel-heading+.panel-collapse>.panel-body { border-top-color: #ddd } .panel-default>.panel-heading .badge { color: #f5f5f5; background-color: #333 } .panel-default>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #ddd } .panel-primary { border-color: #337ab7 } .panel-primary>.panel-heading { color: #fff; background-color: #337ab7; border-color: #337ab7 } .panel-primary>.panel-heading+.panel-collapse>.panel-body { border-top-color: #337ab7 } .panel-primary>.panel-heading .badge { color: #337ab7; background-color: #fff } .panel-primary>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #337ab7 } .panel-success { border-color: #d6e9c6 } .panel-success>.panel-heading { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6 } .panel-success>.panel-heading+.panel-collapse>.panel-body { border-top-color: #d6e9c6 } .panel-success>.panel-heading .badge { color: #dff0d8; background-color: #3c763d } .panel-success>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #d6e9c6 } .panel-info { border-color: #bce8f1 } .panel-info>.panel-heading { color: #31708f; background-color: #d9edf7; border-color: #bce8f1 } .panel-info>.panel-heading+.panel-collapse>.panel-body { border-top-color: #bce8f1 } .panel-info>.panel-heading .badge { color: #d9edf7; background-color: #31708f } .panel-info>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #bce8f1 } .panel-warning { border-color: #faebcc } .panel-warning>.panel-heading { color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc } .panel-warning>.panel-heading+.panel-collapse>.panel-body { border-top-color: #faebcc } .panel-warning>.panel-heading .badge { color: #fcf8e3; background-color: #8a6d3b } .panel-warning>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #faebcc } .panel-danger { border-color: #ebccd1 } .panel-danger>.panel-heading { color: #a94442; background-color: #f2dede; border-color: #ebccd1 } .panel-danger>.panel-heading+.panel-collapse>.panel-body { border-top-color: #ebccd1 } .panel-danger>.panel-heading .badge { color: #f2dede; background-color: #a94442 } .panel-danger>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #ebccd1 } .embed-responsive { position: relative; display: block; height: 0; padding: 0; overflow: hidden } .embed-responsive .embed-responsive-item, .embed-responsive embed, .embed-responsive iframe, .embed-responsive object, .embed-responsive video { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; height: 100%; border: 0 } .embed-responsive-16by9 { padding-bottom: 56.25% } .embed-responsive-4by3 { padding-bottom: 75% } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #f5f5f5; border: 1px solid #e3e3e3; border-radius: 4px; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05) } .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, .15) } .well-lg { padding: 24px; border-radius: 6px } .well-sm { padding: 9px; border-radius: 3px } .close { float: right; font-size: 21px; font-weight: 700; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; filter: alpha(opacity=20); opacity: .2 } .close:focus, .close:hover { color: #000; text-decoration: none; cursor: pointer; filter: alpha(opacity=50); opacity: .5 } button.close { padding: 0; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; -moz-appearance: none; appearance: none } .modal, .modal-open { overflow: hidden } .modal { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1050; display: none; -webkit-overflow-scrolling: touch; outline: 0 } .modal.fade .modal-dialog { transform: translateY(-25%); transition: transform .3s ease-out } .modal.in .modal-dialog { transform: translate(0) } .modal-open .modal { overflow-x: hidden; overflow-y: auto } .modal-dialog { position: relative; width: auto; margin: 10px } .modal-content { position: relative; background-color: #fff; background-clip: padding-box; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; box-shadow: 0 3px 9px rgba(0, 0, 0, .5); outline: 0 } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #000 } .modal-backdrop.fade { filter: alpha(opacity=0); opacity: 0 } .modal-backdrop.in { filter: alpha(opacity=50); opacity: .5 } .modal-header { padding: 15px; border-bottom: 1px solid #e5e5e5 } .modal-header:after, .modal-header:before { display: table; content: " " } .modal-header:after { clear: both } .modal-header .close { margin-top: -2px } .modal-title { margin: 0; line-height: 1.428571429 } .modal-body { position: relative; padding: 15px } .modal-footer { padding: 15px; text-align: right; border-top: 1px solid #e5e5e5 } .modal-footer:after, .modal-footer:before { display: table; content: " " } .modal-footer:after { clear: both } .modal-footer .btn+.btn { margin-bottom: 0; margin-left: 5px } .modal-footer .btn-group .btn+.btn { margin-left: -1px } .modal-footer .btn-block+.btn-block { margin-left: 0 } .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll } @media(min-width:768px) { .modal-dialog { width: 600px; margin: 30px auto } .modal-content { box-shadow: 0 5px 15px rgba(0, 0, 0, .5) } .modal-sm { width: 300px } } @media(min-width:992px) { .modal-lg { width: 900px } } .tooltip { position: absolute; z-index: 1070; display: block; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-style: normal; font-weight: 400; line-height: 1.428571429; line-break: auto; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; word-wrap: normal; white-space: normal; font-size: 12px; filter: alpha(opacity=0); opacity: 0 } .tooltip.in { filter: alpha(opacity=90); opacity: .9 } .tooltip.top { padding: 5px 0; margin-top: -3px } .tooltip.right { padding: 0 5px; margin-left: 3px } .tooltip.bottom { padding: 5px 0; margin-top: 3px } .tooltip.left { padding: 0 5px; margin-left: -3px } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-width: 5px 5px 0; border-top-color: #000 } .tooltip.top-left .tooltip-arrow { right: 5px } .tooltip.top-left .tooltip-arrow, .tooltip.top-right .tooltip-arrow { bottom: 0; margin-bottom: -5px; border-width: 5px 5px 0; border-top-color: #000 } .tooltip.top-right .tooltip-arrow { left: 5px } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-width: 5px 5px 5px 0; border-right-color: #000 } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-width: 5px 0 5px 5px; border-left-color: #000 } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-width: 0 5px 5px; border-bottom-color: #000 } .tooltip.bottom-left .tooltip-arrow { top: 0; right: 5px; margin-top: -5px; border-width: 0 5px 5px; border-bottom-color: #000 } .tooltip.bottom-right .tooltip-arrow { top: 0; left: 5px; margin-top: -5px; border-width: 0 5px 5px; border-bottom-color: #000 } .tooltip-inner { max-width: 200px; padding: 3px 8px; color: #fff; text-align: center; background-color: #000; border-radius: 4px } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: none; max-width: 276px; padding: 1px; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-style: normal; font-weight: 400; line-height: 1.428571429; line-break: auto; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; word-wrap: normal; white-space: normal; font-size: 14px; background-color: #fff; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; box-shadow: 0 5px 10px rgba(0, 0, 0, .2) } .popover.top { margin-top: -10px } .popover.right { margin-left: 10px } .popover.bottom { margin-top: 10px } .popover.left { margin-left: -10px } .popover>.arrow { border-width: 11px } .popover>.arrow, .popover>.arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid } .popover>.arrow:after { content: ""; border-width: 10px } .popover.top>.arrow { bottom: -11px; left: 50%; margin-left: -11px; border-top-color: #999; border-top-color: rgba(0, 0, 0, .25); border-bottom-width: 0 } .popover.top>.arrow:after { bottom: 1px; margin-left: -10px; content: " "; border-top-color: #fff; border-bottom-width: 0 } .popover.right>.arrow { top: 50%; left: -11px; margin-top: -11px; border-right-color: #999; border-right-color: rgba(0, 0, 0, .25); border-left-width: 0 } .popover.right>.arrow:after { bottom: -10px; left: 1px; content: " "; border-right-color: #fff; border-left-width: 0 } .popover.bottom>.arrow { top: -11px; left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, .25) } .popover.bottom>.arrow:after { top: 1px; margin-left: -10px; content: " "; border-top-width: 0; border-bottom-color: #fff } .popover.left>.arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #999; border-left-color: rgba(0, 0, 0, .25) } .popover.left>.arrow:after { right: 1px; bottom: -10px; content: " "; border-right-width: 0; border-left-color: #fff } .popover-title { padding: 8px 14px; margin: 0; font-size: 14px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0 } .popover-content { padding: 9px 14px } .carousel, .carousel-inner { position: relative } .carousel-inner { width: 100%; overflow: hidden } .carousel-inner>.item { position: relative; display: none; transition: left .6s ease-in-out } .carousel-inner>.item>a>img, .carousel-inner>.item>img { display: block; max-width: 100%; height: auto; line-height: 1 } @media (-webkit-transform-3d), (transform-3d) { .carousel-inner>.item { transition: transform .6s ease-in-out; -webkit-backface-visibility: hidden; backface-visibility: hidden; perspective: 1000px } .carousel-inner>.item.active.right, .carousel-inner>.item.next { transform: translate3d(100%, 0, 0); left: 0 } .carousel-inner>.item.active.left, .carousel-inner>.item.prev { transform: translate3d(-100%, 0, 0); left: 0 } .carousel-inner>.item.active, .carousel-inner>.item.next.left, .carousel-inner>.item.prev.right { transform: translateZ(0); left: 0 } } .carousel-inner>.active, .carousel-inner>.next, .carousel-inner>.prev { display: block } .carousel-inner>.active { left: 0 } .carousel-inner>.next, .carousel-inner>.prev { position: absolute; top: 0; width: 100% } .carousel-inner>.next { left: 100% } .carousel-inner>.prev { left: -100% } .carousel-inner>.next.left, .carousel-inner>.prev.right { left: 0 } .carousel-inner>.active.left { left: -100% } .carousel-inner>.active.right { left: 100% } .carousel-control { position: absolute; top: 0; bottom: 0; left: 0; width: 15%; font-size: 20px; color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, .6); background-color: transparent; filter: alpha(opacity=50); opacity: .5 } .carousel-control.left { background-image: linear-gradient(90deg, rgba(0, 0, 0, .5) 0, rgba(0, 0, 0, .0001)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000", endColorstr="#00000000", GradientType=1); background-repeat: repeat-x } .carousel-control.right { right: 0; left: auto; background-image: linear-gradient(90deg, rgba(0, 0, 0, .0001) 0, rgba(0, 0, 0, .5)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000", endColorstr="#80000000", GradientType=1); background-repeat: repeat-x } .carousel-control:focus, .carousel-control:hover { color: #fff; text-decoration: none; outline: 0; filter: alpha(opacity=90); opacity: .9 } .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next, .carousel-control .icon-prev { position: absolute; top: 50%; z-index: 5; display: inline-block; margin-top: -10px } .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { left: 50%; margin-left: -10px } .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { right: 50%; margin-right: -10px } .carousel-control .icon-next, .carousel-control .icon-prev { width: 20px; height: 20px; font-family: serif; line-height: 1 } .carousel-control .icon-prev:before { content: "‹" } .carousel-control .icon-next:before { content: "›" } .carousel-indicators { position: absolute; bottom: 10px; left: 50%; z-index: 15; width: 60%; padding-left: 0; margin-left: -30%; text-align: center; list-style: none } .carousel-indicators li { display: inline-block; width: 10px; height: 10px; margin: 1px; text-indent: -999px; cursor: pointer; background-color: #000\9; background-color: transparent; border: 1px solid #fff; border-radius: 10px } .carousel-indicators .active { width: 12px; height: 12px; margin: 0; background-color: #fff } .carousel-caption { position: absolute; right: 15%; bottom: 20px; left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, .6) } .carousel-caption .btn { text-shadow: none } @media screen and (min-width:768px) { .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next, .carousel-control .icon-prev { width: 30px; height: 30px; margin-top: -10px; font-size: 30px } .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { margin-left: -10px } .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { margin-right: -10px } .carousel-caption { right: 20%; left: 20%; padding-bottom: 30px } .carousel-indicators { bottom: 20px } } .clearfix:after, .clearfix:before { display: table; content: " " } .clearfix:after { clear: both } .center-block { display: block; margin-right: auto; margin-left: auto } .pull-right { float: right !important } .pull-left { float: left !important } .hide { display: none !important } .show { display: block !important } .invisible { visibility: hidden } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: initial; border: 0 } .hidden { display: none !important } .affix { position: fixed } .visible-lg, .visible-lg-block, .visible-lg-inline, .visible-lg-inline-block, .visible-md, .visible-md-block, .visible-md-inline, .visible-md-inline-block, .visible-sm, .visible-sm-block, .visible-sm-inline, .visible-sm-inline-block, .visible-xs, .visible-xs-block, .visible-xs-inline, .visible-xs-inline-block { display: none !important } @media(max-width:767px) { .visible-xs { display: block !important } table.visible-xs { display: table !important } tr.visible-xs { display: table-row !important } td.visible-xs, th.visible-xs { display: table-cell !important } } @media(max-width:767px) { .visible-xs-block { display: block !important } } @media(max-width:767px) { .visible-xs-inline { display: inline !important } } @media(max-width:767px) { .visible-xs-inline-block { display: inline-block !important } } @media(min-width:768px)and (max-width:991px) { .visible-sm { display: block !important } table.visible-sm { display: table !important } tr.visible-sm { display: table-row !important } td.visible-sm, th.visible-sm { display: table-cell !important } } @media(min-width:768px)and (max-width:991px) { .visible-sm-block { display: block !important } } @media(min-width:768px)and (max-width:991px) { .visible-sm-inline { display: inline !important } } @media(min-width:768px)and (max-width:991px) { .visible-sm-inline-block { display: inline-block !important } } @media(min-width:992px)and (max-width:1199px) { .visible-md { display: block !important } table.visible-md { display: table !important } tr.visible-md { display: table-row !important } td.visible-md, th.visible-md { display: table-cell !important } } @media(min-width:992px)and (max-width:1199px) { .visible-md-block { display: block !important } } @media(min-width:992px)and (max-width:1199px) { .visible-md-inline { display: inline !important } } @media(min-width:992px)and (max-width:1199px) { .visible-md-inline-block { display: inline-block !important } } @media(min-width:1200px) { .visible-lg { display: block !important } table.visible-lg { display: table !important } tr.visible-lg { display: table-row !important } td.visible-lg, th.visible-lg { display: table-cell !important } } @media(min-width:1200px) { .visible-lg-block { display: block !important } } @media(min-width:1200px) { .visible-lg-inline { display: inline !important } } @media(min-width:1200px) { .visible-lg-inline-block { display: inline-block !important } } @media(max-width:767px) { .hidden-xs { display: none !important } } @media(min-width:768px)and (max-width:991px) { .hidden-sm { display: none !important } } @media(min-width:992px)and (max-width:1199px) { .hidden-md { display: none !important } } @media(min-width:1200px) { .hidden-lg { display: none !important } } .visible-print { display: none !important } @media print { .visible-print { display: block !important } table.visible-print { display: table !important } tr.visible-print { display: table-row !important } td.visible-print, th.visible-print { display: table-cell !important } } .visible-print-block { display: none !important } @media print { .visible-print-block { display: block !important } } .visible-print-inline { display: none !important } @media print { .visible-print-inline { display: inline !important } } .visible-print-inline-block { display: none !important } @media print { .visible-print-inline-block { display: inline-block !important } } @media print { .hidden-print { display: none !important } } .checkbox-inline label, .checkbox label { padding-left: 28px } .checkbox-inline input[type=checkbox], .checkbox input[type=checkbox] { visibility: hidden; margin-top: 0; margin-left: -28px; width: 20px; cursor: pointer } .checkbox-inline input[type=checkbox]:after, .checkbox input[type=checkbox]:after { content: ""; visibility: visible; border: 1px solid #666; display: block; position: absolute; margin: auto; height: 20px; width: 20px; background: #f7f7f7; transition: background .15s ease-in-out } .checkbox-inline input[type=checkbox]~span, .checkbox input[type=checkbox]~span { transition: color .15s ease-in-out } .checkbox-inline input[type=checkbox]:checked:after, .checkbox input[type=checkbox]:checked:after { content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAMCAYAAAC5tzfZAAAAAXNSR0IArs4c6QAAAL1JREFUKBWNi7EJAkEQRU8PNDqMBTNBjA2swcwGRLADMyswNLIEExsQEyPDA8ECLEAQEzHRwPUN7MqIP3DgsbP/v8myPyeEUE3qZ0mBejlokB95x6qXGfIabErIpeRDpInZzA3avpM7UgfuYDOSkg+RanAwm1n5LiMoYAs9X/BfgM0JCt/Z0dwa5gFTK3kH8IIn9L8OolCnWEKaDcs5fmY/Bz5AGsI1yvbsoOIduSO1YA8XaEpJhcg5dFWXsjdWD8DwycyU8QAAAABJRU5ErkJggg=="); color: #fff; border: 1px solid #00a2e8; background: #00a2e8; text-align: center; line-height: 20px } .checkbox-inline input[type=checkbox]:checked~span, .checkbox input[type=checkbox]:checked~span { color: #000 } .container { max-width: 768px } .modal-open .modal { display: block } .modal-backdrop.in { opacity: .8 } .modal-body, .modal-footer { padding-top: 25px } .modal-footer { padding-bottom: 25px } .modal-content { border-radius: 0; border: none } .form-control { height: 48px; border-radius: 0; font-weight: 400; color: #000; font-size: 16px; background-color: #f7f7f7; border-color: #ccc; box-shadow: none; transition: border-color .15s ease-in-out } .form-control:focus, .form-control:hover { box-shadow: none; border-color: #666 } .form-control-feedback { width: 48px; height: 48px; line-height: 48px } .form-group { margin-bottom: 25px } .form-group label { margin-bottom: 8px } .input-group.focus input, .input-group:active input, .input-group:hover input { border: 1px solid #666; border-right-color: #ccc } .input-group.focus .input-group-addon, .input-group:active .input-group-addon, .input-group:hover .input-group-addon { border: 1px solid #666; border-left: 0 } .input-group-addon { border-radius: 0; transition: border-color .15s ease-in-out } .input-group-addon:active, .input-group-addon:focus, .input-group-addon:hover { cursor: pointer } .has-error .form-control, .has-error .form-control:focus, .has-error .form-control:hover, .has-success .form-control, .has-success .form-control:focus, .has-success .form-control:hover, .has-warning .form-control, .has-warning .form-control:focus, .has-warning .form-control:hover { box-shadow: none } .has-error .input-group.focus input, .has-error .input-group:active input, .has-error .input-group:hover input, .has-success .input-group.focus input, .has-success .input-group:active input, .has-success .input-group:hover input, .has-warning .input-group.focus input, .has-warning .input-group:active input, .has-warning .input-group:hover input { border-right: 1px solid #ccc } .has-error .input-group.focus .input-group-addon, .has-error .input-group:active .input-group-addon, .has-error .input-group:hover .input-group-addon, .has-success .input-group.focus .input-group-addon, .has-success .input-group:active .input-group-addon, .has-success .input-group:hover .input-group-addon, .has-warning .input-group.focus .input-group-addon, .has-warning .input-group:active .input-group-addon, .has-warning .input-group:hover .input-group-addon { border-left: 0 } .has-error .input-group-addon, .has-success .input-group-addon, .has-warning .input-group-addon { background-color: #00a2e8 } .has-error .help-block, .has-success .help-block, .has-warning .help-block { font-size: 14px } .has-error .help-block .warning, .has-success .help-block .warning, .has-warning .help-block .warning { margin-right: 7px } .has-error .form-control { border-color: #c00 } .has-error .form-control:focus, .has-error .form-control:hover { border-color: #ad0404 } .has-error .input-group.focus .input-group-addon, .has-error .input-group.focus input, .has-error .input-group:active .input-group-addon, .has-error .input-group:active input, .has-error .input-group:hover .input-group-addon, .has-error .input-group:hover input { border: 1px solid #c00 } .has-error .input-group.focus .input-verified, .has-error .input-group:active .input-verified, .has-error .input-group:hover .input-verified { border-right: 1px solid #c00 !important } .has-error .input-group-addon { color: #c00; border-color: #c00 } .has-error .control-label { color: #c00 } .has-error .dropdown .dropdown-toggle { border-color: #c00 } .has-error .help-block { color: #c00 } .has-warning .form-control { border-color: #ad9100 } .has-warning .form-control:focus, .has-warning .form-control:hover { border-color: #8c7500 } .has-warning .input-group.focus .input-group-addon, .has-warning .input-group.focus input, .has-warning .input-group:active .input-group-addon, .has-warning .input-group:active input, .has-warning .input-group:hover .input-group-addon, .has-warning .input-group:hover input { border: 1px solid #ad9100 } .has-warning .input-group.focus .input-verified, .has-warning .input-group:active .input-verified, .has-warning .input-group:hover .input-verified { border-right: 1px solid #ad9100 !important } .has-warning .input-group-addon { color: #ad9100; border-color: #ad9100 } .has-warning .control-label { color: #ad9100 } .has-warning .dropdown .dropdown-toggle { border-color: #ad9100 } .has-warning .help-block { color: #ad9100 } .has-success .form-control { border-color: #029c36 } .has-success .form-control:focus, .has-success .form-control:hover { border-color: #01591f } .has-success .input-group.focus .input-group-addon, .has-success .input-group.focus input, .has-success .input-group:active .input-group-addon, .has-success .input-group:active input, .has-success .input-group:hover .input-group-addon, .has-success .input-group:hover input { border: 1px solid #029c36 } .has-success .input-group.focus .input-verified, .has-success .input-group:active .input-verified, .has-success .input-group:hover .input-verified { border-right: 1px solid #029c36 !important } .has-success .input-group-addon { color: #029c36; border-color: #029c36 } .has-success .control-label { color: #029c36 } .has-success .dropdown .dropdown-toggle { border-color: #029c36 } .checkbox label, .radio label { font-size: 16px; line-height: 16px; display: inline } .checkbox label span, .radio label span { color: grey } .radio-inline label, .radio label { padding-left: 25px } .radio-inline input[type=radio], .radio input[type=radio] { visibility: hidden; margin-top: 0; margin-left: -25px; cursor: pointer } .radio-inline input[type=radio]:after, .radio input[type=radio]:after { content: ""; visibility: visible; border: 1px solid #666; display: block; position: absolute; margin: auto; height: 17px; width: 17px; border-radius: 50%; background: #f7f7f7; transition: border .15s ease-in-out } .radio-inline input[type=radio]~span, .radio input[type=radio]~span { transition: color .3s ease-in-out } .radio-inline input[type=radio]:checked:after, .radio input[type=radio]:checked:after { border: 4.5px solid #00a2e8 } .radio-inline input[type=radio]:checked~span, .radio input[type=radio]:checked~span { color: #000 } .radio-inline { padding-left: 25px } .btn { padding: 6px 15px; border-radius: 0 } .btn.disabled { background-color: initial } .btn.btn-success { font-weight: 600; background-color: #04e04e; border-color: #04e04e } .btn.btn-success:hover { background-color: #029c36; border-color: #029c36 } .btn.btn-success:active { background-color: #01591f; border-color: #01591f } .btn.btn-danger { font-weight: 600; background-color: #c00; border-color: #c00 } .btn.btn-danger:hover { background-color: #ad0404; border-color: #ad0404 } .btn.btn-danger:active { background-color: #8a0707; border-color: #8a0707 } .tooltip { font-family: Gotham } .tooltip.top .tooltip-arrow { border-top-color: #666 } .tooltip-inner { background-color: #666 } .label { vertical-align: middle; font-size: 60% } .label .badge { margin-left: 5px; padding: 1px 4px } .label-danger .badge { background-color: #fff; color: #d9534f } .label-success .badge { background-color: #fff; color: #5cb85c } .label-default .badge { background-color: #fff; color: #777 } .well { padding: 0 } @media(min-width:480px) { .well { padding: 19px } } @media(min-width:768px) { .form-horizontal .control-label { padding-top: 0; margin-bottom: 8px } .form-horizontal .form-group.has-error .control-label { margin-bottom: 0 } .form-horizontal .form-group label { text-align: left; height: 48px; display: flex; align-items: center; justify-content: flex-start } .form-horizontal .form-group .radio>label, .form-horizontal .form-group label.radio-label { height: auto } } input[type=number] { -moz-appearance: textfield !important } input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0 } /*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ html { font-family: sans-serif; line-height: 1.15; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100% } body { margin: 0 } article, aside, details, figcaption, figure, footer, header, main, menu, nav, section, summary { display: block } audio, canvas, progress, video { display: inline-block } audio:not([controls]) { display: none; height: 0 } progress { vertical-align: initial } [hidden], template { display: none } a { background-color: initial; -webkit-text-decoration-skip: objects } a:active, a:hover { outline-width: 0 } abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted } b, strong { font-weight: inherit; font-weight: bolder } dfn { font-style: italic } h1 { font-size: 2em; margin: .67em 0 } mark { background-color: #ff0; color: #000 } small { font-size: 80% } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: initial } sub { bottom: -.25em } sup { top: -.5em } img { border-style: none } svg:not(:root) { overflow: hidden } code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em } figure { margin: 1em 40px } hr { box-sizing: initial; height: 0; overflow: visible } button, input, optgroup, select, textarea { font: inherit; margin: 0 } optgroup { font-weight: 700 } button, input { overflow: visible } button, select { text-transform: none } [type=reset], [type=submit], button, html [type=button] { -webkit-appearance: button } [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner { border-style: none; padding: 0 } [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring { outline: 1px dotted ButtonText } fieldset { border: 1px solid silver; margin: 0 2px; padding: .35em .625em .75em } legend { box-sizing: border-box; color: inherit; display: table; max-width: 100%; padding: 0; white-space: normal } textarea { overflow: auto } [type=checkbox], [type=radio] { box-sizing: border-box; padding: 0 } [type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button { height: auto } [type=search] { -webkit-appearance: textfield; outline-offset: -2px } [type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration { -webkit-appearance: none } ::-webkit-input-placeholder { color: inherit; opacity: .54 } ::-webkit-file-upload-button { -webkit-appearance: button; font: inherit } @keyframes spin { to { transform: rotate(1turn) } } @keyframes ellipsis { to { width: 20px } } html { box-sizing: border-box } body, html { position: fixed; top: 0; left: 0; right: 0; bottom: 0; overflow: hidden; color: #333; margin: 0; padding: 0; font-size: 16px; font-family: Gotham; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale } *, :after, :before { box-sizing: inherit } h2 { font-size: 30px; font-weight: 300; letter-spacing: .3px; line-height: 35px } p.bold, span.bold { font-weight: 600 } p { font-size: 16px; letter-spacing: .3px } p.bold { font-weight: 600 } p.note { font-size: 14px; font-style: italic; color: grey } p.check { font-size: 12px; margin-left: 2px } p.check-connected { color: #04e04e } p.check-intermittent { color: #f2ca00 } p.check-disconnected { color: #c00 } p.double-check-text { padding-top: 15px } p.loading:after { overflow: hidden; display: inline-block; vertical-align: bottom; content: "…"; width: 0; animation: ellipsis .9s steps(4) infinite } span.delete-icon { color: #c00 } span.delete-icon:hover { color: #ad0404 } span.delete-icon:active { color: #8a0707 } span.active-connected { color: #000 !important } span.checkmark { color: #04e04e !important } span.caret { margin-left: 5px } a, button { -webkit-user-select: none; user-select: none } a:active, a:focus, button:active, button:focus { outline: none !important } a.btn-link, button.btn-link { font-weight: 600; color: #00a2e8; font-size: 13px; line-height: 15px; letter-spacing: .3px; transition: color .15s ease-in-out } a.btn-link:hover, button.btn-link:hover { text-decoration: none; color: #0487c0 } a.btn-link:focus, button.btn-link:focus { text-decoration: none; color: #00a2e8 } a.btn-link:active, button.btn-link:active { text-decoration: none; color: #005175 } a.btn-error, button.btn-error { font-weight: 600; color: #c00 } a.btn-error:hover, button.btn-error:hover { text-decoration: none; color: #ad0404 } a.btn-error:focus, button.btn-error:focus { text-decoration: none; color: #c00 } a.btn-error:active, button.btn-error:active { text-decoration: none; color: #8a0707 } a.btn-clear, button.btn-clear { border: 1px solid #fff; border-radius: 0; color: #fff; font-weight: 500; line-height: 15px; letter-spacing: .3px; padding: 10px 0; background-color: initial; transition: background-color .15s ease-in-out } a.btn-clear:hover, button.btn-clear:hover { background-color: hsla(0, 0%, 100%, .05); color: #fff } a.btn-clear:focus, button.btn-clear:focus { background-color: initial; color: #fff } a.btn-clear:active, button.btn-clear:active { background-color: hsla(0, 0%, 100%, .15); color: #fff } a.btn-anchor-bottom, button.btn-anchor-bottom { position: absolute; left: 0; right: 0; bottom: 85px } a.refresh, button.refresh { color: grey; text-decoration: underline } a.default-cursor, button.default-cursor { cursor: auto !important } a.btn-delete, button.btn-delete { padding-top: 0; padding-bottom: 0; float: right } a.left, button.left { float: left } a.right, button.right { float: right } ul { padding-left: 0; list-style: none } label { font-weight: 400; font-size: 13px; letter-spacing: .3px; line-height: 15px; color: #666; margin-bottom: 15px } label.item-label { border-bottom: 1px solid #efefef; padding-bottom: 15px; letter-spacing: .27px; display: block } label img.input-info { margin-left: 10px } input:not([type=checkbox]):not([type=radio]) { -webkit-appearance: none } input:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px #f1fafe inset !important; -webkit-text-fill-color: #000 !important } button[type=submit], input[type=file] { opacity: 0; width: 0; height: 0; overflow: hidden; position: absolute; padding: 0; border: none } form.show-submit button[type=submit] { opacity: 1; width: auto; height: auto; overflow: initial; position: static; padding: initial; border: initial } img.spinner { animation: spin 1s linear infinite } img.spinner.xs { width: 20px; height: 20px } img.spinner.sm { width: 40px; height: 40px } img.info.md, img.warning.md { width: 25px; height: 25px } img.info.sm, img.warning.sm { width: 18px; height: 18px } img.caution.md { width: 26.79px; height: 25px } img.caution.sm { width: 19.29px; height: 18px } .btn-action { color: #fff !important; border-radius: 0 } .btn-action, .btn-action.disabled { background-color: #00a2e8; border-color: #00a2e8 } .btn-action:hover { background-color: #0487c0; border-color: #0487c0 } .btn-action:active { background-color: #005175; border-color: #005175 } .disabled, .uneditable { pointer-events: none !important; cursor: default !important } .disabled:active, .disabled:focus, .uneditable:active, .uneditable:focus { text-decoration: none !important } .disabled { color: #ccc !important } .uneditable { color: #666 !important } .line-breaks { white-space: pre-wrap } .no-margin { margin: 0 !important } .no-padding { padding: 0 !important } .no-padding-bottom { padding-bottom: 0 !important } .no-horizontal-padding { padding-left: 0 !important; padding-right: 0 !important } .no-border { border: none !important } .no-cursor { cursor: default !important } .hand { cursor: pointer } .vertical-align { display: flex; align-items: center } .horizontal-row-align { flex-direction: row } .center-align, .horizontal-row-align { display: flex; justify-content: center; align-items: center } .position-relative { position: relative } .inline-block { display: inline-block } .ellipsis { text-overflow: ellipsis; white-space: nowrap; overflow: hidden } .input-group span.connect { color: #fff; font-weight: 600 } .input-group.focus .input-verified, .input-group:active .input-verified, .input-group:hover .input-verified { border-right: 1px solid #666 !important } .advanced-settings-toggle { -webkit-user-select: none; user-select: none; margin-bottom: 15px; cursor: pointer; display: inline-block } .advanced-settings-toggle .advanced-settings-text { font-weight: 400; font-size: 13px; color: #35454c; display: inline } .advanced-settings-toggle .advanced-settings-input-fields { margin-top: 12px } .clipboard-image { width: 20px; pointer-events: none } .success-checkmark-image { width: 50px; height: auto } .vertical-spacing { margin-top: 25px; margin-bottom: 25px } .full-width { width: 100% } .text-black { color: #000 !important } .text-lowercase { text-transform: lowercase } .required-field-helper-text { color: #c00; text-align: right; font-size: 12px; padding-top: 12.5px } @media(min-width:360px) { .required-field-helper-text { margin-bottom: 25px } } .required-field-asterisk:after { content: "*"; padding: 4px; font-size: 16px; font-weight: 700; color: #c00 } .modal-header { padding-top: 30px; padding-bottom: 30px } .modal-body { padding-top: 50px; padding-bottom: 25px } .modal-footer { padding-top: 30px; padding-bottom: 30px } .app { height: 100%; display: flex; flex-direction: column; overflow-x: hidden; overflow-y: scroll; -webkit-overflow-scrolling: touch } .core-layout__viewport { flex: 1; padding-bottom: 60px; position: relative } .core-layout__viewport.wizard-container { background-image: linear-gradient(180deg, #fff 0, #e7e7e7); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFE7E7E7", GradientType=0); background-repeat: repeat-x } .core-layout__viewport.success-container { background-color: #35454c } .core-layout__viewport>.container { flex: 1 } @media(min-width:768px) { .app { overflow-x: auto } } .input-group-action { padding: 6px 22px; background-color: #00a2e8; border-color: #00a2e8; transition: background-color .15s ease-in-out, border-color .15s ease-in-out } .input-group-action:active, .input-group-action:focus { background-color: #005175; border-color: #005175 } .input-group-default { padding: 6px 22px; background-color: #fff } .input-group-blend, .input-group-default, .input-group-validation { transition: background-color .15s ease-in-out, border-color .15s ease-in-out } .input-group-blend { padding: 6px 18px; background-color: #f7f7f7 } .input-group-blend:focus, .input-group-blend:hover { cursor: default } .password-input button[type=submit] { opacity: 0; width: 0; height: 0; overflow: hidden; position: absolute; padding: 0; border: none } .password-input .eye-icon { position: absolute; top: 0; bottom: 0; margin: auto; z-index: 20; opacity: .8; right: 15px } .password-input .eye-icon-submittable { right: 70px } .password-input .password-field-with-icon { padding-right: 60px } @keyframes fade-in { 0% { opacity: 0 } to { opacity: 1 } } .dropdown { display: inline-block; width: 100% } .dropdown select { position: absolute; -webkit-appearance: menulist-button; width: 100%; height: 100% } .dropdown select:focus { outline: none } .dropdown .dropdown-toggle { height: 48px; width: 100%; border: 1px solid #ccc; background-color: #f7f7f7; text-align: left; padding: 2px 25px 3px 10px; position: relative; font-size: 16px; color: #000; overflow: hidden; text-overflow: ellipsis } .dropdown .dropdown-toggle.ios { pointer-events: none } .dropdown .dropdown-toggle img { position: absolute; right: 10px; top: 50%; margin-top: -4px } .dropdown .dropdown-menu { margin-top: 0; border: 1px solid #666; border-top: none; border-radius: 0; width: 100%; padding: 0 0 10px; box-shadow: none; background-color: #f7f7f7; min-width: 0; max-height: 50vh; overflow-y: scroll; animation: fade-in .15s ease-in-out } @media(max-height:720px) { .dropdown .dropdown-menu { max-height: 35vh } } .dropdown .dropdown-menu::-webkit-scrollbar { -webkit-overflow-scrolling: auto; -webkit-appearance: none; background-color: #f7f7f7 } .dropdown .dropdown-menu::-webkit-scrollbar:vertical { width: 11px } .dropdown .dropdown-menu::-webkit-scrollbar:horizontal { height: 11px } .dropdown .dropdown-menu::-webkit-scrollbar-thumb { border-radius: 8px; border: 2px solid #f7f7f7; background-color: #666 } .dropdown .dropdown-menu>li { height: 48px } .dropdown .dropdown-menu>li>a { font-size: 16px; color: #000; padding: 0 10px; line-height: 48px; overflow: hidden; text-overflow: ellipsis } .dropdown .dropdown-menu>li>a:hover { background-color: #efefef } .dropdown .dropdown-menu>li>a:focus { background-color: #00a2e8; color: #fff } .dropdown.open .dropdown-toggle { border: 1px solid; border-color: #666 #666 #ccc; color: #ccc } .caret-down { transform: rotate(180deg) } @includes keyframes(Select-animation-fadeIn) { 0% { opacity: 0 } to { opacity: 1 } } .Select { position: relative } .Select.disabled .Select-placeholder { color: #ccc !important } .Select, .Select div, .Select input, .Select span { box-sizing: border-box } .Select.is-disabled>.Select-control { background-color: #f7f7f7 } .Select.is-disabled>.Select-control:hover { box-shadow: none } .Select.is-disabled .Select-arrow-zone { cursor: default; pointer-events: none; opacity: .35 } .Select-control { background-color: #f7f7f7; border: 1px solid #ccc; font-size: 16px; color: #000; padding: 2px 2px 3px 10px; text-align: left; cursor: default; border-spacing: 0; border-collapse: initial; min-height: 48px; outline: none; overflow: hidden; position: relative; width: 100% } .Select-control .Select-input:focus { outline: none } .is-searchable.is-open>.Select-control { cursor: text; border: 1px solid #666 } .is-open>.Select-control { border-bottom-right-radius: 0; border-bottom-left-radius: 0; background: #f7f7f7; border-color: #b3b3b3 #ccc #d9d9d9 } .is-open>.Select-control .Select-arrow { top: -2px; border-color: transparent transparent #999; border-width: 0 5px 5px } .is-searchable.is-focused:not(.is-open)>.Select-control { cursor: text } .Select--single>.Select-control .Select-value, .Select-placeholder { bottom: 0; color: #000; left: 0; padding: 12px 10px 3px; position: absolute; right: 0; top: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } .has-value.is-pseudo-focused.Select--single>.Select-control .Select-value .Select-value-label, .has-value.Select--single>.Select-control .Select-value .Select-value-label { color: #000 } .has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label, .has-value.Select--single>.Select-control .Select-value a.Select-value-label { cursor: pointer; text-decoration: none } .has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:focus, .has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:hover, .has-value.Select--single>.Select-control .Select-value a.Select-value-label:focus, .has-value.Select--single>.Select-control .Select-value a.Select-value-label:hover { outline: none; text-decoration: underline } .Select-input { font-size: 16px; color: #000; background-color: #f7f7f7; width: 100%; vertical-align: middle } .Select-input>input { width: 100%; background: none transparent; border: 0; box-shadow: none; cursor: default; display: inline-block; font-family: inherit; font-size: inherit; margin: 3px 0 0; outline: none; line-height: 36px; padding: 0; -webkit-appearance: none } .is-focused .Select-input>input { cursor: text } .has-value.is-pseudo-focused .Select-input { opacity: 0 } .Select-control:not(.is-searchable)>.Select-input { outline: none } .Select-loading-zone { cursor: pointer; text-align: center } .Select-loading, .Select-loading-zone { position: relative; vertical-align: middle; width: 16px } .Select-loading { animation: Select-animation-spin .4s linear infinite; height: 16px; box-sizing: border-box; border-radius: 50%; border: 2px solid #ccc; border-right-color: #000; display: inline-block } .Select-clear-zone { animation: Select-animation-fadeIn .2s; color: #999; cursor: pointer; position: absolute; text-align: center; vertical-align: middle; width: 17px; right: 30px; top: 27% } .Select-clear-zone:hover { color: #d0021b } .Select-clear { display: inline-block; font-size: 18px; line-height: 1 } .Select--multi .Select-clear-zone { width: 17px } .Select-arrow-zone { cursor: pointer; position: absolute; text-align: center; vertical-align: middle; width: 25px; right: 4px; top: 24% } .Select-arrow { border-color: #999 transparent transparent; border-style: solid; border-width: 5px 5px 2.5px; display: inline-block; height: 0; width: 0; position: relative } .is-open .Select-arrow, .Select-arrow-zone:hover>.Select-arrow { border-top-color: #666 } .Select--multi .Select-multi-value-wrapper { display: inline-block } .Select .Select-aria-only { display: inline-block; height: 1px; width: 1px; margin: -1px; clip: rect(0, 0, 0, 0); overflow: hidden; float: left } .Select-menu-outer { background-color: #f7f7f7; border: 1px solid #666; border-top-color: #ccc; box-shadow: none; box-sizing: border-box; margin-top: -1px; margin-bottom: 48px; max-height: 300px; position: absolute; top: 100%; width: 100%; z-index: 3; -webkit-overflow-scrolling: touch } .Select-menu { max-height: 298px; overflow-y: auto } .Select-option { box-sizing: border-box; background-color: #f7f7f7; color: #000; cursor: pointer; display: block; padding: 0 10px; line-height: 48px; animation: fade-in .15s ease-in-out } .Select-option.is-focused, .Select-option.is-selected { background-color: #efefef; color: #000 } .Select-option.is-disabled { color: #ccc; cursor: default } .Select-noresults { box-sizing: border-box; color: #999; cursor: default; display: block; padding: 8px 10px } .Select-noresults:focus, .Select-noresults:hover { background-color: #efefef } .Select--multi .Select-input { vertical-align: middle; margin-left: 0; padding: 0 } .Select--multi.has-value .Select-input { margin-left: 5px } .Select--multi .Select-value { background-color: #efefef; background-color: rgba(0, 126, 255, .08); border: 1px solid #ccc; border: 1px solid rgba(0, 126, 255, .24); color: #007eff; display: inline-block; font-size: 16px; line-height: 1.4; margin-left: 5px; margin-top: 5px; vertical-align: top } .Select--multi .Select-value-icon, .Select--multi .Select-value-label { display: inline-block; vertical-align: middle } .Select--multi .Select-value-label { border-bottom-right-radius: 2px; border-top-right-radius: 2px; cursor: default; padding: 2px 5px } .Select--multi a.Select-value-label { cursor: pointer; text-decoration: none } .Select--multi a.Select-value-label:hover { text-decoration: underline } .is-open .Select-control>.Select-multi-value-wrapper>.Select-value>.Select-value-label { color: #ccc } .Select--multi .Select-value-icon { cursor: pointer; border-bottom-left-radius: 2px; border-top-left-radius: 2px; border-right: 1px solid #c2e0ff; border-right: 1px solid rgba(0, 126, 255, .24); padding: 1px 5px 3px } .Select--multi .Select-value-icon:focus, .Select--multi .Select-value-icon:hover { background-color: #f7f7f7; background-color: rgba(0, 113, 230, .08) } .Select--multi .Select-value-icon:active { background-color: #f7f7f7; background-color: rgba(0, 126, 255, .24) } .Select--multi.is-disabled .Select-value { background-color: #f7f7f7; border: 1px solid #e3e3e3; color: #000 } .Select--multi.is-disabled .Select-value-icon { cursor: not-allowed; border-right: 1px solid #e3e3e3 } .Select--multi.is-disabled .Select-value-icon:active, .Select--multi.is-disabled .Select-value-icon:focus, .Select--multi.is-disabled .Select-value-icon:hover { background-color: #f7f7f7 } @keyframes Select-animation-spin { to { transform: rotate(1turn) } } .Select-not-listed { line-height: 36px; color: #000; cursor: pointer } @media(max-width:580px) { .Select-clear-zone { animation: Select-animation-fadeIn .2s; color: #999; cursor: pointer; position: relative; text-align: center; vertical-align: middle; width: 17px; right: 0; top: 0 } .Select-option { border-bottom: 1px solid hsla(0, 0%, 40%, .3); word-wrap: break-word; line-height: 24px; padding: 11.5px 10px } .Select-option:last-of-type { border-bottom: none } } .Select-create-option-placeholder { font-style: italic } .login label { color: #666 } .login label>.info-icon { padding-left: 5px; vertical-align: bottom } .login input { background-color: #fff } .login .forgot-form { margin-bottom: 0 } .login .forgot-form #forgot-password { text-align: right } .login .form-group { margin-bottom: 15px } @media(min-width:768px) { .login .form-group { margin-bottom: 25px } } .modal-banner-container { display: flex; flex-direction: column; align-items: center; overflow: hidden; width: 100%; padding: 25px; color: #fff; background: #5f85e7 } .modal-banner-container .banner-content-container { display: flex; flex-direction: row; margin-bottom: 15px } .modal-banner-container .banner-content-container .banner-img-container { display: flex; flex-direction: column; justify-content: space-around; padding-right: 25px; padding-left: 30px; border-radius: 25px } .modal-banner-container .banner-content-container .banner-img-container img { height: 75px; width: 75px; border-radius: 20%; overflow: hidden } .modal-banner-container .banner-content-container .banner-text-container { display: flex; flex-direction: column; justify-content: center; max-width: 200px } .modal-banner-container .banner-content-container .banner-text-container h4, .modal-banner-container .banner-content-container .banner-text-container span { font-weight: 700; font-size: 16px; padding: 0; line-height: 1.5 } .modal-banner-container .banner-content-button { padding: 10px 20px; border: 0; border-radius: 4px; min-width: 300px; background-color: #fff; color: #000 } .energy-icon, .energy-icon .centered { display: flex; flex-direction: column } .energy-icon .centered { align-items: center; justify-content: center } .energy-icon .icon-container { border-width: 1px; border-style: solid } .energy-icon .icon-container.default-icon-container { border-style: dotted } .grid-services { border-radius: 25px; background-color: #f3f3f3; padding: 0 10px; position: relative; top: -25px; text-align: center; margin: auto; width: 150px } .grid-services>span.grid-services-text { font-size: 12px; color: grey } .circle:before { content: "●"; font-size: 20px } .circle { font-size: 20px; vertical-align: middle; margin-right: 3px; color: #029c36 } .collapsible-container { width: 100% } .collapsible-container:last-child { border-bottom: none } .collapsible-container>.collapsible-header { cursor: pointer; position: relative; display: flex; flex-direction: row; text-align: left; justify-content: space-between; align-items: center } .rotate-90 { transform: rotate(90deg) } .system-container { display: flex; flex-direction: column; margin: 10px } .system-container .system-loading-spinner { margin: 24px auto } .system-sitecontroller { padding-bottom: 15px; margin-bottom: 15px; border-bottom: 1px solid grey } .system-sitecontroller:last-child { margin-bottom: 0; border-bottom: none } .system-device-header { margin-top: 12px; margin-bottom: 6px; width: 95% } .system-device-body { margin-left: 20px } .system-device-update-progress progress { display: block; width: 100% } .vitals-section { margin: 10px 0 0 -15px; font-weight: 700; font-size: 14px } .powerwall-plus-section { margin-left: 15px } .inverter-power-buttons { display: flex; flex-direction: row; margin: 8px 0 } .inverter-power-buttons button { padding: 8px 12px; border-width: 0; margin: 0 1px; font-weight: 700; font-size: 14px; color: #000 } .inverter-power-buttons .inverter-power-button-selected { background-color: #00a2e8 } .inverter-power-buttons .inverter-power-button-left { border-top-left-radius: 8px; border-bottom-left-radius: 8px } .inverter-power-buttons .inverter-power-button-right { border-top-right-radius: 8px; border-bottom-right-radius: 8px } .inverter-power-buttons button:disabled { background-color: #ccc; color: #aaa } .inverter-power-buttons button:disabled.inverter-power-button-selected { background-color: #8bb9cc; color: #888 } .inverter-reset-button { border-radius: 8px; padding: 8px 12px; border-width: 0; margin: 0 1px; font-weight: 700; font-size: 14px; color: #000 } .vitals-value { font-size: 14px; margin-bottom: 0 } .vitals-value-selftest { font-weight: 700; color: #00a2e8 } .vitals-value-fault { font-weight: 700; color: #c00 } .vitals-value-muted { color: #aaa } .vitals-value-error { color: #c00 } .vitals-value-warning { color: #00a2e8 } .vitals-heading { color: #666; font-size: 16px; margin-top: 0 } .vitals-item { margin-right: 15px; margin-left: 15px; margin-top: 25px } .vitals-item:last-child { margin-bottom: 25px } .device-alert { color: red; margin: 8px } .device-alert-note { color: #000; margin-left: 24px; font-size: smaller; font-style: italic } .device-attention { display: inline-block; width: 1em; height: 1em; line-height: 1em; border-radius: 50%; text-align: center; font-weight: 700; color: #fff; background-color: red; margin: 0 2px } .device-attention:before { content: "!" } .system-warning-subtitle { font-size: larger; font-weight: 700; color: red } .powerwall-pairing-container { margin: 20px 0 10px } .powerwall-pairing-container .powerwall-pairing-link { display: block; text-transform: uppercase; font-size: smaller; font-weight: 700 } .powerwall-pairing-container .powerwall-pairing-link:before { content: "+ " } .powerwall-pairing-container .powerwall-pairing-column { position: relative; display: flex; flex-direction: column } .powerwall-pairing-container .powerwall-pairing-row { display: flex; flex-direction: row; justify-content: space-around; flex: 1 } .powerwall-pairing-container .powerwall-pairing-message { color: #000 } .powerwall-pairing-container .powerwall-pairing-success { color: green } .powerwall-pairing-container .powerwall-pairing-error { color: red } .powerwall-pairing-container .progress-bar { width: 100% } .powerwall-scanning-link { display: block; text-transform: uppercase; font-size: smaller; font-weight: 700 } .powerwall-scanning-link-disabled { color: #666 } .installation-problem { margin: 5px 0; padding: 10px; border: 2px solid red; background: #fff; color: #000; max-width: 768px } .installation-problem .installation-problem-title { font-weight: 700 } .installation-problem .installation-problem-title:before { content: "⚠️"; font-size: 32px; margin-right: 8px; float: right } .installation-problem .installation-problem-image { margin: 0 } .installation-problem .installation-problem-image img { width: 100% } .installation-problem .installation-problem-details { font-style: italic; margin-left: 10px } .installation-problem .installation-problem-details ul { list-style: unset } .installation-problem .installation-problem-details ul li { margin-left: 20px } @keyframes opacity-pulse { 0% { opacity: .12 } 5% { opacity: 0 } 15% { opacity: .12 } 25% { opacity: .2 } to { opacity: .2 } } .power-flow { display: flex; flex-direction: column; align-items: center; position: relative } .power-flow .glow-container { position: absolute; border-style: solid; margin: 0 auto; box-sizing: initial; animation: opacity-pulse 1s ease-in-out infinite } .power-flow .label-container { position: absolute; z-index: 5; margin: 0 auto } .power-flow .label-container p { text-align: center; font-weight: 600; margin: 0 } .power-flow .label-container.label-inactive p { color: #ccc; opacity: .5 } .power-flow .label-container img.label-image { margin-right: 5px; vertical-align: sub } .power-flow .label-container #missing-meter-label { font-size: 28px } .power-flow .islanded-container { position: absolute; z-index: 4; margin: 0 auto } .power-flow .grid-row-container { display: flex; flex-direction: row; justify-content: center; align-items: center } .power-flow p.icon-text { font-size: 14px; padding-top: 5px; color: #fff } .power-flow .inactive { opacity: .5 } .power-flow .compact-btn-row { display: flex; flex-direction: row; justify-content: flex-start; align-items: center } .power-flow .btn-sitemaster { margin-top: 25px; margin-bottom: 25px } .power-flow .btn-sitemaster.btn-stop { background-color: #c00; border-color: #c00 } .power-flow .btn-sitemaster.btn-stop:hover { background-color: #ad0404; border-color: #ad0404 } .power-flow .btn-sitemaster.btn-stop:active { background-color: #8a0707; border-color: #8a0707 } .power-flow .btn-sitemaster.btn-stop:disabled { background-color: #ccc; border-color: #ccc } .power-flow .btn-sitemaster.btn-start { background-color: #04e04e; border-color: #04e04e } .power-flow .btn-sitemaster.btn-start:hover { background-color: #029c36; border-color: #029c36 } .power-flow .btn-sitemaster.btn-start:active { background-color: #01591f; border-color: #01591f } .power-flow .btn-sitemaster.btn-start:disabled { background-color: #ccc; border-color: #ccc } .power-flow .disabled-explanation { display: block; text-align: center; margin-top: -19px; margin-bottom: 6px } .power-flow circle { fill: inherit } .power-flow .powerwall-soe { position: absolute; top: 0; left: 0; right: 0; margin: 0 auto } .power-flow-grid { background-color: #f7f7f7; width: 100vw; left: 50%; right: 50%; margin-left: -50vw; margin-right: -50vw; position: relative } .power-flow-grid.error { background-color: #fff !important; border-bottom: 1px solid #efefef } .power-flow-grid.active { background-color: #35454c } .auto-config { margin: 15px 0 } .auto-config button { border-radius: 3px; color: #000; font-weight: 700 } .auto-config-done-button { display: block; margin-left: auto; margin-right: 50px } .auto-config-state { margin-top: 8px; margin-left: 20px } .auto-config-complete, .auto-config-pending { color: green; font-weight: 700 } .auto-config-error-state { color: red } .auto-config-action { margin: 10px; color: #000; font-size: smaller; font-style: italic } .auto-config-throbber { animation-name: auto-config-throb; animation-duration: 2.5s; animation-iteration-count: infinite } @keyframes auto-config-throb { 0% { color: #000 } 50% { color: transparent } to { color: #000 } } .menu-item { border-bottom: 1px solid #efefef } .menu-item>a { display: block; position: relative; color: #000; text-decoration: initial; padding: 15px 0 } .menu-item>a:hover { cursor: pointer; text-decoration: none } .menu-item>a>img { position: absolute; right: 5px; top: 50% } .menu-item>a>img.caret-right { margin-top: -7px } .menu-item>a>img.caret-down, .menu-item>a>img.caret-up { margin-top: -4px } .menu-item>a>img.no-float { position: inherit; right: inherit; top: inherit } .menu-item>a>.delete-icon { font-size: 30px; position: absolute; right: 5px; top: 50%; margin-top: -20px } .menu-item .single-title { margin: 0; padding: 10px 0 } .menu-item .single-title, .menu-item .subtitle, .menu-item .title { font-size: 16px; letter-spacing: .3px } .menu-item .title { color: #000; font-weight: 400 } .menu-item .title>span { color: grey } .menu-item .subtitle { color: #666 } ul.menu-items { margin: 0 } ul.menu-items>li .subtitle { color: grey } .power-flow-header { background-color: #35454c; position: absolute; top: 15px; left: 0; right: 0; z-index: 2 } .power-flow-header p.name { font-weight: 600; text-align: center; color: #fff; margin: 0 } .power-flow-header p.name.not-connected { color: red } .power-flow-header p.name.connected { color: green } .power-flow-header p.name.scanning, .power-flow-header p.name.updating { animation: scanning-updating-throb 2.5s infinite } .power-flow-header.inactive { background-color: #f7f7f7 } .power-flow-header.inactive p.name { color: #666 } @keyframes scanning-updating-throb { 0% { color: #ff0 } 50% { color: rgba(255, 255, 0, .5) } to { color: #ff0 } } .power-flow-grid { padding-top: 64px } .power-flow-grid~ul.overview-menu>li:first-child { border-top: 1px solid #efefef } .home .btn-link { margin: 25px 0 } .home .compliance-row { display: flex; align-items: center; margin-bottom: 24px } .home .download-logo-button { display: flex; align-items: center; margin-left: auto; padding: 15px 0 0 } .home .align-image-right { height: 15%; width: 15%; margin-left: auto; padding-right: 10px } .home .footer { position: absolute; left: 0 } .home .footer a.cancel-link { cursor: auto } .home .footer a.cancel-link:hover { color: #666 } .home .navigation-row { padding-top: 60px } .modal-sitemaster .modal-footer { text-align: left } .soft-blocker-container { z-index: 2000; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #eaeaea; padding: 30px } .carousel-display-container { position: fixed; top: 0; left: 0; display: flex; flex-direction: column; align-items: center; padding: 30px; width: 100% } .carousel-display-container img { max-height: 90vh } .carousel-display-container .carousel-toggle-left { position: fixed; top: 0; left: 0; width: 25%; height: 65% } .carousel-display-container .carousel-toggle-right { position: fixed; top: 0; left: 75%; width: 25%; height: 65% } .carousel-menu-container { z-index: 2001; position: fixed; bottom: 0; left: 0; background-color: #fff; width: 100%; height: 35%; padding: 30px } .carousel-menu-container h3 { margin-top: 0; font-size: 16px; font-weight: 600 } .carousel-menu-container p { font-size: 12px } .carousel-menu-container .menu-carousel-tabs { display: flex; flex-direction: row; justify-content: center; gap: 10px; padding-bottom: 30px } .carousel-menu-container .button-continue { position: fixed; bottom: 30px; background-color: #3e6ae1; color: #fff; padding: 10px; width: calc(100% - 60px); border-radius: 4px; border-style: none; text-align: center; font-size: 12px } @media(min-width:600px) { .carousel-menu-container .button-continue { width: 94px; left: calc(50% - 47px) } } .confirm-checkbox { text-align: center; margin: 30px } .confirm-checkbox-input { margin-top: -3px !important } .password-generate-container { display: flex; flex-direction: column; margin: 10px } .password-generate-container .password-generate-help-text { margin: 36px 0 } .password-generate-container .password-generate-spinner { margin-left: 12px; width: 24px; height: 24px } .password-generate-container .password-generate-notice { font-weight: 700 } .password-generate-container .password-generate-error { font-weight: 700; color: #c00 } .service-container { display: flex; flex-direction: column; margin: 10px } .factory-reset-modal-button, .factory-reset-modal-container { text-align: center; margin: 1em } ================================================ FILE: proxy/web/viz-static/app.js ================================================ !(function (e) { function t(t) { for (var n, r, s = t[0], _ = t[1], l = t[2], c = 0, u = []; c < s.length; c++) (r = s[c]), Object.prototype.hasOwnProperty.call(a, r) && a[r] && u.push(a[r][0]), (a[r] = 0); for (n in _) Object.prototype.hasOwnProperty.call(_, n) && (e[n] = _[n]); for (d && d(t); u.length; ) u.shift()(); return o.push.apply(o, l || []), i(); } function i() { for (var e, t = 0; t < o.length; t++) { for (var i = o[t], n = !0, r = 1; r < i.length; r++) { var _ = i[r]; 0 !== a[_] && (n = !1); } n && (o.splice(t--, 1), (e = s((s.s = i[0])))); } return e; } var n = {}, r = { 9: 0 }, a = { 9: 0 }, o = []; function s(t) { if (n[t]) return n[t].exports; var i = (n[t] = { i: t, l: !1, exports: {} }); return e[t].call(i.exports, i, i.exports, s), (i.l = !0), i.exports; } (s.e = function (e) { var t = []; r[e] ? t.push(r[e]) : 0 !== r[e] && { 2: 1, 4: 1, 5: 1, 6: 1, 7: 1, 10: 1, 11: 1, 12: 1, 13: 1, 14: 1, 15: 1, 16: 1, 17: 1, 18: 1, 19: 1, 20: 1, 21: 1, 22: 1, 23: 1, 24: 1, 25: 1, 27: 1, 30: 1, 31: 1, 32: 1, 33: 1, 34: 1, 35: 1, 36: 1, 37: 1, 38: 1 }[e] && t.push( (r[e] = new Promise(function (t, i) { for (var n = window.appPrefix + e + ".17c71172308436a079d1.css", a = s.p + n, o = document.getElementsByTagName("link"), _ = 0; _ < o.length; _++) { var l = (d = o[_]).getAttribute("data-href") || d.getAttribute("href"); if ("stylesheet" === d.rel && (l === n || l === a)) return t(); } var c = document.getElementsByTagName("style"); for (_ = 0; _ < c.length; _++) { var d; if ((l = (d = c[_]).getAttribute("data-href")) === n || l === a) return t(); } var u = document.createElement("link"); (u.rel = "stylesheet"), (u.type = "text/css"), (u.onload = t), (u.onerror = function (t) { var n = (t && t.target && t.target.src) || a, o = new Error("Loading CSS chunk " + e + " failed.\n(" + n + ")"); (o.code = "CSS_CHUNK_LOAD_FAILED"), (o.request = n), delete r[e], u.parentNode.removeChild(u), i(o); }), (u.href = a), document.getElementsByTagName("head")[0].appendChild(u); }).then(function () { r[e] = 0; })) ); var i = a[e]; if (0 !== i) if (i) t.push(i[2]); else { var n = new Promise(function (t, n) { i = a[e] = [t, n]; }); t.push((i[2] = n)); var o, _ = document.createElement("script"); (_.charset = "utf-8"), (_.timeout = 120), s.nc && _.setAttribute("nonce", s.nc), (_.src = (function (e) { return ( s.p + "" + ({ 2: "advanced-settings~control~meter-validation~settings", 3: "batteries~powerwall~summary", 4: "advanced-settings~settings", 5: "batteries", 6: "legal~registration", 7: "advanced-settings", 8: "alert", 10: "client-protocols", 11: "compliance", 12: "components", 13: "control", 14: "cts", 15: "diagnostics", 16: "generation", 17: "grid", 18: "installation", 19: "inverter", 20: "legal", 21: "meter", 22: "meter-validation", 23: "modbus", 24: "network", 25: "network-switch", 26: "open-loop-meter-validation", 27: "phase", 28: "powerwall", 29: "registration", 30: "security", 31: "self-test-log-viewer", 32: "settings", 33: "success", 34: "summary", 35: "timezone", 36: "update", 37: "upgrade", 38: "wizard", }[e] || e) + ".17c71172308436a079d1.js" ); })(e)); var l = new Error(); o = function (t) { (_.onerror = _.onload = null), clearTimeout(c); var i = a[e]; if (0 !== i) { if (i) { var n = t && ("load" === t.type ? "missing" : t.type), r = t && t.target && t.target.src; (l.message = "Loading chunk " + e + " failed.\n(" + n + ": " + r + ")"), (l.name = "ChunkLoadError"), (l.type = n), (l.request = r), i[1](l); } a[e] = void 0; } }; var c = setTimeout(function () { o({ type: "timeout", target: _ }); }, 12e4); (_.onerror = _.onload = o), document.head.appendChild(_); } return Promise.all(t); }), (s.m = e), (s.c = n), (s.d = function (e, t, i) { s.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: i }); }), (s.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }); }), (s.t = function (e, t) { if ((1 & t && (e = s(e)), 8 & t)) return e; if (4 & t && "object" == typeof e && e && e.__esModule) return e; var i = Object.create(null); if ((s.r(i), Object.defineProperty(i, "default", { enumerable: !0, value: e }), 2 & t && "string" != typeof e)) for (var n in e) s.d( i, n, function (t) { return e[t]; }.bind(null, n) ); return i; }), (s.n = function (e) { var t = e && e.__esModule ? function () { return e.default; } : function () { return e; }; return s.d(t, "a", t), t; }), (s.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t); }), (s.p = window.appPrefix), (s.oe = function (e) { throw (console.error(e), e); }); var _ = (window.webpackJsonp = window.webpackJsonp || []), l = _.push.bind(_); (_.push = t), (_ = _.slice()); for (var c = 0; c < _.length; c++) t(_[c]); var d = l; o.push([1050, 0]), i(); })([ , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "LOCATION_CHANGE", function () { return n; }), i.d(t, "SHOW_NAVIGATION", function () { return r; }), i.d(t, "UPDATE_NAVIGATION", function () { return a; }), i.d(t, "SHOW_BACK", function () { return o; }), i.d(t, "HIDE_BACK", function () { return s; }), i.d(t, "SHOW_CANCEL", function () { return _; }), i.d(t, "HIDE_CANCEL", function () { return l; }), i.d(t, "SHOW_FORWARD", function () { return c; }), i.d(t, "HIDE_FORWARD", function () { return d; }), i.d(t, "RESET_NAVIGATION", function () { return u; }), i.d(t, "SHOW_MODAL", function () { return m; }), i.d(t, "UPDATE_MODAL", function () { return p; }), i.d(t, "HIDE_MODAL", function () { return g; }), i.d(t, "DESTROY_MODAL", function () { return w; }), i.d(t, "SHOW_HEADER", function () { return v; }), i.d(t, "UPDATE_HEADER", function () { return f; }), i.d(t, "RESET_HEADER", function () { return h; }), i.d(t, "SHOW_BANNER", function () { return E; }), i.d(t, "DESTROY_BANNER", function () { return b; }), i.d(t, "DESTROY_ALL_BANNERS", function () { return y; }), i.d(t, "REQUEST_CONFIG_INITIALIZED", function () { return S; }), i.d(t, "RECEIVE_CONFIG_INITIALIZED", function () { return R; }), i.d(t, "RECEIVE_CONFIG_INITIALIZED_ERROR", function () { return T; }), i.d(t, "REQUEST_SYNC_CONFIG", function () { return A; }), i.d(t, "RECEIVE_SYNC_CONFIG_SUCCESS", function () { return C; }), i.d(t, "RECEIVE_SYNC_CONFIG_ERROR", function () { return I; }), i.d(t, "CHANGE_USERNAME", function () { return O; }), i.d(t, "CHANGE_LOGIN_TYPE", function () { return N; }), i.d(t, "REQUEST_LOGIN", function () { return k; }), i.d(t, "RECEIVE_LOGIN_SUCCESS", function () { return P; }), i.d(t, "RECEIVE_LOGIN_ERROR", function () { return D; }), i.d(t, "REQUEST_GENERATE_PASSWORD", function () { return L; }), i.d(t, "RECEIVE_GENERATE_PASSWORD_SUCCESS", function () { return M; }), i.d(t, "RECEIVE_GENERATE_PASSWORD_ERROR", function () { return z; }), i.d(t, "REQUEST_RESET_PASSWORD", function () { return U; }), i.d(t, "RECEIVE_RESET_PASSWORD_SUCCESS", function () { return V; }), i.d(t, "RECEIVE_RESET_PASSWORD_ERROR", function () { return G; }), i.d(t, "REQUEST_CHANGE_PASSWORD", function () { return j; }), i.d(t, "RECEIVE_CHANGE_PASSWORD_SUCCESS", function () { return W; }), i.d(t, "RECEIVE_CHANGE_PASSWORD_ERROR", function () { return F; }), i.d(t, "REQUEST_LOGOUT", function () { return q; }), i.d(t, "RECEIVE_LOGOUT_ERROR", function () { return x; }), i.d(t, "RESET_AUTHENTICATION", function () { return B; }), i.d(t, "REQUEST_START_TOGGLE_AUTH", function () { return H; }), i.d(t, "RECEIVE_START_TOGGLE_AUTH_SUCCESS", function () { return K; }), i.d(t, "RECEIVE_START_TOGGLE_AUTH_ERROR", function () { return Y; }), i.d(t, "REQUEST_CANCEL_TOGGLE_AUTH", function () { return Q; }), i.d(t, "RECEIVE_CANCEL_TOGGLE_AUTH_SUCCESS", function () { return Z; }), i.d(t, "RECEIVE_CANCEL_TOGGLE_AUTH_ERROR", function () { return J; }), i.d(t, "REQUEST_TOGGLE_AUTH_LOGIN", function () { return X; }), i.d(t, "RECEIVE_TOGGLE_AUTH_LOGIN_SUCCESS", function () { return $; }), i.d(t, "RECEIVE_TOGGLE_AUTH_LOGIN_ERROR", function () { return ee; }), i.d(t, "REQUEST_SUPPORTS_TOGGLE_AUTH", function () { return te; }), i.d(t, "RECEIVE_SUPPORTS_TOGGLE_AUTH_SUCCESS", function () { return ie; }), i.d(t, "RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR", function () { return ne; }), i.d(t, "REQUEST_NETWORKS", function () { return re; }), i.d(t, "RECEIVE_NETWORKS_SUCCESS", function () { return ae; }), i.d(t, "RECEIVE_NETWORKS_ERROR", function () { return oe; }), i.d(t, "REQUEST_ACCESS_POINTS", function () { return se; }), i.d(t, "RECEIVE_ACCESS_POINTS_SUCCESS", function () { return _e; }), i.d(t, "RECEIVE_ACCESS_POINTS_ERROR", function () { return le; }), i.d(t, "REQUEST_CONNECT_ETHERNET", function () { return ce; }), i.d(t, "RECEIVE_CONNECT_ETHERNET_SUCCESS", function () { return de; }), i.d(t, "RECEIVE_CONNECT_ETHERNET_ERROR", function () { return ue; }), i.d(t, "REQUEST_SCAN_WIFI_NETWORKS", function () { return me; }), i.d(t, "RECEIVE_SCAN_WIFI_NETWORKS_SUCCESS", function () { return pe; }), i.d(t, "RECEIVE_SCAN_WIFI_NETWORKS_ERROR", function () { return ge; }), i.d(t, "REQUEST_CONNECT_WIFI", function () { return we; }), i.d(t, "RECEIVE_CONNECT_WIFI_SUCCESS", function () { return ve; }), i.d(t, "RECEIVE_CONNECT_WIFI_ERROR", function () { return fe; }), i.d(t, "REQUEST_DISCONNECT_NETWORK", function () { return he; }), i.d(t, "RECEIVE_DISCONNECT_NETWORK_SUCCESS", function () { return Ee; }), i.d(t, "RECEIVE_DISCONNECT_NETWORK_ERROR", function () { return be; }), i.d(t, "REQUEST_DELETE_NETWORK", function () { return ye; }), i.d(t, "RECEIVE_DELETE_NETWORK_SUCCESS", function () { return Se; }), i.d(t, "RECEIVE_DELETE_NETWORK_ERROR", function () { return Re; }), i.d(t, "RESET_NETWORK_CONFIG", function () { return Te; }), i.d(t, "CANCEL_NETWORK", function () { return Ae; }), i.d(t, "REQUEST_CLIENT_PROTOCOLS", function () { return Ce; }), i.d(t, "RECEIVE_CLIENT_PROTOCOLS_SUCCESS", function () { return Ie; }), i.d(t, "RECEIVE_CLIENT_PROTOCOLS_ERROR", function () { return Oe; }), i.d(t, "RECEIVE_CHECK_UPDATE", function () { return Ne; }), i.d(t, "REQUEST_INSTALL_UPDATE", function () { return ke; }), i.d(t, "RECEIVE_CHECK_UPDATE_ERROR", function () { return Pe; }), i.d(t, "RECEIVE_START_UPDATE_ERROR", function () { return De; }), i.d(t, "DOWNLOAD_STALLED_ERROR", function () { return Le; }), i.d(t, "DOWNLOAD_PROGRESSING", function () { return Me; }), i.d(t, "REQUEST_UPDATE", function () { return ze; }), i.d(t, "RECEIVE_UPDATE_ERROR", function () { return Ue; }), i.d(t, "CANCEL_UPDATE", function () { return Ve; }), i.d(t, "SAVE_SYSTEM_INFO", function () { return Ge; }), i.d(t, "RESET_SYSTEM_INFO", function () { return je; }), i.d(t, "REQUEST_CHECK_UPDATE_URGENCY", function () { return We; }), i.d(t, "RECEIVE_CHECK_UPDATE_URGENCY", function () { return Fe; }), i.d(t, "RECEIVE_CHECK_UPDATE_URGENCY_ERROR", function () { return qe; }), i.d(t, "FACTORY_RESET", function () { return xe; }), i.d(t, "RESET_ALL", function () { return Be; }), i.d(t, "ADD_METER", function () { return He; }), i.d(t, "REMOVE_METER", function () { return Ke; }), i.d(t, "RESET_METER_CONFIG", function () { return Ye; }), i.d(t, "RESET_METER_CURRENT_TRANSFORMER_READINGS", function () { return Qe; }), i.d(t, "REQUEST_DETECT_METER", function () { return Ze; }), i.d(t, "RECEIVE_DETECT_METER_SUCCESS", function () { return Je; }), i.d(t, "RECEIVE_DETECT_METER_ERROR", function () { return Xe; }), i.d(t, "REQUEST_CREATE_METER", function () { return $e; }), i.d(t, "RECEIVE_CREATE_METER_SUCCESS", function () { return et; }), i.d(t, "RECEIVE_CREATE_METER_ERROR", function () { return tt; }), i.d(t, "REQUEST_DELETE_METER", function () { return it; }), i.d(t, "RECEIVE_DELETE_METER_SUCCESS", function () { return nt; }), i.d(t, "RECEIVE_DELETE_METER_ERROR", function () { return rt; }), i.d(t, "REQUEST_COMMISSION_METER", function () { return at; }), i.d(t, "RECEIVE_COMMISSION_METER_UPDATE", function () { return ot; }), i.d(t, "RECEIVE_COMMISSION_METER_SUCCESS", function () { return st; }), i.d(t, "RECEIVE_COMMISSION_METER_ERROR", function () { return _t; }), i.d(t, "REQUEST_METER_CONFIG", function () { return lt; }), i.d(t, "RECEIVE_METER_CONFIG_UPDATE", function () { return ct; }), i.d(t, "RECEIVE_METER_CONFIG_SUCCESS", function () { return dt; }), i.d(t, "RECEIVE_METER_CONFIG_ERROR", function () { return ut; }), i.d(t, "REQUEST_SET_METER_CTS", function () { return mt; }), i.d(t, "RECEIVE_SET_METER_CTS_SUCCESS", function () { return pt; }), i.d(t, "RECEIVE_SET_METER_CTS_ERROR", function () { return gt; }), i.d(t, "REQUEST_DELETE_METER_CTS", function () { return wt; }), i.d(t, "RECEIVE_DELETE_METER_CTS_SUCCESS", function () { return vt; }), i.d(t, "RECEIVE_DELETE_METER_CTS_ERROR", function () { return ft; }), i.d(t, "REQUEST_METER_READINGS", function () { return ht; }), i.d(t, "RECEIVE_METER_READINGS_SUCCESS", function () { return Et; }), i.d(t, "RECEIVE_METER_READINGS_ERROR", function () { return bt; }), i.d(t, "REQUEST_METER_FLIP_CT", function () { return yt; }), i.d(t, "RECEIVE_METER_FLIP_CT_SUCCESS", function () { return St; }), i.d(t, "RECEIVE_METER_FLIP_CT_ERROR", function () { return Rt; }), i.d(t, "REQUEST_METER_AGGREGATES", function () { return Tt; }), i.d(t, "RECEIVE_METER_AGGREGATES_SUCCESS", function () { return At; }), i.d(t, "RECEIVE_METER_AGGREGATES_ERROR", function () { return Ct; }), i.d(t, "CANCEL_METER", function () { return It; }), i.d(t, "REQUEST_METER_AMP_RATINGS", function () { return Ot; }), i.d(t, "RECEIVE_METER_AMP_RATINGS_SUCCESS", function () { return Nt; }), i.d(t, "RECEIVE_METER_AMP_RATINGS_ERROR", function () { return kt; }), i.d(t, "REQUEST_SET_METER_AMP_RATINGS", function () { return Pt; }), i.d(t, "RECEIVE_SET_METER_AMP_RATINGS_SUCCESS", function () { return Dt; }), i.d(t, "RECEIVE_SET_METER_AMP_RATINGS_ERROR", function () { return Lt; }), i.d(t, "REQUEST_SYNC_CT_VOLTAGE_REFERENCES", function () { return Mt; }), i.d(t, "RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS", function () { return zt; }), i.d(t, "RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR", function () { return Ut; }), i.d(t, "REQUEST_SET_SYNC_CT_VOLTAGE_REFERENCES", function () { return Vt; }), i.d(t, "RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS", function () { return Gt; }), i.d(t, "RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR", function () { return jt; }), i.d(t, "REQUEST_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS", function () { return Wt; }), i.d(t, "RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_SUCCESS", function () { return Ft; }), i.d(t, "RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR", function () { return qt; }), i.d(t, "REQUEST_ENABLE_INVERTER_METER_READINGS", function () { return xt; }), i.d(t, "RECEIVE_ENABLE_INVERTER_METER_READINGS_SUCCESS", function () { return Bt; }), i.d(t, "RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR", function () { return Ht; }), i.d(t, "REQUEST_GRID_CODES", function () { return Kt; }), i.d(t, "RECEIVE_GRID_CODES_SUCCESS", function () { return Yt; }), i.d(t, "RECEIVE_GRID_CODES_ERROR", function () { return Qt; }), i.d(t, "REQUEST_SAVE_GRID_CODE", function () { return Zt; }), i.d(t, "RECEIVE_SAVE_GRID_CODE_SUCCESS", function () { return Jt; }), i.d(t, "RECEIVE_SAVE_GRID_CODE_ERROR", function () { return Xt; }), i.d(t, "REQUEST_GRID_STATUS", function () { return $t; }), i.d(t, "RECEIVE_GRID_STATUS_SUCCESS", function () { return ei; }), i.d(t, "RECEIVE_GRID_STATUS_ERROR", function () { return ti; }), i.d(t, "REQUEST_SAVE_OFF_GRID", function () { return ii; }), i.d(t, "RECEIVE_SAVE_OFF_GRID_SUCCESS", function () { return ni; }), i.d(t, "RECEIVE_SAVE_OFF_GRID_ERROR", function () { return ri; }), i.d(t, "REQUEST_SAVE_GRID_PHASE", function () { return ai; }), i.d(t, "RECEIVE_SAVE_GRID_PHASE_SUCCESS", function () { return oi; }), i.d(t, "RECEIVE_SAVE_GRID_PHASE_ERROR", function () { return si; }), i.d(t, "RESET_GRID_CODE_CONFIG", function () { return _i; }), i.d(t, "SCAN_POWERWALLS", function () { return li; }), i.d(t, "REQUEST_POWERWALLS", function () { return ci; }), i.d(t, "RECEIVE_POWERWALLS", function () { return di; }), i.d(t, "RECEIVE_POWERWALLS_ERROR", function () { return ui; }), i.d(t, "REQUEST_SOE", function () { return mi; }), i.d(t, "RECEIVE_SOE_SUCCESS", function () { return pi; }), i.d(t, "RECEIVE_SOE_ERROR", function () { return gi; }), i.d(t, "REQUEST_POWERWALLS_UPDATE", function () { return wi; }), i.d(t, "RECEIVE_POWERWALLS_UPDATE_SUCCESS", function () { return vi; }), i.d(t, "RECEIVE_POWERWALLS_UPDATE_ERROR", function () { return fi; }), i.d(t, "REQUEST_POWERWALLS_STATUS", function () { return hi; }), i.d(t, "RECEIVE_POWERWALLS_STATUS_SUCCESS", function () { return Ei; }), i.d(t, "RECEIVE_POWERWALLS_STATUS_ERROR", function () { return bi; }), i.d(t, "RESET_POWERWALL_CONFIG", function () { return yi; }), i.d(t, "REQUEST_START_PHASE_DETECTION", function () { return Si; }), i.d(t, "RECEIVE_START_PHASE_DETECTION_SUCCESS", function () { return Ri; }), i.d(t, "RECEIVE_START_PHASE_DETECTION_ERROR", function () { return Ti; }), i.d(t, "REQUEST_FETCH_PHASE_INFORMATION", function () { return Ai; }), i.d(t, "RECEIVE_FETCH_PHASE_INFORMATION_SUCCESS", function () { return Ci; }), i.d(t, "RECEIVE_FETCH_PHASE_INFORMATION_ERROR", function () { return Ii; }), i.d(t, "REQUEST_SAVE_PHASE_USAGES", function () { return Oi; }), i.d(t, "RECEIVE_SAVE_PHASE_USAGES_SUCCESS", function () { return Ni; }), i.d(t, "RECEIVE_SAVE_PHASE_USAGES_ERROR", function () { return ki; }), i.d(t, "REQUEST_ENABLE_INVERTER_SOLAR_METER_READINGS", function () { return Pi; }), i.d(t, "RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_SUCCESS", function () { return Di; }), i.d(t, "RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_ERROR", function () { return Li; }), i.d(t, "REQUEST_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS", function () { return Mi; }), i.d(t, "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS", function () { return zi; }), i.d(t, "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS_ERROR", function () { return Ui; }), i.d(t, "ADD_SOLAR", function () { return Vi; }), i.d(t, "REMOVE_SOLAR", function () { return Gi; }), i.d(t, "REQUEST_SOLAR_CONFIG", function () { return ji; }), i.d(t, "RECEIVE_SOLAR_CONFIG_SUCCESS", function () { return Wi; }), i.d(t, "RECEIVE_SOLAR_CONFIG_ERROR", function () { return Fi; }), i.d(t, "REQUEST_SOLAR_BRANDS", function () { return qi; }), i.d(t, "RECEIVE_SOLAR_BRANDS_SUCCESS", function () { return xi; }), i.d(t, "RECEIVE_SOLAR_BRANDS_ERROR", function () { return Bi; }), i.d(t, "REQUEST_SOLAR_MODELS", function () { return Hi; }), i.d(t, "RECEIVE_SOLAR_MODELS_SUCCESS", function () { return Ki; }), i.d(t, "RECEIVE_SOLAR_MODELS_ERROR", function () { return Yi; }), i.d(t, "REQUEST_SAVE_SOLAR_INVERTERS", function () { return Qi; }), i.d(t, "RECEIVE_SAVE_SOLAR_INVERTER_SUCCESS", function () { return Zi; }), i.d(t, "RECEIVE_SAVE_SOLAR_INVERTERS_SUCCESS", function () { return Ji; }), i.d(t, "RECEIVE_SAVE_SOLAR_INVERTER_ERROR", function () { return Xi; }), i.d(t, "RECEIVE_SAVE_SOLAR_INVERTERS_ERROR", function () { return $i; }), i.d(t, "REQUEST_DELETE_SOLAR_INVERTER", function () { return en; }), i.d(t, "RECEIVE_DELETE_SOLAR_INVERTER_SUCCESS", function () { return tn; }), i.d(t, "RECEIVE_DELETE_SOLAR_INVERTER_ERROR", function () { return nn; }), i.d(t, "REQUEST_CONNECT_SOLAR_INVERTER", function () { return rn; }), i.d(t, "RECEIVE_CONNECT_SOLAR_INVERTER_SUCCESS", function () { return an; }), i.d(t, "RECEIVE_CONNECT_SOLAR_INVERTER_ERROR", function () { return on; }), i.d(t, "RESET_SOLAR_CONFIG", function () { return sn; }), i.d(t, "REQUEST_GENERATOR_CONFIG", function () { return _n; }), i.d(t, "RECEIVE_GENERATOR_CONFIG_SUCCESS", function () { return ln; }), i.d(t, "RECEIVE_GENERATOR_CONFIG_ERROR", function () { return cn; }), i.d(t, "REQUEST_GENERATOR_DISCONNECT_TYPES", function () { return dn; }), i.d(t, "RECEIVE_GENERATOR_DISCONNECT_TYPES_SUCCESS", function () { return un; }), i.d(t, "RECEIVE_GENERATOR_DISCONNECT_TYPES_ERROR", function () { return mn; }), i.d(t, "REQUEST_SAVE_GENERATORS", function () { return pn; }), i.d(t, "RECEIVE_SAVE_GENERATORS_SUCCESS", function () { return gn; }), i.d(t, "RECEIVE_SAVE_GENERATORS_ERROR", function () { return wn; }), i.d(t, "REQUEST_DELETE_GENERATOR", function () { return vn; }), i.d(t, "RECEIVE_DELETE_GENERATOR_SUCCESS", function () { return fn; }), i.d(t, "RECEIVE_DELETE_GENERATOR_ERROR", function () { return hn; }), i.d(t, "ADD_GENERATOR", function () { return En; }), i.d(t, "REMOVE_GENERATOR", function () { return bn; }), i.d(t, "RESET_GENERATOR_CONFIG", function () { return yn; }), i.d(t, "REQUEST_SITE_INFO", function () { return Sn; }), i.d(t, "RECEIVE_SITE_INFO_SUCCESS", function () { return Rn; }), i.d(t, "RECEIVE_SITE_INFO_ERROR", function () { return Tn; }), i.d(t, "REQUEST_SAVE_SITE_NAME", function () { return An; }), i.d(t, "RECEIVE_SAVE_SITE_NAME_SUCCESS", function () { return Cn; }), i.d(t, "RECEIVE_SAVE_SITE_NAME_ERROR", function () { return In; }), i.d(t, "REQUEST_SITE_NAME", function () { return On; }), i.d(t, "RECEIVE_SITE_NAME_SUCCESS", function () { return Nn; }), i.d(t, "RECEIVE_SITE_NAME_ERROR", function () { return kn; }), i.d(t, "REQUEST_SAVE_EXPORT_MODE", function () { return Pn; }), i.d(t, "RECEIVE_SAVE_EXPORT_MODE_SUCCESS", function () { return Dn; }), i.d(t, "RECEIVE_SAVE_EXPORT_MODE_ERROR", function () { return Ln; }), i.d(t, "REQUEST_OPERATION_SETTINGS", function () { return Mn; }), i.d(t, "RECEIVE_OPERATION_SETTINGS_SUCCESS", function () { return zn; }), i.d(t, "RECEIVE_OPERATION_SETTINGS_ERROR", function () { return Un; }), i.d(t, "REQUEST_SAVE_OPERATION_SETTINGS", function () { return Vn; }), i.d(t, "RECEIVE_SAVE_OPERATION_SETTINGS_SUCCESS", function () { return Gn; }), i.d(t, "RECEIVE_SAVE_OPERATION_SETTINGS_ERROR", function () { return jn; }), i.d(t, "REQUEST_TIMEZONE", function () { return Wn; }), i.d(t, "RECEIVE_TIMEZONE_SUCCESS", function () { return Fn; }), i.d(t, "RECEIVE_TIMEZONE_ERROR", function () { return qn; }), i.d(t, "REQUEST_SAVE_TIMEZONE", function () { return xn; }), i.d(t, "RECEIVE_SAVE_TIMEZONE_SUCCESS", function () { return Bn; }), i.d(t, "RECEIVE_SAVE_TIMEZONE_ERROR", function () { return Hn; }), i.d(t, "RESET_OPERATION_SETTINGS", function () { return Kn; }), i.d(t, "REQUEST_GET_EXTRA_PROGRAMS", function () { return Yn; }), i.d(t, "RECEIVE_GET_EXTRA_PROGRAMS_SUCCESS", function () { return Qn; }), i.d(t, "RECEIVE_GET_EXTRA_PROGRAMS_ERROR", function () { return Zn; }), i.d(t, "REQUEST_POST_EXTRA_PROGRAM", function () { return Jn; }), i.d(t, "RECEIVE_POST_EXTRA_PROGRAM_SUCCESS", function () { return Xn; }), i.d(t, "RECEIVE_POST_EXTRA_PROGRAM_ERROR", function () { return $n; }), i.d(t, "REQUEST_SITEMASTER_SETTINGS", function () { return er; }), i.d(t, "RECEIVE_SITEMASTER_SETTINGS_SUCCESS", function () { return tr; }), i.d(t, "RECEIVE_SITEMASTER_SETTINGS_ERROR", function () { return ir; }), i.d(t, "REQUEST_START_SITEMASTER", function () { return nr; }), i.d(t, "RECEIVE_START_SITEMASTER_SUCCESS", function () { return rr; }), i.d(t, "RECEIVE_START_SITEMASTER_ERROR", function () { return ar; }), i.d(t, "REQUEST_STOP_SITEMASTER", function () { return or; }), i.d(t, "RECEIVE_STOP_SITEMASTER_SUCCESS", function () { return sr; }), i.d(t, "RECEIVE_STOP_SITEMASTER_ERROR", function () { return _r; }), i.d(t, "REQUEST_SITEMASTER_FOR_COMMISSIONING", function () { return lr; }), i.d(t, "RECEIVE_SITEMASTER_FOR_COMMISSIONING_SUCCESS", function () { return cr; }), i.d(t, "RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR", function () { return dr; }), i.d(t, "RESET_SITEMASTER_SETTINGS", function () { return ur; }), i.d(t, "REQUEST_RUN_INVERTER_TEST", function () { return mr; }), i.d(t, "RECEIVE_RUN_INVERTER_TEST_SUCCESS", function () { return pr; }), i.d(t, "RECEIVE_RUN_INVERTER_TEST_ERROR", function () { return gr; }), i.d(t, "REQUEST_TEST_RESULTS", function () { return wr; }), i.d(t, "RECEIVE_TEST_RESULTS", function () { return vr; }), i.d(t, "RECEIVE_TEST_RESULTS_ERROR", function () { return fr; }), i.d(t, "REQUEST_CANCEL_TEST", function () { return hr; }), i.d(t, "RECEIVE_CANCEL_TEST_SUCCESS", function () { return Er; }), i.d(t, "RECEIVE_CANCEL_TEST_ERROR", function () { return br; }), i.d(t, "REQUEST_TEST_ALERTS", function () { return yr; }), i.d(t, "RECEIVE_TEST_ALERTS_SUCCESS", function () { return Sr; }), i.d(t, "RECEIVE_TEST_ALERTS_ERROR", function () { return Rr; }), i.d(t, "RESET_TESTS", function () { return Tr; }), i.d(t, "REQUEST_START_DIAGNOSTIC_TESTS", function () { return Ar; }), i.d(t, "RECEIVE_START_DIAGNOSTIC_TESTS_SUCCESS", function () { return Cr; }), i.d(t, "RECEIVE_START_DIAGNOSTIC_TESTS_ERROR", function () { return Ir; }), i.d(t, "REQUEST_STOP_DIAGNOSTIC_TEST", function () { return Or; }), i.d(t, "RECEIVE_STOP_DIAGNOSTIC_TEST_SUCCESS", function () { return Nr; }), i.d(t, "RECEIVE_STOP_DIAGNOSTIC_TEST_ERROR", function () { return kr; }), i.d(t, "REQUEST_DIAGNOSTIC_TEST_RESULTS", function () { return Pr; }), i.d(t, "RECEIVE_DIAGNOSTIC_TEST_RESULTS_SUCCESS", function () { return Dr; }), i.d(t, "RECEIVE_DIAGNOSTIC_TEST_RESULTS_ERROR", function () { return Lr; }), i.d(t, "RESET_DIAGNOSTICS", function () { return Mr; }), i.d(t, "REQUEST_INSTALLATION_INFORMATION", function () { return zr; }), i.d(t, "RECEIVE_INSTALLATION_INFORMATION_SUCCESS", function () { return Ur; }), i.d(t, "RECEIVE_INSTALLATION_INFORMATION_ERROR", function () { return Vr; }), i.d(t, "REQUEST_SAVE_INSTALLATION_INFORMATION", function () { return Gr; }), i.d(t, "RECEIVE_SAVE_INSTALLATION_INFORMATION_SUCCESS", function () { return jr; }), i.d(t, "RECEIVE_SAVE_INSTALLATION_INFORMATION_ERROR", function () { return Wr; }), i.d(t, "CHANGE_COMPANY", function () { return Fr; }), i.d(t, "CHANGE_PHONE", function () { return qr; }), i.d(t, "CHANGE_EMAIL", function () { return xr; }), i.d(t, "SAVE_PHOTOS", function () { return Br; }), i.d(t, "RESET_INSTALLATION_INFORMATION", function () { return Hr; }), i.d(t, "REQUEST_COMPANY_INFORMATION", function () { return Kr; }), i.d(t, "RECEIVE_COMPANY_INFORMATION_SUCCESS", function () { return Yr; }), i.d(t, "RECEIVE_COMPANY_INFORMATION_ERROR", function () { return Qr; }), i.d(t, "REQUEST_SAVE_LEGAL_INFORMATION", function () { return Zr; }), i.d(t, "RECEIVE_SAVE_LEGAL_INFORMATION_SUCCESS", function () { return Jr; }), i.d(t, "RECEIVE_SAVE_LEGAL_INFORMATION_ERROR", function () { return Xr; }), i.d(t, "REQUEST_CUSTOMER_INFORMATION_CONFIG", function () { return $r; }), i.d(t, "RECEIVE_CUSTOMER_INFORMATION_CONFIG_SUCCESS", function () { return ea; }), i.d(t, "RECEIVE_CUSTOMER_INFORMATION_CONFIG_ERROR", function () { return ta; }), i.d(t, "REQUEST_REGISTER_CUSTOMER_INFORMATION", function () { return ia; }), i.d(t, "RECEIVE_REGISTER_CUSTOMER_INFORMATION_SUCCESS", function () { return na; }), i.d(t, "RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR", function () { return ra; }), i.d(t, "RESET_CUSTOMER_INFORMATION", function () { return aa; }), i.d(t, "REQUEST_REGISTRATION", function () { return oa; }), i.d(t, "RECEIVE_REGISTRATION_SUCCESS", function () { return sa; }), i.d(t, "RECEIVE_REGISTRATION_ERROR", function () { return _a; }), i.d(t, "SHOW_ERROR", function () { return la; }), i.d(t, "CLEAR_ERROR", function () { return ca; }), i.d(t, "CLEAR_ERRORS", function () { return da; }), i.d(t, "RESET_ERROR_CONFIG", function () { return ua; }), i.d(t, "GENERIC_ERROR", function () { return ma; }), i.d(t, "NO_CONNECTION_ERROR", function () { return pa; }), i.d(t, "METER_INCORRECT_CT_ERROR", function () { return ga; }), i.d(t, "METER_INCORRECT_SHORT_ID_ERROR", function () { return wa; }), i.d(t, "METER_DUPLICATE_SHORT_ID_ERROR", function () { return va; }), i.d(t, "METER_INCORRECT_SERIAL_ERROR", function () { return fa; }), i.d(t, "METER_DUPLICATE_SERIAL_ERROR", function () { return ha; }), i.d(t, "METER_INCORRECT_MAC_ADDRESS_ERROR", function () { return Ea; }), i.d(t, "METER_INCORRECT_IP_ADDRESS_ERROR", function () { return ba; }), i.d(t, "METER_BARCODE_DECODE_ERROR", function () { return ya; }), i.d(t, "INVERTER_TEST_RESULT_ERROR", function () { return Sa; }), i.d(t, "INVERTER_TEST_GRID_UNCOMPLIANT_ERROR", function () { return Ra; }), i.d(t, "INVERTER_TEST_NOT_IDLE_ERROR", function () { return Ta; }), i.d(t, "PASSWORD_INCORRECT_MATCH_ERROR", function () { return Aa; }), i.d(t, "METER_UPDATE_ERROR", function () { return Ca; }), i.d(t, "METER_FETCH_STATUS_ERROR", function () { return Ia; }), i.d(t, "POWER_RATING_RANGE_ERROR", function () { return Oa; }), i.d(t, "SUSTAINED_POWER_RANGE_ERROR", function () { return Na; }), i.d(t, "SITEMASTER_NOT_RUNNING_ERROR", function () { return ka; }), i.d(t, "SHOW_TOAST", function () { return Pa; }), i.d(t, "CLEAR_TOAST", function () { return Da; }), i.d(t, "CLEAR_TOASTS", function () { return La; }), i.d(t, "NO_METERS_CONFIGURED_WARNING", function () { return Ma; }), i.d(t, "NO_POWERWALLS_DETECTED_WARNING", function () { return za; }), i.d(t, "NO_SOLAR_INVERTER_WARNING", function () { return Ua; }), i.d(t, "NO_SOLAR_CT_WARNING", function () { return Va; }), i.d(t, "NO_SITE_OR_LOAD_CT_WARNING", function () { return Ga; }), i.d(t, "RECEIVE_INSTALLATION_PROBLEMS", function () { return ja; }); const n = "LOCATION_CHANGE", r = "SHOW_NAVIGATION", a = "UPDATE_NAVIGATION", o = "SHOW_BACK", s = "HIDE_BACK", _ = "SHOW_CANCEL", l = "HIDE_CANCEL", c = "SHOW_FORWARD", d = "HIDE_FORWARD", u = "RESET_NAVIGATION", m = "SHOW_MODAL", p = "UPDATE_MODAL", g = "HIDE_MODAL", w = "DESTROY_MODAL", v = "SHOW_HEADER", f = "UPDATE_HEADER", h = "RESET_HEADER", E = "SHOW_BANNER", b = "DESTROY_BANNER", y = "DESTROY_ALL_BANNERS", S = "REQUEST_CONFIG_INITIALIZED", R = "RECEIVE_CONFIG_INITIALIZED", T = "RECEIVE_CONFIG_INITIALIZED_ERROR", A = "REQUEST_SYNC_CONFIG", C = "RECEIVE_SYNC_CONFIG_SUCCESS", I = "RECEIVE_SYNC_CONFIG_ERROR", O = "CHANGE_USERNAME", N = "CHANGE_LOGIN_TYPE", k = "REQUEST_LOGIN", P = "RECEIVE_LOGIN_SUCCESS", D = "RECEIVE_LOGIN_ERROR", L = "REQUEST_GENERATE_PASSWORD", M = "RECEIVE_GENERATE_PASSWORD_SUCCESS", z = "RECEIVE_GENERATE_PASSWORD_ERROR", U = "REQUEST_RESET_PASSWORD", V = "RECEIVE_RESET_PASSWORD_SUCCESS", G = "RECEIVE_RESET_PASSWORD_ERROR", j = "REQUEST_CHANGE_PASSWORD", W = "RECEIVE_CHANGE_PASSWORD_SUCCESS", F = "RECEIVE_CHANGE_PASSWORD_ERROR", q = "REQUEST_LOGOUT", x = "RECEIVE_LOGOUT_ERROR", B = "RESET_AUTHENTICATION", H = "REQUEST_START_TOGGLE_AUTH", K = "RECEIVE_START_TOGGLE_AUTH_SUCCESS", Y = "RECEIVE_START_TOGGLE_AUTH_ERROR", Q = "REQUEST_CANCEL_TOGGLE_AUTH", Z = "RECEIVE_CANCEL_TOGGLE_AUTH_SUCCESS", J = "RECEIVE_CANCEL_TOGGLE_AUTH_ERROR", X = "REQUEST_TOGGLE_AUTH_LOGIN", $ = "RECEIVE_TOGGLE_AUTH_LOGIN_SUCCESS", ee = "RECEIVE_TOGGLE_AUTH_LOGIN_ERROR", te = "REQUEST_SUPPORTS_TOGGLE_AUTH", ie = "RECEIVE_SUPPORTS_TOGGLE_AUTH_SUCCESS", ne = "RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR", re = "REQUEST_NETWORKS", ae = "RECEIVE_NETWORKS_SUCCESS", oe = "RECEIVE_NETWORKS_ERROR", se = "REQUEST_ACCESS_POINTS", _e = "RECEIVE_ACCESS_POINTS_SUCCESS", le = "RECEIVE_ACCESS_POINTS_ERROR", ce = "REQUEST_CONNECT_ETHERNET", de = "RECEIVE_CONNECT_ETHERNET_SUCCESS", ue = "RECEIVE_CONNECT_ETHERNET_ERROR", me = "REQUEST_SCAN_WIFI_NETWORKS", pe = "RECEIVE_SCAN_WIFI_NETWORKS_SUCCESS", ge = "RECEIVE_SCAN_WIFI_NETWORKS_ERROR", we = "REQUEST_CONNECT_WIFI", ve = "RECEIVE_CONNECT_WIFI_SUCCESS", fe = "RECEIVE_CONNECT_WIFI_ERROR", he = "REQUEST_DISCONNECT_NETWORK", Ee = "RECEIVE_DISCONNECT_NETWORK_SUCCESS", be = "RECEIVE_DISCONNECT_NETWORK_ERROR", ye = "REQUEST_DELETE_NETWORK", Se = "RECEIVE_DELETE_NETWORK_SUCCESS", Re = "RECEIVE_DELETE_NETWORK_ERROR", Te = "RESET_NETWORK_CONFIG", Ae = "CANCEL_NETWORK", Ce = "REQUEST_CLIENT_PROTOCOLS", Ie = "RECEIVE_CLIENT_PROTOCOLS_SUCCESS", Oe = "RECEIVE_CLIENT_PROTOCOLS_ERROR", Ne = "RECEIVE_CHECK_UPDATE", ke = "REQUEST_INSTALL_UPDATE", Pe = "RECEIVE_CHECK_UPDATE_ERROR", De = "RECEIVE_START_UPDATE_ERROR", Le = "DOWNLOAD_STALLED_ERROR", Me = "DOWNLOAD_PROGRESSING", ze = "REQUEST_UPDATE", Ue = "RECEIVE_UPDATE_ERROR", Ve = "CANCEL_UPDATE", Ge = "SAVE_SYSTEM_INFO", je = "RESET_SYSTEM_INFO", We = "REQUEST_CHECK_UPDATE_URGENCY", Fe = "RECEIVE_CHECK_UPDATE_URGENCY", qe = "RECEIVE_CHECK_UPDATE_URGENCY_ERROR", xe = "FACTORY_RESET", Be = "RESET_ALL", He = "ADD_METER", Ke = "REMOVE_METER", Ye = "RESET_METER_CONFIG", Qe = "RESET_METER_CURRENT_TRANSFORMER_READINGS", Ze = "REQUEST_DETECT_METER", Je = "RECEIVE_DETECT_METER_SUCCESS", Xe = "RECEIVE_DETECT_METER_ERROR", $e = "REQUEST_CREATE_METER", et = "RECEIVE_CREATE_METER_SUCCESS", tt = "RECEIVE_CREATE_METER_ERROR", it = "REQUEST_DELETE_METER", nt = "RECEIVE_DELETE_METER_SUCCESS", rt = "RECEIVE_DELETE_METER_ERROR", at = "REQUEST_COMMISSION_METER", ot = "RECEIVE_COMMISSION_METER_UPDATE", st = "RECEIVE_COMMISSION_METER_SUCCESS", _t = "RECEIVE_COMMISSION_METER_ERROR", lt = "REQUEST_METER_CONFIG", ct = "RECEIVE_METER_CONFIG_UPDATE", dt = "RECEIVE_METER_CONFIG_SUCCESS", ut = "RECEIVE_METER_CONFIG_ERROR", mt = "REQUEST_SET_METER_CTS", pt = "RECEIVE_SET_METER_CTS_SUCCESS", gt = "RECEIVE_SET_METER_CTS_ERROR", wt = "REQUEST_DELETE_METER_CTS", vt = "RECEIVE_DELETE_METER_CTS_SUCCESS", ft = "RECEIVE_DELETE_METER_CTS_ERROR", ht = "REQUEST_METER_READINGS", Et = "RECEIVE_METER_READINGS_SUCCESS", bt = "RECEIVE_METER_READINGS_ERROR", yt = "REQUEST_METER_FLIP_CT", St = "RECEIVE_METER_FLIP_CT_SUCCESS", Rt = "RECEIVE_METER_FLIP_CT_ERROR", Tt = "REQUEST_METER_AGGREGATES", At = "RECEIVE_METER_AGGREGATES_SUCCESS", Ct = "RECEIVE_METER_AGGREGATES_ERROR", It = "CANCEL_METER", Ot = "REQUEST_METER_AMP_RATINGS", Nt = "RECEIVE_METER_AMP_RATINGS_SUCCESS", kt = "RECEIVE_METER_AMP_RATINGS_ERROR", Pt = "REQUEST_SET_METER_AMP_RATINGS", Dt = "RECEIVE_SET_METER_AMP_RATINGS_SUCCESS", Lt = "RECEIVE_SET_METER_AMP_RATINGS_ERROR", Mt = "REQUEST_SYNC_CT_VOLTAGE_REFERENCES", zt = "RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS", Ut = "RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR", Vt = "REQUEST_SET_SYNC_CT_VOLTAGE_REFERENCES", Gt = "RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS", jt = "RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR", Wt = "REQUEST_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS", Ft = "RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_SUCCESS", qt = "RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR", xt = "REQUEST_ENABLE_INVERTER_METER_READINGS", Bt = "RECEIVE_ENABLE_INVERTER_METER_READINGS_SUCCESS", Ht = "RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR", Kt = "REQUEST_GRID_CODES", Yt = "RECEIVE_GRID_CODES_SUCCESS", Qt = "RECEIVE_GRID_CODES_ERROR", Zt = "REQUEST_SAVE_GRID_CODE", Jt = "RECEIVE_SAVE_GRID_CODE_SUCCESS", Xt = "RECEIVE_SAVE_GRID_CODE_ERROR", $t = "REQUEST_GRID_STATUS", ei = "RECEIVE_GRID_STATUS_SUCCESS", ti = "RECEIVE_GRID_STATUS_ERROR", ii = "REQUEST_SAVE_OFF_GRID", ni = "RECEIVE_SAVE_OFF_GRID_SUCCESS", ri = "RECEIVE_SAVE_OFF_GRID_ERROR", ai = "REQUEST_SAVE_GRID_PHASE", oi = "RECEIVE_SAVE_GRID_PHASE_SUCCESS", si = "RECEIVE_SAVE_GRID_PHASE_ERROR", _i = "RESET_GRID_CODE_CONFIG", li = "SCAN_POWERWALLS", ci = "REQUEST_POWERWALLS", di = "RECEIVE_POWERWALLS", ui = "RECEIVE_POWERWALLS_ERROR", mi = "REQUEST_SOE", pi = "RECEIVE_SOE_SUCCESS", gi = "RECEIVE_SOE_ERROR", wi = "REQUEST_POWERWALLS_UPDATE", vi = "RECEIVE_POWERWALLS_UPDATE_SUCCESS", fi = "RECEIVE_POWERWALLS_UPDATE_ERROR", hi = "REQUEST_POWERWALLS_STATUS", Ei = "RECEIVE_POWERWALLS_STATUS_SUCCESS", bi = "RECEIVE_POWERWALLS_STATUS_ERROR", yi = "RESET_POWERWALL_CONFIG", Si = "REQUEST_START_PHASE_DETECTION", Ri = "RECEIVE_START_PHASE_DETECTION_SUCCESS", Ti = "RECEIVE_START_PHASE_DETECTION_ERROR", Ai = "REQUEST_FETCH_PHASE_INFORMATION", Ci = "RECEIVE_FETCH_PHASE_INFORMATION_SUCCESS", Ii = "RECEIVE_FETCH_PHASE_INFORMATION_ERROR", Oi = "REQUEST_SAVE_PHASE_USAGES", Ni = "RECEIVE_SAVE_PHASE_USAGES_SUCCESS", ki = "RECEIVE_SAVE_PHASE_USAGES_ERROR", Pi = "REQUEST_ENABLE_INVERTER_SOLAR_METER_READINGS", Di = "RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_SUCCESS", Li = "RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_ERROR", Mi = "REQUEST_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS", zi = "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS", Ui = "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS_ERROR", Vi = "ADD_SOLAR", Gi = "REMOVE_SOLAR", ji = "REQUEST_SOLAR_CONFIG", Wi = "RECEIVE_SOLAR_CONFIG_SUCCESS", Fi = "RECEIVE_SOLAR_CONFIG_ERROR", qi = "REQUEST_SOLAR_BRANDS", xi = "RECEIVE_SOLAR_BRANDS_SUCCESS", Bi = "RECEIVE_SOLAR_BRANDS_ERROR", Hi = "REQUEST_SOLAR_MODELS", Ki = "RECEIVE_SOLAR_MODELS_SUCCESS", Yi = "RECEIVE_SOLAR_MODELS_ERROR", Qi = "REQUEST_SAVE_SOLAR_INVERTERS", Zi = "RECEIVE_SAVE_SOLAR_INVERTER_SUCCESS", Ji = "RECEIVE_SAVE_SOLAR_INVERTERS_SUCCESS", Xi = "RECEIVE_SAVE_SOLAR_INVERTER_ERROR", $i = "RECEIVE_SAVE_SOLAR_INVERTERS_ERROR", en = "REQUEST_DELETE_SOLAR_INVERTER", tn = "RECEIVE_DELETE_SOLAR_INVERTER_SUCCESS", nn = "RECEIVE_DELETE_SOLAR_INVERTER_ERROR", rn = "REQUEST_CONNECT_SOLAR_INVERTER", an = "RECEIVE_CONNECT_SOLAR_INVERTER_SUCCESS", on = "RECEIVE_CONNECT_SOLAR_INVERTER_ERROR", sn = "RESET_SOLAR_CONFIG", _n = "REQUEST_GENERATOR_CONFIG", ln = "RECEIVE_GENERATOR_CONFIG_SUCCESS", cn = "RECEIVE_GENERATOR_CONFIG_ERROR", dn = "REQUEST_GENERATOR_DISCONNECT_TYPES", un = "RECEIVE_GENERATOR_DISCONNECT_TYPES_SUCCESS", mn = "RECEIVE_GENERATOR_DISCONNECT_TYPES_ERROR", pn = "REQUEST_SAVE_GENERATORS", gn = "RECEIVE_SAVE_GENERATORS_SUCCESS", wn = "RECEIVE_SAVE_GENERATORS_ERROR", vn = "REQUEST_DELETE_GENERATOR", fn = "RECEIVE_DELETE_GENERATOR_SUCCESS", hn = "RECEIVE_DELETE_GENERATOR_ERROR", En = "ADD_GENERATOR", bn = "REMOVE_GENERATOR", yn = "RESET_GENERATOR_CONFIG", Sn = "REQUEST_SITE_INFO", Rn = "RECEIVE_SITE_INFO_SUCCESS", Tn = "RECEIVE_SITE_INFO_ERROR", An = "REQUEST_SAVE_SITE_NAME", Cn = "RECEIVE_SAVE_SITE_NAME_SUCCESS", In = "RECEIVE_SAVE_SITE_NAME_ERROR", On = "REQUEST_SITE_NAME", Nn = "RECEIVE_SITE_NAME_SUCCESS", kn = "RECEIVE_SITE_NAME_ERROR", Pn = "REQUEST_SAVE_EXPORT_MODE", Dn = "RECEIVE_SAVE_EXPORT_MODE_SUCCESS", Ln = "RECEIVE_SAVE_EXPORT_MODE_ERROR", Mn = "REQUEST_OPERATION_SETTINGS", zn = "RECEIVE_OPERATION_SETTINGS_SUCCESS", Un = "RECEIVE_OPERATION_SETTINGS_ERROR", Vn = "REQUEST_SAVE_OPERATION_SETTINGS", Gn = "RECEIVE_SAVE_OPERATION_SETTINGS_SUCCESS", jn = "RECEIVE_SAVE_OPERATION_SETTINGS_ERROR", Wn = "REQUEST_TIMEZONE", Fn = "RECEIVE_TIMEZONE_SUCCESS", qn = "RECEIVE_TIMEZONE_ERROR", xn = "REQUEST_SAVE_TIMEZONE", Bn = "RECEIVE_SAVE_TIMEZONE_SUCCESS", Hn = "RECEIVE_SAVE_TIMEZONE_ERROR", Kn = "RESET_OPERATION_SETTINGS", Yn = "REQUEST_GET_EXTRA_PROGRAMS", Qn = "RECEIVE_GET_EXTRA_PROGRAMS_SUCCESS", Zn = "RECEIVE_GET_EXTRA_PROGRAMS_ERROR", Jn = "REQUEST_POST_EXTRA_PROGRAM", Xn = "RECEIVE_POST_EXTRA_PROGRAM_SUCCESS", $n = "RECEIVE_POST_EXTRA_PROGRAM_ERROR", er = "REQUEST_SITEMASTER_SETTINGS", tr = "RECEIVE_SITEMASTER_SETTINGS_SUCCESS", ir = "RECEIVE_SITEMASTER_SETTINGS_ERROR", nr = "REQUEST_START_SITEMASTER", rr = "RECEIVE_START_SITEMASTER_SUCCESS", ar = "RECEIVE_START_SITEMASTER_ERROR", or = "REQUEST_STOP_SITEMASTER", sr = "RECEIVE_STOP_SITEMASTER_SUCCESS", _r = "RECEIVE_STOP_SITEMASTER_ERROR", lr = "REQUEST_SITEMASTER_FOR_COMMISSIONING", cr = "RECEIVE_SITEMASTER_FOR_COMMISSIONING_SUCCESS", dr = "RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR", ur = "RESET_SITEMASTER_SETTINGS", mr = "REQUEST_RUN_INVERTER_TEST", pr = "RECEIVE_RUN_INVERTER_TEST_SUCCESS", gr = "RECEIVE_RUN_INVERTER_TEST_ERROR", wr = "REQUEST_TEST_RESULTS", vr = "RECEIVE_TEST_RESULTS", fr = "RECEIVE_TEST_RESULTS_ERROR", hr = "REQUEST_CANCEL_TEST", Er = "RECEIVE_CANCEL_TEST", br = "RECEIVE_CANCEL_TEST_ERROR", yr = "REQUEST_TEST_ALERTS", Sr = "RECEIVE_TEST_ALERTS_SUCCESS", Rr = "RECEIVE_TEST_ALERTS_ERROR", Tr = "RESET_TESTS", Ar = "REQUEST_START_DIAGNOSTIC_TESTS", Cr = "RECEIVE_START_DIAGNOSTIC_TESTS_SUCCESS", Ir = "RECEIVE_START_DIAGNOSTIC_TESTS_ERROR", Or = "REQUEST_STOP_DIAGNOSTIC_TEST", Nr = "RECEIVE_STOP_DIAGNOSTIC_TEST_SUCCESS", kr = "RECEIVE_STOP_DIAGNOSTIC_TEST_ERROR", Pr = "REQUEST_DIAGNOSTIC_TEST_RESULTS", Dr = "RECEIVE_DIAGNOSTIC_TEST_RESULTS_SUCCESS", Lr = "RECEIVE_DIAGNOSTIC_TEST_RESULTS_ERROR", Mr = "RESET_DIAGNOSTICS", zr = "REQUEST_INSTALLATION_INFORMATION", Ur = "RECEIVE_INSTALLATION_INFORMATION_SUCCESS", Vr = "RECEIVE_INSTALLATION_INFORMATION_ERROR", Gr = "REQUEST_SAVE_INSTALLATION_INFORMATION", jr = "RECEIVE_SAVE_INSTALLATION_INFORMATION_SUCCESS", Wr = "RECEIVE_SAVE_INSTALLATION_INFORMATION_ERROR", Fr = "CHANGE_COMPANY", qr = "CHANGE_PHONE", xr = "CHANGE_EMAIL", Br = "SAVE_PHOTOS", Hr = "RESET_INSTALLATION_INFORMATION", Kr = "REQUEST_COMPANY_INFORMATION", Yr = "RECEIVE_COMPANY_INFORMATION_SUCCESS", Qr = "RECEIVE_COMPANY_INFORMATION_ERROR", Zr = "REQUEST_SAVE_LEGAL_INFORMATION", Jr = "RECEIVE_SAVE_LEGAL_INFORMATION_SUCCESS", Xr = "RECEIVE_SAVE_LEGAL_INFORMATION_ERROR", $r = "REQUEST_CUSTOMER_INFORMATION_CONFIG", ea = "RECEIVE_CUSTOMER_INFORMATION_CONFIG_SUCCESS", ta = "RECEIVE_CUSTOMER_INFORMATION_CONFIG_ERROR", ia = "REQUEST_REGISTER_CUSTOMER_INFORMATION", na = "RECEIVE_REGISTER_CUSTOMER_INFORMATION_SUCCESS", ra = "RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR", aa = "RESET_CUSTOMER_INFORMATION", oa = "REQUEST_REGISTRATION", sa = "RECEIVE_REGISTRATION_SUCCESS", _a = "RECEIVE_REGISTRATION_ERROR", la = "SHOW_ERROR", ca = "CLEAR_ERROR", da = "CLEAR_ERRORS", ua = "RESET_ERROR_CONFIG", ma = "GENERIC_ERROR", pa = "NO_CONNECTION_ERROR", ga = "METER_INCORRECT_CT_ERROR", wa = "METER_INCORRECT_SHORT_ID_ERROR", va = "METER_DUPLICATE_SHORT_ID_ERROR", fa = "METER_INCORRECT_SERIAL_ERROR", ha = "METER_DUPLICATE_SERIAL_ERROR", Ea = "METER_INCORRECT_MAC_ADDRESS_ERROR", ba = "METER_INCORRECT_IP_ADDRESS_ERROR", ya = "METER_BARCODE_DECODE_ERROR", Sa = "INVERTER_TEST_RESULT_ERROR", Ra = "INVERTER_TEST_GRID_UNCOMPLIANT_ERROR", Ta = "INVERTER_TEST_NOT_IDLE_ERROR", Aa = "PASSWORD_INCORRECT_MATCH_ERROR", Ca = "METER_UPDATE_ERROR", Ia = "METER_FETCH_STATUS_ERROR", Oa = "POWER_OUT_OF_RANGE_ERROR", Na = "SUSTAINED_POWER_RANGE_ERROR", ka = "SITEMASTER_NOT_RUNNING_ERROR", Pa = "SHOW_TOAST", Da = "CLEAR_TOAST", La = "CLEAR_TOASTS", Ma = "NO_METERS_CONFIGURED_WARNING", za = "NO_POWERWALLS_DETECTED_WARNING", Ua = "NO_SOLAR_INVERTER_WARNING", Va = "NO_SOLAR_CT_WARNING", Ga = "NO_SITE_OR_LOAD_CT_WARNING", ja = "RECEIVE_INSTALLATION_PROBLEMS"; }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.postOptions = t.checkResponseStatus = t.parseResponseText = t.parseText = t.parseJSON = t.checkStatus = void 0); class n extends Error { constructor(e, t) { super(e), (this.response = t); } } (t.checkStatus = function (e) { if (e.status >= 200 && e.status < 300) return e; throw new n(e.statusText, e); }), (t.parseJSON = function (e) { return e.json(); }), (t.parseText = function (e) { return e.text(); }), (t.parseResponseText = function (e) { if (!e) return null; try { return JSON.parse(e); } catch (t) { const i = `Error: ${e}. Check server logs`; throw new n(i, i); } }), (t.checkResponseStatus = function (e) { var t; const i = e; if (!((i && i.code && !(i.code >= 200 && i.code < 300)) || ((null == i ? void 0 : i.message) && (null == i ? void 0 : i.error)))) return e || {}; throw new n(null !== (t = null == i ? void 0 : i.message) && void 0 !== t ? t : "Response error", i); }); t.postOptions = (e) => ({ method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(e) }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.authedPostOptions = t.apiToUrl = t.toApi = void 0); const n = i(4), r = "http://10.33.155.246:8088", a = { api: { host: r, uri: r + window.apiBaseUrl }, static: { host: "http://10.33.155.246:3000", uri: "http://10.33.155.246:3000" }, credentials: "include" }; (a.api.host = ""), (a.api.uri = window.apiBaseUrl), (a.static.host = ""), (a.static.uri = ""), (a.credentials = "same-origin"); t.toApi = (e) => `${a.api.uri}/${e}`; t.apiToUrl = (e) => `${a.api.uri}${e}`; (t.authedPostOptions = (e) => Object.assign(Object.assign({}, (0, n.postOptions)(e)), { credentials: a.credentials })), (t.default = a); }, function (e, t, i) { "use strict"; function n(e, ...t) { return (...i) => { let n = { type: e }; return ( t.forEach((e, r) => { n[t[r]] = i[r]; }), n ); }; } i.d(t, "b", function () { return n; }), i.d(t, "a", function () { return r; }); const r = (e) => (t) => ({ payload: t, receivedAt: Date.now(), type: e }); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "showError", function () { return _; }), i.d(t, "clearError", function () { return l; }), i.d(t, "clearErrors", function () { return c; }), i.d(t, "resetErrorConfig", function () { return d; }), i.d(t, "uploadLogs", function () { return u; }); var n = i(2), r = i(6), a = i(4), o = i(5), s = i.n(o); function _(e, t, i, r) { return { type: n.SHOW_ERROR, name: e, message: t, context: i, logError: r }; } const l = Object(r.b)(n.CLEAR_ERROR, "name", "context"), c = Object(r.b)(n.CLEAR_ERRORS), d = Object(r.b)(n.RESET_ERROR_CONFIG); async function u(e, t, i) { let n = { level: e, log: t }; return ( i && (n.trace = i), fetch(s.a.api.uri + "/logging", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(n) }) .then(a.checkStatus) .then(() => {}) .catch((e) => { throw e; }) ); } }, function (e, t, i) { "use strict"; i.d(t, "h", function () { return o; }), i.d(t, "n", function () { return s; }), i.d(t, "m", function () { return _; }), i.d(t, "e", function () { return l; }), i.d(t, "f", function () { return c; }), i.d(t, "c", function () { return d; }), i.d(t, "g", function () { return u; }), i.d(t, "d", function () { return m; }), i.d(t, "b", function () { return p; }), i.d(t, "a", function () { return g; }), i.d(t, "k", function () { return w; }), i.d(t, "l", function () { return v; }), i.d(t, "i", function () { return f; }), i.d(t, "j", function () { return h; }), i.d(t, "p", function () { return E; }), i.d(t, "o", function () { return b; }); var n = i(1), r = i.n(n), a = i(27); const o = { SOLAR: "SOLAR", USAGE: "USAGE", GRID: "GRID", BATTERY: "BATTERY" }, s = { [o.SOLAR]: "solar", [o.USAGE]: "load", [o.GRID]: "site", [o.BATTERY]: "battery" }, _ = Object(a.invert)(s), l = "rgba(255,255,255,0.2)", c = "#FADE2A", // Solar Power - old #F2CA00 d = "#00D000", // Powerwall Energy u = "#5794F2", // Home - old #00AEEF m = "#CBCFD1", p = "#FFA400", g = r.a.createElement( "linearGradient", { id: "blueYellowGradient", gradientUnits: "userSpaceOnUse", x1: "97.9811065%", y1: "2.01889349%", x2: "0.224566072%", y2: "99.7754339%" }, r.a.createElement("stop", { stopColor: u, offset: "0%" }), r.a.createElement("stop", { stopColor: c, offset: "99.1828763%" }) ), w = r.a.createElement( "linearGradient", { id: "greenBlueGradient", gradientUnits: "userSpaceOnUse", x1: "50%", y1: "0%", x2: "50%", y2: "100%" }, r.a.createElement("stop", { stopColor: u, offset: "0%" }), r.a.createElement("stop", { stopColor: d, offset: "100%" }) ), v = r.a.createElement( "linearGradient", { id: "greenGrayGradient", gradientUnits: "userSpaceOnUse", x1: "0%", y1: "50%", x2: "97.9811065%", y2: "2.01889349%" }, r.a.createElement("stop", { stopColor: d, offset: "0%" }), r.a.createElement("stop", { stopColor: m, offset: "100%" }) ), f = r.a.createElement( "linearGradient", { id: "grayBlueGradient", gradientUnits: "userSpaceOnUse", x1: "0%", y1: "50%", x2: "97.9811065%", y2: "2.01889349%" }, r.a.createElement("stop", { stopColor: m, offset: "0%" }), r.a.createElement("stop", { stopColor: u, offset: "100%" }) ), h = r.a.createElement( "linearGradient", { id: "grayGreenGradient", gradientUnits: "userSpaceOnUse", x1: "0%", y1: "50%", x2: "97.9811065%", y2: "2.01889349%" }, r.a.createElement("stop", { stopColor: m, offset: "0%" }), r.a.createElement("stop", { stopColor: d, offset: "100%" }) ), E = r.a.createElement( "linearGradient", { id: "yellowGreenGradient", gradientUnits: "userSpaceOnUse", x1: "50%", y1: "0%", x2: "50%", y2: "97.3274075%" }, r.a.createElement("stop", { stopColor: c, offset: "0%" }), r.a.createElement("stop", { stopColor: d, offset: "100%" }) ), b = r.a.createElement( "linearGradient", { id: "yellowGrayGradient", gradientUnits: "userSpaceOnUse", x1: "50%", y1: "0%", x2: "50%", y2: "100%" }, r.a.createElement("stop", { stopColor: m, offset: "0%" }), r.a.createElement("stop", { stopColor: c, offset: "100%" }) ); }, , function (e, t, i) { "use strict"; i.d(t, "i", function () { return n; }), i.d(t, "g", function () { return r; }), i.d(t, "h", function () { return a; }), i.d(t, "b", function () { return o; }), i.d(t, "c", function () { return s; }), i.d(t, "e", function () { return _; }), i.d(t, "d", function () { return l; }), i.d(t, "a", function () { return c; }), i.d(t, "f", function () { return d; }); const n = ["/", "/wizard", "/password", "/compliance", "/upgrade"], r = [...n, "/network", "/network/ethernet", "/network/wifi", "/legal", "/registration", "/summary", "/vitals"], a = ["/update", "/success"], o = "LOGIN_MODAL", s = { KIOSK: "kiosk", INSTALLER: "installer", CUSTOMER: "customer", ADMIN: "admin", ENGINEER: "engineer" }, _ = { HOME_OWNER: "Home_Owner", KIOSK_VIEWER: "Kiosk_Viewer", PROVIDER_ENGINEER: "Provider_Engineer", TESLA_ENGINEER: "Tesla_Engineer" }, l = [s.INSTALLER, s.ENGINEER, s.ADMIN], c = /^$|^[_A-Za-z0-9-+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(-[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$/, d = [401, 403]; }, function (e, t, i) { "use strict"; var n = i(49), r = i(17), a = i(2); const o = r.browserHistory.getCurrentLocation(); function s(e = o, t) { switch (t.type) { case a.LOCATION_CHANGE: return t.payload; default: return e; } } var _ = i(58); function l(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function c(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? l(Object(i), !0).forEach(function (t) { d(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : l(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function d(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const u = { route: null, text: "", onClick: null, buttonClass: "", additionalProps: {} }; function m(e = u, t, i) { let n = i.toUpperCase(); switch (t.type) { case a["SHOW_" + n]: return c(c({}, e), {}, { route: t.route, text: t.text, onClick: t.onClick, buttonClass: t.buttonClass, additionalProps: t.additionalProps }); case a["HIDE_" + n]: return c(c({}, e), u); case a.RESET_NAVIGATION: return u; default: return e; } } const p = { navigationType: "footer-default", back: u, cancel: u, forward: u }; function g(e = p, t) { switch (t.type) { case a.SHOW_NAVIGATION: let i = { navigationType: t.navigationType }; return ( t.backProps ? (i.back = c(c({}, e.back), t.backProps)) : (i.back = p), t.cancelProps ? (i.cancel = c(c({}, e.cancel), t.cancelProps)) : (i.cancel = p), t.forwardProps ? (i.forward = c(c({}, e.forward), t.forwardProps)) : (i.forward = p), i ); case a.UPDATE_NAVIGATION: if (e.navigationType === t.navigationType) { let i = {}; return t.backProps && (i.back = c(c({}, e.back), t.backProps)), t.cancelProps && (i.cancel = c(c({}, e.cancel), t.cancelProps)), t.forwardProps && (i.forward = c(c({}, e.forward), t.forwardProps)), c(c({}, e), i); } return e; case a.RESET_NAVIGATION: return { navigationType: "footer-default", back: m(e.back, t, _.a.BACK), cancel: m(e.cancel, t, _.a.CANCEL), forward: m(e.forward, t, _.a.FORWARD) }; default: return c(c({}, e), {}, { back: m(e.back, t, _.a.BACK), cancel: m(e.cancel, t, _.a.CANCEL), forward: m(e.forward, t, _.a.FORWARD) }); } } function w(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function v(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? w(Object(i), !0).forEach(function (t) { f(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : w(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function f(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const h = { modalType: null, modalProps: {}, bootstrapProps: { show: !0 } }; function E(e = h, t) { switch (t.type) { case a.SHOW_MODAL: return { modalType: t.modalType, modalProps: t.modalProps, bootstrapProps: v(v({}, e.bootstrapProps), t.bootstrapProps) }; case a.UPDATE_MODAL: return t.modalType === e.modalType ? v(v({}, e), {}, { modalProps: v(v({}, e.modalProps), t.modalProps), bootstrapProps: v(v({}, e.bootstrapProps), t.bootstrapProps) }) : e; case a.DESTROY_MODAL: return t.modalType === e.modalType ? h : e; case a.HIDE_MODAL: return h; default: return e; } } function b(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function y(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? b(Object(i), !0).forEach(function (t) { S(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : b(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function S(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const R = { headerType: "header-default", headerProps: { title: null, subtitle: null, subtitleView: null, additionalView: null, progress: 0 } }; function T(e = R, t) { switch (t.type) { case a.SHOW_HEADER: return { headerType: t.headerType, headerProps: y(y({}, e.headerProps), t.headerProps) }; case a.UPDATE_HEADER: return t.headerType === e.headerType ? y(y({}, e), {}, { headerProps: y(y({}, e.headerProps), t.headerProps) }) : e; case a.RESET_HEADER: return R; default: return e; } } var A = i(27); function C(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function I(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? C(Object(i), !0).forEach(function (t) { O(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : C(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function O(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const N = { items: [] }; function k(e = N, t) { switch (t.type) { case a.SHOW_BANNER: { const i = Object(A.orderBy)([...e.items, I(I({}, t.bannerProps), {}, { timestamp: Date.now() })], ["priority", "timestamp"], ["desc", "desc"]), n = Object(A.sortedUniqBy)(i, (e) => e.name); return I(I({}, e), {}, { items: n }); } case a.DESTROY_BANNER: return I(I({}, e), {}, { items: e.items.filter((e) => e.name !== t.name) }); case a.DESTROY_ALL_BANNERS: return N; default: return e; } } function P(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function D(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? P(Object(i), !0).forEach(function (t) { L(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : P(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function L(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const M = { items: [] }; function z(e = M, t) { switch (t.type) { case a.SHOW_TOAST: return e.items.find((e) => e.name === t.name) ? e : D(D({}, e), {}, { items: [...e.items, { name: t.name, toastProps: t.toastProps }] }); case a.CLEAR_TOAST: return D(D({}, e), {}, { items: e.items.filter((e) => e.name !== t.name) }); case a.CLEAR_TOASTS: return D(D({}, e), {}, { items: [] }); default: return e; } } var U = i(291), V = i(199), G = i(60), j = i(18), W = i.n(j), F = i(105); function q(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function x(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? q(Object(i), !0).forEach(function (t) { B(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : q(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function B(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const H = { isEnumerating: !1, isFirmwareUpdating: !1, version: null, lastUpdatedAt: null }; function K(e = H, t) { switch (t.type) { case F.l: case a.REQUEST_POWERWALLS_UPDATE: return x(x({}, e), {}, { isFirmwareUpdating: !0 }); case F.b: return x(x({}, e), {}, { isFirmwareUpdating: W()(t, (e) => e.payload.updating) || !1 }); case a.RECEIVE_POWERWALLS: return x(x({}, e), {}, { isEnumerating: t.enumerating }); case a.RECEIVE_POWERWALLS_STATUS_SUCCESS: return x(x({}, e), {}, { isFirmwareUpdating: t.updating }); case F.r: case F.a: case a.RECEIVE_POWERWALLS_STATUS_ERROR: case F.c: case a.RECEIVE_POWERWALLS_UPDATE_ERROR: return x(x({}, e), {}, { isFirmwareUpdating: !1 }); case a.SAVE_SYSTEM_INFO: return x(x({}, e), {}, { version: t.version, lastUpdatedAt: Date.now() }); case a.RESET_ALL: case a.RESET_SYSTEM_INFO: return H; default: return e; } } var Y = i(280), Q = i(44); function Z(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function J(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? Z(Object(i), !0).forEach(function (t) { X(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : Z(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function X(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const $ = { didCancelUpdate: !1, didInvalidate: !1, didTimeout: !1, downloadStalled: !1, estimatedBytesPerSecond: null, info: null, isCheckingUpdateUrgency: !1, isFetching: !1, isUpdating: !1, startedAt: null, state: null, updateUrgency: null, }; function ee(e = $, t) { switch (t.type) { case a.RECEIVE_CHECK_UPDATE: return J(J({}, e), {}, { isFetching: Q.a.includes(t.state), didInvalidate: !1, state: t.state, info: t.info, estimatedBytesPerSecond: t.estimated_bytes_per_second, startedAt: t.start_time || e.startedAt }); case a.REQUEST_UPDATE: return J(J({}, e), {}, { didInvalidate: !1, isFetching: !0 }); case a.REQUEST_INSTALL_UPDATE: return J(J({}, e), {}, { didInvalidate: !1, isFetching: !0, isUpdating: !0 }); case a.CANCEL_UPDATE: return J(J({}, e), {}, { isFetching: !1, didInvalidate: !0, state: null, didCancelUpdate: !0 }); case a.DOWNLOAD_STALLED_ERROR: return J(J({}, e), {}, { downloadStalled: !0 }); case a.DOWNLOAD_PROGRESSING: return J(J({}, e), {}, { downloadStalled: !1, estimatedBytesPerSecond: t.estimated_bytes_per_second }); case a.RECEIVE_CHECK_UPDATE_ERROR: case a.RECEIVE_START_UPDATE_ERROR: case a.RECEIVE_UPDATE_ERROR: return J(J({}, e), {}, { isFetching: !1, didInvalidate: !0, info: t.info }); case a.REQUEST_CHECK_UPDATE_URGENCY: return J(J({}, e), {}, { isCheckingUpdateUrgency: !0 }); case a.RECEIVE_CHECK_UPDATE_URGENCY: return J(J({}, e), {}, { isCheckingUpdateUrgency: !1, updateUrgency: t.payload.update_urgency }); case a.RECEIVE_CHECK_UPDATE_URGENCY_ERROR: return J(J({}, e), {}, { isCheckingUpdateUrgency: !1, updateUrgency: Q.b.INVALID }); default: return e; } } var te = i(533), ie = i(126); function ne(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function re(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } i.d(t, "b", function () { return oe; }), i.d(t, "c", function () { return se; }); const ae = (e = {}) => Object(n.c)( (function (e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? ne(Object(i), !0).forEach(function (t) { re(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : ne(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; })( { location: s, navigation: g, modal: E, header: T, banner: k, toast: z, error: U.default, authentication: V.default, configuration: G.default, system: K, meterValidation: Y.default, update: ee, sitemaster: te.default, troubleshooting: ie.a, }, e ) ), oe = (e, { key: t, reducer: i }) => { Object.hasOwnProperty.call(e.asyncReducers, t) || ((e.asyncReducers[t] = i), e.replaceReducer(ae(e.asyncReducers))); }, se = (e, t) => { t.forEach(({ key: t, reducer: i }, n) => { Object.hasOwnProperty.call(e.asyncReducers, t) || (e.asyncReducers[t] = i); }), e.replaceReducer(ae(e.asyncReducers)); }; t.a = ae; }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "PowerUnits", function () { return a; }), i.d(t, "PowerFactorRange", function () { return o; }), i.d(t, "ReasonableVoltageRange", function () { return s; }), i.d(t, "CurrentUnits", function () { return _; }), i.d(t, "CurrentTransformerConnectionTypes", function () { return l; }), i.d(t, "SolarLocationCurrentTransformerTypes", function () { return c; }), i.d(t, "CheckPolarityConnectionTypes", function () { return d; }), i.d(t, "CurrentTransformerConnectionLabels", function () { return u; }), i.d(t, "PhaseSequences", function () { return m; }), i.d(t, "NeurioOrderedPhaseSequences", function () { return p; }), i.d(t, "CurrentTransformerReadingTypes", function () { return g; }), i.d(t, "CurrentTransformerWarningTypes", function () { return w; }), i.d(t, "CurrentTransformerPhaseWarningTypes", function () { return v; }), i.d(t, "CurrentTransformerAmpRatings", function () { return f; }), i.d(t, "ConnectionTypes", function () { return h; }), i.d(t, "Statuses", function () { return E; }), i.d(t, "TextInputTypes", function () { return b; }), i.d(t, "MeterUpdateConstants", function () { return y; }), i.d(t, "NEURIO_METER_SHORT_ID_LENGTH", function () { return S; }), i.d(t, "NEURIO_METER_SERIAL_LENGTH", function () { return R; }), i.d(t, "MAX_IMAGE_UPLOAD_SIZE", function () { return T; }), i.d(t, "METER_CT_AMP_NOISE", function () { return A; }), i.d(t, "METER_POWER_NOISE", function () { return C; }), i.d(t, "MAC_ADDRESS_LENGTH", function () { return I; }), i.d(t, "SyncCTVoltageReferenceType", function () { return O; }); i(27); var n = i(3), r = i(134); const a = { WATTS: "W", KILOWATTS: "kW", MEGAWATTS: "MW", POWER_FACTOR: "PF" }, o = { POWER_FACTOR_MINIMUM: 0.8, VOLT_AMPS_MINIMUM: 500, VOLT_AMPS_MAXIMUM: 1e3 }, s = { VOLTAGE_MINIMUM: 90, VOLTAGE_MAXIMUM: 265 }, _ = { AMPS: "A", VOLTS: "V" }, l = { SITE: "site", SOLAR: "solar", SOLAR_RGM: "solarRGM", DOUBLED_SOLAR: "doubled_solar", LOAD: "load", GENERATOR: "generator", BATTERY: "battery", CONDUCTOR: "conductor", NONE: "none" }, c = [l.SOLAR, l.DOUBLED_SOLAR], d = [...c, l.LOAD, l.SOLAR_RGM], u = Object(n.defineMessages)({ [l.SITE]: { id: "meter_item_view_site_location", defaultMessage: "Site" }, [l.SOLAR]: { id: "meter_item_view_solar_location", defaultMessage: "Solar" }, [l.SOLAR_RGM]: { id: "meter_item_view_solar_rgm_location", defaultMessage: "Solar Revenue-Only" }, [l.DOUBLED_SOLAR]: { id: "meter_item_view_doubled_solar_location", defaultMessage: "Doubled Solar" }, [l.LOAD]: { id: "meter_item_view_load_location", defaultMessage: "Load" }, [l.GENERATOR]: { id: "meter_item_view_generator_location", defaultMessage: "Generator" }, [l.BATTERY]: { id: "meter_item_view_battery_location", defaultMessage: "Battery" }, [l.CONDUCTOR]: { id: "meter_item_view_conductor_location", defaultMessage: "Conductor" }, [l.NONE]: { id: "meter_item_view_none_location", defaultMessage: "None" }, }), m = { A: "A", B: "B", C: "C" }, p = [m.A, m.B, m.C, m.A], g = { WATTS: "watts", AMPS: "amps", VOLTS: "volts", POWER_FACTOR: "power_factor", NO_READING: "no_reading" }, w = { NEGATIVE_AMPS: "negative_amps", POWER_FACTOR: "power_factor", VOLTAGE: "voltage", PHASE: "phase" }, v = { USAGES: "phase_usages_warning", [r.PhaseType.SINGLE]: "single_phase_warning", [r.PhaseType.SPLIT]: "split_phase_warning", [r.PhaseType.THREE]: "three_phase_warning" }, f = { LOW: "200A", HIGH: "800A", SMART: "Smart", MISSING: "Missing" }, h = { NEURIO_W1_WIFI: "neurio_tcp", NEURIO_W1_WIRED: "neurio_mb", NEURIO_W2_WIFI: "neurio_w2_tcp", NEURIO_W2_WIRED: "neurio_w2_mb", SYNCHROMETER_X: "synchrometerX", SYNCHROMETER_Y: "synchrometerY", MSA: "msa", ACUVIM: "acuvim", }, E = { UNKNOWN: "", STARTED_WIFI_ADD: "add_meter", SENDING_CREDENTIALS: "sending_hec_credentials", VERIFYING_METER: "verifying_meter", UPDATING_METER: "updating_meter", SUCCESS_METER: "success_meter", FAILED_METER: "failed_meter", ADD_METER_ERROR: "add_meter_err", VERIFY_METER_ERROR: "verify_meter_err", RECONNECTING: "reconnecting", DETECTING_WIRED_METERS: "detect_modbus", }, b = { SHORT_ID: "short_id", SERIAL: "serial", MAC_ADDRESS: "mac_address", IP_ADDRESS: "ip_address" }, y = { UPDATE_TIMEOUT: 120, METER_UPDATE_MODAL: "METER_UPDATE_MODAL" }, S = 5, R = 13, T = 1280, A = -0.1, C = 50, I = 17, O = { DEFAULT: "PhaseNone", PHASE1: "Phase1", PHASE2: "Phase2", PHASE3: "Phase3" }; }, function (e, t, i) { "use strict"; i.d(t, "f", function () { return n; }), i.d(t, "c", function () { return r; }), i.d(t, "k", function () { return a; }), i.d(t, "b", function () { return o; }), i.d(t, "a", function () { return s; }), i.d(t, "j", function () { return _; }), i.d(t, "g", function () { return l; }), i.d(t, "e", function () { return c; }), i.d(t, "d", function () { return d; }), i.d(t, "i", function () { return u; }), i.d(t, "h", function () { return m; }); const n = "italy", r = "germany", a = "united states", o = "canada", s = "australia", _ = "united kingdom", l = "new zealand", c = { CONNECTED: "SystemGridConnected", ISLAND_READY: "SystemIslandedReady", ISLANDED: "SystemIslandedActive", TRANSITION_TO_GRID: "SystemTransitionToGrid" }, d = { COMPLIANT: "Grid_Compliant", QUALIFYING: "Grid_Qualifying", UNCOMPLIANT: "Grid_Uncompliant" }, u = { PHASE_1: "phase1", PHASE_2: "phase2", PHASE_3: "phase3" }, m = { [u.PHASE_1]: "Phase1", [u.PHASE_2]: "Phase2", [u.PHASE_3]: "Phase3" }; }, function (e, t, i) { "use strict"; i.r(t); var n, r, a, o = i(7); class s { static message(e, t, i = !1) { window && window.console && console.log && (console.log(e), t && console.log(t), i && Object(o.uploadLogs)(s.LOG_LEVELS.INFO, e).catch((e) => { console.error(e); })); } static debug(e, t, i = !1) { window && window.console && console.info && (console.info(e), t && console.info(t), i && Object(o.uploadLogs)(s.LOG_LEVELS.DEBUG, e).catch((e) => { console.error(e); })); } static warn(e, t, i = !1) { window && window.console && console.warn && (console.warn(e), t && console.warn(t), i && Object(o.uploadLogs)(s.LOG_LEVELS.WARN, e).catch((e) => { console.error(e); })); } static trace(e) { window && window.console && console.trace && (e ? console.trace(e) : console.trace()); } constructor(e, t) { (this.message = e), (this.context = t); } getMessage() { return this.message; } setMessage(e) { this.message = e; } getContext() { return this.context; } setContext(e) { this.context = e; } toError() { return new Error(this.getMessage()); } } (a = { FATAL: "FATAL", ERROR: "ERROR", WARN: "WARN", DEBUG: "DEBUG", INFO: "INFO", TRACE: "TRACE" }), (r = "LOG_LEVELS") in (n = s) ? Object.defineProperty(n, r, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : (n[r] = a); var _ = i(2), l = i(10); i.d(t, "default", function () { return c; }); class c extends s { static error(e, t, i = !1) { if (window && window.console && console.error && (console.error(e), t && console.error(t), i)) { let t, i = null; e instanceof c ? ((i = e.getStackTrace()), (t = e.toString())) : e instanceof Error ? ((i = e.stack), (t = e.toString())) : (t = "object" == typeof e ? JSON.stringify(e) : e.toString()), Object(o.uploadLogs)(s.LOG_LEVELS.ERROR, t, i).catch((e) => { console.error(e); }); } } static fatal(e, t, i = !1) { window && window.console && console.error && (console.error(e), t || (e instanceof c ? (t = e.getStackTrace()) : e instanceof Error && (t = e.stack)), t && console.error(t), i && Object(o.uploadLogs)(s.LOG_LEVELS.FATAL, e.toString(), t).catch((e) => { console.error(e); })); } static logFatal(e, t) { c.fatal(e, t.componentStack, !0); } constructor(e = _.GENERIC_ERROR, t, i, n = !1) { super(t, i), (this.name = e), c.error(this, null, n); } getName() { return this.name; } setName(e) { this.name = e; } isDetailed() { return null != this.context && this.context.detailed; } isUnauthorized() { return null != this.context && null != this.context.code && l.f.includes(this.context.code); } toDetailedString() { let e = `${this.name}: ${this.message}\n`; return null != this.context && (e += JSON.stringify(this.context)), e; } toErrorString() { let e = this.message; return null != this.context && this.context.error && this.message !== this.context.error && this.message !== "Error: " + this.context.error && (e += ` (${this.context.error})`), e; } getStackTrace() { return super.toError().stack; } toString() { return JSON.stringify(this.toJSON()); } toJSON() { let e = { name: this.name, message: this.message }; return this.context && (e.context = this.context), e; } } }, function (e, t, i) { "use strict"; let n; i.d(t, "a", function () { return r; }), i.d(t, "d", function () { return a; }), i.d(t, "b", function () { return o; }), i.d(t, "e", function () { return s; }), i.d(t, "c", function () { return _; }); const r = 3e4; function a(e = 0) { return new Promise((t) => { n = setTimeout(t, e); }); } function o() { clearTimeout(n); } function s(e, t, i) { return new Promise((n, r) => { i.then(n, r), setTimeout(r.bind(null, t), e); }); } function _(e) { let t = !1; return { promise: new Promise((i, n) => { e.then( (e) => (t ? n({ isCanceled: !0 }) : i(e)), (e) => n(t ? { isCanceled: !0 } : e) ); }), cancel() { t = !0; }, }; } }, , , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "isAuthenticated", function () { return o; }), i.d(t, "isCustomer", function () { return s; }), i.d(t, "isInstaller", function () { return _; }), i.d(t, "isEngineer", function () { return l; }), i.d(t, "isTeslaUser", function () { return c; }), i.d(t, "hasExpiredSession", function () { return d; }); var n = i(10), r = i(45), a = i(29); function o(e, t = []) { let i = !1; for (let e = 0; e < t.length; e++) if (Object(a.o)(t[e])) { i = !0; break; } return null !== e.lastLoginAt && e.loginType !== n.c.KIOSK && !i && (null != Object(r.b)("AuthCookie") || l(e)); } function s(e, t = []) { return o(e, t) && e.loginType === n.c.CUSTOMER; } function _(e, t = []) { return o(e, t) && e.loginType === n.c.INSTALLER; } function l(e) { return null !== e.lastLoginAt && e.loginType === n.c.ENGINEER; } function c(e) { const t = e.email ? e.email.toLowerCase() : ""; return l(e) || (_(e) && t.endsWith("@tesla.com")); } function d(e) { for (let t = 0; t < e.length; t++) if (Object(a.l)(e[t].message)) return !0; return !1; } }, function (e, t, i) { "use strict"; function n(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function r(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? n(Object(i), !0).forEach(function (t) { a(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : n(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function a(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } i.d(t, "o", function () { return o; }), i.d(t, "h", function () { return s; }), i.d(t, "i", function () { return _; }), i.d(t, "s", function () { return l; }), i.d(t, "q", function () { return c; }), i.d(t, "r", function () { return d; }), i.d(t, "l", function () { return u; }), i.d(t, "m", function () { return m; }), i.d(t, "k", function () { return p; }), i.d(t, "n", function () { return g; }), i.d(t, "j", function () { return w; }), i.d(t, "p", function () { return v; }), i.d(t, "b", function () { return f; }), i.d(t, "g", function () { return h; }), i.d(t, "d", function () { return E; }), i.d(t, "c", function () { return b; }), i.d(t, "f", function () { return y; }), i.d(t, "e", function () { return S; }), i.d(t, "a", function () { return R; }), i.d(t, "t", function () { return T; }); const o = { IDLE: "TestNotRun", INIT: "TestInitializing", PREP: "TestStartingSM", RUNNING: "TestRunning", FAILED: "TestFailed", PASSED: "TestPassed", CANCELED: "TestCanceled" }, s = { OVER_FREQUENCY: "overFrequency", UNDER_FREQUENCY: "underFrequency", CHANGE_FREQUENCY: "changeFrequency", PHASE_1_UNDER_VOLTAGE: "phaseOneUnderVoltage", PHASE_2_UNDER_VOLTAGE: "phaseTwoUnderVoltage", PHASE_3_UNDER_VOLTAGE: "phaseThreeUnderVoltage", PHASE_1_OVER_VOLTAGE: "phaseOneOverVoltage", PHASE_2_OVER_VOLTAGE: "phaseTwoOverVoltage", PHASE_3_OVER_VOLTAGE: "phaseThreeOverVoltage", }, _ = { PINV_a021_vfCheckSplitPhaseOverVoltage: s.PHASE_2_OVER_VOLTAGE, PINV_a020_vfCheckSplitPhaseUnderVoltage: s.PHASE_2_UNDER_VOLTAGE, PINV_a005_vfCheckOverVoltage: s.PHASE_1_OVER_VOLTAGE, PINV_a004_vfCheckUnderVoltage: s.PHASE_1_UNDER_VOLTAGE, PINV_a007_vfCheckOverFrequency: s.OVER_FREQUENCY, PINV_a006_vfCheckUnderFrequency: s.UNDER_FREQUENCY, PINV_a008_vfCheckRocof: s.CHANGE_FREQUENCY, }, l = { NOT_RUN: "not_run", RUNNING: "running", SCHEDULED: "scheduled", PASS: "pass", FAIL: "fail", INCONCLUSIVE: "marginal", CANCELED: "canceled", ALERT: "alert" }, c = (l.RUNNING, l.SCHEDULED, [l.FAIL, l.CANCELED]), d = [l.PASS, l.FAIL, l.INCONCLUSIVE, l.CANCELED], u = r(r({}, l), {}, { NOT_RUN: "notRun", NA: "na", COMPLETE: "complete" }), m = { PinvTestResultSummaryNotRun: u.NOT_RUN, PinvTestResultSummaryRunning: u.RUNNING, PinvTestResultSummaryPass: u.PASS, PinvTestResultSummaryFail: u.FAIL, PinvTestResultStatusNA: u.NA, PinvTestResultStatusRunning: u.RUNNING, PinvTestResultStatusComplete: u.COMPLETE, }, p = { ALL: "PinvTestAll", OVER_FREQ_STAGE_ONE: "PinvTestOverFreqStage1", OVER_FREQ_STAGE_TWO: "PinvTestOverFreqStage2", UNDER_FREQ_STAGE_ONE: "PinvTestUnderFreqStage1", UNDER_FREQ_STAGE_TWO: "PinvTestUnderFreqStage2", OVER_VOLT_ONE: "PinvTestOverVolt1", OVER_VOLT_TWO: "PinvTestOverVolt2", UNDER_VOLT_ONE: "PinvTestUnderVolt1", UNDER_VOLT_TWO: "PinvTestUnderVolt2", }, g = { SET_MAGNITUDE: "SetMagnitude", SET_TIME: "SetTime", TRIP_TIME: "TripTime", TRIP_MAGNITUDE: "TripMagnitude", ACCURACY_MAGNITUDE: "AccuracyMagnitude", ACCURACY_TIME: "AccuracyTime", CURRENT_MAGNITUDE: "CurrentMagnitude", LAST_ERROR: "LastError", TIMESTAMP: "Timestamp", }, w = { GRID_UNCOMPLIANT: "PinvTestStartResponseGridUncompliant", NOT_IDLE: "PinvTestStartResponseNotIdle" }, v = "PinvTest", f = { ALERTS: "Alerts", NETWORK: "Network", SELF_TESTS: "SelfTests", INTERNAL_COMMUNICATIONS: "InternalComms", METERING: "Metering", CONFIG: "Config", WIRING: "Wiring", GRID: "Grid" }, h = { NETWORK_CONNECTION: "Network connection", ENABLE_LINE: "EnableLine", CAN_BUS: "CAN bus", METER_COMMUNICATIONS: "Meter communication", DC_SELF_TEST: "DC Self Test Suite", AC_SELF_TEST: "AC Self Test Suite", INDIVIDUAL_SELF_TEST: "Individual Self Test", }, E = { MAX_ALLOWED_CHARGE_POWER: "max_allowed_charge_power", MAX_ALLOWED_DISCHARGE_POWER: "max_allowed_discharge_power", BLOCK_SERIALS: "block_serials", TEST_NAME: "test_name" }, b = { NUMERICAL: "numerical", MULTI_SELECT: "multi_select", SINGLE_SELECT: "single_select" }, y = { GOOGLE_HTTP: "GoogleHTTP", GOOGLE_HTTPS: "GoogleHTTPS", CONFIG_UPDATE_STATUS: "ConfigUpdateStatus", HERMES_STATUS: "HermesStatus" }, S = { IP_ADDRESS: "IP Address", SUBNET_MASK: "Subnet" }, R = { audience: "Audience", clearCondition: "Clear Condition", potentialImpact: "Potential Impact", isUrgent: "Urgent", isLatching: "Latching", node: "Node", safetyReason: "Safety Reason", alertID: "Alert ID", payloadSignals: "Payload Signals", max: "Max", snaValue: "SNA Value", offset: "Offset", scale: "Scale", name: "Name", min: "Min", units: "Units", alertName: "Alert Name", uiID: "UI UD", signoff: "Sign Off", impactCategory: "Impact Category", displayName: "Display Name", supplierDtcName: "Supplier DTC Name", alertType: "Alert Type", description: "Description", signalName: "Signal Name", setCondition: "Set Condition", }, T = { HwCritical: "HwCritical", PerformanceCritical: "PerformanceCritical", Informational: "Informational" }; }, , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "Locales", function () { return d; }), i.d(t, "LocaleTextMap", function () { return u; }), i.d(t, "LocaleMap", function () { return m; }), i.d(t, "modalMessages", function () { return p; }), i.d(t, "navigationMessages", function () { return g; }), i.d(t, "timeMessages", function () { return w; }), i.d(t, "networkMessages", function () { return v; }), i.d(t, "controlMessages", function () { return f; }), i.d(t, "labelMessages", function () { return h; }), i.d(t, "inputTitles", function () { return E; }), i.d(t, "inputMessages", function () { return b; }), i.d(t, "warnings", function () { return y; }), i.d(t, "powerwallMessages", function () { return S; }), i.d(t, "errorMessages", function () { return R; }), i.d(t, "validationMessages", function () { return T; }), i.d(t, "meterUpdateMessages", function () { return A; }), i.d(t, "diagnosticTestNames", function () { return C; }), i.d(t, "meterMessages", function () { return I; }), i.d(t, "phaseLineMessages", function () { return O; }), i.d(t, "meterAggregateTypeMessages", function () { return N; }), i.d(t, "formLegendMessages", function () { return k; }), i.d(t, "operationModeMessages", function () { return P; }), i.d(t, "conductorMessages", function () { return D; }), i.d(t, "canRebootMessages", function () { return L; }), i.d(t, "passwordFormLabels", function () { return M; }), i.d(t, "diagnosticAlertMetaDataType", function () { return z; }); var n = i(27), r = i(3), a = i(22), o = i(92), s = i(8), _ = i(93), l = i(42), c = i(12); const d = { ENGLISH: "en", GERMAN: "de", ITALIAN: "it", SPANISH: "es", DUTCH: "nl", FRENCH: "fr", JAPANESE: "ja" }, u = { [d.ENGLISH]: "English", [d.GERMAN]: "Deutsch", [d.ITALIAN]: "Italiano", [d.SPANISH]: "Español", [d.DUTCH]: "Nederlands", [d.FRENCH]: "Français", [d.JAPANESE]: "日本語" }, m = Object(n.reduce)(Object.values(d), (e, t) => ((e[u[t]] = t), e), {}), p = Object(r.defineMessages)({ ok: { id: "modal_ok", defaultMessage: "OK" }, note: { id: "modal_note", defaultMessage: "Note" }, yes: { id: "modal_yes", defaultMessage: "YES" }, no: { id: "modal_no", defaultMessage: "NO" }, confirm: { id: "modal_confirm", defaultMessage: "CONFIRM" }, acknowledge: { id: "modal_acknowledge", defaultMessage: "ACKNOWLEDGE" }, reconfigure: { id: "modal_reconfigure", defaultMessage: "RECONFIGURE" }, exit: { id: "modal_exit", defaultMessage: "EXIT" }, }), g = Object(r.defineMessages)({ email: { id: "navigation_email", defaultMessage: "EMAIL" } }), w = Object(r.defineMessages)({ second: { id: "time_second", defaultMessage: "second" }, seconds: { id: "time_seconds", defaultMessage: "seconds" }, minute: { id: "time_minute", defaultMessage: "minute" }, minutes: { id: "time_minutes", defaultMessage: "minutes" }, startedAt: { id: "time_started_at", defaultMessage: "Started at: {time}" }, }), v = Object(r.defineMessages)({ connected: { id: "network_connected", defaultMessage: "Connected" }, disconnected: { id: "network_disconnected", defaultMessage: "Not connected" }, disabled: { id: "network_disabled", defaultMessage: "Disabled" }, EthTypeConfigured: { id: "network_ethernet_configured", defaultMessage: "Configured, but not connected. Check the ethernet cable connection." }, WifiTypeConfigured: { id: "network_wifi_configured", defaultMessage: "Configured, but not connected. Check your WiFi settings." }, GsmTypeConfigured: { id: "network_cellular_configured", defaultMessage: "Configured, but not connected. Ensure cellular network is available and there are no obstructions around antenna." }, warning: { id: "network_warning", defaultMessage: "Warning" }, }), f = Object(r.defineMessages)({ stop: { id: "control_stop", defaultMessage: "STOP" }, start: { id: "control_start", defaultMessage: "START" } }), h = Object(r.defineMessages)({ pass: { id: "label_pass", defaultMessage: "Pass" }, fail: { id: "label_fail", defaultMessage: "Fail" }, inconclusive: { id: "label_inconclusive", defaultMessage: "Inconclusive" } }), E = Object(r.defineMessages)({ email: { id: "input_title_email", defaultMessage: "Enter a valid email address: name@name.domain" } }), b = Object(r.defineMessages)({ accept: { id: "input_accept", defaultMessage: "I accept" }, decline: { id: "input_decline", defaultMessage: "I decline" }, consent: { id: "input_consent", defaultMessage: "I consent" }, confirm: { id: "input_confirm", defaultMessage: "I acknowledge all system warnings." }, noConsent: { id: "input_no_consent", defaultMessage: "I do not consent" }, }), y = Object(r.defineMessages)({ caution: { id: "caution", defaultMessage: "CAUTION" }, warning: { id: "warning", defaultMessage: "WARNING" }, offGrid: { id: "warning_off_grid", defaultMessage: "If the electrical system is off-grid, any backed up loads will be dropped within 5 minutes." }, onGrid: { id: "warning_on_grid", defaultMessage: "If the electrical system is on-grid, Powerwall will stop charging/discharging." }, sitemasterNotRunning: { id: "warning_sitemaster_container_not_running", defaultMessage: "The Sitemaster is not running" }, }), S = Object(r.defineMessages)({ starting: { id: "powerwall_starting", defaultMessage: "Starting Powerwall" } }), R = Object(r.defineMessages)({ details: { id: "error_details", defaultMessage: "Error Details" } }), T = Object(r.defineMessages)({ phone: { id: "validation_phone", defaultMessage: "Input a valid telephone number" } }), A = Object(r.defineMessages)({ title: { id: "meter_update_modal_title", defaultMessage: "Meter Update is Underway" }, footer: { id: "meter_update_modal_footer", defaultMessage: "Meter Update may take up to 2 Minutes" }, remainingTime: { id: "meter_update_modal_remaining_time", defaultMessage: "Time Remaining: {seconds} seconds" }, timeoutError: { id: "meter_update_modal_timeout_error", defaultMessage: "Error: Timeout occurred while updating the meter" }, fetchStatusError: { id: "meter_update_modal_fetch_status_error", defaultMessage: "Error: Unable to fetch meter update status" }, }), C = Object(r.defineMessages)({ [a.g.NETWORK_CONNECTION]: { id: "diagnostic_test_network_connection", defaultMessage: "Network Connection" }, [a.g.ENABLE_LINE]: { id: "diagnostic_test_enable_line", defaultMessage: "Enable Line" }, [a.g.METER_COMMUNICATIONS]: { id: "diagnostic_test_meter_comms", defaultMessage: "Meter Communications" }, }), I = Object(r.defineMessages)({ [c.ConnectionTypes.NEURIO_W1_WIFI]: { id: "meter_w1_wifi_id", defaultMessage: "METER {id}" }, [c.ConnectionTypes.NEURIO_W1_WIRED]: { id: "meter_w1_wired_id", defaultMessage: "WIRED METER {id}" }, [c.ConnectionTypes.NEURIO_W2_WIFI]: { id: "meter_w2_wifi_id", defaultMessage: "METER {id}" }, [c.ConnectionTypes.NEURIO_W2_WIRED]: { id: "meter_w2_wired_id", defaultMessage: "WIRED METER {id}" }, [c.ConnectionTypes.SYNCHROMETER_X]: { id: "meter_sync_x_id", defaultMessage: "INTERNAL PRIMARY METER X (GATEWAY) {id}" }, [c.ConnectionTypes.SYNCHROMETER_Y]: { id: "meter_sync_y_id", defaultMessage: "INTERNAL AUXILIARY METER Y (GATEWAY) {id}" }, [c.ConnectionTypes.MSA]: { id: "meter_msa_id", defaultMessage: "BACKUP SWITCH {id}" }, [c.ConnectionTypes.ACUVIM]: { id: "meter_acuvim_id", defaultMessage: "ACUVIM {id}" }, }), O = Object(r.defineMessages)({ id: { id: "phase_line_id", defaultMessage: "Line-{id}" }, [o.b.NON_BACKUP]: { id: "phase_line_status_configured", defaultMessage: "Non Backup" }, [o.b.BACKUP]: { id: "phase_line_status_backup", defaultMessage: "Backup" }, [o.b.NOT_CONFIGURED]: { id: "phase_line_status_not_configured", defaultMessage: "Not Configured" }, }), N = Object(r.defineMessages)({ [s.n[s.h.SOLAR]]: { id: "meter_aggregate_type_solar", defaultMessage: "Solar" }, [s.n[s.h.USAGE]]: { id: "meter_aggregate_type_load", defaultMessage: "Load" }, [s.n[s.h.GRID]]: { id: "meter_aggregate_type_site", defaultMessage: "Site" }, [s.n[s.h.BATTERY]]: { id: "meter_aggregate_type_battery", defaultMessage: "Battery" }, }), k = Object(r.defineMessages)({ formLegend: { id: "form_legend_text", defaultMessage: "denotes a required field" } }), P = Object(r.defineMessages)({ [_.e.BACKUP]: { id: "operation_mode_backup", defaultMessage: "Backup Charging Only" }, [_.e.SELF_CONSUMPTION]: { id: "operation_mode_self_consumption", defaultMessage: "Self-consumption Mode" }, [_.e.AUTONOMOUS]: { id: "operation_mode_autonomous", defaultMessage: "Autonomous Mode" }, [_.e.SITE_CONTROL]: { id: "operation_mode_site_control", defaultMessage: "Site Control" }, }), D = Object(r.defineMessages)({ conductorLimitExplanation: { id: "conductor_limit", defaultMessage: "Batteries are controlled to avoid exceeding configured current limits on each phase of the conductor CTs. Review conductor limit application note for more details about where this is used, and what limits should be configured.", }, conductorMinCurrent: { id: "conductor_min_current", defaultMessage: "Conductor Export Limit" }, }), L = Object(r.defineMessages)({ [l.a.backupMode]: { id: "can_reboot_message_backup", defaultMessage: "Backup Mode" }, [l.a.blockUpdate]: { id: "can_reboot_message_block_update", defaultMessage: "Block Update in progress" }, [l.a.initializing]: { id: "can_reboot_message_initializing", defaultMessage: "System Initializing" }, [l.a.enumeration]: { id: "can_reboot_message_enumeration", defaultMessage: "Enumeration in progress" }, [l.a.powerFlowIsTooHigh]: { id: "can_reboot_message_power_flow_is_too_high", defaultMessage: "Power flow is too high" }, [l.a.updating]: { id: "can_reboot_message_updating", defaultMessage: "Site Package Update in progress" }, }), M = Object(r.defineMessages)({ currentPassword: { id: "security_view_settings_old_password", defaultMessage: "CURRENT PASSWORD" }, newPassword: { id: "security_view_settings_new_password_label", defaultMessage: "NEW PASSWORD" }, }), z = Object(r.defineMessages)({ [a.a.audience]: { id: "diagnostic_alert_audience", defaultMessage: "Audience" }, [a.a.clearCondition]: { id: "diagnostic_alert_clear_condition", defaultMessage: "Clear Condition" }, [a.a.potentialImpact]: { id: "diagnostic_alert_potential_impact", defaultMessage: "Potential Impact" }, [a.a.isUrgent]: { id: "diagnostic_alert_urgent", defaultMessage: "Urgent" }, [a.a.isLatching]: { id: "diagnostic_alert_latching", defaultMessage: "Latching" }, [a.a.node]: { id: "diagnostic_alert_node", defaultMessage: "Node" }, [a.a.safetyReason]: { id: "diagnostic_alert_safety_reason", defaultMessage: "Safety Reason" }, [a.a.alertID]: { id: "diagnostic_alert_id", defaultMessage: "Alert ID" }, [a.a.payloadSignals]: { id: "diagnostic_alert_payload_signals", defaultMessage: "Payload Signals" }, [a.a.max]: { id: "diagnostic_alert_max", defaultMessage: "Max" }, [a.a.snaValue]: { id: "diagnostic_alert_sna_value", defaultMessage: "SNA Value" }, [a.a.offset]: { id: "diagnostic_alert_offset", defaultMessage: "Offset" }, [a.a.scale]: { id: "diagnostic_alert_scale", defaultMessage: "Scale" }, [a.a.name]: { id: "diagnostic_alert_name", defaultMessage: "Name" }, [a.a.min]: { id: "diagnostic_alert_min", defaultMessage: "Min" }, [a.a.units]: { id: "diagnostic_alert_units", defaultMessage: "Units" }, [a.a.alertName]: { id: "diagnostic_alert_alert_name", defaultMessage: "Alert Name" }, [a.a.uiID]: { id: "diagnostic_alert_uiID", defaultMessage: "UI ID" }, [a.a.signoff]: { id: "diagnostic_alert_signoff", defaultMessage: "Sign Off" }, [a.a.impactCategory]: { id: "diagnostic_alert_impact_category", defaultMessage: "Impact Category" }, [a.a.displayName]: { id: "diagnostic_alert_display_name", defaultMessage: "Display Name" }, [a.a.supplierDtcName]: { id: "diagnostic_alert_supplier_dtc_name", defaultMessage: "Supplier DTC Name" }, [a.a.alertType]: { id: "diagnostic_alert_alert_type", defaultMessage: "Alert Type" }, [a.a.description]: { id: "diagnostic_alert_description", defaultMessage: "Description" }, [a.a.signalName]: { id: "diagnostic_alert_signal_name", defaultMessage: "Signal Name" }, [a.a.setCondition]: { id: "diagnostic_alert_set_condition", defaultMessage: "Set Condition" }, }); }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.errors = t.labels = t.prompts = t.titles = t.buttons = void 0); const n = i(3); (t.buttons = (0, n.defineMessages)({ BACK: { id: "navigation_back", description: "Label for button that returns to the previous screen.", defaultMessage: "BACK" }, CANCEL: { id: "navigation_cancel", description: "Label for button that cancels or aborts the current action.", defaultMessage: "CANCEL" }, CONTINUE: { id: "navigation_forward", description: "Label for button that advances to the next screen.", defaultMessage: "CONTINUE" }, SKIP: { id: "navigation_skip", description: "Label for button that skips the current screen and advances to the next screen.", defaultMessage: "SKIP" }, CLOSE: { id: "modal_close", description: "Label for button that closes a modal dialog (e.g. a warning).", defaultMessage: "CLOSE" }, FINISH: { id: "label_button_finish", description: "Label for button that completes the current procedure (e.g. commissioning wizard).", defaultMessage: "FINISH" }, SAVE: { id: "modal_save", description: "Label for button that saves the settings shown on the current screen.", defaultMessage: "SAVE" }, EDIT: { id: "label_button_edit", description: "Label for button that edits the setting shown on the current screen.", defaultMessage: "EDIT" }, DELETE: { id: "control_delete", description: "Label for button that deletes or removes the specified item.", defaultMessage: "DELETE" }, CONNECT: { id: "control_connect", description: "Label for button that connects to the network or devices show on the current screen.", defaultMessage: "CONNECT" }, REFRESH: { id: "modal_refresh", description: "Label for button that refreshes or reloads the current list or screen.", defaultMessage: "REFRESH" }, UPLOAD: { id: "label_button_upload", description: "Label for button that uploads a file or data to the device or service.", defaultMessage: "UPLOAD" }, SCAN_BARCODE: { id: "label_button_scan_barcode", description: "Label for button that will scan a barcode using the camera.", defaultMessage: "SCAN BARCODE" }, SCAN_QRCODE: { id: "label_button_scan_qrcode", description: "Label for button that will scan a QR code using the camera.", defaultMessage: "SCAN QR CODE" }, ENTER_MANUALLY: { id: "label_button_enter_manually", description: "Label for button that enables manual data entry rather than scanning a barcode.", defaultMessage: "ENTER MANUALLY" }, FACTORY_RESET: { id: "button_label_factory_reset", description: "Button label for a factory reset action.", defaultMessage: "RESET TO FACTORY DEFAULTS" }, CONFIRM: { id: "button_label_confirm", description: "Button label for confirming an action.", defaultMessage: "CONFIRM" }, })), (t.titles = (0, n.defineMessages)({ gridCode: { id: "grid_code_container_title", description: "Grid Code is the techncial specification of the electric grid standard. This term may appear as the title of a screen or section showing the Grid Code settings and parameters.", defaultMessage: "Grid Code", }, ethernet: { id: "network_view_ethernet_title", description: "Title for a screen or section showing the device's Ethernet connection details or configuration options.", defaultMessage: "Ethernet" }, wifi: { id: "network_view_wifi_title", description: "Title for a screen or section showing the device's Wi-Fi connection details or configuration options.", defaultMessage: "Wi-Fi" }, cellular: { id: "network_view_gsm_title", description: "Title for a screen or section showing the device's cellular connection details or configuration options.", defaultMessage: "Cellular" }, metering: { id: "title_metering", description: "Title for a screen or section showing the device's metering configuration and connection status", defaultMessage: "Metering" }, networks: { id: "title_networks", description: "Title for a screen or section showing the device's networking devices, settings, and status.", defaultMessage: "Networks" }, service: { id: "title_service", description: "Title for a screen or section showing features accessible to a service person.", defaultMessage: "Service" }, siteInfo: { id: "title_site_info", description: "Site Info is a screen for configuring different items relating to the site. e.g. Inverter is connected to Solar Roof or PV Panels.", defaultMessage: "Site Info" }, siteMeter: { id: "title_site_meter", description: "Site Meter is an electrical meter that is installed at the interconnection point where the site connects to the electric grid. This term may appear as the title of a screen or section showing a Site Meter configuration, or denote ", defaultMessage: "Site Meter", }, softwareUpdate: { id: "title_software_update", description: "Title for a screen or section showing the device's software update status.", defaultMessage: "Software Update" }, software: { id: "title_software", description: "Title for a screen or section showing the device's software version and software update status.", defaultMessage: "Software" }, alerts: { id: "alert_container_title", description: "Title for a screen or section showing the device's alerts or alert status.", defaultMessage: "Alerts" }, installation: { id: "title_installation", description: "Title for a screen or section showing the device's installation parameters and settings.", defaultMessage: "Installation" }, summary: { id: "summary_container_title", description: "Title for a screen or section showing a summary of the device's configuration.", defaultMessage: "Summary" }, })), (t.prompts = (0, n.defineMessages)({ requiredField: { id: "prompt_required_field", description: "Prompt shown next to a field that is required.", defaultMessage: "This field is required." }, select: { id: "dropdown_default_selection", description: "Prompt shown in a dropdown selector that does not have a preselected value and a user selection is desired or required.", defaultMessage: "Select" }, })), (t.labels = (0, n.defineMessages)({ factoryReset: { id: "label_factory_reset", description: "Label for a factory reset.", defaultMessage: "FACTORY RESET" }, partNumber: { id: "label_part_number", description: "Label for the device part number", defaultMessage: "Part Number" }, partNumberTPN: { id: "label_part_number_psn", description: "Label for a Tesla part number. 'TPN' is how it is identified on the device enclosure.", defaultMessage: "Part Number (TPN)" }, serialNumber: { id: "label_serial_number", description: "Label for the device serial number", defaultMessage: "Serial Number" }, serialNumberTSN: { id: "label_serial_number_tsn", description: "Label for a Tesla serial number. 'TSN' is how it is identified on the device enclosure.", defaultMessage: "Serial Number (TSN)" }, model: { id: "label_model", description: "Label for the device model", defaultMessage: "Model" }, })), (t.errors = (0, n.defineMessages)({ invalidPassword: { id: "error_messages_invalid_password", description: "indicates an error due to an invalid password.", defaultMessage: "Invalid password. Please try again." } })); }, function (e, t, i) { "use strict"; i.d(t, "r", function () { return _; }), i.d(t, "e", function () { return l; }), i.d(t, "a", function () { return c; }), i.d(t, "f", function () { return d; }), i.d(t, "c", function () { return u; }), i.d(t, "b", function () { return m; }), i.d(t, "d", function () { return p; }), i.d(t, "o", function () { return g; }), i.d(t, "p", function () { return v; }), i.d(t, "l", function () { return f; }), i.d(t, "i", function () { return h; }), i.d(t, "j", function () { return E; }), i.d(t, "q", function () { return b; }), i.d(t, "k", function () { return y; }), i.d(t, "h", function () { return S; }), i.d(t, "m", function () { return T; }), i.d(t, "n", function () { return A; }), i.d(t, "g", function () { return I; }); var n = i(18), r = i.n(n), a = i(14), o = i(2), s = i(10); const _ = "Download is very slow or stalled.", l = (e) => e.filter((e) => [o.RECEIVE_SITEMASTER_SETTINGS_ERROR, o.RECEIVE_START_SITEMASTER_ERROR, o.RECEIVE_STOP_SITEMASTER_ERROR, o.RECEIVE_SYNC_CONFIG_ERROR].includes(e.getName())), c = (e) => e.filter((e) => [o.RECEIVE_LOGIN_ERROR, o.RECEIVE_CHANGE_PASSWORD_ERROR, o.RECEIVE_RESET_PASSWORD_ERROR, o.RECEIVE_GENERATE_PASSWORD_ERROR, o.RECEIVE_LOGOUT_ERROR].includes(e.getName())), d = (e) => e.filter((e) => [o.RECEIVE_CONNECT_SOLAR_INVERTER_ERROR].includes(e.getName())), u = (e) => e.filter((e) => [o.POWER_RATING_RANGE_ERROR, o.SUSTAINED_POWER_RANGE_ERROR].includes(e.getName())), m = (e) => e.filter((e) => e.isDetailed()), p = (e) => e.filter((e) => [o.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR].includes(e.getName())); function g(e) { let t = !1; if (e instanceof Error && null != e.response) { let i = e.response; null != i && (t = w(r()(i, (e) => e.status) || r()(i, (e) => e.code))); } else e instanceof a.default && (t = w(r()(e, (e) => e.context.code) || r()(e, (e) => e.context.status))); return v(e.message) || t; } function w(e) { return null != e && s.f.includes(e); } function v(e) { let t = e.toLowerCase(); return t.indexOf("unauthorized") > -1 || t.indexOf("forbidden") > -1 || t.indexOf("does not have adequate access") > -1 || f(t); } function f(e) { let t = e.toLowerCase(); return t.indexOf("invalid bearer token") > -1 || t.indexOf("token expired") > -1; } function h(e) { return E(e.message); } function E(e) { return e.toLowerCase().indexOf("failed to fetch") > -1; } function b(e) { return e.toLowerCase().indexOf("no update package available") > -1; } function y(e) { return e === _; } function S(e) { let t = !1; if (e instanceof Error && null != e.response) { let i = e.response; null != i && (t = R(r()(i, (e) => e.status) || r()(i, (e) => e.code))); } else e instanceof a.default && (t = R(r()(e, (e) => e.context.code) || r()(e, (e) => e.context.status))); return e.message.toLowerCase().indexOf("conflict") > -1 || t; } function R(e) { return 409 === e; } function T(e) { return !!e.response && 424 === e.response.code; } function A(e) { let t = !1; if (e instanceof Error && null != e.response) { let i = e.response; null != i && (t = C(r()(i, (e) => e.status) || r()(i, (e) => e.code))); } else e instanceof a.default && (t = C(r()(e, (e) => e.context.code) || r()(e, (e) => e.context.status))); return e.message.toLowerCase().indexOf("internal server error") > -1 || t; } function C(e) { return 500 === e; } function I(e) { const t = e.message.toLowerCase(); return t.indexOf("the network connection was lost") > -1 || t.indexOf("server with the specified hostname could not be found") > -1 || t.indexOf("the internet connection appears to be offline") > -1; } }, , , , , , , , function (e, t, i) { "use strict"; i.d(t, "h", function () { return r; }), i.d(t, "d", function () { return a; }), i.d(t, "a", function () { return o; }), i.d(t, "f", function () { return s; }), i.d(t, "g", function () { return _; }), i.d(t, "e", function () { return l; }), i.d(t, "b", function () { return c; }), i.d(t, "c", function () { return d; }), i.d(t, "i", function () { return u; }); var n = i(191); const r = n.SecurityType, a = n.NetworkInterfaceType, o = { ETHERNET: "ethernet", WIFI: "wifi", GSM: "cellular" }, s = { DHCP: "dhcp", STATIC: "manual" }, _ = { [r.NONE]: "None", [r.WEP]: "WEP", [r.WPA_WPA2_PERSONAL]: "WPA/WPA2 Personal", [r.WPA2_PERSONAL]: "WPA2 Personal", [r.DYNAMIC_WEP]: "Dynamic WEP", [r.WPA_WPA2_ENTERPRISE]: "WPA/WPA2 Enterprise", [r.WPA2_ENTERPRISE]: "WPA2 Enterprise", }, l = { ETHERNET: "Customer_Wired" }, c = /^0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$/, d = /^([0-9A-F]{2}-){5}([0-9A-F]){2}$/, u = /(Config|Hermes|Synergy|Tesla)/; }, , function (e, t, i) { "use strict"; i.d(t, "e", function () { return O; }), i.d(t, "d", function () { return N; }), i.d(t, "j", function () { return k; }), i.d(t, "h", function () { return q; }), i.d(t, "i", function () { return x; }), i.d(t, "b", function () { return B; }), i.d(t, "g", function () { return H; }), i.d(t, "k", function () { return Y; }), i.d(t, "c", function () { return Q; }), i.d(t, "l", function () { return Z; }), i.d(t, "a", function () { return J; }), i.d(t, "m", function () { return X; }), i.d(t, "f", function () { return $; }); var n = i(88), r = i(7), a = (i(10), i(127)), o = i(108), s = i(2), _ = i(5), l = i.n(_), c = i(6), d = i(4), u = i(15), m = i(45), p = i(128); function g(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function w(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? g(Object(i), !0).forEach(function (t) { v(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : g(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function v(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const f = Object(c.b)(s.REQUEST_LOGIN); function h(e) { return { type: s.RECEIVE_LOGIN_SUCCESS, receivedAt: Date.now(), email: e.email, roles: e.roles }; } const E = Object(c.b)(s.RECEIVE_LOGIN_ERROR), b = Object(c.b)(s.REQUEST_GENERATE_PASSWORD); const y = Object(c.b)(s.RECEIVE_GENERATE_PASSWORD_ERROR), S = Object(c.b)(s.REQUEST_RESET_PASSWORD); const R = Object(c.b)(s.RECEIVE_RESET_PASSWORD_ERROR), T = Object(c.b)(s.REQUEST_CHANGE_PASSWORD); const A = Object(c.b)(s.RECEIVE_CHANGE_PASSWORD_ERROR), C = Object(c.b)(s.REQUEST_LOGOUT), I = Object(c.b)(s.RECEIVE_LOGOUT_ERROR), O = Object(c.b)(s.CHANGE_USERNAME, "username"), N = Object(c.b)(s.CHANGE_LOGIN_TYPE, "selectedLoginType"), k = Object(c.b)(s.RESET_AUTHENTICATION), P = Object(c.b)(s.REQUEST_START_TOGGLE_AUTH), D = Object(c.b)(s.RECEIVE_START_TOGGLE_AUTH_SUCCESS), L = Object(c.b)(s.RECEIVE_START_TOGGLE_AUTH_ERROR), M = Object(c.b)(s.REQUEST_CANCEL_TOGGLE_AUTH), z = Object(c.b)(s.RECEIVE_CANCEL_TOGGLE_AUTH_SUCCESS), U = Object(c.b)(s.RECEIVE_CANCEL_TOGGLE_AUTH_ERROR), V = Object(c.b)(s.REQUEST_TOGGLE_AUTH_LOGIN), G = Object(c.b)(s.RECEIVE_TOGGLE_AUTH_LOGIN_SUCCESS), j = Object(c.b)(s.RECEIVE_TOGGLE_AUTH_LOGIN_ERROR), W = Object(c.b)(s.REQUEST_SUPPORTS_TOGGLE_AUTH); const F = Object(c.b)(s.RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR); function q(e, t, i, _ = !0) { return async (c) => { c(f()), c(Object(r.clearError)(s.RECEIVE_LOGIN_ERROR)); let m = i; _ || ((m = e), (e = "")); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(l.a.api.uri + "/login/Basic", { method: "POST", credentials: l.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: m, password: t, email: e, clientInfo: { timezone: Object(o.d)() } }), }) .then(d.parseText) .then(d.parseResponseText) .then(d.checkResponseStatus) .then((e) => (Object(p.a)(a.a), c(h(e)), c(Object(n.replace)("/")), e)) ); } catch (e) { throw (c(Object(r.showError)(s.RECEIVE_LOGIN_ERROR, e.toString(), e.response)), c(E()), e); } }; } function x(e) { return (t) => ( t(C()), fetch(l.a.api.uri + "/logout", { credentials: l.a.credentials }) .then(d.checkStatus) .then(d.parseText) .then((i) => { Object(p.a)(a.a), Object(m.a)("AuthCookie"), t(k()), e && e(i); }) .catch((e) => { t(Object(r.showError)(s.RECEIVE_LOGOUT_ERROR, e.toString(), e.response)), t(I()); }) ); } function B() { return K("/password/changedefault"); } function H() { return K("/password/generate"); } function K(e) { return async (t) => { t(b()), t(Object(r.clearError)(s.RECEIVE_GENERATE_PASSWORD_ERROR)); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(`${l.a.api.uri}${e}`, { method: "POST", credentials: l.a.credentials }) .then(d.parseText) .then(d.parseResponseText) .then(d.checkResponseStatus) .then( (e) => ( t( (function (e) { return w({ type: s.RECEIVE_GENERATE_PASSWORD_SUCCESS, receivedAt: Date.now() }, e); })(e) ), e ) ) ); } catch (e) { throw (t(Object(r.showError)(s.RECEIVE_GENERATE_PASSWORD_ERROR, e.toString(), e.response)), t(y()), e); } }; } function Y(e, t, i) { return async (n) => { n(S()), n(Object(r.clearError)(s.RECEIVE_RESET_PASSWORD_ERROR)); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(l.a.api.uri + "/password/reset", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ old_password: e, new_password: t, toggled_pw: i }) }) .then(d.parseText) .then(d.parseResponseText) .then(d.checkResponseStatus) .then( (e) => ( n( (function (e) { return w({ type: s.RECEIVE_RESET_PASSWORD_SUCCESS, receivedAt: Date.now() }, e); })(e) ), e ) ) ); } catch (e) { throw (n(Object(r.showError)(s.RECEIVE_RESET_PASSWORD_ERROR, e.toString(), e.response)), n(R()), e); } }; } function Q(e, t, i) { return async (n) => { n(T()), n(Object(r.clearError)(s.RECEIVE_CHANGE_PASSWORD_ERROR)); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(l.a.api.uri + "/password/change", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ old_password: e, new_password: t, toggled_pw: i }) }) .then(d.parseText) .then(d.parseResponseText) .then(d.checkResponseStatus) .then( (e) => ( n( (function (e) { return w({ type: s.RECEIVE_CHANGE_PASSWORD_SUCCESS, receivedAt: Date.now() }, e); })(e) ), e ) ) ); } catch (e) { throw (n(Object(r.showError)(s.RECEIVE_CHANGE_PASSWORD_ERROR, e.toString(), e.response)), n(A()), e); } }; } function Z() { return async (e) => { e(P), e(Object(r.clearError)(s.RECEIVE_START_TOGGLE_AUTH_ERROR)); try { return await fetch(l.a.api.uri + "/auth/toggle/start", { method: "POST", credentials: "include" }) .then(d.checkResponseStatus) .then(() => { e(D()); }); } catch (t) { throw (e(Object(r.showError)(s.RECEIVE_START_TOGGLE_AUTH_ERROR, t.toString(), t.response)), e(L()), t); } }; } function J() { return async (e) => { e(M), e(Object(r.clearError)(s.RECEIVE_CANCEL_TOGGLE_AUTH_ERROR)); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(l.a.api.uri + "/auth/toggle/login", { method: "DELETE", credentials: "include" }) .then(d.checkResponseStatus) .then(() => { e(z()); }) ); } catch (t) { throw (e(Object(r.showError)(s.RECEIVE_CANCEL_TEST_ERROR, t.toString(), t.response)), e(U()), t); } }; } function X(e, t) { return async (i) => { i(V), i(Object(r.clearError)(s.RECEIVE_TOGGLE_AUTH_LOGIN_ERROR)); try { return await fetch(l.a.api.uri + "/auth/toggle/login", { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email: e, username: t }) }).then((e) => { if (417 !== e.status) return Object(d.parseText)(e) .then(d.parseResponseText) .then(d.checkResponseStatus) .then((e) => (Object(p.a)(a.a), i(h(e)), i(G()), i(Object(n.replace)("/")), e)); }); } catch (e) { throw (i(Object(r.showError)(s.RECEIVE_TOGGLE_AUTH_LOGIN_ERROR, e.toString(), e.response)), i(j()), e); } }; } function $() { return async (e) => { e(W), e(Object(r.clearError)(s.RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR)); try { return await fetch(l.a.api.uri + "/auth/toggle/supported") .then(d.checkResponseStatus) .then(d.parseJSON) .then((t) => { var i; return e(((i = t.toggle_auth_supported), { type: s.RECEIVE_SUPPORTS_TOGGLE_AUTH_SUCCESS, receivedAt: Date.now(), toggleAuthSupported: i })), t.toggle_auth_supported; }); } catch (t) { throw (e(Object(r.showError)(s.RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR, "", "")), e(F()), t); } }; } }, , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }); const n = { backupMode: "Backup Mode", blockUpdate: "Block Update in progress", enumeration: "Enumeration in progress", initializing: "", powerFlowIsTooHigh: "Power flow is too high", updating: "Site Package Update in progress", yes: "Yes", }; }, , function (e, t, i) { "use strict"; i.d(t, "d", function () { return r; }), i.d(t, "a", function () { return a; }), i.d(t, "e", function () { return o; }), i.d(t, "b", function () { return s; }), i.d(t, "c", function () { return _; }), i.d(t, "f", function () { return l; }); var n = i(3); const r = { CHECKING: "/clear_update_status", SUCCEEDED: "/update_succeeded", FAILED: "/update_failed", STAGED: "/update_staged", DOWNLOAD: "/download", DOWNLOADED: "/update_downloaded", UNKNOWN: "/update_unknown" }, a = (r.CHECKING, r.UNKNOWN, [r.CHECKING, r.DOWNLOAD, r.DOWNLOADED, r.UNKNOWN]), o = { IGNORING: "ignoring", ERROR: "error", NONACTIONABLE: "nonactionable" }, s = { INVALID: "FIRMWARE_UPDATE_URGENCY_INVALID", NONE: "FIRMWARE_UPDATE_URGENCY_NONE", OPTIONAL: "FIRMWARE_UPDATE_URGENCY_OPTIONAL", REQUIRED: "FIRMWARE_UPDATE_URGENCY_REQUIRED" }, _ = Object(n.defineMessages)({ [s.INVALID]: { id: "status_update_urgency_unknown", defaultMessage: "Unknown" }, [s.NONE]: { id: "status_update_urgency_none", defaultMessage: "Up To Date" }, [s.OPTIONAL]: { id: "status_update_urgency_optional", defaultMessage: "Update Optional" }, [s.REQUIRED]: { id: "status_update_urgency_required", defaultMessage: "Update Required" }, }); function l(e) { return e || (e = s.INVALID), _[e]; } }, function (e, t, i) { "use strict"; function n(e) { let t = e + "=", i = decodeURIComponent(document.cookie).split(";"); for (var n = 0; n < i.length; n++) { let e = i[n]; for (; " " === e.charAt(0); ) e = e.substring(1); if (0 === e.indexOf(t)) return e.substring(t.length, e.length); } return null; } function r(e, t, i) { let n = `${e}=${t};`; if (i) { let e = new Date(); e.setTime(e.getTime() + i), (n += "expires=" + e.toUTCString()); } document.cookie = n + ";path=/"; } function a(e) { document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; } i.d(t, "b", function () { return n; }), i.d(t, "c", function () { return r; }), i.d(t, "a", function () { return a; }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.isBackupGateway = t.isGateway2 = t.isResiGateway = t.isOnlyViewport = t.isViewport = t.getViewportSize = t.isSamsungAndroid = t.isMobile = t.isSafari = t.isChrome = t.isIOS = void 0); const n = i(56), r = ["xs", "sm", "md", "lg"]; function a() { let e = window.screen.width; return e < 768 ? r[0] : e >= 768 && e < 992 ? r[1] : e >= 992 && e < 1200 ? r[2] : r[3]; } (t.isIOS = function () { return /iPad|iPhone|iPod/.test(navigator.userAgent); }), (t.isChrome = function () { return /Chrome/.test(navigator.userAgent); }), (t.isSafari = function () { return /Safari/.test(navigator.userAgent); }), (t.isMobile = function () { return /Mobi/.test(navigator.userAgent); }), (t.isSamsungAndroid = function () { return /Samsung|SM-G/.test(navigator.userAgent); }), (t.getViewportSize = a), (t.isViewport = function (e) { return r.includes(e) && r.indexOf(a()) >= r.indexOf(e); }), (t.isOnlyViewport = function (e) { return r.indexOf(a()) === r.indexOf(e); }), (t.isResiGateway = function (e) { return e !== n.DEVICE_TYPE.SMC; }), (t.isGateway2 = function (e) { return e === n.DEVICE_TYPE.GW2; }), (t.isBackupGateway = function (e, t) { return e === n.DEVICE_TYPE.GW1 ? !!t : e === n.DEVICE_TYPE.GW2 && (null == t || t); }); }, , function (e, t, i) { "use strict"; i.r(t), i.d(t, "InstallationProblems", function () { return r; }), i.d(t, "installationProblemTitles", function () { return o; }), i.d(t, "installationProblemDetails", function () { return s; }), i.d(t, "isCriticalProblem", function () { return _; }); var n = i(3); const r = { MultipleControllers: "MultipleControllers", Miswired12v: "Miswired12v", PVACsWithNoSolarRGM: "PVACsWithNoSolarRGM", TooManySolarRGM: "TooManySolarRGM", TooFewSolarRGM: "TooFewSolarRGM", SiteShutdownExternalSwitch: "SiteShutdownExternalSwitch", SiteShutdownPvsRsdSwitch: "SiteShutdownPvsRsdSwitch", }, a = [r.MultipleControllers], o = Object(n.defineMessages)({ [r.MultipleControllers]: { id: "enumeration_warning_title_multiple_controllers", defaultMessage: "Multiple Site Controllers are Active" }, [r.PVACsWithNoSolarRGM]: { id: "installation_problem_title_pvacs_with_no_solar_rgm", defaultMessage: "Solar meter not measuring Powerwall+ inverter. Is this correct?" }, [r.TooManySolarRGM]: { id: "installation_problem_title_too_many_solar_rgm", defaultMessage: "Too many solar meters measuring Powerwall+ inverter" }, [r.TooFewSolarRGM]: { id: "installation_problem_title_too_few_solar_rgm", defaultMessage: "Too few solar meters measuring Powerwall+ inverter" }, [r.SiteShutdownExternalSwitch]: { id: "installation_problem_title_site_shutdown", defaultMessage: "Site shutdown circuit triggered. All Powerwalls and Powerwall+ solar inverters are disabled." }, [r.SiteShutdownPvsRsdSwitch]: { id: "installation_problem_title_site_shutdown_pvs_rsd_no_switch", defaultMessage: "Site shutdown circuit triggered by a Powerwall+ rapid shutdown. All Powerwalls and Powerwall+ solar inverters are disabled.", }, }), s = Object(n.defineMessages)({ [r.PVACsWithNoSolarRGM]: { id: "installation_problem_details_pvacs_with_no_solar_rgm", defaultMessage: "Solar meters are only required when measuring solar inverters that are not part of a Powerwall+ assembly. Meters that measure a Powerwall+ inverter should be marked as such on the Current Transformers page.", }, [r.TooManySolarRGM]: { id: "installation_problem_details_too_many_solar_rgm", defaultMessage: "The number of CTs measuring a Powerwall+ solar inverter should match the number of Powerwall+ solar inverters. Run wizard and adjust the CT configuration on the Current Transfomers page.", }, [r.TooFewSolarRGM]: { id: "installation_problem_details_too_few_solar_rgm", defaultMessage: "The number of CTs measuring a Powerwall+ solar inverter should match the number of Powerwall+ solar inverters. Run wizard, pair the Neurio meter if needed, and adjust the CT configuration on the Current Transfomers page.", }, }); function _(e) { return a.includes(e); } }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.classNames = void 0), (t.classNames = function e(...t) { return t .reduce((t, i) => { if (Array.isArray(i)) return t.concat(e(...i)); if (null == i) return t; if ("string" == typeof i) return t.push(i), t; if ("object" == typeof i) return t.concat(Object.entries(i).reduce((e, t) => (t[1] && e.push(t[0]), e), [])); throw new Error("Invalid arguments used in classNames"); }, []) .join(" ") .trim(); }); }, , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "showModal", function () { return a; }), i.d(t, "updateModal", function () { return o; }), i.d(t, "hideModal", function () { return s; }), i.d(t, "destroyModal", function () { return _; }); var n = i(2), r = i(6); function a(e, t = {}, i = {}) { return { type: n.SHOW_MODAL, modalType: e, modalProps: t, bootstrapProps: i }; } function o(e, t = {}, i = {}) { return { type: n.UPDATE_MODAL, modalType: e, modalProps: t, bootstrapProps: i }; } const s = Object(r.b)(n.HIDE_MODAL), _ = Object(r.b)(n.DESTROY_MODAL, "modalType"); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.SYNC_TYPE = t.DEVICE_TYPE = void 0), (function (e) { (e.GW1 = "hec"), (e.GW2 = "teg"), (e.SMC = "smc"); })(t.DEVICE_TYPE || (t.DEVICE_TYPE = {})), (function (e) { (e.V1 = "v1"), (e.V2 = "v2"), (e.V2_1 = "v2.1"); })(t.SYNC_TYPE || (t.SYNC_TYPE = {})); }, , function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }); const n = { BACK: "back", CANCEL: "cancel", FORWARD: "forward" }; }, function (e, t, i) { "use strict"; i.d(t, "b", function () { return v; }), i.d(t, "a", function () { return f; }), i.d(t, "c", function () { return h; }), i.d(t, "g", function () { return E; }), i.d(t, "f", function () { return b; }), i.d(t, "d", function () { return y; }), i.d(t, "e", function () { return S; }); var n = i(275), r = i.n(n), a = i(270), o = i.n(a), s = i(557), _ = i.n(s), l = i(76), c = i.n(l), d = i(1), u = i.n(d), m = i(3), p = i(26), g = i(37), w = i(96); i(50); function v(e, t = "", i = [], n, r = !1) { i.length && (e = _()(e, i)); let a = t; for (var o in e) { if ("string" == typeof e[o] && e[o]) (a += "\n"), r && (a += o + ": "), (a += e[o]); else if ("boolean" == typeof e[o]) a += `\n${o}: ${e[o]}`; else if ("object" == typeof e[o]) { if (Array.isArray(e[o]) && 0 === e[o].length) continue; (a += "\n"), r && (a += o + ": "), (a += JSON.stringify(e[o])); } else "number" == typeof e[o] && ((a += "\n"), r && (a += o + ": "), (a += e[o].toString())); n && n[o] && ((a += " "), r && (a += o + ": "), (a += n[o])); } return a; } function f(e, t = 1) { if (t > 0) { let i = Number(e + "e" + t), n = Number(Math.round(i) + "e-" + t) .toString() .split("."); return (1 !== n.length || ("-0" !== n[0] && "0" !== n[0] && !isNaN(n[0]))) && (2 !== n.length || "" !== n[1].replace(/0/g, "") || ("-0" !== n[0] && "0" !== n[0])) ? n.join(".") : "0"; } return Math.round(e).toString(); } function h(e) { const t = e.toString().match(/[^/^].+[^$/]/); return t && t.length ? t[0] : e.toString(); } function E(e, t = !1) { return e.replace(/([A-Z])/g, (e) => (t ? "-" : "_") + e.toLowerCase()); } const b = (e, t) => o()(t, (t) => ({ label: u.a.createElement(m.FormattedMessage, e[r()(t)]), value: t })); function y(e) { return e.toLowerCase().split(/[_-]+/)[0]; } function S(e, t, i = !1) { const n = Object(w.g)(e), r = c()(e, "interface"); if (c()(e, "active")) { if (i) return t.formatMessage(p.networkMessages.connected); const a = c()(e, "networkName"); if (r === g.d.WIFI && a) return a; if (n) return "IP: " + n; } return c()(e, "enabled") ? t.formatMessage(p.networkMessages[r + "Configured"]) : t.formatMessage(p.networkMessages.disconnected); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return d; }), i.d(t, "deviceTypeSelector", function () { return u; }), i.d(t, "isResiGatewaySelector", function () { return m; }), i.d(t, "syncTypeSelector", function () { return p; }), i.d(t, "leaderSelector", function () { return g; }), i.d(t, "followersSelector", function () { return w; }), i.d(t, "cellularDisabledSelector", function () { return v; }); var n = i(43), r = i(46), a = i(2), o = i(56); function s(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function _(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? s(Object(i), !0).forEach(function (t) { l(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : s(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function l(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const c = { isFetching: !1, isSyncing: !1, didInvalidate: !1, din: null, isNew: null, version: null, hash: null, persisted: !1, bootstrapped: !1, deviceType: o.DEVICE_TYPE.GW1, tegType: "", syncType: o.SYNC_TYPE.V1, leader: null, followers: [], cellularDisabled: !1, }; function d(e = c, t) { switch (t.type) { case n.b: return _(_({}, e), {}, { persisted: !0 }); case a.REQUEST_CONFIG_INITIALIZED: return _(_({}, e), {}, { isFetching: !0 }); case a.RECEIVE_CONFIG_INITIALIZED: return _( _({}, e), {}, { isFetching: !1, didInvalidate: !1, din: t.din, isNew: t.is_new, version: t.version, hash: t.git_hash, deviceType: t.device_type, tegType: t.teg_type, syncType: t.sync_type, leader: t.leader, followers: t.followers, cellularDisabled: t.cellular_disabled, bootstrapped: !0, } ); case a.RECEIVE_CONFIG_INITIALIZED_ERROR: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !0, bootstrapped: !0 }); case a.REQUEST_SYNC_CONFIG: return _(_({}, e), {}, { isSyncing: !0 }); case a.RECEIVE_SYNC_CONFIG_SUCCESS: return _(_({}, e), {}, { isSyncing: !1, didInvalidate: !1, isNew: t.is_new, version: t.version, hash: t.git_hash, deviceType: t.device_type, tegType: t.teg_type, syncType: t.sync_type, bootstrapped: !0 }); case a.RECEIVE_SYNC_CONFIG_ERROR: return _(_({}, e), {}, { isSyncing: !1, didInvalidate: !0, bootstrapped: !0 }); default: return e; } } const u = ({ configuration: e }) => e.deviceType, m = ({ configuration: e }) => Object(r.isResiGateway)(e.deviceType), p = ({ configuration: e }) => e.syncType, g = ({ configuration: e }) => e.leader, w = ({ configuration: e }) => e.followers, v = (e) => e.configuration.cellularDisabled; }, , function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Vital = t.MissingValue = t.Attention = t.DeviceBody = t.DeviceHeader = t.DeviceView = void 0); const r = n(i(1)), a = i(3), o = n(i(580)); function s() { return r.default.createElement("div", { className: "device-attention" }); } (t.DeviceView = function (e) { return r.default.createElement( "div", { className: "system-device" }, r.default.createElement(o.default, { id: "device", isCollapsible: !e.doNotCollapse, collapsedOnMount: !1, collapsedHeader: e.children[0] }, e.children.slice(1)) ); }), (t.DeviceHeader = function (e) { var t, i; let n = null === (t = e.sitemanagerRunning) || void 0 === t || t, a = null === (i = e.device) || void 0 === i ? void 0 : i.needsAttentionRecursive(n); return r.default.createElement("div", { className: "system-device-header" }, a && r.default.createElement(s, null), e.children); }), (t.DeviceBody = function (e) { return r.default.createElement("div", { className: "system-device-body" }, e.children); }), (t.Attention = s), (t.MissingValue = r.default.createElement(a.FormattedMessage, { id: "system_vitals_missing_value", defaultMessage: "---", description: "This string is intended to convey the absence of a value" })), (t.Vital = function (e) { let i = e.value; return null == i || isNaN(i) ? t.MissingValue : r.default.createElement(a.FormattedNumber, { minimumSignificantDigits: 3, maximumSignificantDigits: 3, value: i }); }); }, , , , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return l; }); var n = i(1), r = i(0), a = i.n(r), o = i(17); i(799); function s() { return (s = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class l extends n.Component { constructor(e) { super(e), (this._onClick = this._onClick.bind(this)); } render() { const { className: e, title: t, subtitle: i, indicator: r, clickElementProps: a } = this.props; return n.createElement( "li", { "data-testid": "a7867b70-0e31-4ba4-a810-58baa590c313", className: e }, n.createElement(o.Link, s({ "data-testid": "eaba6587-b28a-437c-b6b1-981b253dd315" }, a, { onClick: this._onClick }), t, i, this._getIndicator(r)) ); } _onClick(e) { this.props.onClick && this.props.onClick(); } _getIndicator(e) { return void 0 !== e ? e : n.createElement("img", { "data-testid": "f51d4188-bb8b-421f-b576-b58a4292114d", className: "caret-right", src: i(153) }); } } _(l, "propTypes", { className: a.a.string.isRequired, onClick: a.a.func, clickElementProps: a.a.object, title: a.a.element, subtitle: a.a.element, indicator: a.a.element }), _(l, "defaultProps", { className: "menu-item", clickElementProps: {} }); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.StatusWarningIcon = void 0); const o = a(i(1)); i(578); t.StatusWarningIcon = (e) => { let t = e.inline ? "tds-icon-inline" : "tds-icon"; return ( e.className && (t += " " + e.className), o.createElement( "svg", { className: t, viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }, o.createElement("circle", { fill: "#ffffff", cx: "12", cy: "12", r: "6" }), o.createElement("path", { d: "M21.586 16.476 14.591 4.498c-1.158-1.983-4.024-1.983-5.182 0L2.414 16.476c-1.169 2 .274 4.513 2.59 4.513h13.992c2.316 0 3.759-2.513 2.59-4.513zM11.25 9.73a.75.75 0 0 1 1.5 0v3.5a.75.75 0 0 1-1.5 0v-3.5zm.75 7.25a1 1 0 1 1 0-2 1 1 0 0 1 0 2z", fill: "#FBB01B", }) ) ); }; }, , , , , , function (e, t, i) { "use strict"; i.d(t, "c", function () { return r; }), i.d(t, "a", function () { return a; }), i.d(t, "b", function () { return o; }); var n = i(2); function r(e, t = {}) { return { type: n.SHOW_TOAST, name: e, toastProps: t }; } function a(e) { return { type: n.CLEAR_TOAST, name: e }; } function o() { return { type: n.CLEAR_TOASTS }; } }, , , function (e, t, i) { "use strict"; function n(e, t) { var i, n; return null !== (n = null !== (i = null == t ? void 0 : t.formatMessage(e)) && void 0 !== i ? i : e.defaultMessage) && void 0 !== n ? n : e.id; } function r(e) { return e.toLowerCase().replace("_", "-"); } Object.defineProperty(t, "__esModule", { value: !0 }), (t.negotiate = t.localizeWithFallback = t.localize = void 0), (t.localize = n), (t.localizeWithFallback = function (e, t, i) { return e ? n(e, t) : i; }), (t.negotiate = function (e, t) { let i = e.map(r); for (let n of t) { let t = r(n), a = i.indexOf(t); if (-1 !== a) return e[a]; if (t.includes("-") && ((a = i.indexOf(t.split("-")[0])), -1 !== a)) return e[a]; } return null; }); }, , , , , , , , , , , , , , , function (e, t, i) { "use strict"; i.d(t, "b", function () { return n; }), i.d(t, "c", function () { return r; }), i.d(t, "a", function () { return a; }); i(13); const n = { NON_BACKUP: "NonBackup", BACKUP: "Backup", NOT_CONFIGURED: "NotConfigured" }, r = 30, a = { ACPW: "ACPW", SolarPowerwall: "SolarPowerwall", bc: "bc" }; }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }), i.d(t, "e", function () { return r; }), i.d(t, "g", function () { return a; }), i.d(t, "d", function () { return o; }), i.d(t, "f", function () { return s; }), i.d(t, "b", function () { return _; }), i.d(t, "c", function () { return l; }); const n = "My Home", r = { BACKUP: "backup", SELF_CONSUMPTION: "self_consumption", AUTONOMOUS: "autonomous", SCHEDULER: "scheduler", SITE_CONTROL: "site_control", DIRECT: "direct" }, a = [r.BACKUP, r.SELF_CONSUMPTION, r.AUTONOMOUS], o = { BATTERY_OK: "battery_ok", NEVER: "never", PV_ONLY: "pv_only" }, s = [o.NEVER, o.PV_ONLY], _ = { HECO: "heco_battery_bonus" }, l = { POWER_RANGE: "power_range" }; }, , , function (e, t, i) { "use strict"; i.d(t, "l", function () { return d; }), i.d(t, "d", function () { return u; }), i.d(t, "c", function () { return m; }), i.d(t, "b", function () { return p; }), i.d(t, "a", function () { return g; }), i.d(t, "m", function () { return w; }), i.d(t, "h", function () { return v; }), i.d(t, "f", function () { return f; }), i.d(t, "i", function () { return h; }), i.d(t, "g", function () { return E; }), i.d(t, "j", function () { return b; }), i.d(t, "k", function () { return y; }), i.d(t, "e", function () { return S; }), i.d(t, "o", function () { return R; }), i.d(t, "n", function () { return T; }); var n = i(18), r = i.n(n), a = i(37), o = i(262); function s(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function _(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? s(Object(i), !0).forEach(function (t) { l(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : s(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function l(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const c = o.hasUsername, d = o.requiresPassword; function u(e) { return a.g[e] ? a.g[e] : e; } function m(e) { return a.h[e]; } function p(e) { return e.filter((e) => e.interface === a.d.WIFI); } function g(e) { return e.filter((e) => e.networkName); } function w(e) { return c(e); } function v(e, t) { return e.find((e) => e.interface === t && e.enabled); } function f(e, t) { return e.find((e) => e.interface === t && e.active); } function h(e, t, i) { return e.find((e) => e.interface === t && e.active && e.networkName === i); } function E(e) { return r()(e, (e) => e.ifaceNetworkInfo.ipNetworks[0].ip) || ""; } function b(e) { return e && null != e.signalStrength ? e.signalStrength : r()(e, (e) => e.ifaceNetworkInfo.signalStrength) || 0; } function y(e, t) { return (null != e && null == t) || (null == e && null != t) || (null != e && null != t && (e.active !== t.active || e.enabled !== t.enabled || E(e) !== E(t))); } function S(e) { let t = _(_({}, e), {}, { network_name: e.networkName, security_type: e.securityType, dns_servers: [] }); return "string" == typeof e.primaryDNS && "" !== e.primaryDNS && t.dns_servers.push(e.primaryDNS), "string" == typeof e.backupDNS && "" !== e.backupDNS && t.dns_servers.push(e.backupDNS), t; } function R(e) { let t = _(_({}, e), {}, { networkName: e.network_name, interface: e.interface, securityType: e.security_type, primaryDNS: void 0, backupDNS: void 0 }); e.dns_servers && e.dns_servers.length > 0 && ((t.primaryDNS = e.dns_servers[0]), e.dns_servers.length > 1 && (t.backupDNS = e.dns_servers[1])); const i = e.iface_network_info; return ( i && (t = _( _({}, t), {}, { ifaceNetworkInfo: _(_({}, i), {}, { ipNetworks: i.ip_networks ? i.ip_networks : null, stateReason: i.state_reason ? i.state_reason : "", signalStrength: i.signal_strength ? i.signal_strength : 0 }) } )), t ); } function T(e) { return { ssid: e.ssid, signalStrength: e.signal_strength, securityType: e.security_type }; } }, , , , , , , , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }), i.d(t, "b", function () { return r; }), i.d(t, "e", function () { return a; }), i.d(t, "f", function () { return o; }), i.d(t, "i", function () { return s; }), i.d(t, "j", function () { return _; }), i.d(t, "c", function () { return l; }), i.d(t, "d", function () { return c; }), i.d(t, "g", function () { return d; }), i.d(t, "h", function () { return u; }), i.d(t, "k", function () { return m; }), i.d(t, "m", function () { return p; }), i.d(t, "o", function () { return g; }), i.d(t, "l", function () { return w; }), i.d(t, "n", function () { return v; }), i.d(t, "q", function () { return f; }), i.d(t, "r", function () { return h; }), i.d(t, "p", function () { return E; }); const n = "RECEIVE_BATTERIES_ERROR", r = "RECEIVE_BATTERIES_SUCCESS", a = "RECEIVE_COMPONENTS_ERROR", o = "RECEIVE_COMPONENTS_SUCCESS", s = "RECEIVE_SUB_COMPONENTS_ERROR", _ = "RECEIVE_SUBB_COMPONENTS_SUCCESS", l = "RECEIVE_BATTERIES_UPDATE_ERROR", c = "RECEIVE_BATTERIES_UPDATE_SUCCESS", d = "RECEIVE_SCAN_BATTERIES_ERROR", u = "RECEIVE_SCAN_BATTERIES_SUCCESS", m = "REQUEST_BATTERIES", p = "REQUEST_COMPONENTS", g = "REQUEST_SUB_COMPONENTS", w = "REQUEST_BATTERIES_UPDATE", v = "REQUEST_SCAN_BATTERIES", f = "STORE_BATTERIES_IS_VALID", h = "STORE_BATTERIES_NEEDS_SCAN", E = "STOP_REQUEST_SUB_COMPONENTS"; }, , , function (e, t, i) { "use strict"; i.d(t, "d", function () { return a; }), i.d(t, "c", function () { return o; }), i.d(t, "a", function () { return s; }), i.d(t, "b", function () { return _; }); var n = i(266), r = i.n(n); function a() { return r.a.tz.guess(); } function o() { return r.a.tz.names(); } const s = 6e4, _ = 1e3; }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return b; }), i.d(t, "c", function () { return y; }), i.d(t, "d", function () { return S; }), i.d(t, "b", function () { return R; }); var n = i(7), r = i(2), a = i(14), o = i(5), s = i.n(o), _ = i(4), l = i(6), c = i(15); function d(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function u(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(i), !0).forEach(function (t) { m(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : d(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function m(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const p = Object(l.b)(r.REQUEST_SITEMASTER_SETTINGS); const g = Object(l.b)(r.RECEIVE_SITEMASTER_SETTINGS_ERROR), w = Object(l.b)(r.REQUEST_START_SITEMASTER); const v = Object(l.b)(r.REQUEST_STOP_SITEMASTER); const f = Object(l.b)(r.RECEIVE_STOP_SITEMASTER_ERROR), h = Object(l.b)(r.REQUEST_SITEMASTER_FOR_COMMISSIONING); const E = Object(l.b)(r.RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR); Object(l.b)(r.RESET_SITEMASTER_SETTINGS); function b() { return (e) => ( e(p()), e(Object(n.clearError)(r.RECEIVE_SITEMASTER_SETTINGS_ERROR)), Object(c.e)( c.a, new Error("Request timed out"), fetch(s.a.api.uri + "/sitemaster", { credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_SITEMASTER_SETTINGS_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(g(new a.default(r.RECEIVE_SITEMASTER_SETTINGS_ERROR, t.toString(), t.response))); }) ) ); } function y() { return (e) => ( e(w()), e(Object(n.clearError)(r.RECEIVE_START_SITEMASTER_ERROR)), e(Object(n.clearError)(r.RECEIVE_STOP_SITEMASTER_ERROR)), fetch(s.a.api.uri + "/sitemaster/run", { credentials: s.a.credentials }) .then((t) => { if (t.status < 200 || t.status >= 300) return Object(_.parseJSON)(t).then(_.checkResponseStatus); var i; e(((i = {}), u({ type: r.RECEIVE_START_SITEMASTER_SUCCESS, receivedAt: Date.now() }, i))), e(b()); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_START_SITEMASTER_ERROR, t.toString(), t.response)), e( (function (e) { return { type: r.RECEIVE_START_SITEMASTER_ERROR, receivedAt: Date.now(), error: e }; })(t.response ? t.response.error : "") ); }) ); } function S(e) { return (e) => ( e(v()), e(Object(n.clearError)(r.RECEIVE_START_SITEMASTER_ERROR)), e(Object(n.clearError)(r.RECEIVE_STOP_SITEMASTER_ERROR)), fetch(s.a.api.uri + "/sitemaster/stop", { credentials: s.a.credentials, method: "POST", body: JSON.stringify({ force: !0 }) }) .then(_.checkStatus) .then(() => { var t; e(((t = {}), u({ type: r.RECEIVE_STOP_SITEMASTER_SUCCESS, receivedAt: Date.now() }, t))), e(b()); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_STOP_SITEMASTER_ERROR, t.toString(), t.response)), e(f()); }) ); } function R() { return (e) => ( e(h()), fetch(s.a.api.uri + "/sitemaster/run_for_commissioning", { method: "POST", credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_SITEMASTER_FOR_COMMISSIONING_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR, t.toString(), t.response)), e(E()); }) ); } }, , , , function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.shouldDisplayAlert = t.DisabledReason = void 0); const r = n(i(1)), a = i(3); var o; !(function (e) { (e.FWUpdateInProgress = "FWUpdateInProgress"), (e.FWUpdateFailed = "FWUpdateFailed"), (e.GridCodeWriteFailed = "GridCodeWriteFailed"), (e.Config = "Config"), (e.DisabledUserRequested = "DisabledUserRequested"), (e.DisabledBatteryBreakerOpen = "DisabledBatteryBreakerOpen"), (e.DisabledExcessiveVoltageDrop = "DisabledExcessiveVoltageDrop"), (e.DisabledArcFaultLockout = "DisabledArcFaultLockout"); })((o = t.DisabledReason || (t.DisabledReason = {}))); const s = (0, a.defineMessages)({ [o.FWUpdateInProgress]: { id: "disabled_reason_checking_firmware_update", description: "Indicates that the unit is disabled because we are checking whether it needs an update.", defaultMessage: "Checking for firmware update", }, [o.FWUpdateFailed]: { id: "disabled_reason_firmware_update_failed", description: "Indicates that the unit is disabled because the firmware update failed.", defaultMessage: "Firmware update failed" }, [o.GridCodeWriteFailed]: { id: "disabled_reason_gridcode_write_failed", description: "Indicates that the unit is disabled because writing the gridcode to it failed.", defaultMessage: "Grid code setting failed" }, [o.Config]: { id: "disabled_reason_config", defaultMessage: "Disabled by configuration file" }, [o.DisabledUserRequested]: { id: "disabled_reason_user_requested", defaultMessage: "Disabled at user request" }, [o.DisabledBatteryBreakerOpen]: { id: "disabled_reason_battery_breaker_open", defaultMessage: "Battery breaker is open" }, [o.DisabledExcessiveVoltageDrop]: { id: "disabled_reason_excessive_voltage_drop", defaultMessage: "Excessive voltage drop" }, }), _ = (0, a.defineMessages)({ acFault: { id: "pvac_alert_ac_fault", defaultMessage: "Inverter AC Fault" }, dcFaultString1: { id: "pvac_alert_dc_fault_string1", defaultMessage: "Inverter DC Fault - String 1" }, dcFaultString2: { id: "pvac_alert_dc_fault_string2", defaultMessage: "Inverter DC Fault - String 2" }, dcFaultString3: { id: "pvac_alert_dc_fault_string3", defaultMessage: "Inverter DC Fault - String 3" }, dcFaultString4: { id: "pvac_alert_dc_fault_string4", defaultMessage: "Inverter DC Fault - String 4" }, overVoltage: { id: "pvac_alert_over_voltage", defaultMessage: "Grid Uncompliant - Over Voltage" }, underVoltage: { id: "pvac_alert_under_voltage", defaultMessage: "Grid Uncompliant - Under Voltage" }, overFreq: { id: "pvac_alert_over_freq", defaultMessage: "Grid Uncompliant - Over Frequency" }, underFreq: { id: "pvac_alert_under_freq", defaultMessage: "Grid Uncompliant - Under Frequency" }, freqChange: { id: "pvac_alert_freq_change", defaultMessage: "Grid Uncompliant - Frequency Change" }, overTemp: { id: "pvac_alert_over_temp", defaultMessage: "Inverter Over Temperature" }, internalComms: { id: "pvac_alert_internal_comms", defaultMessage: "Internal Communication Issue" }, }), l = (0, a.defineMessages)({ checkAC: { id: "pvac_alert_check_ac_note", defaultMessage: "Check AC wiring and grid connection. Reboot inverter and retry operation." }, checkDCString1: { id: "pvac_alert_check_dc_string1_note", defaultMessage: "Check String 1 DC wiring and panels. Reboot inverter and retry operation." }, checkDCString2: { id: "pvac_alert_check_dc_string2_note", defaultMessage: "Check String 2 DC wiring and panels. Reboot inverter and retry operation." }, checkDCString3: { id: "pvac_alert_check_dc_string3_note", defaultMessage: "Check String 3 DC wiring and panels. Reboot inverter and retry operation." }, checkDCString4: { id: "pvac_alert_check_dc_string4_note", defaultMessage: "Check String 4 DC wiring and panels. Reboot inverter and retry operation." }, confirmGridCode: { id: "pvac_alert_confirm_grid_code_note", defaultMessage: "Check AC wiring and grid connection. Confirm selected grid code." }, productionLimited: { id: "pvac_alert_production_limited_note", defaultMessage: "Production may be limited. Ensure proper wire terminations, sufficient airflow, and installation environment." }, reboot: { id: "pvac_alert_reboot_note", defaultMessage: "Reboot inverter, ensure system is up to date and fully commissioned." }, }), c = { PVAC_a001_inv_L1_HW_overcurrent: _.acFault, PVAC_a002_inv_L2_HW_overcurrent: _.acFault, PVAC_a003_inv_HVBus_HW_overvoltage: _.acFault, PVAC_a004_pv_HW_CMPSS_OC_STGA: _.dcFaultString1, PVAC_a005_pv_HW_CMPSS_OC_STGB: _.dcFaultString2, PVAC_a006_pv_HW_CMPSS_OC_STGC: _.dcFaultString3, PVAC_a007_pv_HW_CMPSS_OC_STGD: _.dcFaultString4, PVAC_a008_inv_HVBus_undervoltage: _.acFault, PVAC_a010_inv_AC_overvoltage: _.overVoltage, PVAC_a011_inv_AC_undervoltage: _.underVoltage, PVAC_a012_inv_AC_overfrequency: _.overFreq, PVAC_a013_inv_AC_underfrequency: _.underFreq, PVAC_a015_pv_HW_Allegro_OC_STGA: _.dcFaultString1, PVAC_a016_pv_HW_Allegro_OC_STGB: _.dcFaultString2, PVAC_a017_pv_HW_Allegro_OC_STGC: _.dcFaultString3, PVAC_a018_pv_HW_Allegro_OC_STGD: _.dcFaultString4, PVAC_a019_ambient_overtemperature: _.overTemp, PVAC_a020_dsp_overtemperature: _.overTemp, PVAC_a021_dcac_heatsink_overtemperature: _.overTemp, PVAC_a022_mppt_heatsink_overtemperature: _.overTemp, PVAC_a024_PVACrx_Command_mia: _.internalComms, PVAC_a025_PVS_Status_mia: _.internalComms, PVAC_a026_inv_AC_peak_overvoltage: _.overVoltage, PVAC_a027_inv_K1_relay_welded: _.acFault, PVAC_a028_inv_K2_relay_welded: _.acFault, PVAC_a031_VFCheck_OV: _.overVoltage, PVAC_a032_VFCheck_UV: _.underVoltage, PVAC_a033_VFCheck_OF: _.overFreq, PVAC_a034_VFCheck_UF: _.underFreq, PVAC_a035_VFCheck_RoCoF: _.freqChange, }, d = { PVAC_a001_inv_L1_HW_overcurrent: l.checkAC, PVAC_a002_inv_L2_HW_overcurrent: l.checkAC, PVAC_a003_inv_HVBus_HW_overvoltage: l.checkAC, PVAC_a004_pv_HW_CMPSS_OC_STGA: l.checkDCString1, PVAC_a005_pv_HW_CMPSS_OC_STGB: l.checkDCString2, PVAC_a006_pv_HW_CMPSS_OC_STGC: l.checkDCString3, PVAC_a007_pv_HW_CMPSS_OC_STGD: l.checkDCString4, PVAC_a008_inv_HVBus_undervoltage: l.checkAC, PVAC_a010_inv_AC_overvoltage: l.confirmGridCode, PVAC_a011_inv_AC_undervoltage: l.confirmGridCode, PVAC_a012_inv_AC_overfrequency: l.confirmGridCode, PVAC_a013_inv_AC_underfrequency: l.confirmGridCode, PVAC_a014_PVS_disabled_relay: l.checkAC, PVAC_a015_pv_HW_Allegro_OC_STGA: l.checkDCString1, PVAC_a016_pv_HW_Allegro_OC_STGB: l.checkDCString2, PVAC_a017_pv_HW_Allegro_OC_STGC: l.checkDCString3, PVAC_a018_pv_HW_Allegro_OC_STGD: l.checkDCString4, PVAC_a019_ambient_overtemperature: l.productionLimited, PVAC_a020_dsp_overtemperature: l.productionLimited, PVAC_a021_dcac_heatsink_overtemperature: l.productionLimited, PVAC_a022_mppt_heatsink_overtemperature: l.productionLimited, PVAC_a024_PVACrx_Command_mia: l.reboot, PVAC_a025_PVS_Status_mia: l.reboot, PVAC_a026_inv_AC_peak_overvoltage: l.confirmGridCode, PVAC_a027_inv_K1_relay_welded: l.checkAC, PVAC_a028_inv_K2_relay_welded: l.checkAC, PVAC_a031_VFCheck_OV: l.confirmGridCode, PVAC_a032_VFCheck_UV: l.confirmGridCode, PVAC_a033_VFCheck_OF: l.confirmGridCode, PVAC_a034_VFCheck_UF: l.confirmGridCode, PVAC_a035_VFCheck_RoCoF: l.confirmGridCode, }, u = (0, a.defineMessages)({ dcGroundFault: { id: "pvs_alert_dc_ground_fault", defaultMessage: "DC Ground Fault" }, dcOverVoltage: { id: "pvs_alert_dc_over_voltage", defaultMessage: "DC Over Voltage" }, dcIsolationString1: { id: "pvs_alert_dc_isolation_string1", defaultMessage: "DC Isolation Issue - String 1" }, dcIsolationString2: { id: "pvs_alert_dc_isolation_string2", defaultMessage: "DC Isolation Issue - String 2" }, dcIsolationString3: { id: "pvs_alert_dc_isolation_string3", defaultMessage: "DC Isolation Issue - String 3" }, dcIsolationString4: { id: "pvs_alert_dc_isolation_string4", defaultMessage: "DC Isolation Issue - String 4" }, dcArcFaultDetected: { id: "pvs_alert_dc_arc_fault_detected", defaultMessage: "DC Arc Fault - Detected" }, dcArcFaultLockout: { id: "pvs_alert_dc_arc_fault_lockout", defaultMessage: "DC Arc Fault - Lockout" }, rapidShutdown: { id: "pvs_alert_rapid_shutdown", defaultMessage: "Rapid Shutdown Initiated" }, }), m = (0, a.defineMessages)({ checkDC: { id: "pvs_alert_check_dc_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for ground fault issues." }, checkStrings: { id: "pvs_alert_check_dc_strings_note", defaultMessage: "Check DC wiring, connections, panels, and string configurations." }, checkDCString1: { id: "pvs_alert_check_dc_string1_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 1." }, checkDCString2: { id: "pvs_alert_check_dc_string2_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 2." }, checkDCString3: { id: "pvs_alert_check_dc_string3_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 3." }, checkDCString4: { id: "pvs_alert_check_dc_string4_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 4." }, checkArcFault: { id: "pvs_alert_check_arc_fault_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Arc fault issues." }, rapidShutdown: { id: "pvs_alert_rapid_shutdown_note", defaultMessage: "Check AC breaker and low-voltage rapid shutdown circuit." }, }), p = { PVS_a006_GfOvercurrent300: u.dcGroundFault, PVS_a009_GfOvercurrent030: u.dcGroundFault, PVS_a011_PvIsolationStringA: u.dcIsolationString1, PVS_a012_PvIsolationStringB: u.dcIsolationString2, PVS_a013_PvIsolationStringC: u.dcIsolationString3, PVS_a014_PvIsolationStringD: u.dcIsolationString4, PVS_a021_RapidShutdown: u.rapidShutdown, PVS_a030_VDcOv: u.dcOverVoltage, PVS_a035_PvArcDetected: u.dcArcFaultDetected, PVS_a036_PvArcLockout: u.dcArcFaultLockout, }, g = { PVS_a006_GfOvercurrent300: m.checkDC, PVS_a009_GfOvercurrent030: m.checkDC, PVS_a011_PvIsolationStringA: m.checkDCString1, PVS_a012_PvIsolationStringB: m.checkDCString2, PVS_a013_PvIsolationStringC: m.checkDCString3, PVS_a014_PvIsolationStringD: m.checkDCString4, PVS_a021_RapidShutdown: m.rapidShutdown, PVS_a030_VDcOv: m.checkStrings, PVS_a035_PvArcDetected: m.checkArcFault, PVS_a036_PvArcLockout: m.checkArcFault, }; function w(e) { return e.startsWith("PVAC_") ? e in c : !!e.startsWith("PVS_") && e in p; } (t.shouldDisplayAlert = w), (t.default = function ({ device: e, sitemanagerRunning: t }) { if (!e.needsAttention(null == t || t)) return null; if (e.isUpdating()) return null; if (e.isDisabled()) { let t = e.disabledReasons(); return r.default.createElement( "div", { className: "device-alert" }, r.default.createElement(a.FormattedMessage, { id: "system_device_alert_disabled", defaultMessage: "Device disabled" }), t.map((e) => r.default.createElement("div", { key: e, className: "device-alert-note" }, s[e] ? r.default.createElement(a.FormattedMessage, Object.assign({}, s[e])) : e)) ); } let i = e.alerts().filter(w), n = {}; for (let e of i) { let t = c[e] || p[e], i = d[e] || g[e]; n[t.id + "|" + (i ? i.id : "")] = { name: e, title: t, note: i }; } return r.default.createElement( r.default.Fragment, null, Object.values(n).map((e) => r.default.createElement( "div", { key: e.name, className: "device-alert" }, r.default.createElement(a.FormattedMessage, Object.assign({}, e.title)), e.note && r.default.createElement("div", { className: "alert-note" }, r.default.createElement(a.FormattedMessage, Object.assign({}, e.note))) ) ) ); }); }, , , , , , , , , , , , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return _; }), i.d(t, "b", function () { return l; }); var n = i(2); function r(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function a(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? r(Object(i), !0).forEach(function (t) { o(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function o(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { problems: [] }; function _(e = s, t) { switch (t.type) { case n.RECEIVE_INSTALLATION_PROBLEMS: return a(a({}, e), {}, { problems: t.problems }); default: return e; } } function l(e) { return e.troubleshooting.problems; } }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }); const n = "TESLA_CONFIG_REGISTRATION_FORM_SESSION"; }, function (e, t, i) { "use strict"; i.d(t, "c", function () { return n; }), i.d(t, "a", function () { return r; }), i.d(t, "b", function () { return a; }); function n(e, t, i = 0) { if (!e || !t) return; const n = "object" == typeof t ? JSON.stringify(t) : t; sessionStorage.setItem(e, n), i && sessionStorage.setItem(e + ":EXPIRATION", JSON.stringify({ expiration: i, timestamp: Date.now() })); } function r(e) { sessionStorage.removeItem(e), sessionStorage.removeItem(e + ":EXPIRATION"); } function a(e) { const t = sessionStorage.getItem(e), i = o(sessionStorage.getItem(e + ":EXPIRATION")), n = null != i && "object" == typeof i && Date.now() - i.timestamp >= i.expiration; return !t || n ? null : o(t); } function o(e) { if (!e) return null; try { return JSON.parse(e); } catch (t) { return e; } } }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return m; }); var n = i(1), r = i(0), a = i.n(r), o = i(3), s = i(15), _ = i(21), l = i(10); function c() { return (c = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } const d = Object(o.defineMessages)({ title: { id: "higher_order_login_title", defaultMessage: "Let's get started." }, login: { id: "higher_order_login_login_required", defaultMessage: "Login Required" } }), u = { intl: o.intlShape.isRequired, authentication: a.a.object.isRequired, changeSelectedLoginType: a.a.func.isRequired, updateHeader: a.a.func, updateModal: a.a.func, errors: a.a.array.isRequired }, m = { getLoginHeaderView: a.a.func.isRequired, handleChangeLoginHeader: a.a.func.isRequired, handleChangeLoginModal: a.a.func.isRequired, handleCheckForToggle: a.a.func.isRequired }; t.b = (e) => { var t, i, r, a, o; return ( (i = t = class extends n.Component { constructor(e) { super(e), (this.inToggleAuthLogin = !1), (this._getLoginHeaderView = this._getLoginHeaderView.bind(this)), (this._handleChangeLoginHeader = this._handleChangeLoginHeader.bind(this)), (this._handleChangeLoginModal = this._handleChangeLoginModal.bind(this)), (this._handleCheckForToggle = this._handleCheckForToggle.bind(this)), (this._checkForToggle = this._checkForToggle.bind(this)); } componentWillReceiveProps(e) { const { authentication: t, errors: i } = this.props; this.inToggleAuthLogin && Object(_.isAuthenticated)(e.authentication, e.errors) && (this.inToggleAuthLogin = !1); } componentWillUnmount() { this.inToggleAuthLogin = !1; } render() { return n.createElement( e, c({}, this.props, { getLoginHeaderView: this._getLoginHeaderView, handleChangeLoginHeader: this._handleChangeLoginHeader, handleChangeLoginModal: this._handleChangeLoginModal, handleCheckForToggle: this._handleCheckForToggle, }) ); } _handleCheckForToggle() { (this.inToggleAuthLogin = !0), this._checkForToggle(); } async _checkForToggle() { if (!this.checkingForToggle && this.inToggleAuthLogin) { this.checkingForToggle = !0; try { await this.props.toggleAuthLogin(this.props.authentication.username, this.props.authentication.selectedLoginType), await Object(s.d)(2e3), (this.checkingForToggle = !1), this._checkForToggle(); } catch (e) { this.checkingForToggle = !1; } } } _handleChangeLoginHeader(e) { e !== this.props.authentication.selectedLoginType && (this.props.changeSelectedLoginType(e), this.props.updateHeader && this.props.updateHeader("header-blank", { additionalView: this._getLoginHeaderView(e) })); } _handleChangeLoginModal(e) { e !== this.props.authentication.selectedLoginType && (this.props.changeSelectedLoginType(e), this.props.updateModal && this.props.updateModal(l.b, { headerView: n.cloneElement(this._getLoginHeaderView(e)) })); } _getLoginHeaderView() { let t = "WizardContainer" === e.name; return n.createElement( "div", { "data-testid": "b604333c-5ee6-4d23-ab77-5c0554260c05", className: "login-modal-title" }, t ? null : n.createElement("h2", { "data-testid": "0f11fe67-4b12-490a-aa87-c9d545f28fe5", className: "modal-title" }, this.props.intl.formatMessage(d.login)) ); } }), (o = u), (a = "propTypes") in (r = t) ? Object.defineProperty(r, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : (r[a] = o), i ); }; }, , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "showHeader", function () { return a; }), i.d(t, "updateHeader", function () { return o; }), i.d(t, "resetHeader", function () { return s; }); var n = i(2), r = i(6); function a(e, t = {}) { return { type: n.SHOW_HEADER, headerType: e, headerProps: t }; } function o(e, t = {}) { return { type: n.UPDATE_HEADER, headerType: e, headerProps: t }; } const s = Object(r.b)(n.RESET_HEADER); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.PhaseType = void 0), (function (e) { (e.SINGLE = "Single"), (e.SPLIT = "Split"), (e.THREE = "Three"), (e.TWO = "Two"), (e.WYE_LL = "WyeLL"); })(t.PhaseType || (t.PhaseType = {})); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "initializeConfig", function () { return v; }), i.d(t, "syncConfig", function () { return f; }), i.d(t, "getConfig", function () { return h; }); var n = i(7), r = i(2), a = i(5), o = i.n(a), s = i(6), _ = i(4), l = i(15); function c(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? c(Object(i), !0).forEach(function (t) { u(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : c(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function u(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const m = Object(s.b)(r.REQUEST_CONFIG_INITIALIZED); const p = Object(s.b)(r.RECEIVE_CONFIG_INITIALIZED_ERROR), g = Object(s.b)(r.REQUEST_SYNC_CONFIG); const w = Object(s.b)(r.RECEIVE_SYNC_CONFIG_ERROR); function v() { return (e) => ( e(m()), e(Object(n.clearError)(r.RECEIVE_CONFIG_INITIALIZED_ERROR)), fetch(o.a.api.uri + "/status") .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then((t) => { e( (function (e) { return d({ type: r.RECEIVE_CONFIG_INITIALIZED, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_CONFIG_INITIALIZED_ERROR, t.toString(), t.response)), e(p()); }) ); } function f() { return async (e) => { e(g()), e(Object(n.clearError)(r.RECEIVE_SYNC_CONFIG_ERROR)); try { return await Object(l.e)( l.a, new Error("Config sync timed out"), fetch(o.a.api.uri + "/config/completed", { credentials: o.a.credentials }) .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then((t) => { e( (function (e) { return d({ type: r.RECEIVE_SYNC_CONFIG_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) ); } catch (t) { e(Object(n.showError)(r.RECEIVE_SYNC_CONFIG_ERROR, t.toString(), t.response)), e(w()); } }; } async function h() { return fetch(o.a.api.uri + "/config", { credentials: o.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((e) => e) .catch((e) => { throw e; }); } }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.STANDARD_TOAST = t.WARNING_TOAST = void 0), (t.WARNING_TOAST = "WARNING_TOAST"), (t.STANDARD_TOAST = "STANDARD_TOAST"); }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.deviceTreeFromDeviceApiList = t.DeviceNode = t.DeviceType = t.Vitals = void 0); const n = i(113); class r { constructor(...e) { (this.numbers = new Map()), (this.strings = new Map()), (this.booleans = new Map()); for (let t of e) t && this.addVitals(t); } addVitals(e) { for (let t of e.vitals) { let e = t.name; if (e && t.value) switch (t.value.$case) { case "intValue": this.numbers.set(e, t.value.intValue); break; case "floatValue": this.numbers.set(e, t.value.floatValue); break; case "boolValue": this.booleans.set(e, t.value.boolValue); break; case "stringValue": this.strings.set(e, t.value.stringValue); } } } hasNumber(e) { return this.numbers.has(e); } getNumber(e) { return this.numbers.get(e); } hasString(e) { return this.strings.has(e); } getString(e) { return this.strings.get(e); } hasBoolean(e) { return this.booleans.has(e); } getBoolean(e) { return this.booleans.get(e); } size() { return this.numbers.size + this.strings.size + this.booleans.size; } } var a; (t.Vitals = r), (function (e) { (e.STSTSM = "STSTSM"), (e.THC = "TETHC"), (e.POD = "TEPOD"), (e.PINV = "TEPINV"), (e.PVAC = "PVAC"), (e.PVS = "PVS"), (e.SYNC = "TESYNC"), (e.MSA = "TEMSA"), (e.NEURIO = "NEURIO"), (e.ACPW = "ACPW"), (e.PVI = "PVI"), (e.SPW = "SPW"); })((a = t.DeviceType || (t.DeviceType = {}))); class o { constructor(e, t) { (this.children = []), (this.followers = []), (this.d = e), (this.customType = t), (this._vitals = new r(this.d)); } type() { var e, t, i, n; return ( this.customType || (null === (n = null === (i = null === (t = null === (e = this.d) || void 0 === e ? void 0 : e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.din) || void 0 === n ? void 0 : n.split("--")[0]) || "" ); } din() { var e, t, i; return this.customDin || (null === (i = null === (t = null === (e = this.d) || void 0 === e ? void 0 : e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.din) || ""; } partNumber() { return this.customPartNumber || this.din().split("--")[1] || ""; } serialNumber() { if (this.customSerialNumber) return this.customSerialNumber; let e = this.din().split("--"); return e[e.length - 1] || ""; } alerts() { var e; return (null === (e = this.d) || void 0 === e ? void 0 : e.alerts) || []; } vitals() { return this._vitals; } prefix() { const e = this.type(); return e.startsWith("TE") ? e.substring(2) : e; } addChild(e) { (e.parent = this), this.children.push(e); } addFollower(e) { (e.leader = this), this.followers.push(e); } disabledReasons() { var e; let t = this.type(), i = this.prefix() + "-DisabledReason", r = (null === (e = this.vitals().getString(i)) || void 0 === e ? void 0 : e.split(",")) || []; return t === a.PVI && r.includes(n.DisabledReason.DisabledUserRequested) && (r = r.filter((e) => e !== n.DisabledReason.DisabledUserRequested)), r; } isDisabled() { let e = this.type(), t = this.prefix() + "-DisabledReason", i = this.vitals().getString(t); return !!i && (i !== n.DisabledReason.DisabledUserRequested || e !== a.PVI); } isDisabledRecursive() { return this.isDisabled() || this.children.some((e) => e.isDisabledRecursive()); } isDisabledBecause(e) { return this.disabledReasons().includes(e); } isDisabledBecauseRecursive(e) { return this.isDisabledBecause(e) || this.children.some((t) => t.isDisabledBecauseRecursive(e)); } isUpdating() { let e = this.prefix() + "-Updating"; return this.vitals().getBoolean(e) || !1; } isUpdatingRecursive() { return this.isUpdating() || this.children.some((e) => e.isUpdatingRecursive()); } hasAlerts() { return this.alerts().filter(n.shouldDisplayAlert).length > 0; } hasAlertsRecursive() { return this.hasAlerts() || this.children.some((e) => e.hasAlertsRecursive()); } needsAttention(e) { return !(!e && this.type() === a.PVI) && (this.hasAlerts() || this.isUpdating() || this.isDisabled()); } needsAttentionRecursive(e) { return this.needsAttention(e) || this.children.some((t) => t.needsAttentionRecursive(e)); } } t.DeviceNode = o; class s extends o { constructor(e, t) { super(e, t), (this._vitals = new r()); } alerts() { return []; } } class _ extends o { constructor(e, t, ...i) { super(e, t), (this.additionalDevices = i.filter((e) => !!e)); for (let e of this.additionalDevices) this._vitals.addVitals(e); } alerts() { let e = [...this.d.alerts]; for (let t of this.additionalDevices) e.push(...t.alerts); return e; } } t.deviceTreeFromDeviceApiList = function (e, t) { const i = e.devices; let n = t ? a.STSTSM + "--" + t : void 0, r = p(a.STSTSM, n)[0]; if (!r) return null; let l = g(r), c = p(a.STSTSM, u(r)); for (let e of c) l.addFollower(g(e)); return l; function d(e) { var t, i, n; return null === (n = null === (i = null === (t = e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.din) || void 0 === n ? void 0 : n.split("--")[0]; } function u(e) { var t, i; return null === (i = null === (t = e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.din; } function m(e) { var t, i; return null === (i = null === (t = e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.componentParentDin; } function p(e, t) { let n = []; for (let r of i) (void 0 !== e && e !== d(r)) || (m(r) === t && n.push(r)); return n; } function g(e) { let t = new o(e), i = p(void 0, u(e)); for (let n of i) d(n) === a.THC ? t.addChild(w(e, n)) : t.addChild(g(n)); return t; } function w(e, t) { let i = u(t), n = p(a.POD, i)[0], r = p(a.PINV, i)[0], o = p(a.PVAC, i)[0]; if (!o) return new _(t, a.ACPW, n, r); let l = new _(t, a.ACPW, n, r), c = new _(o, a.PVI, p(a.PVS, u(o))[0]), d = new s(t, a.SPW); return d.addChild(c), d.addChild(l), d; } }; }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Participant = t.AuthEnvelope = t.ExternalAuth = t.TeslaService = t.DeliveryChannel = t.ExternalAuthType = void 0); const n = i(40), r = { type: 0 }, a = {}, o = {}; !(function (e) { (e[(e.EXTERNAL_AUTH_TYPE_INVALID = 0)] = "EXTERNAL_AUTH_TYPE_INVALID"), (e[(e.EXTERNAL_AUTH_TYPE_PRESENCE = 1)] = "EXTERNAL_AUTH_TYPE_PRESENCE"), (e[(e.EXTERNAL_AUTH_TYPE_MTLS = 2)] = "EXTERNAL_AUTH_TYPE_MTLS"), (e[(e.EXTERNAL_AUTH_TYPE_HERMES_COMMAND = 4)] = "EXTERNAL_AUTH_TYPE_HERMES_COMMAND"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.ExternalAuthType || (t.ExternalAuthType = {})), (function (e) { (e[(e.DELIVERY_CHANNEL_INVALID = 0)] = "DELIVERY_CHANNEL_INVALID"), (e[(e.DELIVERY_CHANNEL_LOCAL_HTTPS = 1)] = "DELIVERY_CHANNEL_LOCAL_HTTPS"), (e[(e.DELIVERY_CHANNEL_HERMES_COMMAND = 2)] = "DELIVERY_CHANNEL_HERMES_COMMAND"), (e[(e.DELIVERY_CHANNEL_BLE = 3)] = "DELIVERY_CHANNEL_BLE"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.DeliveryChannel || (t.DeliveryChannel = {})), (function (e) { (e[(e.TESLA_SERVICE_INVALID = 0)] = "TESLA_SERVICE_INVALID"), (e[(e.TESLA_SERVICE_COMMAND = 1)] = "TESLA_SERVICE_COMMAND"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.TeslaService || (t.TeslaService = {})), (t.ExternalAuth = { encode: (e, t = n.Writer.create()) => (t.uint32(8).int32(e.type), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, r); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.type = i.int32(); break; default: i.skipType(7 & e); } } return o; }, }), (t.AuthEnvelope = { encode(e, i = n.Writer.create()) { var r; return i.uint32(10).bytes(e.payload), "externalAuth" === (null === (r = e.auth) || void 0 === r ? void 0 : r.$case) && t.ExternalAuth.encode(e.auth.externalAuth, i.uint32(18).fork()).ldelim(), i; }, decode(e, i) { const r = e instanceof Uint8Array ? new n.Reader(e) : e; let o = void 0 === i ? r.len : r.pos + i; const s = Object.assign({}, a); for (; r.pos < o; ) { const e = r.uint32(); switch (e >>> 3) { case 1: s.payload = r.bytes(); break; case 2: s.auth = { $case: "externalAuth", externalAuth: t.ExternalAuth.decode(r, r.uint32()) }; break; default: r.skipType(7 & e); } } return s; }, }), (t.Participant = { encode(e, t = n.Writer.create()) { var i, r, a, o; return ( "din" === (null === (i = e.id) || void 0 === i ? void 0 : i.$case) && t.uint32(10).string(e.id.din), "teslaService" === (null === (r = e.id) || void 0 === r ? void 0 : r.$case) && t.uint32(16).int32(e.id.teslaService), "local" === (null === (a = e.id) || void 0 === a ? void 0 : a.$case) && t.uint32(24).int32(e.id.local), "authorizedClient" === (null === (o = e.id) || void 0 === o ? void 0 : o.$case) && t.uint32(32).int32(e.id.authorizedClient), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, o); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.id = { $case: "din", din: i.string() }; break; case 2: a.id = { $case: "teslaService", teslaService: i.int32() }; break; case 3: a.id = { $case: "local", local: i.int32() }; break; case 4: a.id = { $case: "authorizedClient", authorizedClient: i.int32() }; break; default: i.skipType(7 & e); } } return a; }, }); }, , , , , , , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "showNavigation", function () { return a; }), i.d(t, "updateNavigation", function () { return o; }), i.d(t, "showBack", function () { return s; }), i.d(t, "hideBack", function () { return _; }), i.d(t, "showCancel", function () { return l; }), i.d(t, "hideCancel", function () { return c; }), i.d(t, "showForward", function () { return d; }), i.d(t, "hideForward", function () { return u; }), i.d(t, "resetNavigation", function () { return m; }); var n = i(2), r = i(6); function a(e, t) { return { type: n.SHOW_NAVIGATION, navigationType: e, backProps: t.back, cancelProps: t.cancel, forwardProps: t.forward }; } function o(e, t) { return { type: n.UPDATE_NAVIGATION, navigationType: e, backProps: t.back, cancelProps: t.cancel, forwardProps: t.forward }; } function s(e, t, i, r = "", a = {}) { return { type: n.SHOW_BACK, route: e, text: t, onClick: i, buttonClass: r, additionalProps: a }; } const _ = Object(r.b)(n.HIDE_BACK); function l(e, t, i, r = "", a = {}) { return { type: n.SHOW_CANCEL, route: e, text: t, onClick: i, buttonClass: r, additionalProps: a }; } const c = Object(r.b)(n.HIDE_CANCEL); function d(e, t, i, r = "", a = {}) { return { type: n.SHOW_FORWARD, route: e, text: t, onClick: i, buttonClass: r, additionalProps: a }; } const u = Object(r.b)(n.HIDE_FORWARD), m = Object(r.b)(n.RESET_NAVIGATION); }, function (e, t, i) { "use strict"; i.d(t, "e", function () { return o; }), i.d(t, "y", function () { return s; }), i.d(t, "r", function () { return _; }), i.d(t, "s", function () { return l; }), i.d(t, "u", function () { return c; }), i.d(t, "t", function () { return d; }), i.d(t, "v", function () { return u; }), i.d(t, "w", function () { return m; }), i.d(t, "q", function () { return p; }), i.d(t, "j", function () { return g; }), i.d(t, "g", function () { return w; }), i.d(t, "p", function () { return v; }), i.d(t, "d", function () { return f; }), i.d(t, "h", function () { return E; }), i.d(t, "m", function () { return b; }), i.d(t, "l", function () { return y; }), i.d(t, "n", function () { return S; }), i.d(t, "o", function () { return R; }), i.d(t, "k", function () { return T; }), i.d(t, "x", function () { return A; }), i.d(t, "i", function () { return C; }), i.d(t, "c", function () { return I; }), i.d(t, "a", function () { return O; }), i.d(t, "b", function () { return N; }), i.d(t, "f", function () { return k; }); var n = i(12), r = i(27), a = i(59); const o = (e) => e.filter((e) => (e.shortID && e.serial) || (p(e) && e.ipAddress)), s = (e) => e.connectionType === n.ConnectionTypes.SYNCHROMETER_X || e.connectionType === n.ConnectionTypes.SYNCHROMETER_Y, _ = (e) => e.connectionType === n.ConnectionTypes.SYNCHROMETER_X || e.connectionType === n.ConnectionTypes.SYNCHROMETER_Y || e.connectionType === n.ConnectionTypes.MSA, l = (e) => e === n.ConnectionTypes.NEURIO_W1_WIFI || e === n.ConnectionTypes.NEURIO_W1_WIRED || e === n.ConnectionTypes.NEURIO_W2_WIFI || e === n.ConnectionTypes.NEURIO_W2_WIRED, c = (e) => e === n.ConnectionTypes.NEURIO_W2_WIFI || e === n.ConnectionTypes.NEURIO_W2_WIRED, d = (e) => e === n.ConnectionTypes.NEURIO_W1_WIFI || e === n.ConnectionTypes.NEURIO_W1_WIRED, u = (e) => e === n.ConnectionTypes.NEURIO_W1_WIFI || e === n.ConnectionTypes.NEURIO_W2_WIFI, m = (e) => e === n.ConnectionTypes.NEURIO_W1_WIRED || e === n.ConnectionTypes.NEURIO_W2_WIRED, p = (e) => e.connectionType === n.ConnectionTypes.ACUVIM, g = (e) => e.filter((e) => s(e)), w = (e) => e.filter((e) => l(e.connectionType)), v = (e) => g(e).length > 0, f = (e) => e.filter((e) => null != e.connectionType), h = new Set([n.CurrentTransformerConnectionTypes.SITE, n.CurrentTransformerConnectionTypes.LOAD, n.CurrentTransformerConnectionTypes.SOLAR]), E = (e) => e.filter((e) => h.has(e.connectionType)); const b = (e) => ((e) => e.filter((e) => e.connectionType === n.CurrentTransformerConnectionTypes.SITE))(e).length > 0, y = (e) => ((e) => e.filter((e) => e.connectionType === n.CurrentTransformerConnectionTypes.LOAD))(e).length > 0, S = (e) => ((e) => e.filter((e) => null != e.connectionType && n.SolarLocationCurrentTransformerTypes.includes(e.connectionType)))(e).length > 0, R = (e) => { return ((t = e), t.filter((e) => e.connectionType === n.CurrentTransformerConnectionTypes.SOLAR_RGM)).length > 0; var t; }, T = (e) => ((e) => e.filter((e) => e.connectionType === n.CurrentTransformerConnectionTypes.CONDUCTOR))(e).length > 0, A = (e, t) => e === t || (null != e && null != t && n.SolarLocationCurrentTransformerTypes.includes(e) && n.SolarLocationCurrentTransformerTypes.includes(t)), C = (e, t) => (e === n.CurrentTransformerConnectionTypes.SOLAR_RGM ? (2 === t ? n.CurrentTransformerConnectionTypes.DOUBLED_SOLAR : n.CurrentTransformerConnectionTypes.SOLAR) : e), I = (e, t = null, i = 1) => { let o = Object(r.values)(n.PowerUnits), s = n.PowerUnits.WATTS; t && (o = o.slice(0, o.indexOf(t) + 1)); for (var _ = 0; _ < o.length - 1; _++) (Math.abs(e) > 1e3 || null != t) && ((e /= 1e3), (s = o[_ + 1])); return `${Object(a.a)(e, i)} ${s}`; }, O = (e, t) => Math.sqrt(Math.pow(e, 2) + Math.pow(t, 2)), N = (e, t) => { let i = O(e, t); return 0 === i ? 0 : Math.abs(e) / i; }, k = (e, t) => Object(r.findKey)(e, function (e) { return e === t; }); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetPowerwallConfig", function () { return A; }), i.d(t, "enumeratePowerwalls", function () { return G; }), i.d(t, "fetchPowerwalls", function () { return j; }), i.d(t, "getSOE", function () { return W; }), i.d(t, "startPowerwallsUpdate", function () { return F; }), i.d(t, "checkUpdateStatus", function () { return q; }), i.d(t, "getUpdateStatus", function () { return x; }), i.d(t, "checkPowerwallsStatus", function () { return B; }), i.d(t, "startPhaseDetection", function () { return H; }), i.d(t, "fetchPhaseInformation", function () { return K; }), i.d(t, "savePhaseUsages", function () { return Y; }), i.d(t, "enableInverterSolarMeterReadings", function () { return Q; }), i.d(t, "fetchPowerwallsPVISubPackageNumbers", function () { return Z; }); var n = i(7), r = i(2), a = i(13), o = (i(92), i(14)), s = i(5), _ = i.n(s), l = i(4), c = i(6), d = i(15); function u(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function m(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? u(Object(i), !0).forEach(function (t) { p(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : u(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function p(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const g = Object(c.b)(r.SCAN_POWERWALLS), w = Object(c.b)(r.REQUEST_POWERWALLS); function v(e) { return m({ type: r.RECEIVE_POWERWALLS, receivedAt: Date.now() }, e); } const f = Object(c.b)(r.RECEIVE_POWERWALLS_ERROR), h = Object(c.b)(r.REQUEST_SOE); const E = Object(c.b)(r.RECEIVE_SOE_ERROR), b = Object(c.b)(r.REQUEST_POWERWALLS_UPDATE); const y = Object(c.b)(r.RECEIVE_POWERWALLS_UPDATE_ERROR), S = Object(c.b)(r.REQUEST_POWERWALLS_STATUS); function R(e) { return m({ type: r.RECEIVE_POWERWALLS_STATUS_SUCCESS, receivedAt: Date.now() }, e); } const T = Object(c.b)(r.RECEIVE_POWERWALLS_STATUS_ERROR), A = Object(c.b)(r.RESET_POWERWALL_CONFIG), C = Object(c.b)(r.REQUEST_START_PHASE_DETECTION), I = Object(c.b)(r.RECEIVE_START_PHASE_DETECTION_SUCCESS), O = Object(c.b)(r.RECEIVE_START_PHASE_DETECTION_ERROR), N = Object(c.b)(r.REQUEST_FETCH_PHASE_INFORMATION); const k = Object(c.b)(r.RECEIVE_FETCH_PHASE_INFORMATION_ERROR), P = Object(c.b)(r.REQUEST_SAVE_PHASE_USAGES); const D = Object(c.b)(r.RECEIVE_SAVE_PHASE_USAGES_ERROR), L = Object(c.b)(r.REQUEST_ENABLE_INVERTER_SOLAR_METER_READINGS), M = Object(c.b)(r.RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_SUCCESS), z = Object(c.b)(r.RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_ERROR), U = Object(c.b)(r.REQUEST_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS); const V = Object(c.b)(r.RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS_ERROR); function G() { return (e) => ( e(g()), e(Object(n.clearError)(r.RECEIVE_POWERWALLS_ERROR)), fetch(_.a.api.uri + "/powerwalls/scan", { credentials: _.a.credentials, method: "POST" }) .then(l.parseJSON) .then(l.checkResponseStatus) .then((t) => { t ? e(v(t)) : (e(Object(n.showError)(r.RECEIVE_POWERWALLS_ERROR, "Could not retrieve Powerwalls")), e(f())); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_POWERWALLS_ERROR, t.toString(), t.response)), e(f()); }) ); } function j(e = !1) { return (t) => ( t(w()), t(Object(n.clearError)(r.REQUEST_POWERWALLS)), fetch(_.a.api.uri + "/powerwalls", { credentials: _.a.credentials }) .then(l.parseJSON) .then(l.checkResponseStatus) .then((i) => { i ? t(v(i)) : e || (t(Object(n.showError)(r.RECEIVE_POWERWALLS_ERROR, "Could not retrieve Powerwalls")), t(f())); }) .catch((i) => { e || (t(Object(n.showError)(r.RECEIVE_POWERWALLS_ERROR, i.toString(), i.response)), t(f())); }) ); } function W() { return (e) => ( e(h()), Object(d.e)( d.a, new Error("Request timed out"), fetch(_.a.api.uri + "/system_status/soe", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e( (function (e) { return m({ type: r.RECEIVE_SOE_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(E(new o.default(r.RECEIVE_SOE_ERROR, t.toString(), t.response))); }) ) ); } function F() { return (e) => ( e(b()), e(Object(n.clearError)(r.RECEIVE_POWERWALLS_UPDATE_ERROR)), fetch(_.a.api.uri + "/powerwalls/update", { credentials: _.a.credentials, method: "POST" }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { e({ type: r.RECEIVE_POWERWALLS_UPDATE_SUCCESS, receivedAt: Date.now() }); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_POWERWALLS_UPDATE_ERROR, t.toString(), t.response)), e(y()); }) ); } function q() { return fetch(_.a.api.uri + "/powerwalls/status", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => e) .catch((e) => { throw e; }); } function x() { return async (e) => { const t = await q(); return e(R(t)), t; }; } function B() { return async (e) => { e(S()); try { e(R(await q())); } catch (t) { e(Object(n.showError)(r.RECEIVE_POWERWALLS_STATUS_ERROR, t.toString(), t.response)), e(T()); } }; } function H() { return (e) => ( e(C()), e(Object(n.clearError)(r.RECEIVE_START_PHASE_DETECTION_ERROR)), fetch(_.a.api.uri + "/powerwalls/phase_detection", { credentials: _.a.credentials, method: "POST" }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => (e(I()), !0)) .catch((t) => { throw (e(Object(n.showError)(r.RECEIVE_START_PHASE_DETECTION_ERROR, t.toString(), t.response)), e(O()), t); }) ); } function K(e) { return (t) => ( t(N()), fetch(_.a.api.uri + "/powerwalls/phase_usages", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => { var i; t(((i = { lineStatuses: [e[a.i.PHASE_1], e[a.i.PHASE_2], e[a.i.PHASE_3]], lineVoltages: [e.Vl1n, e.Vl2n, e.Vl3n] }), m({ type: r.RECEIVE_FETCH_PHASE_INFORMATION_SUCCESS }, i))); }) .catch((i) => { e || t(Object(n.showError)(r.RECEIVE_FETCH_PHASE_INFORMATION_ERROR, i.toString(), i.response)), t(k()); }) ); } function Y(e) { return (t) => ( t(P()), fetch(_.a.api.uri + "/powerwalls/phase_usages", { credentials: _.a.credentials, method: "POST", body: JSON.stringify({ [a.i.PHASE_1]: e[0], [a.i.PHASE_2]: e[1], [a.i.PHASE_3]: e[2] }) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => { var i; return t(((i = { lineStatuses: [e[a.i.PHASE_1], e[a.i.PHASE_2], e[a.i.PHASE_3]], lineVoltages: [e.Vl1n, e.Vl2n, e.Vl3n] }), m({ type: r.RECEIVE_SAVE_PHASE_USAGES_SUCCESS }, i))), !0; }) .catch((e) => (t(Object(n.showError)(r.RECEIVE_SAVE_PHASE_USAGES_ERROR, e.toString(), e.response)), t(D()), !1)) ); } function Q() { return (e) => ( e(L()), fetch(_.a.api.uri + "/powerwalls/enable_inverter_solar_meter_readings", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" } }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { e(M()); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_ERROR, t.toString(), t.response)), e(z()); }) ); } function Z() { return (e) => ( e(U()), fetch(_.a.api.uri + "/powerwalls/pvi_sub_package_numbers", { method: "GET", credentials: _.a.credentials, headers: { "Content-Type": "application/json" } }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { e( (function (e) { return m({ type: r.RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS }, e); })(t) ); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS_ERROR, t.toString(), t.response)), e(V()); }) ); } }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAAAXNSR0IArs4c6QAAAPtJREFUGBljTk9PbzM1NdU8c+bMKQYsgOn///+L/v37VwlUWIRFnoH57Nmzb0xMTDYDFc4wNjZmB/KPICtkBnGAgu8sLS03/P37dwpQMR+QfxCmCKwAxDl16tQHoAnrGBkZ+4G0GFDRPpA4E4iAgVmzZj0CKrAD8kOBbuoCiTPCJJHptLQ0SaDC/UCx7SgmICkSATpaAMi/DXcDTDIjI8MQKLkbyK8GWjkTxYSsrCxTYJjsAkqWAiXngDTB3QB0lCVQ5xag3TkzZ85cDpIEAbAJmZmZtkD2VqBkOrIkSAEz0MWOQHo9ECcCJUE0CmAB6QIaHQu0cyuKDJQDAEimY7IetteGAAAAAElFTkSuQmCC"; }, function (e, t, i) { "use strict"; function n(e) { "textarea" !== e.target.type && 13 === e.which && e.preventDefault(); } function r(e) { e.preventDefault(), window.location.reload(); } i.d(t, "a", function () { return n; }), i.d(t, "b", function () { return r; }); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.KiloOhms = t.Ohms = t.KiloWattHours = t.KiloWatts = t.WattHours = t.Watts = t.Amps = t.Volts = t.Hertz = t.Phase = void 0); const o = a(i(1)), s = i(3), _ = i(577); function l(e) { return "number" == typeof e.value ? o.createElement(s.FormattedNumber, { value: e.value }) : e.value; } t.Phase = (e) => { let t = _.phaseMessages[e.value]; return t ? o.createElement(s.FormattedMessage, Object.assign({}, t)) : o.createElement(s.FormattedMessage, { id: "display_phase_type_unknown", description: "Shown when the phase type of the grid or installation is unrecognized or unknown.", defaultMessage: "unknown" }); }; t.Hertz = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.hertz, { values: { frequency: l(e) } })); t.Volts = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.volts, { values: { voltage: l(e) } })); t.Amps = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.amps, { values: { current: l(e) } })); t.Watts = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.watts, { values: { power: l(e) } })); t.WattHours = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.wattHours, { values: { energy: l(e) } })); t.KiloWatts = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.kiloWatts, { values: { power: l(e) } })); t.KiloWattHours = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.kiloWattHours, { values: { energy: l(e) } })); t.Ohms = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.ohms, { values: { resistance: l(e) } })); t.KiloOhms = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.kiloOhms, { values: { resistance: l(e) } })); }, , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3); t.default = function ({ device: e }) { if (!e) return null; const t = e.vitals(), i = e.prefix(), n = t.getBoolean(i + "-Updating"), o = t.getNumber(i + "-UpdateProgress"); if (!n || void 0 === o) return null; const s = t.getNumber(i + "-UpdateNumSteps"); let _ = t.getNumber(i + "-UpdateCurrentStep"); void 0 !== _ && (_ += 1); const l = (100 * o).toFixed(0); return r.default.createElement( "div", { className: "system-device-update-progress" }, r.default.createElement(a.FormattedMessage, { id: "system_firmware_update", defaultMessage: "Updating: {percent}% ({step}/{numSteps})", values: { step: _, numSteps: s, percent: l } }), r.default.createElement("progress", { value: o }) ); }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.CommonAPIFactoryResetRequest = t.CommonAPIPerformUpdateResponse = t.CommonAPIPerformUpdateRequest = t.CommonAPIClearUpdateResponse = t.CommonAPIClearUpdateRequest = t.CommonAPICheckForUpdateResponse = t.CommonAPICheckForUpdateRequest = t.CommonAPISetLocalSiteConfigResponse = t.CommonAPISetLocalSiteConfigRequest = t.CommonAPIGetSystemInfoResponse = t.CommonAPIGetSystemInfoRequest = t.ErrorResponse = t.RadioLegalInformation = t.ComplianceInformation = t.DeviceSignedPayload = t.RegistrationPayload = t.AcceptedPackage = t.LocallyAvailablePackage = t.SystemUpdate = t.ServerStagedPackage = t.WifiNetwork = t.WifiConfig = t.EncryptedMessage = t.CellularEID = t.WifiPassword = t.NetworkInterface = t.NetworkConnectivityStatus = t.Rssi = t.NetworkInterfaceIPv4Config = t.GridComplianceStatus = t.InstDCMeasurement = t.InstACMeasurement = t.AccumulatedEnergy = t.FirmwareVersion = t.Din = t.EcuId = t.DeviceCertFormat = t.WifiConfigureResult = t.DeviceSignatureType = t.WifiNetworkSecurityType = t.Cipher = t.CellularProfileType = t.NetworkDeviceStateReason = t.NetworkDeviceState = t.GridState = t.EnergyAccumulationType = t.LastUpdateResult = t.UpdateStatus = t.UpdateHandshakeResult = t.DeviceType = void 0), (t.AlertMatrix = t.AlertLog = t.CommonAPIPrepareRegistrationPayloadResponse = t.CommonAPIPrepareRegistrationPayloadRequest = t.CommonAPINegotiateUpdateWithLocallyAvailablePackagesResponse = t.CommonAPINegotiateUpdateWithLocallyAvailablePackagesRequest = t.CommonAPICheckForUpdateUrgencyResponse = t.CommonAPICheckForUpdateUrgencyRequest = t.CommonAPIDeviceCertResponse = t.CommonAPIDeviceCertRequest = t.CommonAPIConfigureWifiWithEncryptedPasswordResponse = t.CommonAPIConfigureWifiWithEncryptedPasswordRequest = t.CommonAPICheckInternetResponse = t.CommonAPICheckInternetRequest = t.CommonAPIForgetWifiNetworkResponse = t.CommonAPIForgetWifiNetworkRequest = t.CommonAPIConfigureEthernetResponse = t.CommonAPIConfigureEthernetRequest = t.CommonAPIConfigureWifiResponse = t.CommonAPIConfigureWifiRequest = t.CommonAPIWifiScanResponse = t.CommonAPIWifiScanRequest = t.CommonAPIGetCellularInfoResponse = t.CommonAPIGetCellularInfoRequest = t.CommonAPIGetNetworkingStatusResponse = t.CommonAPIGetNetworkingStatusRequest = t.CommonAPIFactoryResetResponse = void 0); const n = i(775), r = i(40), a = i(453), o = { partNumber: "", serialNumber: "" }, s = { value: "" }, _ = { version: "" }, l = { energyWh: 0, accumulationType: 0 }, c = { voltageVrms: 0, frequencyHz: 0 }, d = { voltageV: 0 }, u = { gridState: 0 }, m = { dhcpEnabled: !1, address: 0, subnetMask: 0, gateway: 0, dns: 0 }, p = { value: 0 }, g = { connectedPhysical: !1, connectedInternet: !1, connectedTesla: !1 }, w = { enabled: !1, activeRoute: !1, deviceState: 0, deviceStateReason: 0 }, v = { value: "" }, f = { value: "" }, h = { cipher: 0 }, E = { ssid: "", securityType: 0 }, b = { rssiValue: 0, ssid: "", securityType: 0 }, y = { downloadUrl: "", packageId: 0 }, S = { handshakeResult: 0, updateStatus: 0, totalBytes: 0, bytesOffset: 0, estimatedBytesPerSecond: 0, lastHandshakeTimestamp: 0, lastUpdateResult: 0 }, R = { packageId: 0, fileSizeBytes: 0 }, T = { packageId: 0, uploadEndpoint: "" }, A = {}, C = { deviceSignatureType: 0, deviceCertFormat: 0 }, I = {}, O = {}, N = {}, k = {}, P = { din: "", deviceType: 0 }, D = {}, L = {}, M = { downloadIfAvailable: !1 }, z = {}, U = {}, V = {}, G = {}, j = {}, W = {}, F = {}, q = {}, x = {}, B = {}, H = { supportedProfiles: 0 }, K = { maxScanDurationS: 0, desiredSecurityTypes: 0, maximumTotalAps: 0 }, Y = {}, Q = { enabled: !1 }, Z = {}, J = {}, X = {}, $ = { ssid: "" }, ee = {}, te = {}, ie = {}, ne = { enabled: !1 }, re = { result: 0 }, ae = {}, oe = { format: 0 }, se = {}, _e = {}, le = {}, ce = {}, de = {}, ue = {}, me = { data: 0 }, pe = { data: 0 }; function ge(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } !(function (e) { (e[(e.DEVICE_TYPE_INVALID = 0)] = "DEVICE_TYPE_INVALID"), (e[(e.DEVICE_TYPE_GEN3WC = 1)] = "DEVICE_TYPE_GEN3WC"), (e[(e.DEVICE_TYPE_PVCOM = 2)] = "DEVICE_TYPE_PVCOM"), (e[(e.DEVICE_TYPE_MSA = 3)] = "DEVICE_TYPE_MSA"), (e[(e.DEVICE_TYPE_SITECONTROLLER = 4)] = "DEVICE_TYPE_SITECONTROLLER"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.DeviceType || (t.DeviceType = {})), (function (e) { (e[(e.UPDATE_HANDSHAKE_RESULT_INVALID = 0)] = "UPDATE_HANDSHAKE_RESULT_INVALID"), (e[(e.UPDATE_HANDSHAKE_RESULT_UNDERWAY = 1)] = "UPDATE_HANDSHAKE_RESULT_UNDERWAY"), (e[(e.UPDATE_HANDSHAKE_RESULT_FAILED = 2)] = "UPDATE_HANDSHAKE_RESULT_FAILED"), (e[(e.UPDATE_HANDSHAKE_RESULT_NON_ACTIONABLE = 3)] = "UPDATE_HANDSHAKE_RESULT_NON_ACTIONABLE"), (e[(e.UPDATE_HANDSHAKE_RESULT_UPDATE_STAGED = 4)] = "UPDATE_HANDSHAKE_RESULT_UPDATE_STAGED"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.UpdateHandshakeResult || (t.UpdateHandshakeResult = {})), (function (e) { (e[(e.UPDATE_STATUS_INVALID = 0)] = "UPDATE_STATUS_INVALID"), (e[(e.UPDATE_STATUS_IDLE = 1)] = "UPDATE_STATUS_IDLE"), (e[(e.UPDATE_STATUS_DOWNLOADING = 2)] = "UPDATE_STATUS_DOWNLOADING"), (e[(e.UPDATE_STATUS_DOWNLOADED = 3)] = "UPDATE_STATUS_DOWNLOADED"), (e[(e.UPDATE_STATUS_STAGED = 4)] = "UPDATE_STATUS_STAGED"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.UpdateStatus || (t.UpdateStatus = {})), (function (e) { (e[(e.LAST_UPDATE_RESULT_INVALID = 0)] = "LAST_UPDATE_RESULT_INVALID"), (e[(e.LAST_UPDATE_RESULT_FAILED = 1)] = "LAST_UPDATE_RESULT_FAILED"), (e[(e.LAST_UPDATE_RESULT_SUCCEEDED = 2)] = "LAST_UPDATE_RESULT_SUCCEEDED"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.LastUpdateResult || (t.LastUpdateResult = {})), (function (e) { (e[(e.ENERGY_ACCUMULATION_TYPE_INVALID = 0)] = "ENERGY_ACCUMULATION_TYPE_INVALID"), (e[(e.ENERGY_ACCUMULATION_TYPE_LIFETIME = 1)] = "ENERGY_ACCUMULATION_TYPE_LIFETIME"), (e[(e.ENERGY_ACCUMULATION_TYPE_TODAY = 2)] = "ENERGY_ACCUMULATION_TYPE_TODAY"), (e[(e.ENERGY_ACCUMULATION_TYPE_SESSION = 3)] = "ENERGY_ACCUMULATION_TYPE_SESSION"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.EnergyAccumulationType || (t.EnergyAccumulationType = {})), (function (e) { (e[(e.GRID_STATE_INVALID = 0)] = "GRID_STATE_INVALID"), (e[(e.GRID_STATE_UNCOMPLIANT = 1)] = "GRID_STATE_UNCOMPLIANT"), (e[(e.GRID_STATE_QUALIFYING = 2)] = "GRID_STATE_QUALIFYING"), (e[(e.GRID_STATE_COMPLIANT = 3)] = "GRID_STATE_COMPLIANT"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.GridState || (t.GridState = {})), (function (e) { (e[(e.NETWORK_DEVICE_STATE_INVALID = 0)] = "NETWORK_DEVICE_STATE_INVALID"), (e[(e.NETWORK_DEVICE_STATE_UNMANAGED = 1)] = "NETWORK_DEVICE_STATE_UNMANAGED"), (e[(e.NETWORK_DEVICE_STATE_UNAVAILABLE = 2)] = "NETWORK_DEVICE_STATE_UNAVAILABLE"), (e[(e.NETWORK_DEVICE_STATE_IDLE = 3)] = "NETWORK_DEVICE_STATE_IDLE"), (e[(e.NETWORK_DEVICE_STATE_ASSOCIATION = 4)] = "NETWORK_DEVICE_STATE_ASSOCIATION"), (e[(e.NETWORK_DEVICE_STATE_CONFIGURATION = 5)] = "NETWORK_DEVICE_STATE_CONFIGURATION"), (e[(e.NETWORK_DEVICE_STATE_READY = 6)] = "NETWORK_DEVICE_STATE_READY"), (e[(e.NETWORK_DEVICE_STATE_DISCONNECT = 7)] = "NETWORK_DEVICE_STATE_DISCONNECT"), (e[(e.NETWORK_DEVICE_STATE_FAILURE = 8)] = "NETWORK_DEVICE_STATE_FAILURE"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.NetworkDeviceState || (t.NetworkDeviceState = {})), (function (e) { (e[(e.NETWORK_DEVICE_STATE_REASON_INVALID = 0)] = "NETWORK_DEVICE_STATE_REASON_INVALID"), (e[(e.NETWORK_DEVICE_STATE_REASON_NONE = 1)] = "NETWORK_DEVICE_STATE_REASON_NONE"), (e[(e.NETWORK_DEVICE_STATE_REASON_CONFIG_FAILED = 2)] = "NETWORK_DEVICE_STATE_REASON_CONFIG_FAILED"), (e[(e.NETWORK_DEVICE_STATE_REASON_DHCP_FAILED = 3)] = "NETWORK_DEVICE_STATE_REASON_DHCP_FAILED"), (e[(e.NETWORK_DEVICE_STATE_REASON_IP_ADDRESS_DUPLICATE = 4)] = "NETWORK_DEVICE_STATE_REASON_IP_ADDRESS_DUPLICATE"), (e[(e.NETWORK_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 5)] = "NETWORK_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED"), (e[(e.NETWORK_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 6)] = "NETWORK_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE"), (e[(e.NETWORK_DEVICE_STATE_REASON_IP_METHOD_UNSUPPORTED = 7)] = "NETWORK_DEVICE_STATE_REASON_IP_METHOD_UNSUPPORTED"), (e[(e.NETWORK_DEVICE_STATE_REASON_NEW_ACTIVATION = 8)] = "NETWORK_DEVICE_STATE_REASON_NEW_ACTIVATION"), (e[(e.NETWORK_DEVICE_STATE_REASON_NO_SECRETS = 9)] = "NETWORK_DEVICE_STATE_REASON_NO_SECRETS"), (e[(e.NETWORK_DEVICE_STATE_REASON_PPP_FAILED = 10)] = "NETWORK_DEVICE_STATE_REASON_PPP_FAILED"), (e[(e.NETWORK_DEVICE_STATE_REASON_SSID_NOT_FOUND = 11)] = "NETWORK_DEVICE_STATE_REASON_SSID_NOT_FOUND"), (e[(e.NETWORK_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 12)] = "NETWORK_DEVICE_STATE_REASON_SIM_PIN_INCORRECT"), (e[(e.NETWORK_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 13)] = "NETWORK_DEVICE_STATE_REASON_SUPPLICANT_FAILED"), (e[(e.NETWORK_DEVICE_STATE_REASON_REMOVED = 14)] = "NETWORK_DEVICE_STATE_REASON_REMOVED"), (e[(e.NETWORK_DEVICE_STATE_REASON_MODEM_FAILED = 15)] = "NETWORK_DEVICE_STATE_REASON_MODEM_FAILED"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.NetworkDeviceStateReason || (t.NetworkDeviceStateReason = {})), (function (e) { (e[(e.CELLULAR_PROFILE_TYPE_INVALID = 0)] = "CELLULAR_PROFILE_TYPE_INVALID"), (e[(e.CELLULAR_PROFILE_TYPE_TWILIO = 1)] = "CELLULAR_PROFILE_TYPE_TWILIO"), (e[(e.CELLULAR_PROFILE_TYPE_ATT = 2)] = "CELLULAR_PROFILE_TYPE_ATT"), (e[(e.CELLULAR_PROFILE_TYPE_KPN = 3)] = "CELLULAR_PROFILE_TYPE_KPN"), (e[(e.CELLULAR_PROFILE_TYPE_TELEFONICA = 4)] = "CELLULAR_PROFILE_TYPE_TELEFONICA"), (e[(e.CELLULAR_PROFILE_TYPE_TELSTRA = 5)] = "CELLULAR_PROFILE_TYPE_TELSTRA"), (e[(e.CELLULAR_PROFILE_TYPE_TELUS = 6)] = "CELLULAR_PROFILE_TYPE_TELUS"), (e[(e.CELLULAR_PROFILE_TYPE_DOCOMO = 7)] = "CELLULAR_PROFILE_TYPE_DOCOMO"), (e[(e.CELLULAR_PROFILE_TYPE_UNICOM = 8)] = "CELLULAR_PROFILE_TYPE_UNICOM"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.CellularProfileType || (t.CellularProfileType = {})), (function (e) { (e[(e.CIPHER_INVALID = 0)] = "CIPHER_INVALID"), (e[(e.CIPHER_RSA_OAEP_SHA256 = 2)] = "CIPHER_RSA_OAEP_SHA256"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.Cipher || (t.Cipher = {})), (function (e) { (e[(e.WIFI_NETWORK_SECURITY_TYPE_INVALID = 0)] = "WIFI_NETWORK_SECURITY_TYPE_INVALID"), (e[(e.WIFI_NETWORK_SECURITY_TYPE_NONE = 1)] = "WIFI_NETWORK_SECURITY_TYPE_NONE"), (e[(e.WIFI_NETWORK_SECURITY_TYPE_DYNAMIC_WEP = 2)] = "WIFI_NETWORK_SECURITY_TYPE_DYNAMIC_WEP"), (e[(e.WIFI_NETWORK_SECURITY_TYPE_WPA2_PERSONAL = 3)] = "WIFI_NETWORK_SECURITY_TYPE_WPA2_PERSONAL"), (e[(e.WIFI_NETWORK_SECURITY_TYPE_WPA2_ENTERPRISE = 4)] = "WIFI_NETWORK_SECURITY_TYPE_WPA2_ENTERPRISE"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.WifiNetworkSecurityType || (t.WifiNetworkSecurityType = {})), (function (e) { (e[(e.DEVICE_SIGNATURE_TYPE_INVALID = 0)] = "DEVICE_SIGNATURE_TYPE_INVALID"), (e[(e.DEVICE_SIGNATURE_TYPE_SHA256_ECDSA_ASN1 = 1)] = "DEVICE_SIGNATURE_TYPE_SHA256_ECDSA_ASN1"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.DeviceSignatureType || (t.DeviceSignatureType = {})), (function (e) { (e[(e.WIFI_CONFIGURE_RESULT_INVALID = 0)] = "WIFI_CONFIGURE_RESULT_INVALID"), (e[(e.WIFI_CONFIGURE_RESULT_SUCCESS = 1)] = "WIFI_CONFIGURE_RESULT_SUCCESS"), (e[(e.WIFI_CONFIGURE_RESULT_FAILURE_GENERIC = 2)] = "WIFI_CONFIGURE_RESULT_FAILURE_GENERIC"), (e[(e.WIFI_CONFIGURE_RESULT_FAILED_WITH_INVALID_CONFIG = 3)] = "WIFI_CONFIGURE_RESULT_FAILED_WITH_INVALID_CONFIG"), (e[(e.WIFI_CONFIGURE_RESULT_FAILED_TO_CONNECT = 4)] = "WIFI_CONFIGURE_RESULT_FAILED_TO_CONNECT"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.WifiConfigureResult || (t.WifiConfigureResult = {})), (function (e) { (e[(e.DEVICE_CERT_FORMAT_INVALID = 0)] = "DEVICE_CERT_FORMAT_INVALID"), (e[(e.DEVICE_CERT_FORMAT_DER = 1)] = "DEVICE_CERT_FORMAT_DER"), (e[(e.DEVICE_CERT_FORMAT_PEM = 2)] = "DEVICE_CERT_FORMAT_PEM"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.DeviceCertFormat || (t.DeviceCertFormat = {})), (t.EcuId = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.partNumber), t.uint32(18).string(e.serialNumber), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, o); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.partNumber = i.string(); break; case 2: a.serialNumber = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.Din = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, s); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.FirmwareVersion = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.version), t.uint32(18).bytes(e.githash), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, _); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.version = i.string(); break; case 2: a.githash = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.AccumulatedEnergy = { encode: (e, t = r.Writer.create()) => ( t.uint32(13).float(e.energyWh), t.uint32(16).int32(e.accumulationType), void 0 !== e.periodS && void 0 !== e.periodS && a.UInt64Value.encode({ value: e.periodS }, t.uint32(26).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, l); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.energyWh = i.float(); break; case 2: o.accumulationType = i.int32(); break; case 3: o.periodS = a.UInt64Value.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.InstACMeasurement = { encode: (e, t = r.Writer.create()) => ( t.uint32(13).float(e.voltageVrms), t.uint32(21).float(e.frequencyHz), void 0 !== e.currentArms && void 0 !== e.currentArms && a.FloatValue.encode({ value: e.currentArms }, t.uint32(26).fork()).ldelim(), void 0 !== e.realPowerW && void 0 !== e.realPowerW && a.FloatValue.encode({ value: e.realPowerW }, t.uint32(34).fork()).ldelim(), void 0 !== e.reactivePowerVar && void 0 !== e.reactivePowerVar && a.FloatValue.encode({ value: e.reactivePowerVar }, t.uint32(42).fork()).ldelim(), void 0 !== e.apparentPowerVa && void 0 !== e.apparentPowerVa && a.FloatValue.encode({ value: e.apparentPowerVa }, t.uint32(50).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, c); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.voltageVrms = i.float(); break; case 2: o.frequencyHz = i.float(); break; case 3: o.currentArms = a.FloatValue.decode(i, i.uint32()).value; break; case 4: o.realPowerW = a.FloatValue.decode(i, i.uint32()).value; break; case 5: o.reactivePowerVar = a.FloatValue.decode(i, i.uint32()).value; break; case 6: o.apparentPowerVa = a.FloatValue.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.InstDCMeasurement = { encode: (e, t = r.Writer.create()) => (t.uint32(13).float(e.voltageV), void 0 !== e.currentA && void 0 !== e.currentA && a.FloatValue.encode({ value: e.currentA }, t.uint32(18).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, d); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.voltageV = i.float(); break; case 2: o.currentA = a.FloatValue.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.GridComplianceStatus = { encode: (e, t = r.Writer.create()) => ( t.uint32(8).int32(e.gridState), void 0 !== e.qualifyingTimeRemainingS && void 0 !== e.qualifyingTimeRemainingS && a.UInt32Value.encode({ value: e.qualifyingTimeRemainingS }, t.uint32(18).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, u); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.gridState = i.int32(); break; case 2: o.qualifyingTimeRemainingS = a.UInt32Value.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.NetworkInterfaceIPv4Config = { encode(e, t = r.Writer.create()) { t.uint32(16).bool(e.dhcpEnabled), t.uint32(29).fixed32(e.address), t.uint32(37).fixed32(e.subnetMask), t.uint32(45).fixed32(e.gateway), t.uint32(50).fork(); for (const i of e.dns) t.fixed32(i); return t.ldelim(), t; }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, m); for (a.dns = []; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 2: a.dhcpEnabled = i.bool(); break; case 3: a.address = i.fixed32(); break; case 4: a.subnetMask = i.fixed32(); break; case 5: a.gateway = i.fixed32(); break; case 6: if (2 == (7 & e)) { const e = i.uint32() + i.pos; for (; i.pos < e; ) a.dns.push(i.fixed32()); } else a.dns.push(i.fixed32()); break; default: i.skipType(7 & e); } } return a; }, }), (t.Rssi = { encode: (e, t = r.Writer.create()) => ( t.uint32(8).sint32(e.value), void 0 !== e.signalStrengthPercent && void 0 !== e.signalStrengthPercent && a.UInt32Value.encode({ value: e.signalStrengthPercent }, t.uint32(18).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, p); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.value = i.sint32(); break; case 2: o.signalStrengthPercent = a.UInt32Value.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.NetworkConnectivityStatus = { encode: (e, i = r.Writer.create()) => ( i.uint32(8).bool(e.connectedPhysical), i.uint32(16).bool(e.connectedInternet), i.uint32(24).bool(e.connectedTesla), void 0 !== e.rssi && void 0 !== e.rssi && t.Rssi.encode(e.rssi, i.uint32(34).fork()).ldelim(), void 0 !== e.snr && void 0 !== e.snr && a.Int32Value.encode({ value: e.snr }, i.uint32(42).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === i ? n.len : n.pos + i; const s = Object.assign({}, g); for (; n.pos < o; ) { const e = n.uint32(); switch (e >>> 3) { case 1: s.connectedPhysical = n.bool(); break; case 2: s.connectedInternet = n.bool(); break; case 3: s.connectedTesla = n.bool(); break; case 4: s.rssi = t.Rssi.decode(n, n.uint32()); break; case 5: s.snr = a.Int32Value.decode(n, n.uint32()).value; break; default: n.skipType(7 & e); } } return s; }, }), (t.NetworkInterface = { encode: (e, i = r.Writer.create()) => ( i.uint32(10).bytes(e.macAddress), i.uint32(16).bool(e.enabled), i.uint32(24).bool(e.activeRoute), void 0 !== e.ipv4Config && void 0 !== e.ipv4Config && t.NetworkInterfaceIPv4Config.encode(e.ipv4Config, i.uint32(34).fork()).ldelim(), void 0 !== e.connectivityStatus && void 0 !== e.connectivityStatus && t.NetworkConnectivityStatus.encode(e.connectivityStatus, i.uint32(42).fork()).ldelim(), i.uint32(48).int32(e.deviceState), i.uint32(56).int32(e.deviceStateReason), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, w); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.macAddress = n.bytes(); break; case 2: o.enabled = n.bool(); break; case 3: o.activeRoute = n.bool(); break; case 4: o.ipv4Config = t.NetworkInterfaceIPv4Config.decode(n, n.uint32()); break; case 5: o.connectivityStatus = t.NetworkConnectivityStatus.decode(n, n.uint32()); break; case 6: o.deviceState = n.int32(); break; case 7: o.deviceStateReason = n.int32(); break; default: n.skipType(7 & e); } } return o; }, }), (t.WifiPassword = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, v); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CellularEID = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, f); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.EncryptedMessage = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.cipher), t.uint32(18).bytes(e.ciphertext), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, h); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.cipher = i.int32(); break; case 2: a.ciphertext = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.WifiConfig = { encode: (e, i = r.Writer.create()) => (void 0 !== e.password && void 0 !== e.password && t.WifiPassword.encode(e.password, i.uint32(18).fork()).ldelim(), i.uint32(10).string(e.ssid), i.uint32(24).int32(e.securityType), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, E); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 2: o.password = t.WifiPassword.decode(n, n.uint32()); break; case 1: o.ssid = n.string(); break; case 3: o.securityType = n.int32(); break; default: n.skipType(7 & e); } } return o; }, }), (t.WifiNetwork = { encode: (e, i = r.Writer.create()) => ( i.uint32(16).sint32(e.rssiValue), void 0 !== e.rssi && void 0 !== e.rssi && t.Rssi.encode(e.rssi, i.uint32(26).fork()).ldelim(), i.uint32(10).string(e.ssid), i.uint32(32).int32(e.securityType), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, b); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 2: o.rssiValue = n.sint32(); break; case 3: o.rssi = t.Rssi.decode(n, n.uint32()); break; case 1: o.ssid = n.string(); break; case 4: o.securityType = n.int32(); break; default: n.skipType(7 & e); } } return o; }, }), (t.ServerStagedPackage = { encode: (e, i = r.Writer.create()) => ( i.uint32(10).string(e.downloadUrl), i.uint32(16).uint64(e.packageId), i.uint32(26).bytes(e.packageSignature), void 0 !== e.serverStagedVersion && void 0 !== e.serverStagedVersion && t.FirmwareVersion.encode(e.serverStagedVersion, i.uint32(34).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, y); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.downloadUrl = n.string(); break; case 2: o.packageId = ge(n.uint64()); break; case 3: o.packageSignature = n.bytes(); break; case 4: o.serverStagedVersion = t.FirmwareVersion.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.SystemUpdate = { encode(e, i = r.Writer.create()) { i.uint32(8).int32(e.handshakeResult), i.uint32(16).int32(e.updateStatus), void 0 !== e.serverStagedVersion && void 0 !== e.serverStagedVersion && t.FirmwareVersion.encode(e.serverStagedVersion, i.uint32(26).fork()).ldelim(), i.uint32(32).uint64(e.totalBytes), i.uint32(40).uint64(e.bytesOffset), i.uint32(48).uint64(e.estimatedBytesPerSecond), i.uint32(56).uint64(e.lastHandshakeTimestamp), i.uint32(64).int32(e.lastUpdateResult); for (const n of e.serverStagedPackages) t.ServerStagedPackage.encode(n, i.uint32(74).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, S); for (o.serverStagedPackages = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.handshakeResult = n.int32(); break; case 2: o.updateStatus = n.int32(); break; case 3: o.serverStagedVersion = t.FirmwareVersion.decode(n, n.uint32()); break; case 4: o.totalBytes = ge(n.uint64()); break; case 5: o.bytesOffset = ge(n.uint64()); break; case 6: o.estimatedBytesPerSecond = ge(n.uint64()); break; case 7: o.lastHandshakeTimestamp = ge(n.uint64()); break; case 8: o.lastUpdateResult = n.int32(); break; case 9: o.serverStagedPackages.push(t.ServerStagedPackage.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.LocallyAvailablePackage = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.packageId), t.uint32(18).bytes(e.packageSignature), t.uint32(24).uint64(e.fileSizeBytes), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, R); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.packageId = ge(i.uint64()); break; case 2: a.packageSignature = i.bytes(); break; case 3: a.fileSizeBytes = ge(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.AcceptedPackage = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.packageId), t.uint32(18).bytes(e.packageSignature), t.uint32(26).string(e.uploadEndpoint), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, T); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.packageId = ge(i.uint64()); break; case 2: a.packageSignature = i.bytes(); break; case 3: a.uploadEndpoint = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.RegistrationPayload = { encode: (e, t = r.Writer.create()) => (t.uint32(10).bytes(e.customerRegistrationInfo), t.uint32(18).bytes(e.nonce), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, A); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.customerRegistrationInfo = i.bytes(); break; case 2: a.nonce = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.DeviceSignedPayload = { encode: (e, t = r.Writer.create()) => (t.uint32(10).bytes(e.payload), t.uint32(16).int32(e.deviceSignatureType), t.uint32(26).bytes(e.signature), t.uint32(32).int32(e.deviceCertFormat), t.uint32(42).bytes(e.deviceCert), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, C); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.payload = i.bytes(); break; case 2: a.deviceSignatureType = i.int32(); break; case 3: a.signature = i.bytes(); break; case 4: a.deviceCertFormat = i.int32(); break; case 5: a.deviceCert = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.ComplianceInformation = { encode(e, i = r.Writer.create()) { for (const n of e.radioLegalInformation) t.RadioLegalInformation.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, I); for (o.radioLegalInformation = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.radioLegalInformation.push(t.RadioLegalInformation.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.RadioLegalInformation = { encode: (e, t = r.Writer.create()) => ( void 0 !== e.manufacturer && void 0 !== e.manufacturer && a.StringValue.encode({ value: e.manufacturer }, t.uint32(10).fork()).ldelim(), void 0 !== e.model && void 0 !== e.model && a.StringValue.encode({ value: e.model }, t.uint32(18).fork()).ldelim(), void 0 !== e.fccId && void 0 !== e.fccId && a.StringValue.encode({ value: e.fccId }, t.uint32(26).fork()).ldelim(), void 0 !== e.icId && void 0 !== e.icId && a.StringValue.encode({ value: e.icId }, t.uint32(34).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, O); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.manufacturer = a.StringValue.decode(i, i.uint32()).value; break; case 2: o.model = a.StringValue.decode(i, i.uint32()).value; break; case 3: o.fccId = a.StringValue.decode(i, i.uint32()).value; break; case 4: o.icId = a.StringValue.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.ErrorResponse = { encode: (e, t = r.Writer.create()) => (void 0 !== e.status && void 0 !== e.status && n.Status.encode(e.status, t.uint32(10).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, N); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.status = n.Status.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return o; }, }), (t.CommonAPIGetSystemInfoRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, k); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIGetSystemInfoResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.deviceId && void 0 !== e.deviceId && t.EcuId.encode(e.deviceId, i.uint32(10).fork()).ldelim(), i.uint32(18).string(e.din), void 0 !== e.firmwareVersion && void 0 !== e.firmwareVersion && t.FirmwareVersion.encode(e.firmwareVersion, i.uint32(26).fork()).ldelim(), void 0 !== e.systemUpdate && void 0 !== e.systemUpdate && t.SystemUpdate.encode(e.systemUpdate, i.uint32(42).fork()).ldelim(), i.uint32(48).int32(e.deviceType), void 0 !== e.complianceInformation && void 0 !== e.complianceInformation && t.ComplianceInformation.encode(e.complianceInformation, i.uint32(58).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, P); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.deviceId = t.EcuId.decode(n, n.uint32()); break; case 2: o.din = n.string(); break; case 3: o.firmwareVersion = t.FirmwareVersion.decode(n, n.uint32()); break; case 5: o.systemUpdate = t.SystemUpdate.decode(n, n.uint32()); break; case 6: o.deviceType = n.int32(); break; case 7: o.complianceInformation = t.ComplianceInformation.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPISetLocalSiteConfigRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, D); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPISetLocalSiteConfigResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, L); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPICheckForUpdateRequest = { encode: (e, t = r.Writer.create()) => (t.uint32(8).bool(e.downloadIfAvailable), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, M); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.downloadIfAvailable = i.bool(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPICheckForUpdateResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, z); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIClearUpdateRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, U); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIClearUpdateResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, V); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIPerformUpdateRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, G); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIPerformUpdateResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, j); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIFactoryResetRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, W); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIFactoryResetResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, F); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIGetNetworkingStatusRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, q); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIGetNetworkingStatusResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(10).fork()).ldelim(), void 0 !== e.wifi && void 0 !== e.wifi && t.NetworkInterface.encode(e.wifi, i.uint32(18).fork()).ldelim(), void 0 !== e.eth && void 0 !== e.eth && t.NetworkInterface.encode(e.eth, i.uint32(26).fork()).ldelim(), void 0 !== e.gsm && void 0 !== e.gsm && t.NetworkInterface.encode(e.gsm, i.uint32(34).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, x); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; case 2: o.wifi = t.NetworkInterface.decode(n, n.uint32()); break; case 3: o.eth = t.NetworkInterface.decode(n, n.uint32()); break; case 4: o.gsm = t.NetworkInterface.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIGetCellularInfoRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, B); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIGetCellularInfoResponse = { encode(e, i = r.Writer.create()) { void 0 !== e.eid && void 0 !== e.eid && t.CellularEID.encode(e.eid, i.uint32(10).fork()).ldelim(), i.uint32(18).fork(); for (const t of e.supportedProfiles) i.int32(t); return i.ldelim(), i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, H); for (o.supportedProfiles = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.eid = t.CellularEID.decode(n, n.uint32()); break; case 2: if (2 == (7 & e)) { const e = n.uint32() + n.pos; for (; n.pos < e; ) o.supportedProfiles.push(n.int32()); } else o.supportedProfiles.push(n.int32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIWifiScanRequest = { encode(e, t = r.Writer.create()) { t.uint32(8).uint32(e.maxScanDurationS), t.uint32(18).fork(); for (const i of e.desiredSecurityTypes) t.int32(i); return t.ldelim(), t.uint32(24).uint32(e.maximumTotalAps), t; }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, K); for (a.desiredSecurityTypes = []; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.maxScanDurationS = i.uint32(); break; case 2: if (2 == (7 & e)) { const e = i.uint32() + i.pos; for (; i.pos < e; ) a.desiredSecurityTypes.push(i.int32()); } else a.desiredSecurityTypes.push(i.int32()); break; case 3: a.maximumTotalAps = i.uint32(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPIWifiScanResponse = { encode(e, i = r.Writer.create()) { for (const n of e.wifiNetworks) t.WifiNetwork.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, Y); for (o.wifiNetworks = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifiNetworks.push(t.WifiNetwork.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureWifiRequest = { encode: (e, i = r.Writer.create()) => (i.uint32(8).bool(e.enabled), void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(18).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, Q); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.enabled = n.bool(); break; case 2: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureWifiResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(10).fork()).ldelim(), void 0 !== e.wifi && void 0 !== e.wifi && t.NetworkInterface.encode(e.wifi, i.uint32(18).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, Z); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; case 2: o.wifi = t.NetworkInterface.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureEthernetRequest = { encode: (e, i = r.Writer.create()) => (void 0 !== e.ipv4Config && void 0 !== e.ipv4Config && t.NetworkInterfaceIPv4Config.encode(e.ipv4Config, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, J); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.ipv4Config = t.NetworkInterfaceIPv4Config.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureEthernetResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.eth && void 0 !== e.eth && t.NetworkInterface.encode(e.eth, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, X); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.eth = t.NetworkInterface.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIForgetWifiNetworkRequest = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.ssid), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, $); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.ssid = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPIForgetWifiNetworkResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, ee); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPICheckInternetRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, te); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPICheckInternetResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.wifi && void 0 !== e.wifi && t.NetworkInterface.encode(e.wifi, i.uint32(10).fork()).ldelim(), void 0 !== e.eth && void 0 !== e.eth && t.NetworkInterface.encode(e.eth, i.uint32(18).fork()).ldelim(), void 0 !== e.gsm && void 0 !== e.gsm && t.NetworkInterface.encode(e.gsm, i.uint32(26).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, ie); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifi = t.NetworkInterface.decode(n, n.uint32()); break; case 2: o.eth = t.NetworkInterface.decode(n, n.uint32()); break; case 3: o.gsm = t.NetworkInterface.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureWifiWithEncryptedPasswordRequest = { encode: (e, i = r.Writer.create()) => ( i.uint32(8).bool(e.enabled), void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(18).fork()).ldelim(), void 0 !== e.encryptedPassword && void 0 !== e.encryptedPassword && t.EncryptedMessage.encode(e.encryptedPassword, i.uint32(26).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, ne); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.enabled = n.bool(); break; case 2: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; case 3: o.encryptedPassword = t.EncryptedMessage.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureWifiWithEncryptedPasswordResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(10).fork()).ldelim(), void 0 !== e.wifi && void 0 !== e.wifi && t.NetworkInterface.encode(e.wifi, i.uint32(18).fork()).ldelim(), i.uint32(24).int32(e.result), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, re); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; case 2: o.wifi = t.NetworkInterface.decode(n, n.uint32()); break; case 3: o.result = n.int32(); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIDeviceCertRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, ae); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIDeviceCertResponse = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.format), t.uint32(18).bytes(e.deviceCert), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, oe); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.format = i.int32(); break; case 2: a.deviceCert = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPICheckForUpdateUrgencyRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, se); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPICheckForUpdateUrgencyResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, _e); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPINegotiateUpdateWithLocallyAvailablePackagesRequest = { encode(e, i = r.Writer.create()) { for (const n of e.locallyAvailablePackages) t.LocallyAvailablePackage.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, le); for (o.locallyAvailablePackages = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.locallyAvailablePackages.push(t.LocallyAvailablePackage.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPINegotiateUpdateWithLocallyAvailablePackagesResponse = { encode(e, i = r.Writer.create()) { for (const n of e.acceptedPackages) t.AcceptedPackage.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, ce); for (o.acceptedPackages = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.acceptedPackages.push(t.AcceptedPackage.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIPrepareRegistrationPayloadRequest = { encode: (e, t = r.Writer.create()) => (t.uint32(10).bytes(e.customerRegistrationInfo), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, de); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.customerRegistrationInfo = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPIPrepareRegistrationPayloadResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.signedRegistrationPayload && void 0 !== e.signedRegistrationPayload && t.DeviceSignedPayload.encode(e.signedRegistrationPayload, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, ue); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.signedRegistrationPayload = t.DeviceSignedPayload.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.AlertLog = { encode: (e, t = r.Writer.create()) => (t.uint32(9).fixed64(e.data), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, me); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.data = ge(i.fixed64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.AlertMatrix = { encode: (e, t = r.Writer.create()) => (t.uint32(9).fixed64(e.data), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, pe); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.data = ge(i.fixed64()); break; default: i.skipType(7 & e); } } return a; }, }); }, , , , , , , , , , , , , , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return b; }); var n = i(27), r = i(1), a = i(0), o = i.n(a), s = i(3), _ = i(17), l = i(28), c = i(281), d = i.n(c), u = i(50), m = i(77), p = i(209), g = i(59), w = i(45), v = i(10), f = i(26); i(738); function h(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const E = Object(s.defineMessages)({ language: { id: "login_view_language_label", defaultMessage: "LANGUAGE" }, emailPlaceholder: { id: "login_view_email_placeholder", defaultMessage: "Lead installer email" }, customerEmailPlaceholder: { id: "login_view_customer_email_placeholder", defaultMessage: "Customer email" }, usernamePlaceholder: { id: "login_view_username_placeholder", defaultMessage: "Username" }, forgotPassword: { id: "login_view_forgot_password", defaultMessage: "FORGOT PASSWORD" }, changeForgotPassword: { id: "login_view_change_forgot_password", defaultMessage: "CHANGE OR FORGOT PASSWORD" }, forgotPasswordExtended: { id: "login_view_forgot_password_login_type", defaultMessage: "Please select login type" }, passwordPlaceholder: { id: "login_view_password_placeholder", defaultMessage: "Enter your password" }, startToggleAuth: { id: "login_view_start_login_auth", defaultMessage: "START LOGIN PROCESS" }, cancelToggleAuth: { id: "login_view_cancel_login_auth", defaultMessage: "Cancel Login" }, howToEnableLineDescription: { id: "login_view_start_login_auth_how_to_enable_line_description", defaultMessage: "To login, toggle the Powerwall enable switch off and back on. With multi-Powerwall systems, you only need to toggle one switch", }, loginTypeLabel: { id: "login_view_login_type_label", defaultMessage: "LOGIN TYPE" }, [v.c.CUSTOMER]: { id: "login_type_customer", defaultMessage: "Customer" }, [v.c.INSTALLER]: { id: "login_type_installer", defaultMessage: "Installer" }, [v.c.ENGINEER]: { id: "login_type_engineer", defaultMessage: "Engineer" }, }); class b extends r.Component { constructor(e) { super(e), h(this, "translations", {}), h(this, "_handleLoginSelection", this._handleLoginSelection.bind(this)), h(this, "_handleLanguageSelection", this._handleLanguageSelection.bind(this)), h(this, "_handleUsernameChange", this._handleUsernameChange.bind(this)), h(this, "_handlePasswordSubmit", this._handlePasswordSubmit.bind(this)), h(this, "_handleSubmit", this._handleSubmit.bind(this)), h(this, "_handleForgotPassword", this._handleForgotPassword.bind(this)), h(this, "_handlerStartToggleAuth", this._handlerStartToggleAuth.bind(this)), (this.state = { selectedLoginState: e.selectedLoginType === v.c.KIOSK ? v.c.INSTALLER : e.selectedLoginType, selectLoginTypeFormError: !1, waitForToggle: !1 }); let t = [v.c.CUSTOMER, v.c.INSTALLER]; e.loginType === v.c.ENGINEER && (t = [v.c.ENGINEER]), (this.translations = Object(n.reduce)( t, function (t, i) { return (t[i] = Object(m.localize)(E[i], e.intl)), t; }, {} )); } render() { const { username: e, showSubmit: t, isFetching: n, enableForward: a, disableForward: o, intl: c, useShowPasswordIcon: w, isResi: h, cancelPendingToggleAuth: b, toggleAuthSupported: y, authenticated: S, waitForToggle: R, } = this.props, { formatMessage: T, locale: A } = c, { selectedLoginState: C, selectLoginTypeFormError: I } = this.state; if (h && R && y) return r.createElement( "div", { "data-testid": "530e53aa-49d6-4e5b-b92f-698ca2006d05" }, r.createElement("p", { "data-testid": "23d35517-dacb-4414-b8ce-c2faf0a6c518" }, T(E.howToEnableLineDescription)), r.createElement( "button", { "data-testid": "b82e24e0-ab80-4bab-af77-a4d8d3df2f9d", type: "button", className: "btn btn-link no-horizontal-padding line-breaks", onClick: b }, this.props.intl.formatMessage(E.cancelToggleAuth) ), r.createElement("img", { "data-testid": "3db80490-a693-4865-8f27-7ebfc89514a4", src: i(586), width: "100%" }) ); const O = h ? r.createElement( "div", { "data-testid": "46467e15-2cb7-4c2a-a94a-c89bbdfad2cc", className: "form-group" }, r.createElement("label", { "data-testid": "7f04037c-7f05-4226-8709-d258a41d41b6", className: "col-sm-2" }, r.createElement(s.FormattedMessage, { id: "login_view_email", defaultMessage: "EMAIL" })), r.createElement( "div", { "data-testid": "6e00c962-875e-4d1f-86e2-e6bd6a20d279", className: "col-sm-10" }, r.createElement("input", { "data-testid": "d0ac9191-a8ca-4b98-80b7-e0d517d97568", ref: "email", type: "email", name: "email", required: !0, placeholder: T(C === v.c.CUSTOMER ? E.customerEmailPlaceholder : E.emailPlaceholder), pattern: Object(g.c)(v.a), title: T(f.inputTitles.email), onInvalid: (e) => { e.target.setCustomValidity(T(f.inputTitles.email)); }, onInput: (e) => { e.target.setCustomValidity(""); }, className: "form-control", autoComplete: "email", autoCapitalize: "none", autoCorrect: "off", autoFocus: !0, onChange: this._handleUsernameChange, value: e, }) ) ) : r.createElement( "div", { "data-testid": "2b802fb0-a460-4395-a584-5cd411229b09", className: "form-group" }, r.createElement("label", { "data-testid": "29625d4a-9e09-4807-b1dd-4659ec1b4ac0", className: "col-sm-2" }, r.createElement(s.FormattedMessage, { id: "login_view_username", defaultMessage: "USERNAME" })), r.createElement( "div", { "data-testid": "e8b61640-d6c6-4e56-ba51-1c8874fa502a", className: "col-sm-10" }, r.createElement("input", { "data-testid": "f84bdfd4-0cc0-48bb-9a37-bd82af57db7b", ref: "username", type: "text", name: "username", required: !0, placeholder: T(E.usernamePlaceholder), className: "form-control", autoCapitalize: "none", autoCorrect: "off", autoFocus: !0, onChange: this._handleUsernameChange, value: e, }) ) ); let N = C !== v.c.ENGINEER; return ( h && (N = C === v.c.CUSTOMER || (!y && C === v.c.INSTALLER)), r.createElement( "div", { "data-testid": "71c75b82-f4d5-490b-ba18-1400a24b9ea9", className: "login" }, r.createElement( "form", { className: "form-horizontal", role: "form", onSubmit: this._handleSubmit }, r.createElement( "div", { "data-testid": "3d04af34-543d-4c62-8083-1e49cbe2724b", className: "form-group" }, r.createElement(p.c, { id: "locale", intl: c, label: T(E.language), labelClassName: "col-sm-2", dropdownClassName: "col-sm-10", list: Object.values(f.LocaleTextMap), initialSelection: f.LocaleTextMap[Object(g.d)(A)] || f.LocaleTextMap[Object(g.d)(f.Locales.ENGLISH)], onSelection: this._handleLanguageSelection, disabled: S, }) ), h && r.createElement( "div", { "data-testid": "e1ef0676-8db0-489f-ba7c-43992d61da67", className: "form-group " + (I ? "has-error" : "") }, r.createElement(p.c, { id: "login-type", intl: c, label: T(E.loginTypeLabel), labelClassName: "col-sm-2 control-label", dropdownClassName: "col-sm-10", list: Object.values(this.translations), initialSelection: Object(m.localizeWithFallback)(E[C], c, T(l.prompts.select)), onSelection: this._handleLoginSelection, disabled: S, }), I ? r.createElement( "span", { "data-testid": "02406596-3ede-4de9-880e-f804701a3564", className: "help-block col-sm-10" }, r.createElement("img", { "data-testid": "414132bd-4973-4a19-a721-71dbb1de0428", className: "warning", src: i(273), alt: "Warning" }), this.props.intl.formatMessage(E.forgotPasswordExtended) ) : null ), C !== v.c.ENGINEER && !S && O, N && !S && r.createElement( r.Fragment, null, r.createElement(d.a, { ref: "password", intl: c, isValidating: !!n, showForm: !1, showSubmittable: t, enableForward: a, disableForward: o, handleSubmit: this._handlePasswordSubmit, useShowPasswordIcon: w, inputProps: { name: "installer-password", placeholder: T(E.passwordPlaceholder) }, }), h && r.createElement( "div", { "data-testid": "540f7a2a-a7e6-4ecd-b2ca-50c75cfe6a05", className: "form-group forgot-form" }, r.createElement( "div", { "data-testid": "be69aaa9-5db7-42ec-836f-6999d810dfa7", className: "col-sm-12" }, r.createElement( "button", { "data-testid": "aeccef3b-8fba-4d36-86c9-d8fddc16016b", id: "forgot-password", type: "button", className: Object(u.classNames)("btn btn-link no-horizontal-padding line-breaks", { right: !w }), onClick: this._handleForgotPassword, }, this.props.intl.formatMessage(C === v.c.CUSTOMER ? E.changeForgotPassword : E.forgotPassword) ) ) ) ), !S && !N && r.createElement( "div", { "data-testid": "87bdcf11-bfa0-4324-8be8-685f90216e97", className: "form-group" }, r.createElement( "div", { "data-testid": "fa152db7-af4e-4fc1-b19e-886a5a5e8fb9", className: "col-sm-12 right" }, r.createElement( "button", { "data-testid": "a3cb2027-44cf-46ee-ad8f-e496e6ffcde1", id: "begin-toggle-auth", type: "button", className: "btn btn-action right", onClick: this._handlerStartToggleAuth }, this.props.intl.formatMessage(E.startToggleAuth) ) ) ), r.createElement( "div", { className: "form-group" }, r.createElement( "div", { className: "col-sm-12" }, r.createElement( _.Link, { id: "compliance", to: "/compliance", className: "btn btn-link no-horizontal-padding" }, r.createElement(s.FormattedMessage, { id: "login_view_compliance", defaultMessage: "COMPLIANCE" }) ) ) ), r.createElement("button", { "data-testid": "34c0e092-e1d5-4f41-8cd1-72d9a31b0fee", type: "submit", ref: "save" }, "SUBMIT") ) ) ); } _handlerStartToggleAuth() { this.props.changeLogin && this.props.changeLogin(v.c.INSTALLER), this.props.startToggleAuth(); } _handleForgotPassword(e) { let t = "/password"; const i = this.state.selectedLoginState; (i !== v.c.INSTALLER && i !== v.c.ENGINEER) || (t += "?mode=" + v.c.INSTALLER), _.browserHistory.push(t); } _handleLoginSelection(e) { let t = Object(n.findKey)(this.translations, (t) => t === e); this.setState({ selectedLoginState: t, selectLoginTypeFormError: !1 }), this.props.changeLogin && this.props.changeLogin(t); } _handleLanguageSelection(e) { Object(w.c)("Locale", f.LocaleMap[e]), window.location.reload(); } _handleUsernameChange(e) { let t = e.target.value.trim(); this.props.changeUsername && this.props.changeUsername(t); } _handlePasswordSubmit() { this.refs.save.click(); } _handleSubmit(e) { e.preventDefault(), e.stopPropagation(), this.state.selectedLoginState ? this.props.username && this.refs.password && this.refs.password.state.passwordInput && this.state.selectedLoginState && this.props.handleSubmit && this.props.handleSubmit(this.props.username, this.refs.password.state.passwordInput, this.state.selectedLoginState) : this.setState({ selectLoginTypeFormError: !0 }); } } h(b, "propTypes", { intl: s.intlShape.isRequired, enableForward: o.a.func, disableForward: o.a.func, changeUsername: o.a.func, changeLogin: o.a.func, handleSubmit: o.a.func, startToggleAuth: o.a.func.isRequired, cancelPendingToggleAuth: o.a.func.isRequired, username: o.a.string.isRequired, showSubmit: o.a.bool.isRequired, loginType: o.a.oneOf(Object.values(v.c)).isRequired, selectedLoginType: o.a.oneOf(Object.values(v.c)).isRequired, isFetching: o.a.bool, useShowPasswordIcon: o.a.bool.isRequired, toggleAuthSupported: o.a.bool.isRequired, isResi: o.a.bool, waitForToggle: o.a.bool, authenticated: o.a.bool, }), h(b, "defaultProps", { showSubmit: !1 }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.subnetMaskRegex = t.ipAddressRegex = t.NetworkInterfaceName = t.NetworkInterfaceType = t.SecurityType = void 0), (function (e) { (e.NONE = "NONE"), (e.WEP = "WEP"), (e.WPA_WPA2_PERSONAL = "WPAorWPA2_Personal"), (e.WPA2_PERSONAL = "WPA2_Personal"), (e.DYNAMIC_WEP = "Dynamic_WEP"), (e.WPA_WPA2_ENTERPRISE = "WPAorWPA2_Enterprise"), (e.WPA2_ENTERPRISE = "WPA2_Enterprise"); })(t.SecurityType || (t.SecurityType = {})), (function (e) { (e.ETHERNET = "EthType"), (e.WIFI = "WifiType"), (e.GSM = "GsmType"); })(t.NetworkInterfaceType || (t.NetworkInterfaceType = {})), (function (e) { (e.ETHERNET = "ethernet"), (e.WIFI = "wi-fi"), (e.GSM = "gsm"); })(t.NetworkInterfaceName || (t.NetworkInterfaceName = {})), (t.ipAddressRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/), (t.subnetMaskRegex = /^(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/); }, function (e, t, i) { "use strict"; function n(e) { return e.registered; } i.d(t, "a", function () { return n; }); }, , , , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return m; }), i.d(t, "loginTypeSelector", function () { return p; }); var n = i(18), r = i.n(n), a = i(43), o = i(2), s = i(10); function _(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function l(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? _(Object(i), !0).forEach(function (t) { c(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : _(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function c(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const d = { isFetching: !1, isGenerating: !1, isSaving: !1, didInvalidate: !1 }, u = l(l({}, d), {}, { loginType: s.c.KIOSK, selectedLoginType: s.c.KIOSK, lastLoginAt: null, username: "", toggleAuthSupported: !1, waitForToggle: !1 }); function m(e = u, t) { switch (t.type) { case a.b: return l(l(l({}, e), r()(t, (e) => e.payload.authentication) || {}), d); case o.CHANGE_USERNAME: return l(l({}, e), {}, { username: t.username }); case o.CHANGE_LOGIN_TYPE: return l(l({}, e), {}, { selectedLoginType: t.selectedLoginType }); case o.REQUEST_LOGIN: return l(l({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case o.RECEIVE_LOGIN_SUCCESS: let i = e.loginType; if (t.roles && t.roles.length) switch (t.roles[0]) { case s.e.HOME_OWNER: i = s.c.CUSTOMER; break; case s.e.PROVIDER_ENGINEER: i = s.c.INSTALLER; break; case s.e.TESLA_ENGINEER: i = s.c.ENGINEER; } return l(l({}, e), {}, { email: t.email, loginType: i, isFetching: !1, didInvalidate: !1, waitForToggle: !1, lastLoginAt: t.receivedAt }); case o.REQUEST_LOGOUT: return l(l({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case o.RECEIVE_LOGIN_ERROR: case o.RECEIVE_LOGOUT_ERROR: return l(l({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case o.REQUEST_GENERATE_PASSWORD: return l(l({}, e), {}, { isGenerating: !0, didInvalidate: !1 }); case o.RECEIVE_GENERATE_PASSWORD_SUCCESS: return l(l({}, e), {}, { isGenerating: !1, didInvalidate: !1 }); case o.RECEIVE_GENERATE_PASSWORD_ERROR: return l(l({}, e), {}, { isGenerating: !1, didInvalidate: !0 }); case o.REQUEST_CHANGE_PASSWORD: case o.REQUEST_RESET_PASSWORD: return l(l({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case o.RECEIVE_CHANGE_PASSWORD_SUCCESS: case o.RECEIVE_RESET_PASSWORD_SUCCESS: return l(l({}, e), {}, { isSaving: !1, didInvalidate: !1 }); case o.RECEIVE_CHANGE_PASSWORD_ERROR: case o.RECEIVE_RESET_PASSWORD_ERROR: return l(l({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case o.REQUEST_START_TOGGLE_AUTH: case o.REQUEST_CANCEL_TOGGLE_AUTH: case o.REQUEST_TOGGLE_AUTH_LOGIN: return l(l({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case o.RECEIVE_START_TOGGLE_AUTH_ERROR: case o.RECEIVE_CANCEL_TOGGLE_AUTH_ERROR: return l(l({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case o.RECEIVE_TOGGLE_AUTH_LOGIN_ERROR: return l(l({}, e), {}, { isFetching: !1, didInvalidate: !0, waitForToggle: !1 }); case o.RECEIVE_START_TOGGLE_AUTH_SUCCESS: return l(l({}, e), {}, { isFetching: !1, didInvalidate: !1, waitForToggle: !0 }); case o.RECEIVE_CANCEL_TOGGLE_AUTH_SUCCESS: return l(l({}, e), {}, { isSaving: !1, didInvalidate: !1, waitForToggle: !1 }); case o.RECEIVE_SUPPORTS_TOGGLE_AUTH_SUCCESS: return l(l({}, e), {}, { toggleAuthSupported: t.toggleAuthSupported }); case o.RESET_ALL: case o.RESET_AUTHENTICATION: return l(l({}, u), {}, { username: e.username, toggleAuthSupported: e.toggleAuthSupported }); default: return e; } } const p = ({ authentication: e }) => e.loginType; }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }); const n = "STORE_SITEMASTER_STATUS"; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.UpgradeBannerView = void 0); const s = a(i(1)), _ = i(3), l = i(17), c = o(i(587)); i(739); t.UpgradeBannerView = () => s.createElement( "div", { className: "modal-banner-container" }, s.createElement( "div", { className: "banner-content-container" }, s.createElement("div", { className: "banner-img-container" }, s.createElement("img", { src: c.default })), s.createElement( "div", { className: "banner-text-container" }, s.createElement( "h4", null, s.createElement(_.FormattedMessage, { id: "upgrade_to_tesla_pros_banner_title", description: "text prompt in modal banner to download the new Tesla Pros app", defaultMessage: "Tesla Pros is a better commissioning experience", }) ) ) ), s.createElement( "button", { onClick: () => l.browserHistory.push("/upgrade"), className: "btn banner-content-button" }, s.createElement(_.FormattedMessage, { id: "upgrade_to_tesla_pros_download_prompt", description: "text for button to learn more about the Tesla Pros app", defaultMessage: "UPGRADE NOW" }) ) ); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "receiveCheckUpdate", function () { return m; }), i.d(t, "updateDownloadProgressAction", function () { return p; }), i.d(t, "cancelUpdate", function () { return E; }), i.d(t, "checkForUpdate", function () { return b; }), i.d(t, "startUpdate", function () { return y; }), i.d(t, "checkFirmwareUpdateUrgency", function () { return S; }); var n = i(7), r = i(74), a = (i(39), i(2)), o = (i(44), i(5)), s = i.n(o), _ = i(6), l = i(4); function c(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? c(Object(i), !0).forEach(function (t) { u(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : c(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function u(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } function m(e) { return d({ type: a.RECEIVE_CHECK_UPDATE }, e); } function p(e, t) { return d({ type: e ? a.DOWNLOAD_STALLED_ERROR : a.DOWNLOAD_PROGRESSING }, t); } const g = Object(_.b)(a.RECEIVE_CHECK_UPDATE_ERROR), w = Object(_.b)(a.RECEIVE_START_UPDATE_ERROR), v = Object(_.b)(a.REQUEST_CHECK_UPDATE_URGENCY), f = Object(_.a)(a.RECEIVE_CHECK_UPDATE_URGENCY), h = Object(_.a)(a.RECEIVE_CHECK_UPDATE_URGENCY_ERROR); function E() { return { type: a.CANCEL_UPDATE }; } function b() { return (e) => ( e(Object(n.clearError)(a.RECEIVE_CHECK_UPDATE_ERROR)), e(Object(r.a)(a.RECEIVE_CHECK_UPDATE_ERROR)), fetch(s.a.api.uri + "/system/update?force=true", { credentials: s.a.credentials }) .then(l.checkStatus) .catch((t) => { e(Object(n.showError)(a.RECEIVE_CHECK_UPDATE_ERROR, t.toString(), t.response)), e(g()); }) ); } function y() { return (e) => ( e(Object(n.clearError)(a.RECEIVE_START_UPDATE_ERROR)), e(Object(r.a)(a.RECEIVE_START_UPDATE_ERROR)), e({ type: a.REQUEST_INSTALL_UPDATE }), fetch(s.a.api.uri + "/system/update", { method: "POST", credentials: s.a.credentials }) .then(l.checkStatus) .catch((t) => { e(Object(n.showError)(a.RECEIVE_START_UPDATE_ERROR, t.toString(), t.response)), e(w()); }) ); } function S() { return (e) => ( e(v()), fetch(s.a.api.uri + "/system/update/urgency", { credentials: s.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e(f(t)); }) .catch((t) => { e(h(t)); }) ); } }, function (e, t, i) { "use strict"; i.d(t, "c", function () { return n; }), i.d(t, "b", function () { return r; }), i.d(t, "a", function () { return a; }), i.d(t, "d", function () { return o; }); const n = "REQUEST_DEBUG_MODBUS", r = "RECEIVE_DEBUG_MODBUS_SUCCESS", a = "RECEIVE_DEBUG_MODBUS_ERROR", o = "STORE_SITEMASTER_STATUS"; }, , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetOperationSettings", function () { return N; }), i.d(t, "getSiteName", function () { return M; }), i.d(t, "fetchSiteInfo", function () { return z; }), i.d(t, "saveSiteName", function () { return U; }), i.d(t, "saveExportMode", function () { return V; }), i.d(t, "fetchOperationSettings", function () { return G; }), i.d(t, "getExtraPrograms", function () { return j; }), i.d(t, "saveExtraProgram", function () { return W; }), i.d(t, "saveOperationSettings", function () { return F; }), i.d(t, "fetchTimezone", function () { return q; }), i.d(t, "saveTimezone", function () { return x; }); var n = i(7), r = i(2), a = i(93), o = i(5), s = i.n(o), _ = i(4), l = i(6), c = i(108); function d(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function u(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(i), !0).forEach(function (t) { m(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : d(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function m(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const p = Object(l.b)(r.REQUEST_SITE_NAME); const g = Object(l.b)(r.RECEIVE_SITE_NAME_ERROR), w = Object(l.b)(r.REQUEST_SITE_INFO); const v = Object(l.b)(r.RECEIVE_SITE_INFO_ERROR), f = Object(l.b)(r.REQUEST_SAVE_SITE_NAME); const h = Object(l.b)(r.RECEIVE_SAVE_SITE_NAME_ERROR), E = Object(l.b)(r.REQUEST_SAVE_EXPORT_MODE); const b = Object(l.b)(r.RECEIVE_SAVE_EXPORT_MODE_ERROR), y = Object(l.b)(r.REQUEST_OPERATION_SETTINGS); const S = Object(l.b)(r.RECEIVE_OPERATION_SETTINGS_ERROR), R = Object(l.b)(r.REQUEST_SAVE_OPERATION_SETTINGS); const T = Object(l.b)(r.RECEIVE_SAVE_OPERATION_SETTINGS_ERROR), A = Object(l.b)(r.REQUEST_TIMEZONE); const C = Object(l.b)(r.RECEIVE_TIMEZONE_ERROR), I = Object(l.b)(r.REQUEST_SAVE_TIMEZONE); const O = Object(l.b)(r.RECEIVE_SAVE_TIMEZONE_ERROR), N = Object(l.b)(r.RESET_OPERATION_SETTINGS), k = Object(l.b)(r.REQUEST_GET_EXTRA_PROGRAMS), P = Object(l.b)(r.RECEIVE_GET_EXTRA_PROGRAMS_ERROR); const D = Object(l.b)(r.REQUEST_POST_EXTRA_PROGRAM), L = Object(l.b)(r.RECEIVE_POST_EXTRA_PROGRAM_ERROR); function M() { return (e) => ( e(p()), fetch(s.a.api.uri + "/site_info/site_name", { credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_SITE_NAME_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch(() => { e(g()); }) ); } function z() { return (e) => ( e(w()), fetch(s.a.api.uri + "/site_info", { credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_SITE_INFO_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch(() => { e(v()); }) ); } function U({ siteName: e }) { return (t) => { t(f()); let i = { site_name: e }; return fetch(s.a.api.uri + "/site_info/site_name", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(i) }) .then(_.checkStatus) .then(() => { const i = { siteName: e }; var n; return t(((n = i), u({ type: r.RECEIVE_SAVE_SITE_NAME_SUCCESS, receivedAt: Date.now() }, n))), i; }) .catch((e) => { throw (t(Object(n.showError)(r.RECEIVE_SAVE_SITE_NAME_ERROR, e.toString(), e.response)), t(h()), e); }); }; } function V(e) { return (t) => { t(E()); let i = { net_meter_mode: e }; return fetch(s.a.api.uri + "/site_info/export_mode", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(i) }) .then(_.checkStatus) .then(() => { t({ type: r.RECEIVE_SAVE_EXPORT_MODE_SUCCESS, receivedAt: Date.now() }); }) .catch((e) => { throw (t(Object(n.showError)(r.RECEIVE_SAVE_EXPORT_MODE_ERROR, e.toString(), e.response)), t(b()), e); }); }; } function G() { return (e) => ( e(y()), fetch(s.a.api.uri + "/operation", { credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_OPERATION_SETTINGS_SUCCESS, receivedAt: Date.now() }, e); })(u(u({}, t), {}, { mode: t.real_mode })) ); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_OPERATION_SETTINGS_ERROR, t.toString(), t.response)), e(S()); }) ); } function j() { return (e) => ( e(k()), fetch(s.a.api.uri + "/site_info/extra_programs", { method: "GET", credentials: s.a.credentials, headers: { "Content-Type": "application/json" } }) .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then( (t) => ( e( (function (e) { return { type: r.RECEIVE_GET_EXTRA_PROGRAMS_SUCCESS, receivedAt: Date.now(), extraPrograms: [...e] }; })(t) ), t ) ) .catch((t) => { throw (e(P()), t); }) ); } function W(e) { return (t) => ( t(D()), fetch(s.a.api.uri + "/site_info/extra_programs", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(e) }) .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then((e) => (t({ type: r.RECEIVE_POST_EXTRA_PROGRAM_SUCCESS, receivedAt: Date.now() }), e)) .catch((e) => { throw (t(Object(n.showError)(r.RECEIVE_POST_EXTRA_PROGRAM_ERROR, e.toString(), e.response)), t(L()), e); }) ); } function F({ mode: e, backupReserve: t, generationLimit: i, solarLimit: o, batteryLimit: l }) { return ( "string" == typeof i && (i = parseFloat(i)), "string" == typeof o && (o = parseFloat(o)), "string" == typeof l && (l = parseFloat(l)), (c) => { c(R()), c(Object(n.clearError)(r.RECEIVE_SAVE_OPERATION_SETTINGS_ERROR)); let d = { max_pv_export_power_kW: o }; return ( e && (d.real_mode = e), null != t && a.g.includes(d.real_mode) && (d.backup_reserve_percent = t), fetch(s.a.api.uri + "/operation", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(d) }) .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then((n) => { const a = { mode: e, backupReserve: t, generationLimit: i, solarLimit: o, batteryLimit: l }; return ( c( (function (e) { return u({ type: r.RECEIVE_SAVE_OPERATION_SETTINGS_SUCCESS, receivedAt: Date.now() }, e); })(a) ), a ); }) .catch((e) => { throw (c(Object(n.showError)(r.RECEIVE_SAVE_OPERATION_SETTINGS_ERROR, e.toString(), e.response)), c(T()), e); }) ); } ); } function q() { return (e) => { e(A()); try { let i = Object(c.d)(); i ? e(((t = { time_zone: i }), u({ type: r.RECEIVE_TIMEZONE_SUCCESS, receivedAt: Date.now() }, t))) : (e(Object(n.showError)(r.RECEIVE_TIMEZONE_ERROR, "Could not guess timezone")), e(C())); } catch (t) { e(Object(n.showError)(r.RECEIVE_TIMEZONE_ERROR, t.toString(), t.response)), e(C()); } var t; }; } function x(e) { return (t) => { t(I()); let i = { timezone: e }; return fetch(s.a.api.uri + "/site_info/timezone", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(i) }) .then(_.checkStatus) .then(() => { var i; t(((i = { timezone: e }), u({ type: r.RECEIVE_SAVE_TIMEZONE_SUCCESS, receivedAt: Date.now() }, i))); }) .catch((e) => { t(Object(n.showError)(r.RECEIVE_SAVE_TIMEZONE_ERROR, e.toString(), e.response)), t(O()); }); }; } }, function (e, t, i) { "use strict"; i.d(t, "b", function () { return f; }), i.d(t, "a", function () { return E; }), i.d(t, "c", function () { return y; }); var n = i(66), r = i.n(n), a = i(1), o = i(20), s = i.n(o), _ = i(0), l = i.n(_), c = i(3), d = i(18), u = i.n(d), m = i(211), p = i(28), g = i(46); i(656), i(657); function w() { return (w = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function v(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const f = "__select_all", h = () => {}, E = "Not Listed", b = Object(c.defineMessages)({ placeholder: { id: "dropdown_default_placeholder", defaultMessage: "Type..." }, select: { id: "dropdown_list_view_select_field", defaultMessage: "Please select a field." }, showComplete: { id: "dropdown_list_view_show_complete", defaultMessage: "SWITCH TO COMPLETE LIST" }, showSearchable: { id: "dropdown_list_view_show_searchable", defaultMessage: "SWITCH TO SEARCHABLE LIST" }, [f]: { id: "dropdown_list_view_select_all", defaultMessage: "Select All" }, notListedLabel: { id: "dropdown_list_view_not_listed_label", defaultMessage: 'Not Listed: "{searchText}"' }, }); class y extends a.Component { constructor(e) { super(e), (this.state = { collapsed: !1, selection: this.getDefaultSelection(e.initialSelection), multiSelections: e.initialSelections ? e.initialSelections : [], placeholder: this.getDefaultPlaceholder(e.initialPlaceholder), searchable: e.isSearchable, input: "", }), (this.ui = {}), (this._handleClickDefault = this._handleClickDefault.bind(this)), (this._handleClickSearchable = this._handleClickSearchable.bind(this)), (this._handleMultiSelection = this._handleMultiSelection.bind(this)), (this._handleChange = this._handleChange.bind(this)), (this._handleBlur = this._handleBlur.bind(this)), (this._handleFocus = this._handleFocus.bind(this)), (this._getIndicator = this._getIndicator.bind(this)), (this._handleFocusSearchable = this._handleFocusSearchable.bind(this)), (this._handleBlurSearchable = this._handleBlurSearchable.bind(this)), (this._getNotListedLabel = this._getNotListedLabel.bind(this)), (this._handleNotListed = this._handleNotListed.bind(this)), (this._handleInputChangeSearchable = this._handleInputChangeSearchable.bind(this)), (this._toggleView = this._toggleView.bind(this)); } componentDidMount() { this._bindElements(); } componentWillReceiveProps(e) { let t = {}, i = !0; this.props.initialSelection !== e.initialSelection && ((t.selection = this.getDefaultSelection(e.initialSelection)), (i = !1)), this.props.initialPlaceholder !== e.initialPlaceholder && ((t.placeholder = this.getDefaultPlaceholder(e.initialPlaceholder)), (i = !1)), i || this.setState(t); } componentWillUnmount() { this._unbindElements(); } getDefaultSelection(e) { return e || this.props.intl.formatMessage(p.prompts.select); } getDefaultPlaceholder(e) { return null == e ? this.props.intl.formatMessage(b.placeholder) : e; } resetSelection(e, t) { e || (e = this.getDefaultSelection()), this.setState({ selection: e }, () => { this.refs.select && (this.refs.select.selectedIndex = null === t ? -1 : t + 1); }); } render() { const { id: e, label: t, labelClassName: i, dropdownClassName: n } = this.props, r = e.toString().replace(" ", "").toLowerCase() + "-dropdown"; return a.createElement( "div", { "data-testid": "975ae069-3ec6-4a34-b0d2-00ff744904dc", className: `dropdown-list ${r}-list` }, this._getLabel(r, t, i), a.createElement("div", { "data-testid": "07f3ea02-6aa1-4ba7-8c12-fccd285748b4", className: n }, this._getDropdown(r)) ); } showTooltip() { u()(this.ui, (e) => e.tooltip.tooltip) && this.ui.tooltip.length && this.ui.tooltip.tooltip("show"); } hideTooltip() { u()(this.ui, (e) => e.tooltip.tooltip) && this.ui.tooltip.length && this.ui.tooltip.tooltip("hide"); } _bindElements() { this.refs.select && (this.ui.select = r()(this.refs.select)), this.refs.button && (this.ui.button = r()(this.refs.button)), this.refs.dropdown && (this.ui.tooltip = r()(this.refs.dropdown)), u()(this.ui, (e) => e.tooltip.tooltip) && this.ui.tooltip.length && this.ui.tooltip.tooltip({ trigger: "manual" }); } _unbindElements() { this.ui = {}; } _getLabel(e, t, i) { return e && t ? a.createElement("label", { "data-testid": "9ef23149-3371-449b-8279-934954a388f2", htmlFor: e, className: i }, t.toUpperCase()) : null; } _getDropdown(e) { const { intl: t, list: i, lineBreaks: n, isMultiSelect: r, isToggleable: o, disabled: s } = this.props, { selection: _, multiSelections: l, searchable: c, placeholder: d, input: u } = this.state; let p; if ( (o && !s && (p = a.createElement( "a", { "data-testid": "d87ac571-5d59-4152-81bb-b3838235e451", className: "btn btn-link no-horizontal-padding", onClick: this._toggleView }, t.formatMessage(c ? b.showComplete : b.showSearchable) )), c) ) { const e = this._getOptionsSearchable(r, t), i = { ref: "search", className: s ? "disabled" : "", isDisabled: s, searchPromptText: this.getDefaultPlaceholder(), placeholder: d, options: e, arrowRenderer: this._getIndicator, onBlur: this._handleBlurSearchable, onFocus: this._handleFocusSearchable, clearable: !1, }; return r ? a.createElement( m.default, w({}, i, { name: "dropdown-multi-search", multi: r, value: l, onChange: (...t) => { this._handleMultiSelection(...t, e); }, }) ) : a.createElement( a.Fragment, null, a.createElement( m.default.Creatable, w({}, i, { name: "dropdown-search", value: _, onChange: this._handleClickSearchable, isValidNewOption: () => !!u.length, promptTextCreator: this._getNotListedLabel, onNewOptionClick: this._handleNotListed, onInputChange: this._handleInputChangeSearchable, }) ), p ); } const v = t.formatMessage(b.select), f = [], h = []; return ( i.forEach((e, t) => { n && n.has(t) && f.push( a.createElement( "li", { "data-testid": "2b7e465d-c7cf-449d-a6e1-84b542bd9c14", key: "line-break-" + t.toString() }, a.createElement("option", { "data-testid": "6cae4087-0f87-4d95-941f-8fe01351e579", disabled: !0 }) ) ), f.push( a.createElement( "li", { "data-testid": "14a18e4c-1e0a-458c-ab84-88e6049db06d", key: t.toString() }, a.createElement("a", { "data-testid": "ee86e230-6728-4b82-a07d-57b71b82da4a", href: "#", value: e, onClick: (i) => this._handleClickDefault(i, t, e) }, e) ) ), h.push(a.createElement("option", { "data-testid": "3786b219-f597-41bf-867e-89b2778df0a7", key: t.toString(), value: e }, e)); }), a.createElement( a.Fragment, null, a.createElement( "div", { "data-testid": "30186a91-ddc0-41af-899d-a0316e23991a", className: "dropdown", ref: "dropdown", "data-placement": "bottom", title: v, "data-original-title": v }, a.createElement( "select", { ref: "select", value: _, onChange: this._handleChange, onFocus: this._handleFocus, disabled: s }, a.createElement("option", { "data-testid": "112c7abc-a2e1-4bb9-80c3-12ed7566386e", value: this.getDefaultSelection(), className: "hidden", disabled: !0 }, this.getDefaultSelection()), h ), a.createElement( "button", { "data-testid": "c0b9d7b0-6d00-47df-8e18-c7a3970d490d", className: `dropdown-toggle ${Object(g.isIOS)() ? "ios" : ""} ${s ? "disabled" : ""}`, type: "button", ref: "button", "data-toggle": "dropdown", "aria-haspopup": "true", "aria-expanded": "true", onBlur: this._handleBlur, }, _, this._getIndicator() ), a.createElement("ul", { "data-testid": "bd5133cc-45a7-497e-a370-a0554c3364c7", className: "dropdown-menu", "aria-labelledby": e }, f) ), p ) ); } _getIndicator() { return this.props.disabled ? null : a.createElement("img", { "data-testid": "fd5c9144-72c8-43c6-92ce-81945685dc61", src: i(658), className: this.state.collapsed ? "caret-up" : "caret-down", alt: "indicator" }); } _getOptionsSearchable(e = !1, t) { const i = []; return ( this.props.list.forEach((n, r) => { n !== E && i.push({ value: n, label: b[n] ? t.formatMessage(b[n]) : n, index: r, clearableValue: e }); }), i ); } _getNotListedLabel() { return this.props.intl.formatMessage(b.notListedLabel, { searchText: this.state.input }); } _handleNotListed() { this.setState({ placeholder: E, selection: E }, () => { this.props.onNotListed && this.props.onNotListed(this.state.input), this.refs.search.select.blurInput(); }); } _handleClickDefault(e, t, i) { e.preventDefault(), this.setState({ selection: i }, () => { this.props.onSelection && this.props.onSelection(i, t); }); } _handleClickSearchable(e) { Object.keys(e).length && this.setState({ selection: e.label, collapsed: !1 }, () => { this.props.onSelection && this.props.onSelection(e.label, e.index); }); } _handleMultiSelection(e, t) { const i = e.find((e) => e.value === f) ? t.slice(1, t.length) : e; this.setState({ multiSelections: i, collapsed: !1 }, () => { let e = this.props.onMultiSelection; e && e( i.map((e) => e.label), t.map((e) => e.label) ); }); } _handleInputChangeSearchable(e) { this.setState({ input: e }); } _handleBlurSearchable(e) { this.setState({ collapsed: !1, placeholder: this.getDefaultPlaceholder(this.props.initialPlaceholder) }); } _handleFocusSearchable(e) { this.setState({ collapsed: !0, placeholder: "" }, () => { if (!Object(g.isOnlyViewport)("xs")) return; const e = s.a.findDOMNode(this); e && e.scrollIntoView(); }); } _toggleView(e) { const t = !this.state.searchable; this.setState({ searchable: t }, () => { t ? this._unbindElements() : this._bindElements(), this.props.onToggle && this.props.onToggle(t); }); } _handleChange(e) { const t = e.target.value, i = e.target.selectedIndex - 1; t && this.setState({ selection: t }, () => { this.props.onSelection && this.props.onSelection(t, i); }); } _handleBlur(e) { this.ui.select.show(h), this.setState({ collapsed: !1 }); } _handleFocus(e) { Object(g.isIOS)() || (this.ui.select.hide(), this.ui.button.focus(), this.ui.button.dropdown("toggle"), this.hideTooltip(), this.setState({ collapsed: !0 })); } } v(y, "propTypes", { intl: c.intlShape.isRequired, list: l.a.arrayOf(l.a.oneOfType([l.a.string])).isRequired, lineBreaks: l.a.instanceOf(Set), id: l.a.oneOfType([l.a.string, l.a.number]).isRequired, label: l.a.string.isRequired, labelClassName: l.a.string.isRequired, dropdownClassName: l.a.string.isRequired, initialSelection: l.a.string, initialPlaceholder: l.a.string, isSearchable: l.a.bool.isRequired, isMultiSelect: l.a.bool.isRequired, isToggleable: l.a.bool.isRequired, disabled: l.a.bool.isRequired, onSelection: l.a.func, onMultiSelection: l.a.func, onToggle: l.a.func, onNotListed: l.a.func, }), v(y, "defaultProps", { list: [], id: "default", label: "default", labelClassName: "col-sm-3", dropdownClassName: "col-sm-9", isSearchable: !1, isMultiSelect: !1, isToggleable: !1, disabled: !1 }); }, function (e, t, i) { "use strict"; var n = i(1), r = i(3); function a() { return (a = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function o(e, t) { if (null == e) return {}; var i, n, r = (function (e, t) { if (null == e) return {}; var i, n, r = {}, a = Object.keys(e); for (n = 0; n < a.length; n++) (i = a[n]), t.indexOf(i) >= 0 || (r[i] = e[i]); return r; })(e, t); if (Object.getOwnPropertySymbols) { var a = Object.getOwnPropertySymbols(e); for (n = 0; n < a.length; n++) (i = a[n]), t.indexOf(i) >= 0 || (Object.prototype.propertyIsEnumerable.call(e, i) && (r[i] = e[i])); } return r; } t.a = (e) => { const { messages: t, id: i } = e, s = o(e, ["messages", "id"]); return t && t[i] ? n.createElement(r.FormattedMessage, a({}, t[i], s)) : i; }; }, , function (e, t, i) { "use strict"; i.d(t, "g", function () { return r; }), i.d(t, "c", function () { return a; }), i.d(t, "b", function () { return o; }), i.d(t, "h", function () { return s; }), i.d(t, "a", function () { return _; }), i.d(t, "d", function () { return l; }), i.d(t, "e", function () { return c; }), i.d(t, "f", function () { return d; }); var n = i(13); function r(e, t) { return (e && e.toLowerCase() === n.j) || (null != t && t.toLowerCase().indexOf(n.j) > -1); } function a(e, t) { return (e && e.toLowerCase() === n.f) || (null != t && t.toLowerCase().indexOf(n.f) > -1); } function o(e, t) { return (e && e.toLowerCase() === n.c) || (null != t && t.toLowerCase().indexOf(n.c) > -1); } function s(e, t) { return (e && e.toLowerCase() === n.k) || (null != t && t.toLowerCase().indexOf(n.k) > -1); } function _(e, t) { return (e && e.toLowerCase() === n.a) || (null != t && t.toLowerCase().indexOf(n.a) > -1); } function l(e, t) { return (e && e.toLowerCase() === n.g) || (null != t && t.toLowerCase().indexOf(n.g) > -1); } function c(e, t) { return ( s(e, t) || (function (e, t) { return (e && e.toLowerCase() === n.b) || (null != t && t.toLowerCase().indexOf(n.b) > -1); })(e, t) ); } function d(e, t) { return _(e, t) || l(e, t); } }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.isValidSubnetMask = t.isValidIpAddress = t.requiresPassword = t.hasUsername = void 0); const n = i(191); (t.hasUsername = function (e) { return e === n.SecurityType.WPA_WPA2_ENTERPRISE || e === n.SecurityType.WPA2_ENTERPRISE; }), (t.requiresPassword = function (e) { return e !== n.SecurityType.NONE; }), (t.isValidIpAddress = function (e) { return void 0 !== e && n.ipAddressRegex.test(e); }), (t.isValidSubnetMask = function (e) { return void 0 !== e && n.subnetMaskRegex.test(e); }); }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(446), s = i(48); t.default = function ({ problem: e, location: t, hasMSA: n, hasSYNC: _, hasSolarPowerwall: l }) { if (e === s.InstallationProblems.Miswired12v) return r.default.createElement( "div", { className: "installation-problem" }, r.default.createElement("div", { className: "installation-problem-title" }, r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_title_miswired_12v", defaultMessage: "12v Wiring Error" })), r.default.createElement("div", { className: "installation-problem-image" }, r.default.createElement("img", { src: i(790) })), r.default.createElement( "div", { className: "installation-problem-details" }, r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_miswired_12v", defaultMessage: "When connecting two Powerwall+, only the unit connected to Gateway/Backup Switch should have 12V applied. Remove 12V from all subsequent Powerwall+ in the chain, then Rescan Devices (at the bottom of this page) to clear this warning.", }) ) ); if (e === s.InstallationProblems.MultipleControllers) { const e = r.default.createElement(a.FormattedMessage, Object.assign({}, s.installationProblemTitles[s.InstallationProblems.MultipleControllers])), l = r.default.createElement("img", { src: i(791) }); let c; return ( (c = t === o.SiteControllerLocation.Gateway ? r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_multiple_controllers_gateway", defaultMessage: "Unplug the power harness of all Powerwall+ site controllers, located in the top-right of the Solar Assembly.", }) : t === o.SiteControllerLocation.SolarPowerwall && _ ? r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_multiple_controllers_powerwall_with_sync", defaultMessage: "Unplug the power harness of all Powerwall+ site controllers, located in the top-right of the Solar Assembly. Commission the system by connecting to the Backup Gateway.", }) : t === o.SiteControllerLocation.SolarPowerwall && n ? r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_multiple_controllers_powerwall_with_msa", defaultMessage: "Unplug the power harness of the Expansion Powerwall+ site controller (not connected to Backup Switch), located in the top-right of the Solar Assembly.", }) : r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_multiple_controllers_unknown_with_details", defaultMessage: "Only a single site controller must be active. When using Backup Gateway, unplug all Powerwall+ controllers. When using a Backup Switch, unplug all but one Powerwall+ controller. Run Wizard is disabled until there is only one site controller active.", })), r.default.createElement( "div", { className: "installation-problem" }, r.default.createElement("div", { className: "installation-problem-title" }, e), r.default.createElement("div", { className: "installation-problem-image" }, l), r.default.createElement("div", { className: "installation-problem-details" }, c) ) ); } if (e === s.InstallationProblems.PVACsWithNoSolarRGM || e === s.InstallationProblems.TooManySolarRGM || e === s.InstallationProblems.TooFewSolarRGM) return r.default.createElement( "div", { className: "installation-problem" }, r.default.createElement("div", { className: "installation-problem-title" }, r.default.createElement(a.FormattedMessage, Object.assign({}, s.installationProblemTitles[e]))), r.default.createElement("div", { className: "installation-problem-details" }, r.default.createElement(a.FormattedMessage, Object.assign({}, s.installationProblemDetails[e]))) ); if (e === s.InstallationProblems.SiteShutdownExternalSwitch || e === s.InstallationProblems.SiteShutdownPvsRsdSwitch) { let t = r.default.createElement("img", { src: i(792) }); e === s.InstallationProblems.SiteShutdownExternalSwitch && (l ? (t = r.default.createElement("img", { src: i(793) })) : r.default.createElement("img", { src: i(794) })); const n = e === s.InstallationProblems.SiteShutdownPvsRsdSwitch ? r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch", defaultMessage: "Site shutdown circuit triggered by a Powerwall+ rapid shutdown.", description: "Title to the detailed card explaining how to re-enable a site that has been shut down due to an installation issue", }) : r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_title_site_shutdown", defaultMessage: "Site Shutdown circuit triggered", description: "Title to the detailed card explaining how to re-enable a site that has been shut down due to an installation issue", }); return r.default.createElement( "div", { className: "installation-problem" }, r.default.createElement("div", { className: "installation-problem-title" }, n), r.default.createElement("div", { className: "installation-problem-image" }, t), r.default.createElement( "div", { className: "installation-problem-details" }, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_0", defaultMessage: "To re-enable system:", description: "Start of a list of steps that will help installers re-enable a site that has been shut down due to an installation issue", }), r.default.createElement( "ul", null, r.default.createElement( "li", null, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_1", defaultMessage: "Turn on all Powerwall ON/OFF switches", description: "Part of a list of steps to re-enable a site that has shut down. The ON/OFF switches are present on all powerwalls in a system and must be set to ON", }) ), r.default.createElement( "li", null, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_2", defaultMessage: "Close E-Stops", description: "Part of a list of steps to re-enable a site that has shut down.", }) ), r.default.createElement( "li", null, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_3", defaultMessage: "Ensure Rapid shutdown jumpers are properly installed", description: "Part of a list of steps to re-enable a site that has shut down. The rapid shutdown jumpers are connections in the Gateway", }) ), r.default.createElement( "li", null, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_4", defaultMessage: "Check shutdown circuit wiring.", description: "Part of a list of steps to re-enable a site that has shut down.", }) ) ) ) ); } return console.error("Unknown enumeration warning:", e), null; }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.VITALS_FETCH_INTERVAL = void 0); const s = o(i(450)), _ = a(i(40)); (_.util.Long = s.default), _.configure(); const l = a(i(1)), c = i(3), d = i(35), u = i(17), m = i(28), p = i(283), g = i(588), w = i(138), v = o(i(773)), f = o(i(447)), h = o(i(446)), E = o(i(774)), b = i(135), y = i(133), S = i(150), R = o(i(5)), T = i(455), A = i(21), C = i(4), I = i(152); i(787); const O = (0, c.defineMessages)({ header: { id: "vitals_header_title", defaultMessage: "System" } }); (t.VITALS_FETCH_INTERVAL = 3e3), (t.default = (0, d.connect)(function (e) { var t, i, n, r, a; return { din: e.configuration.din, isEngineer: (0, A.isEngineer)(e.authentication), leader: (null === (t = e.configuration) || void 0 === t ? void 0 : t.leader) || "", followers: (null === (i = e.configuration) || void 0 === i ? void 0 : i.followers) || [], sitemanagerRunning: (null === (n = e.sitemaster) || void 0 === n ? void 0 : n.running) || !1, commissioned: !(null === (r = e.configuration) || void 0 === r ? void 0 : r.isNew), isEnumerating: (null === (a = e.system) || void 0 === a ? void 0 : a.isEnumerating) || !1, }; })( (0, c.injectIntl)(function (e) { const { dispatch: i, intl: n, din: r, isEngineer: a, leader: o, followers: s, sitemanagerRunning: _, commissioned: d, isEnumerating: A } = e, N = t.VITALS_FETCH_INTERVAL + 1e3; let [k, P] = (0, l.useState)(null), [D, L] = (0, l.useState)(0), M = (null == k ? void 0 : k.isUpdatingRecursive()) || !1, z = (null == k ? void 0 : k.isDisabledBecauseRecursive("FWUpdateFailed")) || !1; (0, l.useEffect)(() => { i((0, y.showHeader)("header-default", { title: n.formatMessage(O.header), subtitle: l.default.createElement(v.default, Object.assign({}, { updating: M, updateFailed: z })) })); }, [M, z]), (0, l.useEffect)(() => { i((0, S.showBack)(null, "< " + n.formatMessage(m.buttons.BACK), u.browserHistory.goBack)); }, []), (0, l.useEffect)(() => { let e, n = !0; return ( (function r() { fetch(R.default.api.uri + "/devices/vitals", { method: "GET", credentials: R.default.credentials }) .then(C.checkStatus) .then((e) => e.arrayBuffer()) .then((e) => { let t = new Uint8Array(e), i = g.DevicesWithVitals.decode(t), n = (0, w.deviceTreeFromDeviceApiList)(i, o); P(n); }) .catch((e) => { console.error("Error querying or parsing device details:", e); }) .finally(() => { n && (e = setTimeout(r, t.VITALS_FETCH_INTERVAL)); }), i((0, b.initializeConfig)()), i((0, I.fetchPowerwalls)()); })(), function () { clearTimeout(e), (n = !1); } ); }, []); const U = window.location.search.includes("wifi"), V = (0, l.useMemo)(() => (0, T.getTEDAPI)({ din: r, isEngineer: a }), [r, a]); let G = (null == k ? void 0 : k.followers) || [], j = s.filter((e) => !G.some((t) => t.din() === "STSTSM--" + e)); return l.default.createElement( "div", { className: "system-container" }, !k && l.default.createElement(p.LoadingSpinner, { className: "spinner system-loading-spinner" }), k && l.default.createElement(h.default, { root: k, sitemanagerRunning: _ }), k && k.followers.map((e) => l.default.createElement(h.default, { root: e, key: e.din(), sitemanagerRunning: _ })), k && j.map((e) => l.default.createElement( f.default, { key: e, din: e }, l.default.createElement(c.FormattedMessage, { id: "system-device-follower-not-responding", defaultMessage: "WiFi-paired device is not currently responding" }) ) ), d && U && l.default.createElement(E.default, { tedapi: V, followers: s }), !_ && (!A && Date.now() - D > N ? l.default.createElement( "a", { className: "powerwall-scanning-link", onClick: function () { L(Date.now()), i((0, I.enumeratePowerwalls)()); }, }, l.default.createElement(c.FormattedMessage, { id: "system_rescan_button_text", defaultMessage: "Rescan Devices" }) ) : l.default.createElement( "p", { className: "powerwall-scanning-link powerwall-scanning-link-disabled" }, l.default.createElement(c.FormattedMessage, { id: "system_scanning_label_text", defaultMessage: "Scanning for Devices..." }) )) ); }) )); }, , , , , function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABcCAYAAADu8aIfAAAAAXNSR0IArs4c6QAADiFJREFUeAHtnQtwVNUZx++9+8prk2xeQDQYI5AQKC0g6mitglWpr0aqGWltZqSKtGB9jOgMio2tMlOrSIvYltpimaodZgTqCJROJ2A1KKAiDoSNAbMkJJtN9pXdbJJ93Hv6/5a9cRPy2GzuZhN2z8zNOffuOd/5zi/ffvd1zrc8N4ESY0zT1dVVKopiKdQqxT7lJdiyeJ7XI5c3FDk3bahDeSe2r1GnHnm9SqWqz8jIqMe+H/sTIvHx1AKQhM7OzgXQYTG2Jdi/Hnm6Qjp5APpDyKrBdiArK+tz7EsKyR61mLiAdjqdCwG1CgNfjjw/XGsca8AxI3KyTiOsswFlh9/vd6Ps1uv17jqujityF+lh+XqNRqNHfQPKM1G/DOVS1Kec9vsSjnXg2DvIt2dnZ3/W98E4FcYNNAaZCetdifwBjK1cHh8GfgblGuQ1AHkAX3mL/NlYcrigKYC/GP0tgRz6tlwRJq8O/W2DlW9F7go7HrNizEEDbo4kSY9hQI9gsNk0EpQt2N7B8e0Gg+FYzEYXJtjhcMwXBKEKOtC3aEpIDyfKm3F8E6Dbw6pPniIGkA4XsQEDdGNjtGH/AMDfjs/U8RoJ9U06kC6yXqQj6Uo6x0uvqPqF4suwNckDwSD2uFyua6MSFsNGpBPpJusZ0nlZDLtURnRPT89lUHyfrDjKR2A9i5SRHjsppCPpGqb3PhpL7Hocg2QoWQFlkQVdhB3lVfgqCmMQOa5Nq1m1AKVXOZxOe2gMNJaKcVViuM4AUwuFNpFytAHwLrfb3e+Sbbj2E+0zM3S3Ox27rHYbszvsNKZNNMa46gkflwewn4QAe/EVfDSuCinYeUen7TGr0+a1OmwM+SetrtY8BcVHLirkj+tDkBsB/MrIW0+OmuZO6yKL09posbezDqfN6Bhvvw3XMBeAW0KQP6ebg8mBbvRa0thaHe3HzIBtcXS02Lvs3xq9lChaEGRYr3zCqIH/yoxCzKRqYsMYz9nbDrbY2xig29tiDZvcRZgl7wJk3aQiNgZl8QBG1+Qwv9dka2XNNnOro8dRPAZxQzcNnfhkn0yWnDCQZSoE+6y95QOTrYU1O831DWZzxFdXEV3n0uUNnku8j3wWnlEcw3OBCuReWYFEyWdizHou9S5O4I6LkjhLm8L2nIzw0i8i0PDJLwHy1YBrUqvVP0A+Lk+8JuI/MCcnp5NpNEtFjmsKMHFRurN1oyJ6widXhK4uvBfjJVy0kJq7267+yn7W22A/yxpsZ++JVk6wXehaGZwd7GK6GRkTlLDGp13Na422RvaV3eQ09bRdHvbR6Iqw4OADIuS7RtcycWobnaY9dbavmdFh+u9wox7SR8OKl8EvL4U/duDNx8rhhCTyZ1q1tIKpeKdfDNxUZz9931AsBgUNwPQAfFOo0Tq8p+sYSkCiHy/JKLEEROl5xjPOL7FX2ll7RsRM4CrozQg9iTsC6IP+MyIWlgAVidFxR8OxY7Z6dsJxZtCrkAsg4qSXg4aPEB+4jdXY4vaKfrL8j4iRxPg1Esc4r+hf+amr/oInfReAphepGGAGGu/FjcnRyTLYeOs5P2dGrchYjciJ6XyAPT1Qn36gYcmZABy0ZrwZfnFg5eT+8ARUHP8iWXWASSsbHY3BN/5yi36g4TZo3kU2YB/MzMw8JFdK5pERWJhXVgN/+0mABTI7uN5fhrfqBxqQaXIL+eaXwysly5ETwESZjSIncT7R/9PwVn2gcYWxEB+UA7IF1rw/vFKyHDmB7pzyXXAfNsCecdR+4jq5ZR9oWHMVHQRomp8WkCsk89ERWAx2Kl7YLTKR8/Fshdw6CBqQBcBdTgdpmpb8YTKPjoBWo/0ruY9eyXc3sSUpwT84CS7AgXzAPjNec+GiG8LkaHV15uyPGc+dC0iiodbxZdB9BEFD/cWhIdBc4mRSgADP+EN4Xs15pcCtJE4GvYR2YNFJ0ARCgcRzrAZWzfl56QYSJ8BlaLDRTHuO5idTnkxjJ6AR2F7cJXI+yb/wJDupFWjNCMSmw5oblJoEPnY1J7+EG3KvauZ4rhmwU53d7NtCaGEOB6s2Tv7hTbARML6Rrj5cHs888tFk0eSfk6AV/j/xvHBGZBInqths8tFB0OiDFuckk4IEeIGdoisPn+grJYsuIdk4ETYo2EdSFDHl1EYJb14CPJtOoLOIClyHg/JkUo4Ar2ZWCT7aL/n1dOutJ9G0jk+5LpKSiIDX4+0kHw2rTiOLDoKG60iCVtg+UjLTHCJeBPi5wDegaUWqwv0kvDhduxugRYCWUsmikylWBIrxNBQnQ/LTBDpoyZhgHnQhseozEeW6rJoc8tFIPX2gaQF7IsKI5Zj9gs9ALwBEifXSDUvQoilKQCw7TUTZEs8b6Bac41kPrcmmoCL0rMOQiDBiOWZfQJx63nXwHnIdX1NnoXgXsew34WR7+cBsCYQFjrXQDYv8jEN+5pFwQGI14AAXKCeL1qg0DWTRQdBwHWWx6jBR5XrE3hl0MhQYd0rAHWEQNCw7CVphi+jl/NPpZKhVa78QKJoW5Htg0TMv5hWwCjMcUdz2tv2Xe1hvAZ7W+XINviPko/3YKJoWnRDlt+EjCkpWGJ5AF++7hyY8pvKaU7fxt3nJR1MKvv2GVS85v5v8O1YCHr73++Q2UvmUWpIlg5bffidBj5VwqL1T9Cwki9aJqj19oDHhnILvUVy4K7CkYr5CfSWsmD/b9t7i4XpzBV7w5HzYs78PNCBLgPxO8ABCliUsIYUGbhdda+j62cClH6isrMQi229cB73K2k4HAJziwsUtXBrpMJnTDrZDaxE7F5N/1gspf5THIvtoLhRGsg6QpyCSwa1yhWQ+OgLn2lUP9jBvRhqvbV9TULFXbt0Hmg7AqrdRDthPUp5MoydgYc7HaYqBgdfvDm/dDzROihSrk8JI3kjB98IrJssjE9jUvvNei+icoeJV3qL0nPXhLfqBBmQXIG+mCpiQ/kx4xWR5ZALnRGs1+eZC3vCvKv2t7eEt+oGmDyggKrIuAL8NE9QnfBTG8MHEs7zRuvOHrZKjXCUI/nxJf4HrvQA03Icdlh20asDegu2COvEc0ETsG1caqtP+1tfpJeylfO6e1ZdUNA/Uc1CIgE2LOZsBeRGtPRzYKLnfn8CpDv8r8M2FOkHrLk6d+rP+n57fGxQ0LNqDj2mpMqUNkzkE5vkhxO7vq5Z3S+r8zavImmeoCl98MGupfbDeBgVNFbFoaCeA/xtWTWHdtw7WOHmM405Lbe91s17dFMHQsL5g+W+HYjIkaGqg0+lWATZd7lXAhVw0cUeHgjHa4+va/vYXk2SZo+FVvlJN4ZBBUUjusKBTU1PPAvIDVBH5S1hdeyWVk4njftP61rIvRNMKLLDn5grFzz2e/6PPh+OCdUMjJzzRo0u+R2HdFI7tmkRf6/JKx85Ztf6Tn3WK3Rnl6uk1m6f9/KaRKA5r0XJjPAd5CpAPw6qLA4HAPuSZ8meJlm/p2jP1sO9UrV3sypiqym6byy69MxIGEYEGZB9uZO5A/hUgz4e/3o1cF0kHF1OdLe07MmpdJ46YJWdelpDu+k7a5dc+XHhndyRjjAg0CULEAytOjreg2ArIiwH7n4kEmyAfFps+axQtRamctvdabflNa7MrGyOBTHUiBk2V6eSIOXrBEG2ATFciCeFGXu14d9pB/2mjMXBulo7X+K9Pm3P30/n3fEpMIk0RnQwHCqMY0vDV9IqmEO7kGMUrvVhPkBusb5fVeutrzaI9J4tP771RN3fZrwru3zeQyUj7UYEmoRRO0+v1/geWTRF4TTh0L06ao/ovk5yJnNaZ36z8WDJus4vutHwhq+t7KeVLnsu7P6qAXlGDJkAUUzoU7pgi8fqwPYXnJL+fyPAi1e0Xra/94yPJuBzhi4ViVb71GnX5Neun3Hcm0vYD640JNAmDRWtxI/MSisE7R8DejWlmKydr9Mfqc3+f9aWqed9J39kSrHzlFqlmHpqnKrhl7dQqev4TdRozaLln3NRQ8O5tAE9RxmjN4rrQGxvMxJ74iR51HrS0b/0oYKzyiD3qdCElsEQ974VN0x5+XgntFQNNyoT89p8AeyntA/hRbKsBPCq/RjLGIz3Z9saPj/rrt5iYNRtre7hydVHLVbrSZdV5PzmiVP+KgpaVgnXTD3vRbXsRHQPsvRSwcKLF0nui/Y0VJ/yNvz4ZaLoEWnJ5fJbvenXZ714rXP0s6a1kigloUhBWnY7r7GeQP4LdYARaAD+I7WUK94Y8LpHI/sD26hrMprVfSqZHjWJLHmZtcamCTrpOU/a/OVxx5bpplTGJLBwz0LI1ALYiPxypM911OxbfVINLGZQ2YpVTtbf4veC8Nrmv4fLHzVsrm1jHk18EGuc7JHdwgpBeSBOv05R+UMIXPvjC1KqI7/KG62eoz2IOWu4Ylh31T6ESZMyrel+WJecqjrtjKNjrbW/OafN2PtTK7DefFltnmJlTS9aLbxJ3GZ/XM09dvL9MW7zm2bzKFlleLPNxAx0+CIoaCfAj/bgvBWqhn55uuMS+4vVu5p0TLoPKuB02PpRy8zM+Xix0+3sWuoXu2daA6zJMYslpEq1aTP4+3wSAc9V6cYFwxXFA3ri5cPVbA2XFej8uoOVBAXZEP1dd7HoYSxJ65WYj54xxaYKOzVFNt07n8w9PUWfv+G5B7tuV/PkJhyMLUL5GXEEPHA7AD/oD7Dd4nl1QF2hOG1hfK2ikIi7Xly7ovAZObzUIGWey+bTjGULqoekFhv1P8JU9A9vEa39CgR4KQjQ+eihZ8To+qsek8VKSTnh04sOJ7FOczbooH+5EGC89h+v3/390L88XVTm0AAAAAElFTkSuQmCC"; }, , function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAAXNSR0IArs4c6QAAAx5JREFUSA2tlt9LU2EYx7ezuTbTTRkb6TJWMIjwwstaMdRusouyLrxQ6jKvKyKIErsp6g8o6Id0I8UssAl64ahkFMwka1CBGDKtzS1t/mKTuWmfVxK2naPTPAfePe/zPN/n+9378xytpsiTSqUOpNPp5rW1tVNAndhqbIlWq41gf2Lf6nS63rKyslARKo12M8DCwsLh1dXVu+SP03ySJPVBPAZpJBaLZUwmUxXCTnLiTzTTEvjXKisr39Hf/pNIJG7Pzc3FsFcg2FOsEowWfAttnPYCv7RYjQaQCfArRIYWFxdtRQsKANQbZmdnn8IxmkwmHQXpfBfQS1o3RSX5me171GpnZmZu0L7RL1OsnJ+f72BEAfHvFAE7DE5PTz+Ox+P9sjKEXIzoN1NnlyX/M8Cf1kej0S9sprY8CoS8tOt5QRWcqamp05OTkxMI69bpxEKKUREwqcAvowiHw8FIJNIqEhIH9gxC/ZyhlAypTqB3eXn5/LoYQk0I9anDK2fh8PesrKw0rIvxc4jr5rscpk7EbrePcxPtHRkZsUiMqgonqg61Mguz98doNDr1pEvNZnNSGaZOlGlMMyiLBF2Uc1alDq0yC5vQmslkwhJDjHCj71eG7T4KfyliRp/P90us2ftsNnty97TKDKFQqBXBH52dnRkGJfkQPKsM3X10aWmpBRa/YJLKy8s/YM3cix4RUPMJBoMH2Q8neOE+FLxiGtdoN5nKe2oKCS7e9o/Y8kN1dXVfhS92o8ZisTzHaHnFXBW+Go/f729nVG6DwdAu4xMXMmK/ADTJkjsMDAwM1Hd3d6cCgcCFTUsROsobIIa9uCmoSIItfqmrqys1ODh4vxAq+7r691UlLuY33Jm32EDxwiIl3+v17uOmeMbua3C5XJcbGxsfFOJkYgLAubAg2oEVI3xC66moqPgkcrkPAjqmX3xTtrME9Q6HY7ympqbN7XaP5uI2+opiG0kInOxUscDnICynP0Y/wnocE19fCJmsVmuWm/0zQnc8Hs/rjVolu6VYboEQxndyCVQPDw8f0ev1EzabLVRbW/sxF7dV/y9IlJ1Y7C0+lwAAAABJRU5ErkJggg=="; }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "addMeter", function () { return E; }), i.d(t, "removeMeter", function () { return b; }), i.d(t, "resetMeterConfig", function () { return y; }), i.d(t, "resetMeterCurrentTransformerReadings", function () { return S; }), i.d(t, "cancelMeter", function () { return U; }), i.d(t, "detectWiredMeters", function () { return se; }), i.d(t, "deleteMeter", function () { return _e; }), i.d(t, "createMeter", function () { return le; }), i.d(t, "commissionMeter", function () { return ce; }), i.d(t, "fetchMeterConfig", function () { return de; }), i.d(t, "checkMeterConnectivity", function () { return pe; }), i.d(t, "pingMeterStatus", function () { return ge; }), i.d(t, "setMeterCts", function () { return we; }), i.d(t, "deleteMeterCts", function () { return ve; }), i.d(t, "getMeterReadings", function () { return fe; }), i.d(t, "fetchMeterAmpRatings", function () { return he; }), i.d(t, "setMeterAmpRatings", function () { return Ee; }), i.d(t, "flipMeterCt", function () { return be; }), i.d(t, "getMeterAggregates", function () { return ye; }), i.d(t, "setSyncCTVoltageReferences", function () { return Se; }), i.d(t, "fetchSyncCTVoltageReferences", function () { return Re; }), i.d(t, "fetchSyncCTVoltageReferenceOptions", function () { return Te; }), i.d(t, "setEnableInverterMeterReadings", function () { return Ae; }), i.d(t, "fetchEnableInverterMeterReadings", function () { return Ce; }); var n = i(27), r = i(7), a = i(2), o = i(14), s = i(5), _ = i.n(s), l = i(4), c = i(15), d = i(29), u = i(6), m = i(151), p = i(12); function g(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function w(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? g(Object(i), !0).forEach(function (t) { v(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : g(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function v(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } let f = null; const h = { [p.Statuses.FAILED_METER]: "Failed to Add Meter", [p.Statuses.ADD_METER_ERROR]: "Verifying Meter", [p.Statuses.VERIFY_METER_ERROR]: "Verifying Meter" }, E = Object(u.b)(a.ADD_METER, "id"), b = Object(u.b)(a.REMOVE_METER, "id"), y = Object(u.b)(a.RESET_METER_CONFIG), S = Object(u.b)(a.RESET_METER_CURRENT_TRANSFORMER_READINGS), R = Object(u.b)(a.REQUEST_DETECT_METER), T = Object(u.b)(a.RECEIVE_DETECT_METER_ERROR), A = Object(u.b)(a.REQUEST_DELETE_METER); const C = Object(u.b)(a.RECEIVE_DELETE_METER_ERROR), I = Object(u.b)(a.REQUEST_CREATE_METER); const O = Object(u.b)(a.RECEIVE_CREATE_METER_ERROR), N = Object(u.b)(a.REQUEST_COMMISSION_METER); function k(e) { return w({ type: a.RECEIVE_COMMISSION_METER_UPDATE }, e); } const P = Object(u.b)(a.RECEIVE_COMMISSION_METER_ERROR), D = Object(u.b)(a.REQUEST_METER_CONFIG); function L(e) { return w({ type: a.RECEIVE_METER_CONFIG_UPDATE }, e); } function M(e, t = null) { return { type: a.RECEIVE_METER_CONFIG_SUCCESS, receivedAt: Date.now(), meters: e, isFetching: t }; } const z = Object(u.b)(a.RECEIVE_METER_CONFIG_ERROR); function U() { return Object(c.b)(), (f = null), { type: a.CANCEL_METER }; } const V = Object(u.b)(a.REQUEST_SET_METER_CTS); const G = Object(u.b)(a.RECEIVE_SET_METER_CTS_ERROR), j = Object(u.b)(a.REQUEST_DELETE_METER_CTS); const W = Object(u.b)(a.RECEIVE_DELETE_METER_CTS_ERROR), F = Object(u.b)(a.REQUEST_METER_AMP_RATINGS); const q = Object(u.b)(a.RECEIVE_METER_AMP_RATINGS_ERROR), x = Object(u.b)(a.REQUEST_SET_METER_AMP_RATINGS); const B = Object(u.b)(a.RECEIVE_SET_METER_AMP_RATINGS_ERROR), H = Object(u.b)(a.REQUEST_METER_READINGS); const K = Object(u.b)(a.RECEIVE_METER_READINGS_ERROR), Y = Object(u.b)(a.REQUEST_METER_FLIP_CT); const Q = Object(u.b)(a.RECEIVE_METER_FLIP_CT_ERROR), Z = Object(u.b)(a.REQUEST_METER_AGGREGATES); const J = Object(u.b)(a.RECEIVE_METER_AGGREGATES_ERROR), X = Object(u.b)(a.REQUEST_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS); const $ = Object(u.b)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR), ee = Object(u.b)(a.REQUEST_SYNC_CT_VOLTAGE_REFERENCES); const te = Object(u.b)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR), ie = Object(u.b)(a.REQUEST_SET_SYNC_CT_VOLTAGE_REFERENCES); const ne = Object(u.b)(a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR), re = Object(u.b)(a.REQUEST_ENABLE_INVERTER_METER_READINGS); function ae(e) { return { type: a.RECEIVE_ENABLE_INVERTER_METER_READINGS_SUCCESS, enabled: e, receivedAt: Date.now() }; } const oe = Object(u.b)(a.RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR); function se() { return (e) => ( e(R()), e(Object(r.clearError)(a.RECEIVE_DETECT_METER_ERROR)), fetch(_.a.api.uri + "/meters/detect_wired_meters", { method: "POST", credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e(M(t, !1)); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_DETECT_METER_ERROR, "Unable to detect any wired meters", t.response)), e(T()); }) ); } function _e(e, t) { return (i) => ( i(A()), fetch(_.a.api.uri + "/meters", { method: "DELETE", credentials: _.a.credentials, body: JSON.stringify({ location: t.location, type: t.connectionType, ip_address: t.ipAddress, serial: t.serial }) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { var n; i(((n = { id: e, serial: t.serial }), w({ type: a.RECEIVE_DELETE_METER_SUCCESS, receivedAt: Date.now() }, n))); }) .catch((e) => { i(Object(r.showError)(a.RECEIVE_DELETE_METER_ERROR, e.toString(), e.response)), i(C()); }) ); } function le(e, t, i, n, o, s, c) { return (d) => ( d(I()), d(Object(r.clearError)(a.RECEIVE_CREATE_METER_ERROR)), d(Object(r.clearError)(a.RECEIVE_COMMISSION_METER_ERROR)), fetch(_.a.api.uri + "/meters", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ type: s, serial: i, short_id: t, location: c, ip_address: o, mac: n }) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((r) => { d( (function (e) { return w({ type: a.RECEIVE_CREATE_METER_SUCCESS, receivedAt: Date.now() }, e); })({ id: e, shortID: t, location: c, serial: r.serial, macAddress: n, ipAddress: o, connectionType: s, connected: r.connected, currentTransformersResponse: r.cts }) ), r.connected || d(ce(e, t, i, n, o, s)); }) .catch((e) => { d(Object(r.showError)(a.RECEIVE_CREATE_METER_ERROR, e.toString(), e.response)), d(O()); }) ); } function ce(e, t, i, n, o, s) { return async (c) => { c(N()), c(Object(r.clearError)(a.RECEIVE_COMMISSION_METER_ERROR)); let d = { short_id: t, serial: i }; return ( "" !== o && "" !== n && ((d.mac = n), (d.ip_address = o)), fetch(`${_.a.api.uri}/meters/${i}/commission`, { method: "POST", credentials: _.a.credentials, body: JSON.stringify(d) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { c(me(e, i, t, n, o, s)); }) .catch((e) => { c(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, e.toString(), e.response)), c(P()); }) ); }; } function de() { return (e) => ( e(D()), fetch(_.a.api.uri + "/meters", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then(async (t) => { let i = null; if (t && t.length) { for (let n = 0; n < t.length; n++) Object(m.s)(t[n].type) && e(he(t[n].serial)), t[n].connected || null != i || (i = n + 1); let n = null == i; if ((e(M(t, !n)), n)) return; } null == i && (i = 1), await Object(c.d)(500); let { response: n, error: o } = await ue(); if (n && null != n.status) { let t = { status: n.status, id: i }; n.serial && (t.serial = n.serial), n.short_id && (t.short_id = n.short_id), n.mac && (t.mac = n.mac), n.ip_address && (t.ip_address = n.ip_address), n.location && (t.location = n.location), [p.Statuses.STARTED_WIFI_ADD, p.Statuses.SENDING_CREDENTIALS, p.Statuses.VERIFYING_METER, p.Statuses.ADD_METER_ERROR].includes(n.status) ? (e(L(t)), e(me(i, t.serial, t.short_id, t.mac, t.ip_address, p.ConnectionTypes.NEURIO_W1_WIFI, 0))) : ((t.isFetching = !1), e(L(t))); } else e(o ? Object(r.showError)(a.RECEIVE_METER_CONFIG_ERROR, o.toString(), o.response) : Object(r.showError)(a.RECEIVE_METER_CONFIG_ERROR, "Fetch meter config error. Invalid response.")), e(z()); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_METER_CONFIG_ERROR, t.toString(), t.response)), e(z()); }) ); } async function ue() { try { return { response: await ge(), error: null }; } catch (e) { return { response: null, error: e }; } } function me(e, t, i, n, s, _, l = 1e4) { return async (u) => { f = 0; try { await Object(c.d)(l); for (let l = 0; l < 180; l++) { if (null == f) return; let { response: l, error: g } = await ue(); if (l && null != l.status) { if (l.status === p.Statuses.FAILED_METER) return l.serial ? u(k({ status: l.status, id: e })) : u(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, h[l.status])), void u(P()); if (l.status === p.Statuses.SUCCESS_METER) return void u( ((m = { id: e, connectionType: _, shortID: l.short_id || i, serial: l.serial || t, macAddress: l.mac || n, ipAddress: l.ip_address || s, status: l.status, location: l.location, verified: !0 }), w({ type: a.RECEIVE_COMMISSION_METER_SUCCESS, receivedAt: Date.now() }, m)) ); u(k(w(w({}, l), {}, { id: e }))); } else { if (!g || (!Object(d.i)(g) && !Object(d.g)(g))) { let t = "Invalid response"; return g && (o.default.error(g), (t = g.toString())), u(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, `Commission meter ${e} error: ${t}.`)), void u(P()); } u(k({ status: p.Statuses.RECONNECTING, id: e })); } await Object(c.d)(1e3); } u(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, `Meter connection timeout. Could not commission meter ${e}, please check the connection.`)), u(P()); } catch (e) { u(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, e.toString(), e.response)), u(P()); } var m; }; } async function pe(e) { return Object(c.e)( c.a, new Error("Request timed out"), fetch(_.a.api.uri + "/meters/verify", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ location: e.location, type: e.connectionType, ip_address: e.ipAddress, serial: e.serial }), }) .then(l.checkStatus) .then(() => {}) .catch((e) => { throw e; }) ); } async function ge() { return fetch(_.a.api.uri + "/meters/status", { method: "GET", credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => e) .catch((e) => { throw e; }); } function we(e, t) { return (i) => { let n = null != e, o = n ? e : t; if (null == o) return; i(V()); let s = []; for (let e = 1; e <= 4; e++) o.ids.includes(e) ? s.push(!0) : s.push(!1); let c = { type: o.connectionType === p.CurrentTransformerConnectionTypes.DOUBLED_SOLAR ? p.CurrentTransformerConnectionTypes.SOLAR : o.connectionType, real_power_scale_factor: o.realPowerScaleFactor, valid: s }; return fetch(`${_.a.api.uri}/meters/${o.serial}/cts`, { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(c) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { const e = n && null != t; var r; i(((r = w(w({}, o), {}, { isSetting: e })), w({ type: a.RECEIVE_SET_METER_CTS_SUCCESS, receivedAt: Date.now() }, r))), e && i(we(null, t)); }) .catch((e) => { i(Object(r.showError)(a.RECEIVE_SET_METER_CTS_ERROR, e.toString(), e.response)), i(G()); }); }; } function ve(e) { return (t) => ( t(j()), fetch(`${_.a.api.uri}/meters/${e}/cts`, { method: "DELETE", credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((i) => { t( (function (e) { return w({ type: a.RECEIVE_DELETE_METER_CTS_SUCCESS, receivedAt: Date.now() }, e); })({ serial: e }) ); }) .catch((e) => { t(Object(r.showError)(a.RECEIVE_DELETE_METER_CTS_ERROR, e.toString(), e.response)), t(W()); }) ); } function fe() { return (e, t) => { const { meter: i } = t(); return ( e(H()), fetch(_.a.api.uri + "/meters/readings", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { if (Object(n.isEmpty)(t)) null != i.lastReadingUpdatedAt && Date.now() - i.lastReadingUpdatedAt > 5e3 && e(S()); else { let i = !1; Object(n.each)(t, (t, n) => { null != t.error && null != t.error.Err && ((i = !0), e(Object(r.showError)(a.RECEIVE_METER_READINGS_ERROR, `Unable to read meter ${n}: Error Code ${t.error.Err}`, w(w({}, t.error), {}, { serial: n, detailed: !0 })))); }), i || e(Object(r.clearError)(a.RECEIVE_METER_READINGS_ERROR)); } e( (function (e) { return { type: a.RECEIVE_METER_READINGS_SUCCESS, receivedAt: Date.now(), readings: e }; })(t) ); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_METER_READINGS_ERROR, t.toString(), t.response)), e(K()); }) ); }; } function he(e, t = !0) { return (i) => ( i(F()), fetch(`${_.a.api.uri}/meters/${e}/ct_config`, { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { i( (function (e, t) { return { type: a.RECEIVE_METER_AMP_RATINGS_SUCCESS, serial: t, ampRatings: e }; })(t.amp_ct_type, e) ); }) .catch((e) => { t || (i(Object(r.showError)(a.RECEIVE_METER_AMP_RATINGS_ERROR, e.toString(), e.response)), i(q())); }) ); } function Ee(e, t) { return (i) => ( i(x()), i(Object(r.clearError)(a.RECEIVE_SET_METER_AMP_RATINGS_ERROR)), fetch(`${_.a.api.uri}/meters/${e}/ct_config`, { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ amp_ct_type: t }) }) .then(l.checkStatus) .then(l.parseText) .then((n) => { var r; i(((r = { serial: e, ampRatings: t }), w({ type: a.RECEIVE_SET_METER_AMP_RATINGS_SUCCESS }, r))); }) .catch((e) => { i(Object(r.showError)(a.RECEIVE_SET_METER_AMP_RATINGS_ERROR, e.toString(), e.response)), i(B()); }) ); } function be(e, t) { return (i) => { i(Y()); for (let e = t.length; e < 4; e++) t.push(!1); return fetch(`${_.a.api.uri}/meters/${e}/invert_cts`, { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(t) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { var n; i(((n = { serial: e, inverted: t }), w({ type: a.RECEIVE_METER_FLIP_CT_SUCCESS }, n))); }) .catch((e) => { i(Object(r.showError)(a.RECEIVE_METER_FLIP_CT_ERROR, e.toString(), e.response)), i(Q()); }); }; } function ye() { return async (e) => { e(Z()); try { return await Object(c.e)( c.a, new Error("Request timed out"), fetch(_.a.api.uri + "/meters/aggregates", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e( (function (e) { return { type: a.RECEIVE_METER_AGGREGATES_SUCCESS, receivedAt: Date.now(), aggregates: e }; })(t) ); }) ); } catch (t) { e(J(new o.default(a.RECEIVE_METER_AGGREGATES_ERROR, t.toString(), t.response))); } }; } function Se(e) { return async (t) => ( t(ie()), t(Object(r.clearError)(a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR)), fetch(_.a.api.uri + "/synchrometer/ct_voltage_references", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(e) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => { t( (function (e) { return { type: a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS, pairing: e, receivedAt: Date.now() }; })(e) ); }) .catch((e) => { t(Object(r.showError)(a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR, e.toString(), e.response)), t(ne()); }) ); } function Re() { return async (e) => ( e(ee()), e(Object(r.clearError)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR)), fetch(_.a.api.uri + "/synchrometer/ct_voltage_references", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { e( (function (e) { return { type: a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS, pairing: e, receivedAt: Date.now() }; })(t) ); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR, t.toString(), t.response)), e(te()); }) ); } function Te() { return async (e) => ( e(X()), e(Object(r.clearError)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR)), fetch(_.a.api.uri + "/synchrometer/ct_voltage_references/options", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { e( (function (e) { return { type: a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_SUCCESS, options: e, receivedAt: Date.now() }; })(t) ); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR, t.toString(), t.response)), e($()); }) ); } function Ae(e) { return (t) => ( t(re()), fetch(_.a.api.uri + "/meters/inverter_meter_readings", { method: "POST", credentials: _.a.credentials, body: JSON.stringify({ enabled: e }) }) .then(l.checkStatus) .then(l.parseJSON) .then((e) => { t(ae(e.enabled)); }) .catch((e) => { t(Object(r.showError)(a.RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR, e.toString(), e.response)), t(oe()); }) ); } function Ce() { return (e) => ( e(re()), fetch(_.a.api.uri + "/meters/inverter_meter_readings", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e(ae(t.enabled)); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR, t.toString(), t.response)), e(oe()); }) ); } }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAAXNSR0IArs4c6QAAAbdJREFUOBGtVTtOQzEQnDwQFIlAoqOgIIQSikjAAYIQJQ25Ax0XQBQcghOkIBUlBWlpgCBBQZEQbgCIBCQQv5lgo5f31vwSS47Xs7Nj7/PaySDQzoG5Z2AtA5RIKbwDOdod2k3atRFgfx64sMLJ623HQJ7gDtEiezUCDl6A6yxw8wBMDAPTb8AqfWX2OhfYWgBatO12Aqywt06BzQYwarM+UfnFE19xJtcJNrjTRZMQAMVnbCMlrJQJtv4q6NdxworPewwUrCiVL8Aw6D86A9YNVxdyn6KiSaRT5lgcA3a73vDPI13qZnPxRelFKhuyqrPAk8l2IE+5w94OcVx8VXoRy2dZZRMie5y89us3ouJJh7wSR8yoDn1waJQoycGdKs7pFCKmlMuysENiHpfoOHDv59YoHekp/Y5uikWKY0x97w64jWNJWzrSU/pXunpJQnI+BExyF1NJPD53Ok2lf+juctyfssnZpvBSyhEDpEO9GlRXLP7Ln+56LNY0FS+dbp2656vOE9gw2b8EXXzd6QG6swO/+9oMRfXsDe6V8hk64b7fU5ZVb9OnINjXy58S9UvoFP/7H/UBvHyjEZxnGH8AAAAASUVORK5CYII="; }, , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetGridCodeConfig", function () { return y; }), i.d(t, "fetchGridCodes", function () { return S; }), i.d(t, "saveGridCode", function () { return R; }), i.d(t, "checkGridStatus", function () { return T; }), i.d(t, "getGridStatus", function () { return A; }), i.d(t, "saveOffGrid", function () { return C; }); var n = i(27), r = i(7), a = i(2), o = i(14), s = i(5), _ = i.n(s), l = i(4), c = i(6), d = i(15); function u(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function m(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? u(Object(i), !0).forEach(function (t) { p(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : u(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function p(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const g = Object(c.b)(a.REQUEST_GRID_CODES); const w = Object(c.b)(a.RECEIVE_GRID_CODES_ERROR); const v = Object(c.b)(a.RECEIVE_SAVE_GRID_CODE_ERROR), f = Object(c.b)(a.REQUEST_GRID_STATUS); const h = Object(c.b)(a.RECEIVE_GRID_STATUS_ERROR), E = Object(c.b)(a.REQUEST_SAVE_OFF_GRID); const b = Object(c.b)(a.RECEIVE_SAVE_OFF_GRID_ERROR), y = Object(c.b)(a.RESET_GRID_CODE_CONFIG); function S() { return (e) => ( e(g()), fetch(_.a.api.uri + "/site_info/grid_regions", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { null == t || Object(n.isEmpty)(t) ? (e(Object(r.showError)(a.RECEIVE_GRID_CODES_ERROR, "Error: Could not retrieve grid codes")), e(w())) : e( (function (e) { return { type: a.RECEIVE_GRID_CODES_SUCCESS, receivedAt: Date.now(), gridRegions: e }; })(t) ); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_GRID_CODES_ERROR, t.toString(), t.response)), e(w()); }) ); } function R(e, t = !1) { return (i) => ( i( (function (e) { return { type: a.REQUEST_SAVE_GRID_CODE, isSetting: e }; })(t) ), fetch(_.a.api.uri + "/site_info/grid_code", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(e) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then( (e) => ( i( (function (e) { return m({ type: a.RECEIVE_SAVE_GRID_CODE_SUCCESS, receivedAt: Date.now() }, e); })(e) ), !0 ) ) .catch((e) => (i(Object(r.showError)(a.RECEIVE_SAVE_GRID_CODE_ERROR, e.toString(), e.response)), i(v()), !1)) ); } async function T() { return fetch(_.a.api.uri + "/system_status/grid_status", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((e) => e) .catch((e) => { throw e; }); } function A() { return async (e) => { e(f()); try { e( (function (e) { return m({ type: a.RECEIVE_GRID_STATUS_SUCCESS, receivedAt: Date.now() }, e); })(await Object(d.e)(d.a, new Error("Request timed out"), T())) ); } catch (t) { e(h(new o.default(a.RECEIVE_GRID_STATUS_ERROR, t.toString(), t.response))); } }; } function C(e) { return (t) => ( t(E()), fetch(_.a.api.uri + "/site_info/offgrid", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ offgrid: e }) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((i) => { t( (function (e) { return m({ type: a.RECEIVE_SAVE_OFF_GRID_SUCCESS, receivedAt: Date.now() }, e); })({ offGrid: e }) ); }) .catch((e) => { t(Object(r.showError)(a.RECEIVE_SAVE_OFF_GRID_ERROR, e.toString(), e.response)), t(b()); }) ); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "requestNetworks", function () { return E; }), i.d(t, "receiveNetworks", function () { return b; }), i.d(t, "receiveNetworksError", function () { return y; }), i.d(t, "requestAccessPoints", function () { return S; }), i.d(t, "receiveAccessPointsSuccess", function () { return R; }), i.d(t, "receiveAccessPointsError", function () { return T; }), i.d(t, "resetNetworkConfig", function () { return L; }), i.d(t, "requestClientProtocols", function () { return M; }), i.d(t, "receiveClientProtocolsError", function () { return z; }), i.d(t, "cancelNetwork", function () { return V; }), i.d(t, "fetchNetworks", function () { return G; }), i.d(t, "scanWifiNetworks", function () { return j; }), i.d(t, "connectWifi", function () { return W; }), i.d(t, "enableWifi", function () { return F; }), i.d(t, "connectEthernet", function () { return q; }), i.d(t, "disconnectNetwork", function () { return x; }), i.d(t, "deleteNetwork", function () { return B; }), i.d(t, "editNetworkService", function () { return Q; }), i.d(t, "enableNetworkService", function () { return Z; }), i.d(t, "startInternetConnectivityCheck", function () { return J; }), i.d(t, "checkInternetConnectivity", function () { return X; }), i.d(t, "pingNetworks", function () { return $; }), i.d(t, "setClientProtocols", function () { return ee; }), i.d(t, "fetchClientProtocols", function () { return te; }); var n = i(18), r = i.n(n), a = i(7), o = i(2), s = i(14), _ = i(37), l = i(5), c = i.n(l), d = i(6), u = i(96), m = i(4), p = i(15), g = i(29); function w(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function v(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? w(Object(i), !0).forEach(function (t) { f(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : w(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function f(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } let h = null; const E = Object(d.b)(o.REQUEST_NETWORKS); function b(e) { return { type: o.RECEIVE_NETWORKS_SUCCESS, receivedAt: Date.now(), networks: e }; } const y = Object(d.b)(o.RECEIVE_NETWORKS_ERROR), S = Object(d.b)(o.REQUEST_ACCESS_POINTS); function R(e) { return { type: o.RECEIVE_ACCESS_POINTS_SUCCESS, receivedAt: Date.now(), accessPoints: e }; } const T = Object(d.b)(o.RECEIVE_ACCESS_POINTS_ERROR), A = Object(d.b)(o.REQUEST_SCAN_WIFI_NETWORKS); const C = Object(d.b)(o.RECEIVE_SCAN_WIFI_NETWORKS_ERROR); const I = Object(d.b)(o.RECEIVE_CONNECT_WIFI_ERROR); const O = Object(d.b)(o.RECEIVE_CONNECT_ETHERNET_SUCCESS), N = Object(d.b)(o.RECEIVE_CONNECT_ETHERNET_ERROR), k = Object(d.b)(o.REQUEST_DISCONNECT_NETWORK); const P = Object(d.b)(o.RECEIVE_DISCONNECT_NETWORK_ERROR), D = Object(d.b)(o.REQUEST_DELETE_NETWORK); const L = Object(d.b)(o.RESET_NETWORK_CONFIG), M = Object(d.b)(o.REQUEST_CLIENT_PROTOCOLS), z = Object(d.b)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR); function U(e) { return { type: o.RECEIVE_CLIENT_PROTOCOLS_SUCCESS, receivedAt: Date.now(), clientProtocols: e }; } function V() { return Object(p.b)(), (h = null), { type: o.CANCEL_NETWORK }; } function G() { return (e) => ( e(E()), e(Object(a.clearError)(o.RECEIVE_NETWORKS_ERROR)), fetch(c.a.api.uri + "/networks", { credentials: c.a.credentials }) .then(m.parseJSON) .then(m.checkResponseStatus) .then((t) => { e(b(t.map(u.o))); }) .catch((t) => { Object(g.g)(t) ? e(y(new s.default(o.RECEIVE_NETWORKS_ERROR, t.toString(), t.response))) : (e(Object(a.showError)(o.RECEIVE_NETWORKS_ERROR, t.toString(), t.response)), e(y())); }) ); } function j() { return (e) => ( e(A()), e(Object(a.clearError)(o.RECEIVE_SCAN_WIFI_NETWORKS_ERROR)), fetch(c.a.api.uri + "/networks/request_scan_wifi", { method: "POST", credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then(() => { e({ type: o.RECEIVE_SCAN_WIFI_NETWORKS_SUCCESS, receivedAt: Date.now() }), e(G()); }) .catch((t) => { Object(g.g)(t) ? e(C(new s.default(o.RECEIVE_SCAN_WIFI_NETWORKS_ERROR, t.toString(), t.response))) : (e(Object(a.showError)(o.RECEIVE_SCAN_WIFI_NETWORKS_ERROR, t.toString(), t.response)), e(C())); }) ); } function W(e, t, i, n, r) { return async (s) => { s( (function (e) { return { type: o.REQUEST_CONNECT_WIFI, startedAt: Date.now(), networkName: e, interface: _.d.WIFI }; })(e) ), s(Object(a.clearError)(o.RECEIVE_CONNECT_WIFI_ERROR)); let l = { networkName: e, interface: _.d.WIFI, username: n, password: i, securityType: t }; try { await Y(l, 6e4), s(F(e, n, r)); } catch (t) { if (Object(g.n)(t)) return s(Object(a.showError)(o.RECEIVE_CONNECT_WIFI_ERROR, t.toString(), t.response)), s(I()), !1; s(F(e, n, r)); } return !0; }; } function F(e, t, i, n = 1e3, r = 45) { return async (s) => { try { await Object(p.d)(n); for (let n = 0; n < r; n++) { if (null == h) return; const n = await H(e, i); if (n) return s(((_ = v(v({}, n), {}, { ssid: e, username: t })), v({ type: o.RECEIVE_CONNECT_WIFI_SUCCESS, receivedAt: Date.now() }, _))), void s(G()); await Object(p.d)(1e3); } throw new Error("Connection timeout. Please check the wifi connectivity and/or credentials."); } catch (e) { s(Object(a.showError)(o.RECEIVE_CONNECT_WIFI_ERROR, e.toString(), e.response)), s(I()); } var _; }; } function q(e, t, i, n, r, s, l = 1e3, c = 45) { return async (d) => { d({ type: o.REQUEST_CONNECT_ETHERNET, startedAt: Date.now(), networkName: _.e.ETHERNET, interface: _.d.ETHERNET }), d(Object(a.clearError)(o.RECEIVE_CONNECT_ETHERNET_ERROR)); const u = { networkName: _.e.ETHERNET, interface: _.d.ETHERNET, dhcp: e, ip: t, primaryDNS: r, backupDNS: s, subnet: i, gateway: n }; try { await Object(p.d)(l), await Q(u), await Y(u, 6e4); for (let e = 0; e < c; e++) { if (null == h) return; if (await K(_.d.ETHERNET)) return void d(O()); await Object(p.d)(1e3); } throw new Error("Connection timeout. Please check the ethernet connectivity and/or settings."); } catch (e) { d(Object(a.showError)(o.RECEIVE_CONNECT_ETHERNET_ERROR, e.toString(), e.response)), d(N()); } }; } function x(e, t) { return (t) => ( t(k()), fetch(`${c.a.api.uri}/networks/${e}/disconnect`, { method: "DELETE", credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then(() => { var i; t(((i = { device: e }), v({ type: o.RECEIVE_DISCONNECT_NETWORK_SUCCESS, receivedAt: Date.now() }, i))), t(G()); }) .catch((e) => { t(Object(a.showError)(o.RECEIVE_DISCONNECT_NETWORK_ERROR, e.toString(), e.response)), t(P()); }) ); } function B(e, t, i) { return (i) => ( i(D()), i(Object(a.clearError)(o.RECEIVE_DELETE_NETWORK_ERROR)), fetch(c.a.api.uri + "/networks", { method: "DELETE", credentials: c.a.credentials, body: JSON.stringify({ network_name: e, interface: t }) }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then(() => { var t; i(((t = { networkName: e }), v({ type: o.RECEIVE_DELETE_NETWORK_SUCCESS, receivedAt: Date.now() }, t))), i(G()); }) .catch((e) => { i(Object(a.showError)(o.RECEIVE_DELETE_NETWORK_ERROR, e.toString(), e.response)); }) ); } async function H(e, t) { try { return (await $()).find((i) => { const n = i.interface === _.d.WIFI && i.networkName === e && !0 === i.active; return t ? n && r()(i, (e) => e.iface_network_info.ip_networks[0].ip) : n; }); } catch (e) { return; } } async function K(e, t = !1) { try { return (await $()).find((i) => { const n = i.interface === e && !0 === i.active; return t ? n && r()(i, (e) => e.iface_network_info.ip_networks[0].ip) : n; }); } catch (e) { return; } } async function Y(e, t = 1e3) { return ( (h = 0), Object(p.e)( t, new Error("Request timed out"), fetch(c.a.api.uri + "/networks/connect", { method: "POST", credentials: c.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(Object(u.e)(e)) }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then((e) => e) .catch((e) => { throw e; }) ) ); } async function Q(e) { return ( (h = 0), fetch(c.a.api.uri + "/networks", { method: "POST", credentials: c.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(Object(u.e)(e)) }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .catch((e) => { throw e; }) ); } async function Z(e) { return fetch(`${c.a.api.uri}/networks/enable_${e}`, { method: "POST", credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .catch((e) => { throw e; }); } async function J() { return fetch(c.a.api.uri + "/system/networks/conn_tests", { method: "POST", credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .catch((e) => { throw e; }); } async function X() { return fetch(c.a.api.uri + "/system/networks/conn_tests", { credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then((e) => e) .catch((e) => { throw e; }); } async function $(e = 2e3) { return Object(p.e)( e, new Error("Request timed out"), fetch(c.a.api.uri + "/networks", { credentials: c.a.credentials }) .then(m.parseJSON) .then(m.checkResponseStatus) .then((e) => e.map(u.o)) .catch((e) => { throw e; }) ); } function ee(e) { return (t) => ( t(Object(a.clearError)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR)), t(M()), fetch(c.a.api.uri + "/networks/client_protocols", { method: "POST", credentials: c.a.credentials, body: JSON.stringify(e) }) .then(m.parseJSON) .then(m.checkResponseStatus) .then((e) => { t(U(e)); }) .catch((e) => { t(z()), t(Object(a.showError)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR, e.toString(), e.response)); }) ); } function te() { return (e) => ( e(Object(a.clearError)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR)), e(M()), fetch(c.a.api.uri + "/networks/client_protocols", { credentials: c.a.credentials }) .then(m.parseJSON) .then(m.checkResponseStatus) .then((t) => { e(U(t)); }) .catch((t) => { e(Object(a.showError)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR, t.toString(), t.response)), e(z()); }) ); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return l; }), i.d(t, "sitemasterRunningSelector", function () { return c; }), i.d(t, "isResiSelector", function () { return d; }); var n = i(203), r = i(46); function a(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function o(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? a(Object(i), !0).forEach(function (t) { s(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : a(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function s(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const _ = { entities: {}, running: !0 }; function l(e = _, { type: t, payload: i }) { switch (t) { case n.b: return o(o({}, e), {}, { entities: o({}, i) }); case n.a: return o(o({}, e), {}, { entities: {} }); case n.d: return o(o({}, e), {}, { running: i.running }); default: return e; } } const c = ({ modbus: e }) => e.running, d = ({ configuration: e }) => Object(r.isResiGateway)(e.deviceType); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetCustomerInformation", function () { return E; }), i.d(t, "getCustomerInformation", function () { return S; }), i.d(t, "registerCustomerInformation", function () { return R; }), i.d(t, "saveLegalInformation", function () { return T; }), i.d(t, "getRegistration", function () { return A; }); var n = i(2), r = i(7), a = i(127), o = i(5), s = i.n(o), _ = i(6), l = i(4), c = i(15), d = i(128); function u(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function m(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? u(Object(i), !0).forEach(function (t) { p(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : u(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function p(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const g = Object(_.b)(n.REQUEST_CUSTOMER_INFORMATION_CONFIG); const w = Object(_.b)(n.RECEIVE_CUSTOMER_INFORMATION_CONFIG_ERROR), v = Object(_.b)(n.REQUEST_SAVE_LEGAL_INFORMATION); const f = Object(_.b)(n.RECEIVE_SAVE_LEGAL_INFORMATION_ERROR), h = Object(_.b)(n.REQUEST_REGISTER_CUSTOMER_INFORMATION); const E = Object(_.b)(n.RESET_CUSTOMER_INFORMATION), b = Object(_.b)(n.REQUEST_REGISTRATION); const y = Object(_.b)(n.RECEIVE_REGISTRATION_ERROR); function S() { return (e) => ( e(g()), fetch(s.a.api.uri + "/customer", { method: "GET", credentials: s.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { e( (function (e) { return m({ type: n.RECEIVE_CUSTOMER_INFORMATION_CONFIG_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(w(t)); }) ); } function R({ given_name: e, family_name: t, email: i, phone: o, street: _, city: u, state: p, zip: g, country: w }) { return async (v) => { v(h()), v(Object(r.clearError)(n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR)); const f = { given_name: e, family_name: t, email: i, phone: o, street: _, city: u, state: p, zip: g, country: w }; try { await Object(c.e)( 75e3, new Error("Request timed out"), fetch(s.a.api.uri + "/customer", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(f) }) .then(l.parseJSON) .then(l.checkResponseStatus) .then( (e) => ( Object(d.a)(a.a), v( (function (e) { return m({ type: n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_SUCCESS, receivedAt: Date.now() }, e); })(e) ), null ) ) ); } catch (e) { return ( v(Object(r.showError)(n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR, e.toString(), e.response)), v( (function (e, t) { return m({ type: n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR, error: e }, t); })(e, f) ), e ); } }; } function T({ marketing: e, privacyNotice: t, limitedWarranty: i, gridServices: a, consent: o }) { return (_) => { _(v()), _(Object(r.clearError)(n.RECEIVE_SAVE_LEGAL_INFORMATION_ERROR)); let c = { marketing: e, privacy_notice: t, limited_warranty: i, grid_services: a }; return fetch(s.a.api.uri + "/customer/registration/legal", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(c) }) .then(l.parseJSON) .then(l.checkResponseStatus) .then((e) => { _( (function (e) { return m({ type: n.RECEIVE_SAVE_LEGAL_INFORMATION_SUCCESS, receivedAt: Date.now() }, e); })(m(m({}, e), {}, { consent: o })) ); }) .catch((e) => { _(Object(r.showError)(n.RECEIVE_SAVE_LEGAL_INFORMATION_ERROR, e.toString(), e.response)), _(f(e)); }); }; } function A() { return (e) => ( e(b()), fetch(s.a.api.uri + "/customer/registration", { credentials: s.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e( (function (e) { return m({ type: n.RECEIVE_REGISTRATION_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(y(t)); }) ); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return _; }), i.d(t, "sitemasterStatusSelector", function () { return l; }); var n = i(200); function r(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function a(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? r(Object(i), !0).forEach(function (t) { o(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function o(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { running: !0 }; function _(e = s, { type: t, payload: i }) { switch (t) { case n.a: return a(a({}, e), {}, { running: i.running }); default: return e; } } const l = ({ meterValidation: e }) => e.running; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const s = a(i(1)), _ = i(3), l = o(i(579)), c = o(i(153)), d = o(i(585)), u = o(i(271)), m = o(i(653)), p = o(i(654)), g = o(i(273)), w = i(50); i(655); class v extends s.Component { constructor() { super(...arguments), (this.state = { passwordInput: "", showPassword: !1 }); } getPassword() { return this.state.passwordInput; } setPassword(e) { this.setState({ passwordInput: e }); } render() { var e, t; let i = null !== (e = this.props.className) && void 0 !== e ? e : "password-input", n = null !== (t = this.props.formClassName) && void 0 !== t ? t : "form-horizontal"; const { customLabel: r, formError: a, showForm: o } = this.props; let l = s.createElement( "div", { className: "form-group form-password " + (a ? "has-error" : ""), key: "fp" }, s.createElement( "label", { className: "col-sm-2 control-label" }, r ? s.createElement("span", null, r) : s.createElement("span", null, s.createElement(_.FormattedMessage, { id: "password_input_view_password", defaultMessage: "PASSWORD" })) ), s.createElement("div", { className: "col-sm-10" }, this._getShowPasswordIcon(), this._getPasswordInput()), a ? s.createElement("span", { className: "help-block col-sm-10" }, s.createElement("img", { className: "warning", src: g.default, alt: "Warning" }), a) : null ); return o ? s.createElement( "div", { className: i }, s.createElement("form", { role: "form", className: n, onSubmit: this._handlePasswordSubmit.bind(this) }, l, this._getShowPasswordButton(), s.createElement("button", { type: "submit" })) ) : s.createElement("div", { className: i }, l, this._getShowPasswordButton()); } _getShowPasswordIcon() { if (!this.props.useShowPasswordIcon) return null; const { showPassword: e } = this.state, { showSubmittable: t } = this.props; return s.createElement("img", { src: e ? m.default : p.default, className: (0, w.classNames)("eye-icon py-3 pl-5 pr-4", { "eye-icon-submittable": t }), onClick: this._handleShowPasswordChange.bind(this), alt: "" + (e ? "Show password" : "Hide password"), }); } _getShowPasswordButton() { return this.props.useShowPasswordIcon ? null : s.createElement( "div", { className: "checkbox", key: "cb" }, s.createElement( "label", null, s.createElement("input", { type: "checkbox", onChange: this._handleShowPasswordChange.bind(this), defaultChecked: this.state.showPassword }), s.createElement("span", null, s.createElement(_.FormattedMessage, { id: "password_input_view_show_password", defaultMessage: "Show Password" })) ) ); } _getPasswordInput() { var e; let t = this.state.passwordInput; const { showSubmittable: i, useShowPasswordIcon: n, isValidating: r, inputProps: a } = this.props; let o = Object.assign( Object.assign( { type: this.state.showPassword ? "text" : "password", name: "input-password", autoCapitalize: "none", autoComplete: "current-password", autoCorrect: "off", value: t, onChange: this._handlePasswordChange.bind(this), required: !0, }, a ), { className: (0, w.classNames)(null !== (e = null == a ? void 0 : a.className) && void 0 !== e ? e : "form-control", { "password-field-with-icon": !!n }) } ); if (!i) return s.createElement("input", Object.assign({}, o)); let _ = "input-group-default", m = c.default, p = ""; return ( t.length && ((_ = "input-group-action"), (m = d.default)), r && ((_ = "disabled " + (n ? "input-group-validation" : "input-group-default")), (m = u.default), (p = "spinner")), s.createElement(l.default, { inputProps: o, inputAddonProps: { className: "input-group-addon relative " + _, onClick: this._handlePasswordSubmit.bind(this) }, inputAddonView: s.createElement("img", { className: p, src: m, alt: "Password Submit" }), }) ); } _handlePasswordChange(e) { let t = e.target.value; t ? this.props.enableForward && this.props.enableForward(t) : this.props.disableForward && this.props.disableForward(), this.setState({ passwordInput: t }); } _handleShowPasswordChange() { let e = !this.state.showPassword; this.setState({ showPassword: e }), this.props.onShowPasswordChange && this.props.onShowPasswordChange(e); } _handlePasswordSubmit(e) { e.preventDefault(), this.state.passwordInput && this.props.handleSubmit && this.props.handleSubmit(); } } t.default = v; }, , function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.LoadingSpinner = void 0); const s = a(i(1)), _ = o(i(583)); t.LoadingSpinner = (e) => s.createElement("img", { className: e.className, src: _.default }); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetTests", function () { return h; }), i.d(t, "cancelTest", function () { return E; }), i.d(t, "fetchTestResults", function () { return b; }), i.d(t, "runInverterTest", function () { return y; }), i.d(t, "fetchAlerts", function () { return S; }); var n = i(2), r = i(14), a = i(7), o = i(22), s = i(5), _ = i.n(s), l = i(6), c = i(4); function d(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function u(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const m = Object(l.b)(n.REQUEST_TEST_RESULTS); function p(e) { return (function (e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(i), !0).forEach(function (t) { u(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : d(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; })({ type: n.RECEIVE_TEST_RESULTS, receivedAt: Date.now() }, e); } const g = Object(l.b)(n.REQUEST_RUN_INVERTER_TEST); const w = Object(l.b)(n.REQUEST_CANCEL_TEST); const v = Object(l.b)(n.REQUEST_TEST_ALERTS); const f = Object(l.b)(n.RECEIVE_TEST_ALERTS_ERROR), h = Object(l.b)(n.RESET_TESTS); function E() { return (e) => ( e(w()), e(Object(a.clearErrors)()), fetch(_.a.api.uri + "/system/testing", { method: "DELETE", credentials: _.a.credentials }) .then(c.parseText) .then(c.parseResponseText) .then(c.checkResponseStatus) .then(() => { e({ type: n.RECEIVE_CANCEL_TEST_SUCCESS, receivedAt: Date.now() }); }) .catch((t) => { e(Object(a.showError)(n.RECEIVE_CANCEL_TEST_ERROR, t.toString(), t.response)); }) ); } function b() { return (e) => ( e(m()), e(Object(a.clearErrors)()), fetch(_.a.api.uri + "/system/testing", { credentials: _.a.credentials }) .then(c.parseText) .then(c.parseResponseText) .then(c.checkResponseStatus) .then((t) => { e(p(t)); }) .catch((t) => { e( (function (e) { let t = e.getContext(); return { type: n.RECEIVE_TEST_RESULTS_ERROR, errors: null != t ? t.error : null }; })(new r.default(n.RECEIVE_TEST_RESULTS_ERROR, t.toString(), t.response)) ); }) ); } function y() { return (e) => ( e(g()), e(Object(a.clearErrors)()), fetch(_.a.api.uri + "/system/testing/PINV_TEST", { method: "POST", credentials: _.a.credentials }) .then(c.parseText) .then(c.parseResponseText) .then(c.checkResponseStatus) .then(() => { e({ type: n.RECEIVE_RUN_INVERTER_TEST_SUCCESS, receivedAt: Date.now(), running: !0, status: o.o.INIT }); }) .catch((t) => { e(Object(a.showError)(n.RECEIVE_RUN_INVERTER_TEST_ERROR, t.toString(), t.response)), e( (function (e) { let t = e.getContext(); return { type: n.RECEIVE_RUN_INVERTER_TEST_ERROR, errors: null != t ? t.error : null }; })(new r.default(n.RECEIVE_RUN_INVERTER_TEST_ERROR, t.toString(), t.response)) ); }) ); } function S() { return (e) => ( e(v()), fetch(_.a.api.uri + "/system_status/grid_faults", { credentials: _.a.credentials }) .then(c.checkStatus) .then(c.parseJSON) .then((t) => { e( (function (e) { return { type: n.RECEIVE_TEST_ALERTS_SUCCESS, receivedAt: Date.now(), alerts: e }; })(t) ); }) .catch((t) => { e(f(new r.default(n.RECEIVE_TEST_ALERTS_ERROR, t.toString(), t.response))); }) ); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return l; }), i.d(t, "hasSolarPowerwallSelector", function () { return d; }); var n = i(13), r = i(92); function a(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function o(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? a(Object(i), !0).forEach(function (t) { s(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : a(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function s(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const _ = { isChecking: !1, isFetching: !1, isEnumerating: !1, isUpdating: !1, isDetectingGrid: !1, isDetectingPhase: !1, isSettingPhase: !1, didInvalidate: !1, gridQualifying: !1, gridCodeValidating: !1, detectedOnGrid: null, soe: null, hasBackupDisconnect: !1, hasSync: !1, syncStatus: null, items: [], lineStatuses: [], lineVoltages: [0, 0, 0], phaseDetectionNotAvailable: !1, pviSubPackageNumbers: null, }; function l(e = _, t) { switch (t.type) { case "REQUEST_POWERWALLS_UPDATE": return o(o({}, e), {}, { isUpdating: !0, didInvalidate: !1 }); case "REQUEST_POWERWALLS_STATUS": return o(o({}, e), {}, { isChecking: !0 }); case "REQUEST_START_PHASE_DETECTION": return o(o({}, e), {}, { isDetectingPhase: !0, didInvalidate: !1 }); case "REQUEST_SAVE_PHASE_USAGES": return o(o({}, e), {}, { isSettingPhase: !0 }); case "REQUEST_POWERWALLS": return o(o({}, e), {}, { isFetching: !0 }); case "SCAN_POWERWALLS": return o(o({}, e), {}, { isEnumerating: !0, isFetching: !0, didInvalidate: !1 }); case "RECEIVE_POWERWALLS": return o( o({}, e), {}, { isEnumerating: !1, isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, hasBackupDisconnect: !!t.sync || !!t.msa, hasSync: !!t.sync, syncStatus: t.sync_status, isUpdating: t.updating, isDetectingGrid: t.checking_if_offgrid, detectedOnGrid: t.is_on_grid, isDetectingPhase: t.running_phase_detection, gridQualifying: t.grid_qualifying, gridCodeValidating: t.grid_code_validating, phaseDetectionNotAvailable: t.phase_detection_not_available, msa: t.msa ? { partNumber: t.msa.PackagePartNumber || "", serialNumber: t.msa.PackageSerialNumber || "" } : null, items: t.powerwalls ? t.powerwalls.map((e) => ({ partNumber: e.PackagePartNumber || "", serialNumber: e.PackageSerialNumber || "", type: e.type, status: e.status, line: c(e.phase), gridState: e.grid_state, gridReconnectDurationSeconds: null != e.grid_reconnection_time_seconds ? Math.round(e.grid_reconnection_time_seconds) : e.grid_reconnection_time_seconds, })) : [], } ); case "RECEIVE_POWERWALLS_STATUS_SUCCESS": return o( o({}, e), {}, { isChecking: !1, isEnumerating: t.enumerating, isUpdating: t.updating, isDetectingGrid: t.checking_if_offgrid, detectedOnGrid: t.is_on_grid, isDetectingPhase: t.running_phase_detection, gridQualifying: t.grid_qualifying, gridCodeValidating: t.grid_code_validating, phaseDetectionNotAvailable: t.phase_detection_not_available, } ); case "RECEIVE_FETCH_PHASE_INFORMATION_SUCCESS": return o(o({}, e), {}, { didInvalidate: !1, lineStatuses: t.lineStatuses, lineVoltages: t.lineVoltages }); case "RECEIVE_SAVE_PHASE_USAGES_SUCCESS": return o(o({}, e), {}, { lineStatuses: t.lineStatuses, lineVoltages: t.lineVoltages, isSettingPhase: !1 }); case "RECEIVE_SOE_SUCCESS": return o(o({}, e), {}, { soe: t.percentage }); case "RECEIVE_START_PHASE_DETECTION_SUCCESS": return o({}, e); case "RECEIVE_POWERWALLS_STATUS_ERROR": return o(o({}, e), {}, { isChecking: !1 }); case "RECEIVE_POWERWALLS_ERROR": return o(o({}, e), {}, { isEnumerating: !1, isFetching: !1, didInvalidate: !0 }); case "RECEIVE_POWERWALLS_UPDATE_ERROR": return o(o({}, e), {}, { isUpdating: !1, didInvalidate: !0 }); case "RECEIVE_START_PHASE_DETECTION_ERROR": return o(o({}, e), {}, { isDetectingPhase: !1, didInvalidate: !0 }); case "RECEIVE_SAVE_PHASE_USAGES_ERROR": return o(o({}, e), {}, { isSettingPhase: !1 }); case "RECEIVE_FETCH_PHASE_INFORMATION_ERROR": return o(o({}, e), {}, { didInvalidate: !0, lineStatuses: [], lineVoltages: [0, 0, 0] }); case "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS": return o(o({}, e), {}, { pviSubPackageNumbers: t.pvi_sub_package_numbers }); case "RESET_ALL": case "RESET_POWERWALL_CONFIG": return _; default: return e; } } function c(e) { switch (e) { case n.i.PHASE_1: case n.h[n.i.PHASE_1]: return 0; case n.i.PHASE_2: case n.h[n.i.PHASE_2]: return 1; case n.i.PHASE_3: case n.h[n.i.PHASE_3]: return 2; default: return 0; } } function d({ powerwall: e }) { return e.items.some((e) => e.type === r.a.SolarPowerwall); } }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3); t.default = () => r.default.createElement( "div", { className: "not-found" }, r.default.createElement(a.FormattedMessage, { tagName: "h3", id: "not_found_title", defaultMessage: "404 page not found" }), r.default.createElement(a.FormattedMessage, { tagName: "p", id: "not_found_description", defaultMessage: "We are sorry but the page you are looking for does not exist." }) ); }, , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return d; }), i.d(t, "errorSelector", function () { return u; }); var n = i(27), r = i(2), a = i(14), o = i(29); function s(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function _(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? s(Object(i), !0).forEach(function (t) { l(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : s(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function l(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const c = { items: [] }; function d(e = c, t) { switch (t.type) { case r.SHOW_ERROR: return _(_({}, e), {}, { items: Object(n.uniqBy)([...e.items, new a.default(t.name, t.message, t.context, t.logError)], (e) => e.getName() + " - " + e.getMessage()) }); case r.CLEAR_ERROR: return _(_({}, e), {}, { items: e.items.filter((e) => (t.context ? !(e.getName() === t.name && Object(n.isEqual)(t.context, e.getContext())) : e.getName() !== t.name)) }); case r.CLEAR_ERRORS: return _(_({}, e), {}, { items: [] }); case r.RECEIVE_LOGIN_SUCCESS: return _(_({}, e), {}, { items: e.items.filter((e) => !Object(o.o)(e)) }); case r.RESET_ALL: case r.RESET_ERROR_CONFIG: return c; default: return e; } } const u = ({ error: e }) => e; }, , , , , , , function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAAXNSR0IArs4c6QAAAZVJREFUOBGtlbtKA0EYhbPipQkIipjWYCHCNhZCGi2ExTJvYCPY5hUE38AXsLFJ5QMY0U5r8YZRLNJqZWO1fmeZ2Uz0342XDRz+f845c3ZnmNlEtYJfmqYxUhtsgWVQB++gD3rgJIqia+r4H2FNcAzuwD5ogQaYdlVj8dLla5amYkjAM+iAmTKzdOeTPzG9EsAjWDcNBaT8bt5oMKSWrCf+KtA/R/Pc/OFWQGhvOt5kVfQ5i/ec5isnG9PEQJv+bQ/hpsABuHF4oe74oLDCa4+VE08i6Nh0OR4focn1G1Txa9KZsEJ/Qb1ifO88WXF6l0G7hkGmVmgo6/Fegm3LoxxwrtABaFimkMMzC/aAtmA+1HwPr/M8mIDQTXnzglUxbsLfglWQsNRXywennPqP3pRQHZnDgqCcxpO/6RPsUq7YzQP0kS2NsMrpa/mnwNz4wL5IvxCMi1rl9LT8wnPqZ+LZBWd+bFX0/JxmOsTYG2UFhRwZwxslAaL6u++Cq/1K+WXwxtV+T4Pgf3/5Ix/2tfLWf/6P+gSsbLdeCWlBGQAAAABJRU5ErkJggg=="; }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) {}, , , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.SiteControllerLocation = void 0); const r = n(i(1)), a = i(138), o = i(3), s = n(i(748)), _ = n(i(263)), l = i(48), c = n(i(750)), d = n(i(447)), u = n(i(752)), m = n(i(753)), p = n(i(754)); var g; !(function (e) { (e.Gateway = "Gateway"), (e.SolarPowerwall = "SolarPowerwall"); })((g = t.SiteControllerLocation || (t.SiteControllerLocation = {}))), (t.default = function (e) { const t = e.root, i = `${t.partNumber()}--${t.serialNumber()}`; let n = !1, w = !1, v = 0, f = t.vitals().getString("STSTSM-Location"); t.followers.length > 0 ? (n = !0) : t.leader && (w = !0); let h = !1, E = !1; for (const e of t.children) { const t = e.type(); t === a.DeviceType.SYNC ? (E = !0) : t === a.DeviceType.MSA && (h = !0); } let b = t.children.map((i) => { const o = i.din(); switch (i.type()) { case a.DeviceType.SPW: let _ = v; return v++, r.default.createElement(p.default, { device: i, key: o, leader: n, follower: w, index: _, sitemanagerRunning: e.sitemanagerRunning }); case a.DeviceType.ACPW: return r.default.createElement(m.default, { device: i, key: o }); case a.DeviceType.MSA: return r.default.createElement(c.default, { device: i, key: o }); case a.DeviceType.SYNC: return h ? r.default.createElement(s.default, { device: i, key: o, overrideSerialNumber: f === g.Gateway ? t.serialNumber() : void 0 }) : r.default.createElement(c.default, { device: i, key: o, overrideSerialNumber: f === g.Gateway ? t.serialNumber() : void 0 }); case a.DeviceType.NEURIO: return r.default.createElement(u.default, { device: i, key: o }); } }), y = []; for (let e in l.InstallationProblems) t.vitals().getBoolean("STSTSM-" + e) && y.push(r.default.createElement(_.default, { key: e, problem: e, location: f, hasMSA: h, hasSYNC: E, hasSolarPowerwall: v > 0 })); return ( (b = b.filter((e) => !!e)), r.default.createElement( "div", { className: "system-sitecontroller" }, f === g.Gateway && r.default.createElement(o.FormattedMessage, { id: "system_gateway_din", defaultMessage: "Gateway: {din}", values: { din: r.default.createElement("b", null, i) } }), f === g.SolarPowerwall && r.default.createElement(o.FormattedMessage, { id: "system_controller_din", defaultMessage: "Controller: {din}", values: { din: r.default.createElement("b", null, i) } }), y, b, 0 === b.length && r.default.createElement(d.default, { din: i }, r.default.createElement(o.FormattedMessage, { id: "system-device-unknown-sitecontroller", defaultMessage: "Device has not yet discovered its children" })) ) ); }); }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(62); t.default = function ({ din: e, children: t }) { return r.default.createElement( "div", { className: "system-sitecontroller missing" }, r.default.createElement(a.DeviceView, { doNotCollapse: !0 }, r.default.createElement(a.DeviceHeader, null, e), r.default.createElement(a.DeviceBody, null, t)) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(155), o = i(3), s = i(62), _ = (0, o.defineMessages)({ PINV_ACStageFault: { id: "vitals_powerwall_state_ac_fault", defaultMessage: "AC Stage Fault" }, PINV_DCStageFault: { id: "vitals_powerwall_state_dc_fault", defaultMessage: "DC Stage Fault" }, PINV_GridForming: { id: "vitals_powerwall_state_grid_forming", defaultMessage: "Grid Forming" }, PINV_GridFollowing: { id: "vitals_powerwall_state_grid_following", defaultMessage: "Grid Following" }, PINV_SupportDC: { id: "vitals_powerwall_state_support_dc", defaultMessage: "Support DC" }, PINV_Standby: { id: "vitals_powerwall_state_standby", defaultMessage: "Standby" }, PINV_Init: { id: "vitals_powerwall_state_init", defaultMessage: "Initializing" }, PINV_Off: { id: "vitals_powerwall_state_off", defaultMessage: "Off" }, }); t.default = function (e) { const t = e.device.vitals(); let i, n = t.getString("PINV_State"), l = n && _[n], c = l ? r.default.createElement(o.FormattedMessage, Object.assign({}, l)) : s.MissingValue, d = t.getNumber("POD_nom_energy_remaining"), u = t.getNumber("POD_nom_full_pack_energy"); void 0 !== d && void 0 !== u && (i = (100 * d) / u); let m = t.getNumber("PINV_Vout"), p = t.getNumber("PINV_Pout"); return ( p && (p *= 1e3), r.default.createElement( r.default.Fragment, null, r.default.createElement("p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_state", defaultMessage: "Powerwall State: {state}", values: { state: c } })), r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_charge", defaultMessage: "Charge Level: {charge}%", values: { charge: r.default.createElement(s.Vital, { value: i }) } }) ), r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_voltage", defaultMessage: "AC Voltage: {voltage}", values: { voltage: r.default.createElement(a.Volts, { value: r.default.createElement(s.Vital, { value: m }) }) }, }) ), !p && r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_power", defaultMessage: "AC Power: {power}", values: { power: r.default.createElement(a.Watts, { value: r.default.createElement(s.Vital, { value: p }) }) }, }) ), void 0 !== p && p > 0 && r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_power_discharging", defaultMessage: "AC Power: {power} Discharging", values: { power: r.default.createElement(a.Watts, { value: r.default.createElement(s.Vital, { value: p }) }) }, }) ), void 0 !== p && p < 0 && r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_power_charging", defaultMessage: "AC Power: {power} Charging", values: { power: r.default.createElement(a.Watts, { value: r.default.createElement(s.Vital, { value: -p }) }) }, }) ) ) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.powerStatusMessages = t.PowerStatus = void 0); const s = a(i(1)), _ = i(3), l = i(50), c = o(i(5)), d = i(264); var u; !(function (e) { (e.UNSET = "unset"), (e.ON = "on"), (e.OFF = "off"), (e.DC_ONLY = "dc_only"); })((u = t.PowerStatus || (t.PowerStatus = {}))), (t.powerStatusMessages = (0, _.defineMessages)({ [u.OFF]: { id: "pvi-power-status-disabled", description: "Label for button that sets the PV Inverter's power status to off (i.e. disconnect from DC strings and do not push power on AC).", defaultMessage: "Disabled" }, [u.DC_ONLY]: { id: "pvi-power-status-dc-only", description: "Label for button that sets the PV Inverter's power status to DC connected (i.e. connect on DC but do not push power on AC).", defaultMessage: "DC Only" }, [u.ON]: { id: "pvi-power-status-enabled", description: "Label for button that sets the PV Inverter's power status to A/C producing (i.e. connect on DC and push power on AC).", defaultMessage: "Enabled" }, })), (t.default = function ({ device: e, powerwallId: i, follower: n, sitemanagerRunning: r }) { let a = !r; i.startsWith("STSTSM--") && (i = i.substring(8)); let [o, m] = (0, s.useState)(u.UNSET), [p, g] = (0, s.useState)(0); function w(t) { var r; if (t === o) return; let a = null === (r = e.parent) || void 0 === r ? void 0 : r.din(); (null == a ? void 0 : a.startsWith("TETHC--")) && (a = a.substring(7)); const s = c.default.api.uri + "/powerwalls/pvi_power_status", _ = { pvi_power_status: t, battery_din: a, follower_din: n ? i : "" }; fetch(s, { method: "POST", credentials: c.default.credentials, body: JSON.stringify(_) }), m(t), g(Date.now()); } (0, s.useEffect)(() => { const t = d.VITALS_FETCH_INTERVAL + 1e3; let i = e.vitals().getString("PVI-PowerStatusSetpoint"); i === u.UNSET ? (i = u.ON) : i || (i = u.UNSET), i !== o && (o === u.UNSET || Date.now() - p > t) && m(i); }, [e]); let v = { className: (0, l.classNames)("inverter-power-button-left", { "inverter-power-button-selected": o === u.OFF }), onClick: () => w(u.OFF), disabled: a }, f = { className: (0, l.classNames)("inverter-power-button-center", { "inverter-power-button-selected": o === u.DC_ONLY }), onClick: () => w(u.DC_ONLY), disabled: a }, h = { className: (0, l.classNames)("inverter-power-button-right", { "inverter-power-button-selected": o === u.ON }), onClick: () => w(u.ON), disabled: a }; return s.default.createElement( "div", { className: "inverter-power-buttons" }, s.default.createElement("button", Object.assign({}, v), s.default.createElement(_.FormattedMessage, Object.assign({}, t.powerStatusMessages[u.OFF]))), s.default.createElement("button", Object.assign({}, f), s.default.createElement(_.FormattedMessage, Object.assign({}, t.powerStatusMessages[u.DC_ONLY]))), s.default.createElement("button", Object.assign({}, h), s.default.createElement(_.FormattedMessage, Object.assign({}, t.powerStatusMessages[u.ON]))) ); }); }, , , , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.BytesValue = t.StringValue = t.BoolValue = t.UInt32Value = t.Int32Value = t.UInt64Value = t.Int64Value = t.FloatValue = t.DoubleValue = void 0); const n = i(40), r = { value: 0 }, a = { value: 0 }, o = { value: 0 }, s = { value: 0 }, _ = { value: 0 }, l = { value: 0 }, c = { value: !1 }, d = { value: "" }, u = {}; function m(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } (t.DoubleValue = { encode: (e, t = n.Writer.create()) => (t.uint32(9).double(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, r); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.value = i.double(); break; default: i.skipType(7 & e); } } return o; }, }), (t.FloatValue = { encode: (e, t = n.Writer.create()) => (t.uint32(13).float(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, a); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.value = i.float(); break; default: i.skipType(7 & e); } } return o; }, }), (t.Int64Value = { encode: (e, t = n.Writer.create()) => (t.uint32(8).int64(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, o); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = m(i.int64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.UInt64Value = { encode: (e, t = n.Writer.create()) => (t.uint32(8).uint64(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, s); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = m(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.Int32Value = { encode: (e, t = n.Writer.create()) => (t.uint32(8).int32(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, _); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.int32(); break; default: i.skipType(7 & e); } } return a; }, }), (t.UInt32Value = { encode: (e, t = n.Writer.create()) => (t.uint32(8).uint32(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, l); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.uint32(); break; default: i.skipType(7 & e); } } return a; }, }), (t.BoolValue = { encode: (e, t = n.Writer.create()) => (t.uint32(8).bool(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, c); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.bool(); break; default: i.skipType(7 & e); } } return a; }, }), (t.StringValue = { encode: (e, t = n.Writer.create()) => (t.uint32(10).string(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, d); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.BytesValue = { encode: (e, t = n.Writer.create()) => (t.uint32(10).bytes(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, u); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.EnergySiteNetAPIGetConfigResponse = t.EnergySiteNetAPIGetConfigRequest = t.EnergySiteNetAPIRemoveDeviceResponse = t.EnergySiteNetAPIRemoveDeviceRequest = t.EnergySiteNetAPIAddDeviceResponse = t.EnergySiteNetAPIAddDeviceRequest = t.EnergySiteNetConfig = t.EnergySiteNetUnpairedDevice = t.EnergySiteNetRecentlyRemovedDevice = t.EnergySiteNetRecentlyAddedDevice = t.EnergySiteNetDevice = t.EnergySiteNetRemovalStatus = t.EnergySiteNetAdditionStatus = void 0); const n = i(175), r = i(40), a = {}, o = { status: 0 }, s = { status: 0 }, _ = {}, l = {}, c = {}, d = {}, u = {}, m = {}, p = {}, g = {}; !(function (e) { (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_INVALID = 0)] = "ENERGY_SITE_NET_ADDITION_STATUS_INVALID"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_IN_PROGRESS = 1)] = "ENERGY_SITE_NET_ADDITION_STATUS_IN_PROGRESS"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_ADDED = 2)] = "ENERGY_SITE_NET_ADDITION_STATUS_ADDED"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_FOUND = 3)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_FOUND"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CANNOT_JOIN = 4)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CANNOT_JOIN"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NO_RESPONSE = 5)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NO_RESPONSE"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_BAD_RESPONSE = 6)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_BAD_RESPONSE"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_INTERNAL_ERROR = 7)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_INTERNAL_ERROR"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CHANGES_PROHIBITED = 8)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CHANGES_PROHIBITED"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_MAX_DEVICES = 9)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_MAX_DEVICES"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_LEADER = 10)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_LEADER"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_EXISTS = 11)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_EXISTS"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.EnergySiteNetAdditionStatus || (t.EnergySiteNetAdditionStatus = {})), (function (e) { (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_INVALID = 0)] = "ENERGY_SITE_NET_REMOVAL_STATUS_INVALID"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_IN_PROGRESS = 1)] = "ENERGY_SITE_NET_REMOVAL_STATUS_IN_PROGRESS"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_REMOVED = 2)] = "ENERGY_SITE_NET_REMOVAL_STATUS_REMOVED"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_NO_SUCH_DEVICE = 3)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_NO_SUCH_DEVICE"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_INTERNAL_ERROR = 4)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_INTERNAL_ERROR"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_CHANGES_PROHIBITED = 5)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_CHANGES_PROHIBITED"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_AM_LEADER = 6)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_AM_LEADER"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_AM_SOLO = 7)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_AM_SOLO"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_NOT_LEADER = 8)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_NOT_LEADER"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_LEADER_AVAILABLE = 9)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_LEADER_AVAILABLE"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.EnergySiteNetRemovalStatus || (t.EnergySiteNetRemovalStatus = {})), (t.EnergySiteNetDevice = { encode: (e, t = r.Writer.create()) => ( void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), void 0 !== e.wifiApConfig && void 0 !== e.wifiApConfig && n.WifiConfig.encode(e.wifiApConfig, t.uint32(18).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, a); for (; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.din = n.Din.decode(i, i.uint32()); break; case 2: s.wifiApConfig = n.WifiConfig.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return s; }, }), (t.EnergySiteNetRecentlyAddedDevice = { encode: (e, t = r.Writer.create()) => (void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), t.uint32(16).int32(e.status), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, o); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.din = n.Din.decode(i, i.uint32()); break; case 2: s.status = i.int32(); break; default: i.skipType(7 & e); } } return s; }, }), (t.EnergySiteNetRecentlyRemovedDevice = { encode: (e, t = r.Writer.create()) => (void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), t.uint32(16).int32(e.status), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, s); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.din = n.Din.decode(i, i.uint32()); break; case 2: o.status = i.int32(); break; default: i.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetUnpairedDevice = { encode: (e, t = r.Writer.create()) => (void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, _); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.din = n.Din.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetConfig = { encode(e, i = r.Writer.create()) { for (const n of e.devices) t.EnergySiteNetDevice.encode(n, i.uint32(10).fork()).ldelim(); void 0 !== e.recentlyAdded && void 0 !== e.recentlyAdded && t.EnergySiteNetRecentlyAddedDevice.encode(e.recentlyAdded, i.uint32(18).fork()).ldelim(), void 0 !== e.recentlyRemoved && void 0 !== e.recentlyRemoved && t.EnergySiteNetRecentlyRemovedDevice.encode(e.recentlyRemoved, i.uint32(26).fork()).ldelim(); for (const n of e.unpairedDevices) t.EnergySiteNetUnpairedDevice.encode(n, i.uint32(34).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, l); for (o.devices = [], o.unpairedDevices = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.devices.push(t.EnergySiteNetDevice.decode(n, n.uint32())); break; case 2: o.recentlyAdded = t.EnergySiteNetRecentlyAddedDevice.decode(n, n.uint32()); break; case 3: o.recentlyRemoved = t.EnergySiteNetRecentlyRemovedDevice.decode(n, n.uint32()); break; case 4: o.unpairedDevices.push(t.EnergySiteNetUnpairedDevice.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIAddDeviceRequest = { encode: (e, i = r.Writer.create()) => (void 0 !== e.device && void 0 !== e.device && t.EnergySiteNetDevice.encode(e.device, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, c); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.device = t.EnergySiteNetDevice.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIAddDeviceResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.recentlyAdded && void 0 !== e.recentlyAdded && t.EnergySiteNetRecentlyAddedDevice.encode(e.recentlyAdded, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, d); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.recentlyAdded = t.EnergySiteNetRecentlyAddedDevice.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIRemoveDeviceRequest = { encode: (e, t = r.Writer.create()) => (void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, u); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.din = n.Din.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIRemoveDeviceResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.recentlyRemoved && void 0 !== e.recentlyRemoved && t.EnergySiteNetRecentlyRemovedDevice.encode(e.recentlyRemoved, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, m); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.recentlyRemoved = t.EnergySiteNetRecentlyRemovedDevice.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIGetConfigRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, p); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.EnergySiteNetAPIGetConfigResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.config && void 0 !== e.config && t.EnergySiteNetConfig.encode(e.config, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, g); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.config = t.EnergySiteNetConfig.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }); }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.EnergyDeviceAPI = t.getTEDAPI = void 0); const r = i(777); Object.defineProperty(t, "EnergyDeviceAPI", { enumerable: !0, get: function () { return r.EnergyDeviceAPI; }, }); const a = n(i(5)); t.getTEDAPI = function (e) { let t, i = { din: e.din, host: a.default.api.host, credentials: a.default.credentials }; return (t = e.isEngineer ? (0, r.createHermesClient)(i) : (0, r.createLocalClient)(i)), (0, r.createEnergyDeviceAPIClient)(t); }; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAABgCAYAAAB/lX6wAAAAAXNSR0IArs4c6QAAGG1JREFUeAHtnQu01VWdx8998DRBQBDQtEF0hhAne+AjVoKJs2TUmiasyZRaFU6ao46TykvFiwKCotGYj8xGx7KhrOVktkoUXJqY0kPFxMsI+UADeZlenvfe+Xz2/e/j/9wLl3Puufeeg7DX+t393vu3v/u3f/t5/jeT2Wc6HYGKTq+xwAqvuuqqytWrV1dt2LChYcGCBfVkz/JMXNZtsfgbU8U3jh8/vqpPnz6VgwcPrieuIRVXUmcO0yXlJFU5AFXirVy2bFkjQDfgl8/KrVu39u7WrdsRuIdCh0ADoe6NmIqKincaGhrWVlZWvkLYii1bttR27979r7jNbwdUDh8+vAK3HZfuHLyda8oN9IoEnAhKV+AYCpj/CJhjcX8I6pcnRGtJ9wfoV9DP161bt7Jfv37bzUtnVtiZOGM9BneaKRvQ09KNRPYGgVOgf0WIP44UV6cQEaiGRLq1lPLQjsQZRgVp0m3bTtxi6BY6byFxb0GOJkdBp6sdKy61UbqrVAEw0nPYsGFnYj8K/RA6ETyrAGsH7npsAdqBrYoQePE2PgJsmHExvWl1V5PuZAD/Mf5HGDmfqqur62Gd1k18zI+z402nVraT5qhjbXSmvr5+GKDMBRwlPAM4DbgFsBp3kG4BTuLqcaclPrajkqRE5aSrSMLstCrigqDhvh/3Zaia2s7W9ZFZ29KpBrBtvNQdyfscgF+PuzdgKM0CrgQLbgRNFfEO3pXYy7BrSfcyeTdjW877oIGED4WGk+Zw/D1xd8FtOy3XdKFsbMtdT/wFmzZt+mnv3r23w5OdbGd2qEnryg6tqFnhsbMPpOGXAfhFxNvY7YCgZCuxAqB5G/o9tIC4XwLMSwbuzpDuUDrkk6RTXY2EekEReJyhrr7Y9wD4Ndg3omo2dMYEGxsvE51lVCkV27dvf3+XLl1qqPRsAM6qEvxBV2NvhB4G6OtJvwR3NHGFU8H6PYd/1uONcZlJ4qzETps27e+rqqoupp5TCT8QitKuzg8qB/sW6qoh/186GvgcpmOrOtCOgB1MI2to5DnUhbNJEWOpTtS9z0KXX3311QvlBdDTGySlNQuo8TsxoWPdVKU3RoB/LODPIf1Iyhds54go/aobgZ9O2BrqtI7d1UOSwk2ngS5wro+HDh3alw3OFFi9kEba4Gh0v02j/wsdO2nevHmbI9i33XabK5C2AlAxceLE6jT4lHstdX+NMg8QeNxx2Snw17IJm+vGinQdouM7CnTLjSCFOmiAdlf07Lno8BuT+Ljss92v22Ck+zvEBaCKBJticg3gd4ngX3HFFRMA/CpSHIotb3a6kq/5CqPk7uTowfDYlhBZ7J9YSbHlhPxKZv/+/SvPPPPMytGjR2cWLVoUwt1lDhgwwGXhCQD+PdroZKkqCfVjvwpNmz59+h2WQd6q66+/XuluV7N06dIG+Xv++eczixcv/sOJJ564Gn4+QiVuxsLkDR92wOj999//IXheHdvQnowEKSyywKingzSgGrqxGuhGmdUM01A+6sRhegh0A/RJAN9G27rgVorWQFcD9i3YoSwmsrhyIaj9jR1rqdjuSL+EcwbkOY7Au4Ly+OF/ofOg1aSxbe0m7cVIupNVkGw2F5bj8utodOHnsCfC/HnV1dXnQhNwn0HYaTRmNLYmdAb+bbhvppzrDMOuuPnmm+2IDjVIbyOjqUIphpR4Jf1j8OPO1Q6Rv7+FnoWWkbbRtO1l2irpUSIbJk+ePLBr165K7/kwfFwejJE0TFxav16/fv2n58+fvw3APQpod5XSGj/UVw2FUYX9AGlPgdLS/kf8nyXu/7A17SLtBUs6DATp9pz69NNPH4FOvBWwL4FUHwIZl30yqNQGIl5/lHBXCSugSXPmzFnhBNcROpz6WjVIb4N1o+vrkeY/k/gTUF94jbiocp4dMWLEsnHjxjW0l7QH3dYqZ6lIAcdbOXDgwGpIlfEYDJ6ELdjb/CPDWGENjNvhKhkm4LETlOiHWKk8gl3higK7JCZZIanaHoOBX8Hn1oSRMOrwT+jVq9eA9mSuINBdZ7sL5Fz6n5DwH8PIfjAVwe4CuEqwALqbXI37ZQn3G0T9FTucAhL2JEtHJ84MjVWt2BmlMo3ykFT+XfhU4jUBG/yj2DkfTppwEdIUVdzfMNzzKYJKYweNArRHYMa8SoOrEHeR+l+FnibqAZaHv2f3tw5/Je5BhI2EToA247+1pqbmCeLM0y56knKKMVk+aOcPaMt4+FSAHLkub2dgu5OtI16hKornfA+8ZCrjeQmrkfkw4GTjsq8r9g5sGXkC6Z0KmI+btplZhV+Qb2oWXhTzzcoqxhvO1ZOl6i9oz0m0qz92HIGjKfw7AO5oLdrkBbqbG2rqguSeAyNHJ0ALuAdHSvmPsL8M4DKpfgzD1cMnOfS8WptwR0Zc+ZRMj8tLcyOPgG7wo7RnHe05KGmfYUfv2LFjf+zVXnoknZMdHSYoxAQwdpMhFA5gH4CJJ2HGSUXA7Ah19IPsJE+3jAsuuKCbyz+cu5LgWN+u4i2mJCYFZubKK698kHb+A21TvUS1OmHbtm2/Znm8Dixc4lZCsR3Rzov3WOAuE3tYROFdSXBKCnBXI1b0EmGXmNk0AO7M3xoDxrUWb1ElMUhvGKVJ5S/SPC9HNJHfGwF8Pir0X6ZOnTqM8J5G0m4FKQqTQbs1uwXd5dzmzZt7UNI4S0vAdi0uwD+j0hchO0YJ35NNdhVDG1+2fZDNjYLSh8b9M6u276Nmfw7453NU/EFWc1WqX9q/WywjOLtLqH5uoJLuZPiwmWQEy3wbWYX8yDCXkdp7uontANjltGVL0p44mapSfcKhyhlCmlnQfexXPs980C9JmxcOrYIO4KEQCu9Lhw9KCtYyfCOdsUyPR6Dae7pJNmm2zbcyi6A3IUewYWHTpxssXBA42o8Em7vw1zDRelajQJpW2qVpFXRzOWwo3MP+sNKhAisV5DeIC9JAT0e9t8uK9oQI2tOQqAqB/ioq5Ju0+1bcC6Fa3EHPY8cddpT8iQjgd1E3HyOdaqpV0FtdMroDFVAKjDs2yqQbm3SdFb7njMtBVzIAV0fj7k4og/+jCNt4/CfTfifSblB4HoLfpfMJwPRDgD+LtE8SJ/A7FcZWJV3AKcCMb1NhOIvArVH6+8hck/e99VfgaXdl0r4gtfifZml8GWrkM7T2Ntr/Z2yssDMPm0X8h6Nu/hvgj8EdHzLhzDWtSnqStJGd6Fp2ovZ8L+oIeotOGESnvB8GVzkicovd832AHOcpFxMKp+Slh2BfhP0w9mToWNUtuLhZdJc+FIn/T+K/QNyr4CM2ORLfmqRWeLXF8W0vDnw+Qw96qmiPWoiTSCM673muvZ7heq7KY1LC35OGtnmJ4dGuI7868S/nOPhRGnwUWAxJgFeIVbuHQfvzdG/h2LFj602PP2t2ql4o2KHl0+LePXr0uBDAPREM+sucAo5Rp3lbtFcZsAlq1nN43C/S+C+CxaNgEhcY4qQAfoVbtHGkUVXlCPfOQPf4tgrAPbZ1tzkdsqccQkq5xpPF5+gMZ3WfHuf0pGHvcdPIObzP8LpCq9mvTASrZ2Obgck1vev5GVOmTBmM206I2GWfHGTT2yvchOv/upmSXhPwuPXfRtzD+GtIG15eebu+NxrURr0SzxudNWPGjFkNBidD3cHG95Oq4APR7+sQysd9IUH6oIJzJF2VApA70NVjyDxXwMloZgHX3kS4r6DGk+4h3Bp7cG+T9NBw/3jzBBbidj9eL3Y0YhUl+zy0Rn/CsnNeGvSQiMyHkN6nEuZzmKijtN+iM+awbLqYNG9BThp7NeC0X6PAiaN4zYZeAS9xMUzcDoZOS6/wsgreNSk9YgFeMo8no5cT8W2K7hsAfIbpRo0aVV2Ki2R4K0uj2lAIoQ0851CHj4yMgpsrvl68/bl3yZIlYRLOSjrrScX/UBKcj+0kEGdj0/yCAjWVvgJwEomF7rNzEQC2O6FNUFagSTGSB1ieXQVtkgVdfU7gOST2cMth4a4TZ+NK7En4PU2s2ge4SLQ0CKSYuZF6AcyWCZypsJwXe6Kaj08wDnonlDBkyBB/yfCF4Gn6E27uyXA3BYUz8zIDXKkJkpPiuZTO9Hn8InDzeZ7GzsiwvD5WLRHc/gHUSm5FjsIZjidNidsEazgCuAO7HNfiSpJUNsDH83h4+i3kDw6yvOEeztFx8MezF1XJJ0ioiYld9jx+zTXXvGKnQNklT1OykvyVaSXqADYkB3Nn+ers2bNdxobwknCUqhRQg0pBqmsBWUnfT36TJB/gt6wB9CDu9hAJPQuOxk5wsgxrcXU57pg5pulsOwDL/eThNMjfKX2bbfaldMCQhLfQoM5mKl1famf+JviFs/eUtA/kkda7oLOcEfwjLcBEGpwub35nWOxB3SUyAXAAfh87PCf7y6HR0GT4+SLhXhKXXNUkS24h2gKO8WJbv4v4cJGtO0h60gOHJJE2UNrC+/JXDEv1oN5ON4AqPxnOsn0p5lm1JkrSMYYbENPpLrWBzyAoKT4aebsf2hFATyJ6aaeGw9uMgHcMS/Wg3lIa+Q08w6cbN002rMlbur+pXadSLQWQE47qWKs36XwDkh5IJ6BNTb9STjKUhcVFSuTL4RrnmAbDy4FBhDNiOABGfbaS5vMNJtJ3QU96IK2DzNyTz3eEjKkeLIe2BR5oVGigwxj1EhtbUv5SS8a/gy0PCd3rRIFYhRp/F/SkB15KOHZp6Gy6HzdGQwyLi/okfp+1cwTS7+zHkcRXce5GI+i/0W/WoB+ZMPW8aECSSH81K4U4aRm1z7SCgJM41HDppZd6GTEaCnsgBD2ewXj38C7oyZIwLA+JiE/nVKBj9BMfzhV07zM7RyDZy2R69uw5Ftw8zg0AI8SeMq7B/7SdYu4g6UmCxwzA+HMVdaQ9NYofch1k4nhYY4J9pgUCWdUCwF8n1meIUWvodJO5XocmgJ70wDNkWEVYOFrEVh8dxMrg87izb8x17zO5CCQvmz1T/zQx/uJEPe5EGlQL9l34g5SbM0q67rdI/BMdiTGuK2ETKawv5K12PKuJafZ62ztS1e+kSZP6Ae40APG0VpXixY8YPsWcuSS9AsyCLqiYO0m8hcRR+ds7RxL2TWx7T39ZLM/go+RGIRRw7AY2kjUw9CGwi6uViO0sDuXeSjMbIzJkZLFSVUvkvZDAevbiwZfuLxF/BuQQskP2euDBwVEvHtJFCOZZCeBKuSeM2r/kbf9CMUtu5siSq17MbOLZhG8ggzrJVYsd4w6rxleppNnhpIqd7TDi9yqTPDQKEg4O3wCbywDAbb9Ai5krv41gOSk5elZDxBHwrk4nc3wmvJyrJT+AI6gBWNyaoxkJN5HuOHrNgjNWrr23GITN17zxjriRz5dMA9wptH8A+KgBBFftIE0i7R+TPIZnTc7E6BAgYRWK/y5ukvzN52dJ6bm64NpTx0PfJs1cSDUUdLx5EncGd7ZHCSvGtEc5bVaDtCPkdQL0TAV/vcIGZRjxwxHASQB+Ohh5UWHaCLjum3jHeI+rGt/FNAchB3QibaiTwgZse/FQCvU5QQQeZ+Yj0Cx+gXY8cb5O9f60RcEmbKOJP3m0EfJTkZ75WyuzWbrm5bSWtUUcbTIsdLxAa3gi53fHJgg2Xi99An/4gxoGDwG/kxut2StXrqxLTmdDGYRnTXPQM1SmtKuzX6BHv0GP3kHqERScnljtjHMJP550j6KOHuQmZyluf55erPH7ukF9UVCQNiUtNjzPws2XLifPbDnJAli0aTDtO4b2jSH2BOiDtN1Plbj50RIXv4WgKr4dmlFbW7sGfv0gcwvAiW86H9CRNlQUepAf4z4F8F+jwhso1AoNtxI7y1e79vZRxJ9Bp/wF6X+ZdGsJC/esuHdaKfE7NZRhK9yULcW+Dz7C7zWR4LzKUbKgcJ9LXneFqscPQ4VO+o4yP5zs5YgXJ/21oXDqik1UVrr9JoIBMzjtvIWR8HoC9i55biHpFKgxgwBUAPyTNMCt7X9AZ0M+jpSp8MYR28YdQcVHYJtvGyRwWIWZmIfy1+I+lNzXKQBQJl9JN31Sq/z6rd5+lFUQM+TxlFXpDQuFJLvlSrZdKY/Y1eK9imPwB3hW7sfWYjqT7dS0JgGR+QwF+Qx4MnQB/CjNzs6hUvz+TF3JdgTIkMulbm0l81O2gJ9GvYdg+63FQkBrRPceRv2nkvdgynLpK3jymxeRx/Rik20bZUSV56JBegeax4byLOx7BRxbk8Wtydvyb+ytljFNIaEAGu/s/Ro/Q7/9gAMOeBJ14hnDOTDnY9N0GSE9Ybsqr9VwGqYhexiu3bAdNQUbhvhWMgUptbykgNYEbJd1BGZyY1+jzJ+g5+9DnTw3c+bMdUTHOnYLuEXlxQiAhyHFzcd29TyMzKFSgT8fBvxS80uQaay8zUS5YQRRlhuLO5Fwf4fvL0Lyagx1Z0xPvrXwdyfeDZTjyLGdbeILXuqg56C7KHMikv0pygOGmsXJKq8gwOUxLaX6WzNBt5JAqfeBz1Ik/zk64n4Y6QMjfjd3MOFecOfVmaRrYRhFfsi4lvKWosddF1tfbFiL9M0DSGsHuQK7B/tP0FAo3OJg52UA13dA27HXYb+ORG/CvTF+jIFCQgcmdeUtELHyQkA3T6wgVKrkU/FrhL9qJO5qrv6qCM8bJPOljVeHyYcdYrB1FlJe4BFePGRahO01WWW8FI6F7s6mDY187sr9SbbNlJXmI4bvrqgW8YWCHguIDYv+yEwDgMUJJ8YVbNO4sOwrOGOzDJZDkL+UKBggAZbIrx3bG8uJdrMa8/O2FfRYek7lMBfDi7IpJ8whRRVC5qScKBAFFUfe2LZoF5S/tcTFgt687HZnsHkFbfCXHU9tnvDa0Ph9WRIE9oFeAlFob/VSaBOcpKp8GeUzENzuajvEUHZ1qh4n+5KpnVKCHia4ZkCHFQNh7TKR2nuU5UqoeYeGVUmpgC8V6DZaIPxQ5kfZCB3Hhug37PI8Hs542+LGSNCKMalbG+vyXuA46nucenxYpaQHPoqpoy15S6HTgzT7OUF2eWdzXv9TQL+and8PAOY8wQBwd5RFCYT5LcfyuFbzoO4eaDr1/Ay/PyTwd/1R4tuCXZvzlAL0DI1tYMd3GGBPhPODIX9Pfzj2VAHCVgq9s/U0r2BD+XZYABz3RQA9hfL/hjDr8ZDuq2ztD5OPggtvhwxFSVOR9fuQKdzAUI636HgrvOCdDBiOhm8R7pWbwOc96SXpHSkNdKD/ZsefyvSzjoQ8C+8NeR5TElMqSbfeVdD/JK0OkpkA7y3N5CjxiYrIi08fcSaqKQAOsAFwy4WcI4KQodYW8B5lFX7VS6ebvBrTzlw5qUnvcIF7K2B8C3A80vWmBm8AyI8Lq2oupO7wD6OwA0CEtwDKX2JQXmXyqUJ1+MWolEkk9ambWfwT7zHnEXf73Llz65J25T2K2guHUoAu74JUwQXum/w4eBb++ZCIC2jQswImcKT7N6Q3u662V0iTNdFPuvCfebH/nbzecvlz+1BeYlv+jd7UJ+f0xuWUlS20gx2lAj0jSF5OeHNOG6+FbgKsHIknzDP6KUpugoP85vBMHm+Igtog3SW4L4cC4MTlSLgdbEdbr/WTriSmTauD9uKUT3Y08sUf37XUcQ34O5aPAngcBF5NqgbbG/hj+aTHVqR0CWlOJWwYpPR7//kMj6PuPemkk84lbCrUp1l+O2keNOuFF15YV2rA4SNcsGqXzETgAbMOUFsAL2MA6VJvGLr7QOy+BA1LGHZk/Inwo7G/DB2UpPdJBN7wiFOVMnP58uXrywHwwF/CfMkthntUG6oUJ8GLYEqdqxowTjteVPvsI+rkLbgF2fcnjtyY3vh5jIKZ3GV6eRxUmnapTUnVS7rxSjzfOVTVbOYnlk+ragDRt5NhMsR2Le8KxPW1YRpt3+GElQm2KkfpDypFwFesWLHef+FWSh0uo2kTmU+HldQdJR7A+nERPBkA0xIfN0ppvh0N+gPgugHfF2kzcYff+ZQT4PBUep0uE2kTJR4dvEWJR1+7MjkeIE0WX5WlswiyR8JBwgUcHX4t+TeWm4RHptMSE8PKwo4SDzNOnK67XTZGHZ9Wi77CQrDDpBkAT96jZMpNwuE/mDTzMaws7CjxMLMZVfMUAi+vJyjxABwnyzTgcwm/lnQbbUC5Ai5vZQu6zAm8H1keNGiQ3y14CvK11scFHuPTufB6C7+Aq8M3MhF3yn96lIG2mrIG3UbxSdmwqsHJw9gtv0WS1d2jIAFXn1+H5Y7WV2eZzvjXmtZTjCl70G1cVDUAvpWflTzBctLncmLuFz9vwx1ezJazSrEd0fw/N43F+KDRMcsAAAAASUVORK5CYII="; }, , function (e, t, i) { "use strict"; i.r(t), i.d(t, "saveSystemInfo", function () { return a; }), i.d(t, "resetSystemInfo", function () { return o; }), i.d(t, "resetAll", function () { return s; }); var n = i(2), r = i(6); const a = Object(r.b)(n.SAVE_SYSTEM_INFO, "version"), o = Object(r.b)(n.RESET_SYSTEM_INFO), s = Object(r.b)(n.RESET_ALL); }, function (e, t, i) { "use strict"; i.d(t, "b", function () { return n; }), i.d(t, "a", function () { return r; }); function n(e, t, i, n, a, o) { if (null == o || null == i || null == n || null == a) return !1; let s = Math.round(a / 1e3), _ = e - Math.round(n / 1e3) > t, l = e - s > 60, c = r(i, o), d = !1; return null != c && (d = c > 900), _ || ((0 === i || d) && l); } function r(e, t) { let i = 0, n = 0; if (null == t) return null; if (null == e || 0 === e) return null; try { if (((i = parseInt(t.expected_bytes[0])), 0 === i)) return null; if (((n = parseFloat(t.got_bytes[0]) + parseInt(t.offset_bytes[0])), n < 0.01 * i)) return null; } catch (e) { return null; } let r = i - n; return r < 0 && (r = 0), r / e; } }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; i.r(t); var n = i(4), r = i(5), a = i.n(r); const o = Object(r.toApi)("sitemaster"); var s = i(6), _ = i(200); const l = Object(s.a)(_.a); var c = i(14); i.d(t, "requestSitemasterStatusThunk", function () { return d; }); const d = () => async (e) => { try { await u(e); } catch (e) { c.default.error(e); } }, u = async (e) => { const t = await fetch(o, { method: "GET", credentials: a.a.credentials }); Object(n.checkStatus)(t); const i = await t.json(); e(l(i)); }; }, function (e, t, i) { "use strict"; var n = i(76), r = i.n(n), a = i(46), o = i(4), s = i(459), _ = i(29), l = i(136), c = i(2), d = i(202), u = i(7), m = i(74), p = i(21), g = i(5), w = i.n(g); const v = Object(g.toApi)("system/update/status"); var f = i(44); i.d(t, "a", function () { return b; }), i.d(t, "b", function () { return S; }); const h = { [f.e.ERROR]: "Update Failed: Connectivity issue. Please retry the updater." }, E = { [f.e.NONACTIONABLE]: "No update package available" }, b = () => async (e, t) => { try { await y(e, t); } catch (t) { e(Object(u.showError)(c.RECEIVE_CHECK_UPDATE_ERROR, t.toString(), t.response)); } }, y = async (e, t) => { const i = await fetch(v, { credentials: w.a.credentials }); Object(o.checkStatus)(i); const n = await i.json(), { update: a } = t(); let p = r()(n, "info.status[0]", "Unknown error"); if (n && null != n.state) if ( (n.state === f.d.FAILED && p !== f.e.IGNORING && (E[p] ? ((p = E[p]), e(Object(m.c)(c.RECEIVE_CHECK_UPDATE_ERROR, { type: l.WARNING_TOAST, header: "Update Failed", message: p }))) : (h[p] && (p = h[p]), e(Object(u.showError)(c.RECEIVE_CHECK_UPDATE_ERROR, p, n)))), e(Object(d.receiveCheckUpdate)(n)), n.state === f.d.DOWNLOAD) ) { const t = Math.round(new Date().getTime() / 1e3), i = Object(s.b)(t, 60, n.estimated_bytes_per_second, n.last_download_status_time, n.start_time, n.info); e(Object(d.updateDownloadProgressAction)(i, n)), i ? e(Object(u.showError)(c.DOWNLOAD_STALLED_ERROR, _.r)) : a.downloadStalled && e(Object(u.clearError)(c.DOWNLOAD_STALLED_ERROR)); } else a.downloadStalled && e(Object(u.clearError)(c.DOWNLOAD_STALLED_ERROR)); }; function S() { return async (e, t) => { try { const { authentication: i, configuration: n, error: r, update: o } = t(), s = Object(p.isAuthenticated)(i, r.items), _ = !0 === n.isNew, l = Object(a.isResiGateway)(n.deviceType), c = o.isCheckingUpdateUrgency || o.updateUrgency; if (!s || !_ || !l || c) return; e(Object(d.checkFirmwareUpdateUrgency)()); } catch (t) { e(Object(u.showError)(c.RECEIVE_CHECK_UPDATE_URGENCY_ERROR, t.toString(), t.response)); } }; } }, , , , , , function (e, t) {}, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.TranslationsProvider = void 0); const o = a(i(1)), s = i(3), _ = i(77), l = { zh_CN: "zh-Hans", zh_TW: "zh-Hant" }, c = (e) => o.createElement("span", Object.assign({}, e, { style: { display: "inline-block", transform: "scale(-1, 1)" } }), e.children); t.TranslationsProvider = (e) => { var t, i, n; let r, a, d; if (("tsla_MIRROR" === e.override && (d = c), e.translations)) { let o = null !== (i = null !== (t = e.languages) && void 0 !== t ? t : navigator.languages) && void 0 !== i ? i : [navigator.language]; e.override && (o = [e.override].concat(o)), (r = null !== (n = (0, _.negotiate)(["en"].concat(Object.keys(e.translations)), o)) && void 0 !== n ? n : void 0), (a = r ? e.translations[r] : void 0); } return r && r in l && (r = l[r]), o.createElement(s.IntlProvider, { locale: r, messages: a, textComponent: d }, e.children); }; }, , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return _; }); var n = i(2); function r(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function a(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? r(Object(i), !0).forEach(function (t) { o(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function o(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { isFetching: !1, didInvalidate: !1, running: null, connectedToTesla: null, powerSupplyMode: !1, canReboot: "", smStartError: "" }; function _(e = s, t) { switch (t.type) { case "REQUEST_SITEMASTER_FOR_COMMISSIONING": case "REQUEST_SITEMASTER_SETTINGS": case "REQUEST_START_SITEMASTER": case "REQUEST_STOP_SITEMASTER": return a(a({}, e), {}, { isFetching: !0, didInvalidate: !1, smStartError: "" }); case n.RECEIVE_SITEMASTER_FOR_COMMISSIONING_SUCCESS: case "RECEIVE_SITEMASTER_SETTINGS_SUCCESS": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, running: t.running, connectedToTesla: t.connected_to_tesla, powerSupplyMode: t.power_supply_mode, canReboot: t.can_reboot }); case "RECEIVE_START_SITEMASTER_SUCCESS": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !1, smStartError: "" }); case "RECEIVE_STOP_SITEMASTER_SUCCESS": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !1 }); case "RECEIVE_SITEMASTER_SETTINGS_ERROR": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !0, running: null, powerSupplyMode: !1 }); case "RECEIVE_START_SITEMASTER_ERROR": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !0, smStartError: t.error }); case "RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR": case "RECEIVE_STOP_SITEMASTER_ERROR": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case "RESET_ALL": case "RESET_SITEMASTER_SETTINGS": return s; default: return e; } } }, , , , , , , , function (e) { e.exports = JSON.parse( '{"alert_container_title":"Warnungen","alerts_view_no_active_alerts":"Keine aktiven Warnungen","barcode_reader_checksum_error":"Barcode ungültig. Bitte erneut versuchen und sicherstellen, dass der richtige Barcode übermittelt wird.","barcode_reader_format_error":"Barcode-Format falsch. Bitte erneut versuchen und sicherstellen, dass der richtige Barcode übermittelt wird.","barcode_reader_internal_error":"Barcode-Scanner nicht verfügbar. Bitte geben Sie die Informationen manuell ein.","barcode_reader_not_found":"Barcode wurde nicht erkannt. Bitte erneut versuchen und darauf achten, dass der Barcode scharf und ausreichend groß ist.","button_factory_reset":"ZURÜCKSETZEN","button_label_confirm":"BESTÄTIGEN","button_label_factory_reset":"AUF WERKSEINSTELLUNGEN ZURÜCKSETZEN","connection_details_network_configured":"Konfiguriert","connection_details_network_configured_ip":"Konfiguriertes Netzwerk: {ipAddress}","connection_details_network_configured_ssid":"Konfiguriertes Netzwerk: {ssid}","connection_details_network_configured_ssid_ip":"Konfiguriertes Netzwerk: {ssid} ({ipAddress})","connection_details_network_not_connected":"Nicht verbunden","connection_modal_description":"Dies wird erwartet, wenn Sie das Gerät aus- und einschalten, ein Software-Update ausführen oder Änderungen an bestimmten Geräte-Konfigurationen vornehmen.{br}{br}Sie müssen zum Fortfahren möglicherweise die Verbindung zum WLAN-Access-Point des Geräts wiederherstellen.","connection_modal_title":"Verbindung zum Gerät verloren","connection_status_network_configured":"Konfiguriert","connection_status_network_connected":"Verbunden","connection_status_network_connection_problem":"Verbindungsproblem","connection_status_network_disabled":"Deaktiviert","connection_status_network_no_internet":"Keine Verbindung zum Internet. Prüfen Sie die IP-Adresskonfiguration und den Internet-Uplink.","connection_status_network_no_ip":"Keine IP-Adresse erhalten. Prüfen Sie die Router-Konfiguration auf Blocklisten für MAC-Adressen oder ähnliches.","connection_status_network_no_tesla":"Keine Verbindung zu Tesla. Prüfen Sie die Router- und Firewall-Einstellungen.","connection_status_network_not_connected":"Nicht verbunden","control_connect":"VERBINDEN","control_delete":"ENTFERNEN","country_name_ad":"Andorra","country_name_ae":"Vereinigte Arabische Emirate","country_name_am":"Armenien","country_name_at":"Österreich","country_name_au":"Australien","country_name_ba":"Bosnien-Herzegowina","country_name_be":"Belgien","country_name_bg":"Bulgarien","country_name_ca":"Kanada","country_name_ch":"Schweiz","country_name_cn":"China","country_name_cy":"Zypern","country_name_cz":"Tschechien","country_name_de":"Deutschland","country_name_dk":"Dänemark","country_name_ee":"Estland","country_name_es":"Spanien","country_name_fi":"Finnland","country_name_fr":"Frankreich","country_name_gb":"Vereinigtes Königreich","country_name_gi":"Gibraltar","country_name_gr":"Griechenland","country_name_hk":"Hongkong","country_name_hr":"Kroatien","country_name_hu":"Ungarn","country_name_ie":"Irland","country_name_il":"Israel","country_name_is":"Island","country_name_it":"Italien","country_name_jp":"Japan","country_name_kr":"Südkorea","country_name_li":"Liechtenstein","country_name_lt":"Litauen","country_name_lu":"Luxemburg","country_name_lv":"Lettland","country_name_mc":"Monaco","country_name_mo":"Macao","country_name_mt":"Malta","country_name_mx":"Mexiko","country_name_nl":"Niederlande","country_name_no":"Norwegen","country_name_nz":"Neuseeland","country_name_pl":"Polen","country_name_pt":"Portugal","country_name_ro":"Rumänien","country_name_rs":"Serbien","country_name_ru":"Russland","country_name_se":"Schweden","country_name_sg":"Singapur","country_name_sk":"Slowakei","country_name_sm":"San Marino","country_name_tw":"Taiwan","country_name_uk":"Ukraine","country_name_us":"Vereinigte Staaten von Amerika","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energy}kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_meter_site_export_power":"{realPower} Export","display_meter_site_import_power":"{realPower} Import","display_meter_solar_generation_power":"{realPower} Erzeugung","display_phase_type_unknown":"unbekannt","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"Auswählen","error_boundary_label_error_details":"Fehlerdetails:","error_boundary_subtitle":"Nun, das ist peinlich. Wir sind in der App auf einen Fehler gestoßen.","error_boundary_title":"Oh, nein! Es ist ein Fehler aufgetreten.","error_messages_invalid_password":"Ungültiges Passwort. Bitte erneut versuchen.","factory_reset_subtitle":"Löscht alle Netzwerk- und Geräteeinstellungen. Es wird versucht, alle gekoppelten Geräte zu trennen. Lebensdauer-Daten werden nicht beinträchtigt.","grid_code_container_title":"Netzstandard","grid_code_point_PINVrx_SmartInvSelect":"Aktivierte Smart Inverter-Funktionen","grid_code_point_nominal_grid_frequency":"Nennfrequenz des Stromnetzes","grid_code_point_nominal_grid_voltage":" Nennspannung im Stromnetz (L-N)","grid_code_point_nominal_pinv_voltage":"Nennspannung der angeschlossenen Powerwalls im Stromnetz","grid_code_point_vf_limit_over_frequency_0_grid_following":"Neuverbindungslimit bei zu hoher Frequenz","grid_code_point_vf_limit_over_frequency_1_grid_following":"Over Frequency Trip 1 - Limit","grid_code_point_vf_limit_over_voltage_0_grid_following":"Neuverbindungslimit bei zu hoher Spannung","grid_code_point_vf_limit_over_voltage_1_grid_following":"Over Voltage Trip 1 - Limit","grid_code_point_vf_limit_under_frequency_0_grid_following":"Neuverbindungslimit bei zu geringer Frequenz","grid_code_point_vf_limit_under_frequency_1_grid_following":"Under Frequency Trip 1 - Limit","grid_code_point_vf_limit_under_voltage_0_grid_following":"Neuverbindungslimit bei zu geringer Spannung","grid_code_point_vf_limit_under_voltage_1_grid_following":"Under Voltage Trip 1 - Limit","grid_code_point_vf_param_allow_charging_while_qualifying":"Laden der Batterie während der Qualifizierung des Stromnetzes ermöglichen","grid_code_point_vf_timing_over_frequency_1_grid_following":"Over Frequency Trip 1 - Timing","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Inverternetz-Requalifizierungszeit","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Volt","grid_code_unit_V_pu":"V / V_nominal","grid_code_unit_bool":"0 = Nein, 1 = Ja","grid_code_unit_enum":"Nummerierter Wert, siehe Handbuch","grid_code_unit_s":"Sekunden","grid_code_view_advanced_label":"ERWEITERTE EINSTELLUNGEN","grid_code_view_confirmation":"Bestätigen Sie, dass der ausgewählte Netz Standard den lokalen Bestimmungen entspricht","grid_code_view_country_label":"LAND","grid_code_view_distributor_label":"NETZBETREIBER","grid_code_view_filter_freq":"Diese Installation ist nicht ans Netz angeschlossen. Auswahl aus allen Netz Standards erlauben.","grid_code_view_filter_freq_warning":"Bitte den entsprechenden Standard sorgfältig auswählen um sicherzustellen, dass das System mit vorgesehener Spannung und Frequenz arbeitet.","grid_code_view_frequency":"Frequenz","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Bestätigen Sie, dass der vorkonfigurierte Netzcode für diesen Standort gültig ist","grid_code_view_preconfigured_label":"VORKONFIGURIERTER NETZCODE","grid_code_view_region_label":"REGION","grid_code_view_reset_modal_body":"Für diesen Standort gelten benutzerdefinierte Einstellungen für den Netzcode. Diese konfigurierten Einstellungen werden gelöscht, wenn der Netzcode geändert oder zurückgesetzt wird.","grid_code_view_reset_modal_cancel_button":"Abbrechen","grid_code_view_reset_modal_confirm_button":"Einstellungen löschen und fortfahren","grid_code_view_reset_modal_header":"AUSWAHL FÜR NETZCODE ZURÜCKSETZEN?","grid_code_view_reset_selection":"AUSWAHL FÜR NETZCODE ZURÜCKSETZEN","grid_code_view_retailer_label":"STROMVERSORGER","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"NETZ STANDARD","grid_code_view_utility_label":"ENERGIEVERSORGER","grid_code_view_volt_freq_label":"SPANNUNG/FREQUENZ","grid_code_view_voltage":"Spannung","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"BEARBEITEN","label_button_enter_manually":"MANUELL EINGEBEN","label_button_finish":"BEENDEN","label_button_scan_barcode":"BARCODE SCANNEN","label_button_scan_qrcode":"QR-CODE SCANNEN","label_button_upload":"HOCHLADEN","label_factory_reset":"AUF WERKSZUSTAND ZURÜCKSETZEN","label_form_input_file":"DATEI","label_form_input_software_update":"SOFTWARE-UPDATE","label_model":"Modell","label_part_number":"Teilenummer","label_part_number_psn":"Teilenummer (TPN)","label_serial_number":"Seriennummer","label_serial_number_tsn":"Seriennummer (TSN)","menu_card_label_active_alerts":"Aktiv: {alertCount}","menu_card_label_no_active_alerts":"Keine aktiv","menu_card_label_version":"Version: {version}","modal_close":"SCHLIESSEN","modal_refresh":"NEU LADEN","modal_save":"SPEICHERN","navigation_back":"ZURÜCK","navigation_cancel":"ABBRECHEN","navigation_forward":"FORTFAHREN","navigation_skip":"AUSLASSEN","network_view_cable_connected_label":"Kabel angeschlossen:","network_view_connection_heading":"Verbindung","network_view_connection_not_supported_label":"Verbindung (Nicht unterstützt)","network_view_disable_button_label":"Deaktivieren","network_view_dns_label_":"DNS:","network_view_edit_button_label":"Bearbeiten","network_view_enable_button_label":"Aktivieren","network_view_enabled_info_label":"Aktiviert:","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Mobilfunk","network_view_internet_connection_label":"Mit Internet verbunden:","network_view_ip_address_label":"Adresse:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"MAC-Adresse","network_view_mac_address_label":"MAC-Adresse:","network_view_primary_connection_label":"Aktiv:","network_view_signal_strength_label":"Signalstärke:","network_view_ssid_label":"Konfiguriertes Netzwerk:","network_view_subnet_mask_label":"Subnetz:","network_view_tesla_connection_label":"Mit Tesla verbunden:","network_view_wifi_title":"WLAN","network_view_wireless_connected_label":"Verbunden:","not_found_description":"Tut uns leid. Die Seite, die Sie aufgerufen haben, wurde nicht gefunden.","not_found_title":"404 Seite nicht gefunden","password_input_view_password":"PASSWORT","password_input_view_show_password":"Passwort zeigen","phase_type_single":"Einphasig","phase_type_split":"Spaltphase","phase_type_three":"Dreiphasig","phase_type_two":"Zweiphasig","phase_type_wye_ll":"Wye L-L","prompt_required_field":"Dies ist ein Pflichtfeld.","service_factory_reset_confirmation":"Die lokalen Einstellungen werden gelöscht und das Gerät wird neu gestartet. Bitte bestätigen.","sideload_container_subtitle":"Wählen Sie eine .bin-Datei aus","summary_container_title":"Zusammenfassung","title_installation":"Installation","title_metering":"Messungen","title_networks":"Netzwerke","title_service":"Service","title_site_info":"Standort-Informationen","title_site_meter":"Anlagenmessgerät","title_software":"Software","title_software_update":"Software-Update","update_handshake_result_failed":"Der Server konnte nicht erreicht werden. Prüfen Sie bitte die Internetverbindung des Geräts und versuchen Sie es erneut.","update_handshake_result_non_actionable":"Keine Updates verfügbar.","update_handshake_result_update_staged":"Eine neue Software-Version ist verfügbar.","update_handshake_result_update_staged_version":"Software-Version {version} ist verfügbar.","update_last_update_result_failed":"Das letzte Software-Update ist fehlgeschlagen. Versuchen Sie es noch einmal oder wenden Sie sich an den Tesla Service.","update_status_downloading":"Update wird heruntergeladen ...","update_view_button_label_check_for_update":"NACH UPDATE SUCHEN","update_view_button_label_install":"INSTALLIEREN","update_view_check_notice_not_internet_connected":"Kann ohne Internetverbindung nicht auf Updates prüfen. Prüfen Sie bitte die Netzwerk-Konfiguration des Geräts.","update_view_handshake_failed":"Konnte keinen Kontakt zum Server herstellen, um nach einem Update zu suchen.","update_view_handshake_non_actionable":"Es sind keine Updates verfügbar.","update_view_handshake_update_staged":"Ein Update ist verfügbar. Es wird im Hintergrund heruntergeladen.","update_view_install_notice_not_internet_connected":"Das Software-Update kann ohne eine Internetverbindung nicht heruntergeladen werden. Prüfen Sie bitte die Netzwerk-Konfiguration des Geräts.","update_view_label_current_version":"Aktuelle Version: {version} ({identifier})","update_view_latest_version":"Aktuellste Version: {version}","update_view_not_yet_checked":"Noch keine Suche nach Updates.","update_view_notice_automatic_update":"Klicken Sie, um es jetzt anzuwenden. Andernfalls wird das Update später im Hintergrund installiert.","update_view_result_failed":"Das letzte Software-Update ist fehlgeschlagen. Versuchen Sie es noch einmal oder wenden Sie sich an den Tesla Service.","update_view_result_succeeded":"Das letzte Software-Update war erfolgreich.","update_view_status_downloaded":"Download abgeschlossen. Update zur Installation bereit.","update_view_status_downloading":"Update wird heruntergeladen ...","update_view_status_staged":"Update zur Installation bereit. Klicken Sie auf die Schaltfläche „Installieren“, um fortzufahren.","wifi_page_available_networks":"Verfügbare Netzwerke","wifi_page_cancel_button_label":"Abbrechen","wifi_page_check_password":"Die Verbindung konnte nicht hergestellt werden, bitte überprüfen Sie das WLAN-Passwort.","wifi_view_available_networks_subtitle":"VERFÜGBARE NETZWERKE","wifi_view_button_label_join":"VERBINDEN","wifi_view_button_label_manual":"NETZWERK MANUELL EINGEBEN","wifi_view_input_label_ssid":"NETZWERK (SSID)","wifi_view_label_connecting_ssid":"Verbinde mit {ssid}","wifi_view_mac_address_label":"MAC-Adresse: {mac}","wifi_view_no_networks":"Kein WLAN Netzwerk gefunden!","wifi_view_no_password_placeholder":"Kein Passwort","wifi_view_notice_joining":"Dieser Prozess kann einige Minuten dauern und möglicherweise zu einem Neustart des Geräts führen. Sie müssen möglicherweise die Verbindung zum WLAN-Access-Point des Geräts wiederherstellen, um mit der Installation fortzufahren.","wifi_view_password_label":"PASSWORT","wifi_view_prompt_network_types":"Verbindung zu verfügbaren 2,4-GHz-WPA-Netzwerken herstellen.","wifi_view_reconnect_notice":"Während dieses Vorgangs müssen Sie möglicherweise die Verbindung mit dem WLAN-Zugriffspunkt des Geräts wieder herstellen, um mit der Installation fortzufahren.","wifi_view_rescan":"NEU SCANNEN","wifi_view_username_label":"BENUTZER NAME","wifi_view_wpa2_password_label":"WPA2-PASSWORT"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"Allarmi","alerts_view_no_active_alerts":"Nessun avviso attivo","barcode_reader_checksum_error":"Codice a barre non valido. Controllare di aver inserito il codice a barre corretto e riprovare.","barcode_reader_format_error":"Formato non corretto del codice a barre. Verificare di aver inserito il codice a barre corretto e riprovare.","barcode_reader_internal_error":"Lettore del codice a barre non disponibile. Inserire le informazioni manualmente.","barcode_reader_not_found":"Impossibile rilevare il codice a barre. Controllare che il codice a barre sia a fuoco e sufficientemente ingrandito e riprovare.","button_factory_reset":"RIPRISTINA","button_label_confirm":"CONFERMA","button_label_factory_reset":"RIPRISTINO DELLE IMPOSTAZIONI PREDEFINITE DI FABBRICA","connection_details_network_configured":"Configurata","connection_details_network_configured_ip":"Rete configurata: {ipAddress}","connection_details_network_configured_ssid":"Rete configurata: {ssid}","connection_details_network_configured_ssid_ip":"Rete configurata: {ssid} ({ipAddress})","connection_details_network_not_connected":"Non connessa","connection_modal_description":"Questo si verifica quando si esegue un ciclo di accensione del dispositivo, si applica un aggiornamento software o si apportano modifiche alla configurazione di un determinato dispositivo.{br}{br}Per continuare, potrebbe essere necessario doversi ricollegare all\'Access Point Wi-Fi del dispositivo.","connection_modal_title":"Il collegamento al dispositivo è stato interrotto","connection_status_network_configured":"Configurata","connection_status_network_connected":"Connessa","connection_status_network_connection_problem":"Problema di connessione","connection_status_network_disabled":"Disattivata","connection_status_network_no_internet":"Nessuna connessione a Internet. Controllare la configurazione dell\'indirizzo IP e l\'uplink a Internet.","connection_status_network_no_ip":"Indirizzo IP non assegnato. Controllare se nella configurazione del router sono presenti elenchi di blocco di indirizzi MAC o simili.","connection_status_network_no_tesla":"Nessun collegamento a Tesla. Controllare le impostazioni del router e del firewall.","connection_status_network_not_connected":"Non connessa","control_connect":"COLLEGARE","control_delete":"RIMUOVI","country_name_ad":"Andorra","country_name_ae":"Emirati Arabi Uniti","country_name_am":"Armenia","country_name_at":"Austria","country_name_au":"Australia","country_name_ba":"Bosnia ed Erzegovina","country_name_be":"Belgio","country_name_bg":"Bulgaria","country_name_ca":"Canada","country_name_ch":"Svizzera","country_name_cn":"Cina","country_name_cy":"Cipro","country_name_cz":"Repubblica Ceca","country_name_de":"Germania","country_name_dk":"Danimarca","country_name_ee":"Estonia","country_name_es":"Spagna","country_name_fi":"Finlandia","country_name_fr":"Francia","country_name_gb":"Regno Unito","country_name_gi":"Gibilterra","country_name_gr":"Grecia","country_name_hk":"Hong Kong","country_name_hr":"Croazia","country_name_hu":"Ungheria","country_name_ie":"Irlanda","country_name_il":"Israele","country_name_is":"Islanda","country_name_it":"Italia","country_name_jp":"Giappone","country_name_kr":"Corea del Sud","country_name_li":"Liechtenstein","country_name_lt":"Lituania","country_name_lu":"Lussemburgo","country_name_lv":"Lettonia","country_name_mc":"Monaco","country_name_mo":"Macao","country_name_mt":"Malta","country_name_mx":"Messico","country_name_nl":"Paesi Bassi","country_name_no":"Norvegia","country_name_nz":"Nuova Zelanda","country_name_pl":"Polonia","country_name_pt":"Portogallo","country_name_ro":"Romania","country_name_rs":"Serbia","country_name_ru":"Russia","country_name_se":"Svezia","country_name_sg":"Singapore","country_name_sk":"Slovacchia","country_name_sm":"San Marino","country_name_tw":"Taiwan","country_name_uk":"Ucraina","country_name_us":"Stati Uniti","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energia}kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_meter_site_export_power":"Esportazione di {realPower}","display_meter_site_import_power":"Importazione di {realPower}","display_meter_solar_generation_power":"Generazione di {realPower}","display_phase_type_unknown":"sconosciuto","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"Seleziona","error_boundary_label_error_details":"Dettagli errore:","error_boundary_subtitle":"Siamo spiacenti. Si è verificato un errore nell\'app.","error_boundary_title":"Spiacenti! Si è verificato un errore.","error_messages_invalid_password":"Password non valida. Riprovare.","factory_reset_subtitle":"Cancella tutte le impostazioni di rete e del dispositivo. Verrà fatto il possibile per scollegare qualsiasi dispositivo associato. I dati sulla durata non saranno modificati.","grid_code_container_title":"Tipologia di Rete","grid_code_point_PINVrx_SmartInvSelect":"Funzionalità inverter intelligente abilitate","grid_code_point_nominal_grid_frequency":"Frequenza nominale della rete","grid_code_point_nominal_grid_voltage":" Tensione nominale della rete (L-N)","grid_code_point_nominal_pinv_voltage":"Tensione nominale della rete dei Powerwall connessi","grid_code_point_vf_limit_over_frequency_0_grid_following":"Limite riconnessione sovra-frequenza","grid_code_point_vf_limit_over_frequency_1_grid_following":"Over Frequency Trip 1 - Limit","grid_code_point_vf_limit_over_voltage_0_grid_following":"Limite riconnessione sovratensione","grid_code_point_vf_limit_over_voltage_1_grid_following":"Over Voltage Trip 1 - Limit","grid_code_point_vf_limit_under_frequency_0_grid_following":"Limite riconnessione sottofrequenza","grid_code_point_vf_limit_under_frequency_1_grid_following":"Under Frequency Trip 1 - Limit","grid_code_point_vf_limit_under_voltage_0_grid_following":"Limite riconnessione sottotensione","grid_code_point_vf_limit_under_voltage_1_grid_following":"Under Voltage Trip 1 - Limit","grid_code_point_vf_param_allow_charging_while_qualifying":"Consentire caricamento batteria durante periodo qualificazione della rete","grid_code_point_vf_timing_over_frequency_1_grid_following":"Over Frequency Trip 1 - Timing","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Inverter-Tempo di riqualificazione della rete ","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Volt","grid_code_unit_V_pu":"V/V_nominal","grid_code_unit_bool":"0 = no, 1 = sì","grid_code_unit_enum":"valore enumerato, vedere manuale","grid_code_unit_s":"secondi","grid_code_view_advanced_label":"IMPOSTAZIONI AVANZATE","grid_code_view_confirmation":"Conferma che il tipologia di rete selezionato è corretto per questo sito","grid_code_view_country_label":"STATO","grid_code_view_distributor_label":"DISTRIBUTORE","grid_code_view_filter_freq":"Questo Sito è disconnesso dalla Rete. Permetti selezione di qualsiasi Tipologia di Rete.","grid_code_view_filter_freq_warning":"Si prega di scegliere attentamente il Tipologia di Rete adatto, per garantire che il sistema funzioni a Voltaggio e Frequenza corretti.","grid_code_view_frequency":"Frequenza","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Confermare che il codice rete preconfigurato è valido per questo luogo d\'installazione","grid_code_view_preconfigured_label":"CODICE RETE PRECONFIGURATO","grid_code_view_region_label":"REGIONE","grid_code_view_reset_modal_body":"Questo sito ha impostazioni personalizzate del codice rete. Le impostazioni configurate saranno cancellate quando il codice rete viene cambiato o ripristinato.","grid_code_view_reset_modal_cancel_button":"Annulla","grid_code_view_reset_modal_confirm_button":"Cancellare le impostazioni e continuare","grid_code_view_reset_modal_header":"RESETTARE LA SELEZIONE DEL CODICE RETE?","grid_code_view_reset_selection":"RESETTARE SELEZIONE CODICE RETE","grid_code_view_retailer_label":"FORNITORE","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"CODICE DI RETE","grid_code_view_utility_label":"SOCIETÁ DI DISTRIBUZIONE ENERGIA","grid_code_view_volt_freq_label":"TENSIONE/FREQUENZA","grid_code_view_voltage":"Tensione","grid_code_view_voltage_reading_split":"{voltageLN}/{voltageLL}","label_button_edit":"MODIFICA","label_button_enter_manually":"INSERIRE MANUALMENTE","label_button_finish":"FINE","label_button_scan_barcode":"SCANSIONA CODICE A BARRE","label_button_scan_qrcode":"SCANSIONA QR CODE","label_button_upload":"CARICA","label_factory_reset":"RIPRISTINO AI PARAMETRI DI FABBRICA","label_form_input_file":"FILE","label_form_input_software_update":"AGGIORNA SOFTWARE","label_model":"Modello","label_part_number":"Numero parte ","label_part_number_psn":"Numero di parte (TPN)","label_serial_number":"Numero di serie","label_serial_number_tsn":"Numero di serie (TSN)","menu_card_label_active_alerts":"Attivi: {alertCount}","menu_card_label_no_active_alerts":"Nessuno attivo","menu_card_label_version":"Versione: {version}","modal_close":"CHIUDI","modal_refresh":"AGGIORNA","modal_save":"SALVA","navigation_back":"INDIETRO","navigation_cancel":"ANNULLA","navigation_forward":"CONTINUA","navigation_skip":"IGNORA","network_view_cable_connected_label":"Cavo collegato:","network_view_connection_heading":"Collegamento","network_view_connection_not_supported_label":"Connessione (non supportata)","network_view_disable_button_label":"Disattiva","network_view_dns_label_":"DNS:","network_view_edit_button_label":"Modifica","network_view_enable_button_label":"Attiva","network_view_enabled_info_label":"Attivata:","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Cellulare","network_view_internet_connection_label":"Connesso a Internet:","network_view_ip_address_label":"Indirizzo:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"Indirizzo MAC","network_view_mac_address_label":"Indirizzo MAC:","network_view_primary_connection_label":"Attivo:","network_view_signal_strength_label":"Forza del segnale:","network_view_ssid_label":"Rete configurata:","network_view_subnet_mask_label":"Subnet:","network_view_tesla_connection_label":"Connesso a Tesla:","network_view_wifi_title":"Wi-Fi","network_view_wireless_connected_label":"Connesso:","not_found_description":"Ci spiace ma la pagina che cercavi non è disponibile","not_found_title":"404, pagina non disponibile","password_input_view_password":"PASSWORD","password_input_view_show_password":"Mostra Password","phase_type_single":"Monofase","phase_type_split":"Bifase","phase_type_three":"Trifase","phase_type_two":"Due fasi","phase_type_wye_ll":"Wye L-L","prompt_required_field":"Questo campo è obbligatorio.","service_factory_reset_confirmation":"Verranno rilevate le impostazioni locali e il dispositivo verrà riavviato. Confermare.","sideload_container_subtitle":"Selezionare un file .bin","summary_container_title":"Riepilogo","title_installation":"Installazione","title_metering":"Misurazioni","title_networks":"Reti","title_service":"Assistenza","title_site_info":"Informazioni sul sito","title_site_meter":"Contatore del sito (meter)","title_software":"Software","title_software_update":"Aggiornamento software","update_handshake_result_failed":"Impossibile contattare il server. Verificare che il dispositivo sia connesso a Internet e riprovare.","update_handshake_result_non_actionable":"Non sono disponibili aggiornamenti.","update_handshake_result_update_staged":"È disponbile una nuova versione software.","update_handshake_result_update_staged_version":"È disponibile la versione software {version}.","update_last_update_result_failed":"Ultimo aggiornamento software non riuscito. Riprovare o contattare l\'Assistenza Tesla.","update_status_downloading":"Download aggiornamento...","update_view_button_label_check_for_update":"CONTROLLA AGGIORNAMENTI","update_view_button_label_install":"INSTALLA","update_view_check_notice_not_internet_connected":"Impossibile controllare gli aggiornamenti senza una connessione a Internet. Controllare la configurazione di rete del dispositivo.","update_view_handshake_failed":"Impossibile contattare il server per controllare gli aggiornamenti.","update_view_handshake_non_actionable":"Non sono disponibili aggiornamenti.","update_view_handshake_update_staged":"È disponibile un aggiornamento e sarà scaricato in background.","update_view_install_notice_not_internet_connected":"Impossibile scaricare l\'aggiornamento software senza una connessione a Internet. Controllare la configurazione di rete del dispositivo.","update_view_label_current_version":"Versione corrente: {version} ({identifier})","update_view_latest_version":"Ultima versione: {version}","update_view_not_yet_checked":"Disponibilità aggiornamenti mai controllata","update_view_notice_automatic_update":"Fare clic per installare ora. In caso contrario, l\'aggiornamento verrà installato in background più avanti.","update_view_result_failed":"Ultimo aggiornamento software non riuscito. Riprovare o contattare l\'Assistenza Tesla.","update_view_result_succeeded":"Ultimo aggiornamento software riuscito.","update_view_status_downloaded":"Download completato. Installazione temporanea aggiornamento...","update_view_status_downloading":"Download aggiornamento...","update_view_status_staged":"Aggiornamento installato temporaneamente. Fare clic sul pulsante per procedere.","wifi_page_available_networks":"Reti disponibili","wifi_page_cancel_button_label":"Annulla","wifi_page_check_password":"Impossibile connettersi, controlla la password del Wi-Fi.","wifi_view_available_networks_subtitle":"RETI DISPONIBILI","wifi_view_button_label_join":"ASSOCIA","wifi_view_button_label_manual":"INSERIRE MANUALMENTE LA RETE","wifi_view_input_label_ssid":"RETE (SSID)","wifi_view_label_connecting_ssid":"Collegamento a {ssid}","wifi_view_mac_address_label":"Indirizzo MAC: {mac}","wifi_view_no_networks":"Non ho trovato reti Wi-Fi!","wifi_view_no_password_placeholder":"Non è necessaria una password","wifi_view_notice_joining":"Questa procedura può richiedere alcuni minuti e il dispositivo potrebbe essere riavviato. Per continuare l\'installazione potrebbe essere necessario doversi ricollegare all\'Access Point Wi-Fi del dispositivo.","wifi_view_password_label":"PASSWORD","wifi_view_prompt_network_types":"Connettersi alle reti WPA 2.4 GHz disponibili.","wifi_view_reconnect_notice":"Durante questa procedura potrebbe essere necessario riconnettersi all\'Access Point Wi-Fi del dispositivo per continuare l\'installazione.","wifi_view_rescan":"RIPETI SCANSIONE","wifi_view_username_label":"NOME UTENTE","wifi_view_wpa2_password_label":"PASSWORD WPA2"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"Alertas","alerts_view_no_active_alerts":"No hay alertas activas","barcode_reader_checksum_error":"Código de barras no válido. Inténtelo de nuevo, asegurándose de enviar el código de barras correcto.","barcode_reader_format_error":"Formato de código de barras incorrecto. Inténtelo de nuevo y asegúrese de enviar el código de barras correcto.","barcode_reader_internal_error":"Escáner de código de barras no disponible. Proporcione la información manualmente.","barcode_reader_not_found":"No se ha podido detectar el código de barras. Inténtelo de nuevo asegurándose de que el código de barras se ve claramente y es lo suficientemente grande.","button_factory_reset":"RESTABLECER","button_label_confirm":"CONFIRMAR","button_label_factory_reset":"RESTABLECER VALORES DE FÁBRICA","connection_details_network_configured":"Configurada","connection_details_network_configured_ip":"Red configurada: {ipAddress}","connection_details_network_configured_ssid":"Red configurada: {ssid}","connection_details_network_configured_ssid_ip":"Red configurada: {ssid} ({ipAddress})","connection_details_network_not_connected":"No conectada","connection_modal_description":"Esto es lo esperado al apagar y después encender el dispositivo, se aplica una actualización de software o se realizan cambios en determinada configuración del dispositivo.{br}{br}Para continuar, es posible que tenga que volver a conectarse al punto de acceso wifi del dispositivo.","connection_modal_title":"Se ha perdido la conexión con el dispositivo","connection_status_network_configured":"Configurada","connection_status_network_connected":"Conectado","connection_status_network_connection_problem":"Problema de conexión","connection_status_network_disabled":"Discapacitado","connection_status_network_no_internet":"No hay conexión a Internet. Compruebe la configuración de la dirección IP y del enlace de subida a Internet.","connection_status_network_no_ip":"No se ha obtenido una dirección IP. Compruebe en la configuración del router si la dirección MAC está en alguna lista de bloqueo o similar.","connection_status_network_no_tesla":"No hay conexión con Tesla. Compruebe la configuración del router y del firewall.","connection_status_network_not_connected":"No conectada","control_connect":"CONECTAR","control_delete":"BORRAR","country_name_ad":"Andorra","country_name_ae":"Emiratos Árabes Unidos","country_name_am":"Armenia","country_name_at":"Austria","country_name_au":"Australia","country_name_ba":"Bosnia y Herzegovina","country_name_be":"Bélgica","country_name_bg":"Bulgaria","country_name_ca":"Canadá","country_name_ch":"Suiza","country_name_cn":"China","country_name_cy":"Chipre","country_name_cz":"República Checa","country_name_de":"Alemania","country_name_dk":"Dinamarca","country_name_ee":"Estonia","country_name_es":"España","country_name_fi":"Finlandia","country_name_fr":"Francia","country_name_gb":"Reino Unido","country_name_gi":"Gibraltar","country_name_gr":"Grecia","country_name_hk":"Hong Kong","country_name_hr":"Croacia","country_name_hu":"Hungría","country_name_ie":"Irlanda","country_name_il":"Israel","country_name_is":"Islandia","country_name_it":"Italia","country_name_jp":"Japón","country_name_kr":"Corea del Sur","country_name_li":"Liechtenstein","country_name_lt":"Lituania","country_name_lu":"Luxemburgo","country_name_lv":"Letonia","country_name_mc":"Mónaco","country_name_mo":"Macao","country_name_mt":"Malta","country_name_mx":"México","country_name_nl":"Países Bajos","country_name_no":"Noruega","country_name_nz":"Nueva Zelanda","country_name_pl":"Polonia","country_name_pt":"Portugal","country_name_ro":"Rumanía","country_name_rs":"Serbia","country_name_ru":"Rusia","country_name_se":"Suecia","country_name_sg":"Singapur","country_name_sk":"Eslovaquia","country_name_sm":"San Marino","country_name_tw":"Taiwán","country_name_uk":"Ucrania","country_name_us":"Estados Unidos","display_current_amps":"{current} A","display_energy_kilowatt_hours":"{energy} kWh","display_energy_watt_hours":"{energy} Wh","display_frequency_hertz":"{frequency} Hz","display_meter_site_export_power":"Exportación: {realPower} ","display_meter_site_import_power":"Importación: {realPower}","display_meter_solar_generation_power":"Generación: {realPower}","display_phase_type_unknown":"desconocido","display_power_kilowatts":"{power} kW","display_power_watts":"{power} W","display_resistance_kiloohms":"{resistance} kΩ","display_resistance_ohms":"{resistance} Ω","display_voltage_volts":"{voltage} V","dropdown_default_selection":"Seleccionar","error_boundary_label_error_details":"Detalles del error:","error_boundary_subtitle":"Bueno, esto es vergonzoso... Encontrado un error en la aplicación.","error_boundary_title":"¡Vaya! Algo salio mal","error_messages_invalid_password":"Contraseña no válida. Vuelva a intentarlo.","factory_reset_subtitle":"Borra toda la configuración de red y dispositivo. Se hara todo lo posible para desvincular los dispositivos emparejados Los datos de vida útil no se verán afectados.","grid_code_container_title":"Código de red ( Código de cuadrícula) ","grid_code_point_PINVrx_SmartInvSelect":"Funciones de inversor inteligente habilitadas","grid_code_point_nominal_grid_frequency":"Frecuencia nominal de la red","grid_code_point_nominal_grid_voltage":" Voltaje nominal de la red (L-N)","grid_code_point_nominal_pinv_voltage":"Tensión nominal de la red en las Powerwalls conectadas","grid_code_point_vf_limit_over_frequency_0_grid_following":"Límite de reconexiones por sobre frecuencia","grid_code_point_vf_limit_over_frequency_1_grid_following":"Disparo por sobrefrecuencia 1 - Límite","grid_code_point_vf_limit_over_voltage_0_grid_following":"Límite de reconexiones por sobretensión","grid_code_point_vf_limit_over_voltage_1_grid_following":"Disparo por Sobre voltaje 1 - Límite","grid_code_point_vf_limit_under_frequency_0_grid_following":"Límite de reconexiones por subfrecuencia","grid_code_point_vf_limit_under_frequency_1_grid_following":"Disparo por baja frecuencia 1 - Límite","grid_code_point_vf_limit_under_voltage_0_grid_following":"Límite de reconexiones por bajo voltaje","grid_code_point_vf_limit_under_voltage_1_grid_following":"Disparo por bajo voltaje 1 - Límite","grid_code_point_vf_param_allow_charging_while_qualifying":"Permite la carga de la batería durante el periodo de calificación de la red","grid_code_point_vf_timing_over_frequency_1_grid_following":"Disparo por sobrefrecuencia 1 - Temporización","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Tiempo de recalificación de la red del inversor","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Voltios","grid_code_unit_V_pu":"V / V_nominal","grid_code_unit_bool":"0 = no, 1 = sí","grid_code_unit_enum":"valor enumerado; consulte el manual","grid_code_unit_s":"segundos","grid_code_view_advanced_label":"CONFIGURACIÓN AVANZADA","grid_code_view_confirmation":"Confirmar que el código de red seleccionado corresponde a esta ubicación","grid_code_view_country_label":"PAÍS","grid_code_view_distributor_label":"Operador de red de distribución (DNO)","grid_code_view_filter_freq":"Actualmente, este sitio se encuentra fuera de la red. Permitir selección de todos los códigos de red.","grid_code_view_filter_freq_warning":"Seleccione cuidadosamente el código de red adecuado para asegurarse de que el sistema funcionará con el voltaje y la frecuencia correctos.","grid_code_view_frequency":"Frecuencia","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Confirme que el código de red preconfigurada se aplica a esta ubicación","grid_code_view_preconfigured_label":"CÓDIGO DE RED PRECONFIGURADA","grid_code_view_region_label":"REGIÓN","grid_code_view_reset_modal_body":"Este sitio tiene una configuración de código de red personalizada. Estos parámetros configurados se borran cuando se cambia o restablece el código de red.","grid_code_view_reset_modal_cancel_button":"Cancelar","grid_code_view_reset_modal_confirm_button":"Borrar ajustes y continuar","grid_code_view_reset_modal_header":"¿RESTABLECER SELECCIÓN DE CÓDIGO DE RED?","grid_code_view_reset_selection":"RESTABLECER SELECCIÓN DE CÓDIGO DE RED","grid_code_view_retailer_label":"COMERCIANTE","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"ESTÁNDAR","grid_code_view_utility_label":"RED ELÉCTRICA","grid_code_view_volt_freq_label":"VOLTAJE/FRECUENCIA","grid_code_view_voltage":"Voltaje","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"EDITAR","label_button_enter_manually":"INTRODUCIR MANUALMENTE","label_button_finish":"FINALIZAR","label_button_scan_barcode":"ESCANEAR CÓDIGO DE BARRAS","label_button_scan_qrcode":"ESCANEAR CÓDIGO QR","label_button_upload":"CARGAR","label_factory_reset":"RESTABLECIMIENTO DE FÁBRICA","label_form_input_file":"ARCHIVO","label_form_input_software_update":"ACTUALIZACIÓN DE SOFTWARE","label_model":"Modelo","label_part_number":"Número de pieza","label_part_number_psn":"Número de pieza (TPN)","label_serial_number":"Número de serie","label_serial_number_tsn":"Número de serie (TSN)","menu_card_label_active_alerts":"Activas: {alertCount}","menu_card_label_no_active_alerts":"Ninguna activa","menu_card_label_version":"Versión: {version}","modal_close":"CERRAR","modal_refresh":"ACTUALIZAR","modal_save":"GUARDAR","navigation_back":"ATRÁS","navigation_cancel":"CANCELAR","navigation_forward":"CONTINUAR","navigation_skip":"SALTAR","network_view_cable_connected_label":"Cable conectado:","network_view_connection_heading":"Conexión","network_view_connection_not_supported_label":"Conexión (no se admite)","network_view_disable_button_label":"Desactivar","network_view_dns_label_":"DNS:","network_view_edit_button_label":"Editar","network_view_enable_button_label":"Habilitar","network_view_enabled_info_label":"Habilitada:","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Móvil","network_view_internet_connection_label":"Conectado a Internet:","network_view_ip_address_label":"Dirección:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"Dirección MAC","network_view_mac_address_label":"Dirección MAC:","network_view_primary_connection_label":"Activo:","network_view_signal_strength_label":"Intensidad de la señal:","network_view_ssid_label":"Red configurada:","network_view_subnet_mask_label":"Subred:","network_view_tesla_connection_label":"Conectado a Tesla:","network_view_wifi_title":"Wi-Fi","network_view_wireless_connected_label":"Conectado:","not_found_description":"Disculpe, la página que busca no existe.","not_found_title":"404 No se encuentra esa página","password_input_view_password":"CONTRASEÑA","password_input_view_show_password":"Mostrar contraseña","phase_type_single":"Monofásica","phase_type_split":"Fase dividida","phase_type_three":"Trifásica","phase_type_two":"Bifásica","phase_type_wye_ll":"Conexión en Y L-L","prompt_required_field":"Este campo es obligatorio.","service_factory_reset_confirmation":"La configuración local se borrará y se reiniciará el dispositivo. Por favor, confirme.","sideload_container_subtitle":"Seleccione un archivo .bin","summary_container_title":"Resumen","title_installation":"Instalación","title_metering":"Medición","title_networks":"Redes","title_service":"Servicio","title_site_info":"Información del sitio","title_site_meter":"Medidor del emplazamiento","title_software":"Software","title_software_update":"Actualización de software","update_handshake_result_failed":"No se puede contactar con el servidor. Compruebe la conexión a internet del dispositivo e inténtelo de nuevo.","update_handshake_result_non_actionable":"No hay actualizaciones disponibles.","update_handshake_result_update_staged":"Hay una nueva versión de software disponible.","update_handshake_result_update_staged_version":"La versión de software {version} está disponible.","update_last_update_result_failed":"No se ha podido completar la actualización del software. Inténtelo de nuevo o póngase en contacto con el equipo de servicio de Tesla.","update_status_downloading":"Descargando actualización...","update_view_button_label_check_for_update":"BUSCAR ACTUALIZACIONES","update_view_button_label_install":"INSTALAR","update_view_check_notice_not_internet_connected":"Sin conexión a Internet no se puede comprobar si hay actualizaciones. Compruebe la configuración de red del dispositivo.","update_view_handshake_failed":"No se puede contactar con el servidor para comprobar si hay actualizaciones.","update_view_handshake_non_actionable":"No hay actualizaciones disponibles.","update_view_handshake_update_staged":"Hay una actualización disponible y se descargará en segundo plano.","update_view_install_notice_not_internet_connected":"No se puede descargar la actualización de software sin una conexión a internet. Compruebe la configuración de red del dispositivo.","update_view_label_current_version":"Versión actual: {version} ({identifier})","update_view_latest_version":"Versión más reciente: {version}","update_view_not_yet_checked":"Todavía no se ha comprobado si hay alguna actualización.","update_view_notice_automatic_update":"Haga clic para aplicar ahora. De otro modo, la actualización se instalará más tarde en segundo plano.","update_view_result_failed":"No se ha podido completar la actualización del software. Inténtelo de nuevo o póngase en contacto con el equipo de servicio de Tesla.","update_view_result_succeeded":"Se ha completado correctamente la actualización del software.","update_view_status_downloaded":"Descarga completada. Preparando actualización...","update_view_status_downloading":"Descargando actualización...","update_view_status_staged":"Actualización preparada. Haga clic en el botón de instalación para continuar.","wifi_page_available_networks":"Redes disponibles","wifi_page_cancel_button_label":"Cancelar","wifi_page_check_password":"No se puede conectar, compruebe la contraseña de Wi-Fi.","wifi_view_available_networks_subtitle":"REDES DISPONIBLES","wifi_view_button_label_join":"CONECTARSE","wifi_view_button_label_manual":"INTRODUCIR RED MANUALMENTE","wifi_view_input_label_ssid":"RED (SSID)","wifi_view_label_connecting_ssid":"Conectándose a {ssid}","wifi_view_mac_address_label":"Dirección MAC: {mac}","wifi_view_no_networks":"No se ha encontrado ninguna red Wi-Fi.","wifi_view_no_password_placeholder":"No se necesita contraseña","wifi_view_notice_joining":"Este proceso puede tardar unos minutos y es posible que el dispositivo se reinicie. Para continuar con la instalación, es posible que tenga que volver a conectarse al punto de acceso wifi.","wifi_view_password_label":"CONTRASEÑA","wifi_view_prompt_network_types":"Conectarse a redes WPA de 2,4 GHz disponibles.","wifi_view_reconnect_notice":"Durante el proceso es posible que tenga que volver a conectarse al punto de acceso Wi-Fi del dispositivo antes de continuar con la instalación.","wifi_view_rescan":"VOLVER A ESCANEAR","wifi_view_username_label":"NOMBRE DE USUARIO","wifi_view_wpa2_password_label":"CONTRASEÑA WPA2"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"Waarschuwingen","alerts_view_no_active_alerts":"Geen actieve waarschuwingen","barcode_reader_checksum_error":"Ongeldige barcode. Probeer het opnieuw en zorg ervoor dat u de juiste barcode indient.","barcode_reader_format_error":"Onjuiste barcode-indeling. Probeer het opnieuw en zorg ervoor dat u de juiste barcode indient.","barcode_reader_internal_error":"Barcodescanner niet beschikbaar. Geef de informatie handmatig op.","barcode_reader_not_found":"Barcode kon niet worden gedetecteerd. Probeer het opnieuw en zorg ervoor dat de barcode scherp en groot genoeg is.","button_factory_reset":"RESET","button_label_confirm":"BEVESTIGEN","button_label_factory_reset":"STANDAARD FABRIEKSINSTELLINGEN TERUGZETTEN","connection_details_network_configured":"Geconfigureerd","connection_details_network_configured_ip":"Geconfigureerd netwerk: {ipAddress}","connection_details_network_configured_ssid":"Geconfigureerd netwerk: {ssid}","connection_details_network_configured_ssid_ip":"Geconfigureerd netwerk: {ssid} ({ipAddress})","connection_details_network_not_connected":"Niet verbonden","connection_modal_description":"Dit is te verwachten wanneer het apparaat uit en weer aan word gezet, bij het toepassen van een software-update of wanneer bepaalde apparaatconfiguratie wordt gewijzigd.{br}{br}Mogelijk moet u opnieuw verbinding maken met het wifitoegangspunt van het apparaat om door te gaan.","connection_modal_title":"Verbinding met apparaat verbroken","connection_status_network_configured":"Geconfigureerd","connection_status_network_connected":"Verbonden","connection_status_network_connection_problem":"Verbindingsprobleem","connection_status_network_disabled":"Uitgeschakeld","connection_status_network_no_internet":"Geen verbinding met internet. Controleer IP-adresconfiguratie en internet-uplink.","connection_status_network_no_ip":"Geen IP-adres gekregen. Controleer de routerconfiguratie voor MAC-adresblokkeringslijsten of gelijkaardige instellingen.","connection_status_network_no_tesla":"Geen verbinding met Tesla. Controleer de router- en firewall-instellingen.","connection_status_network_not_connected":"Niet verbonden","control_connect":"AANSLUITEN","control_delete":"VERWIJDEREN","country_name_ad":"Andorra","country_name_ae":"Verenigde Arabische Emiraten","country_name_am":"Armenië","country_name_at":"Oostenrijk","country_name_au":"Australië","country_name_ba":"Bosnië en Herzegovina","country_name_be":"België","country_name_bg":"Bulgarije","country_name_ca":"Canada","country_name_ch":"Zwitserland","country_name_cn":"China","country_name_cy":"Cyprus","country_name_cz":"Tsjechië","country_name_de":"Duitsland","country_name_dk":"Denemarken","country_name_ee":"Estland","country_name_es":"Spanje","country_name_fi":"Finland","country_name_fr":"Frankrijk","country_name_gb":"Verenigd Koninkrijk","country_name_gi":"Gibraltar","country_name_gr":"Griekenland","country_name_hk":"Hongkong","country_name_hr":"Kroatië","country_name_hu":"Hongarije","country_name_ie":"Ierland","country_name_il":"Israël","country_name_is":"IJsland","country_name_it":"Italië","country_name_jp":"Japan","country_name_kr":"Zuid-Korea","country_name_li":"Liechtenstein","country_name_lt":"Litouwen","country_name_lu":"Luxemburg","country_name_lv":"Letland","country_name_mc":"Monaco","country_name_mo":"Macao","country_name_mt":"Malta","country_name_mx":"Mexico","country_name_nl":"Nederland","country_name_no":"Noorwegen","country_name_nz":"Nieuw-Zeeland","country_name_pl":"Polen","country_name_pt":"Portugal","country_name_ro":"Roemenië","country_name_rs":"Servië","country_name_ru":"Rusland","country_name_se":"Zweden","country_name_sg":"Singapore","country_name_sk":"Slowakije","country_name_sm":"San Marino","country_name_tw":"Taiwan","country_name_uk":"Oekraïne","country_name_us":"Verenigde Staten","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energy} kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_phase_type_unknown":"onbekend","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"Selecteren","error_boundary_label_error_details":"Foutdetails:","error_boundary_subtitle":"Wat is dit vervelend! Er is een fout opgetreden in de app.","error_boundary_title":"Oeps! Er is iets fout gegaan.","error_messages_invalid_password":"Ongeldig wachtwoord. Probeer het opnieuw.","factory_reset_subtitle":"Hiermee worden alle netwerk- en apparaatinstellingen gewist. Er wordt zo goed mogelijk geprobeerd om eventuele gekoppelde apparaten te ontkoppelen. Dit heeft geen invloed op levensduurgegevens.","grid_code_container_title":"Netcode","grid_code_point_PINVrx_SmartInvSelect":"Ingeschakelde functies voor slimme omvormer","grid_code_point_nominal_grid_frequency":"Nominale netfrequentie","grid_code_point_nominal_grid_voltage":" Nominale netspanning (L-N)","grid_code_point_nominal_pinv_voltage":"Nominale netspanning van aangesloten Powerwalls","grid_code_point_vf_limit_over_frequency_0_grid_following":"Bovenlimiet heraansluitingsfrequentie","grid_code_point_vf_limit_over_frequency_1_grid_following":"Over Frequency Trip 1 - Limit","grid_code_point_vf_limit_over_voltage_0_grid_following":"Bovenlimiet heraansluitingsspanning","grid_code_point_vf_limit_over_voltage_1_grid_following":"Over Voltage Trip 1 - Limit","grid_code_point_vf_limit_under_frequency_0_grid_following":"Onderlimiet heraansluitingsfrequentie","grid_code_point_vf_limit_under_frequency_1_grid_following":"Under Frequency Trip 1 - Limit","grid_code_point_vf_limit_under_voltage_0_grid_following":"Onderlimiet heraansluitingsspanning","grid_code_point_vf_limit_under_voltage_1_grid_following":"Under Voltage Trip 1 - Limit","grid_code_point_vf_param_allow_charging_while_qualifying":"Opladen van de batterij toestaan tijdens de kwalificatieperiode van het net","grid_code_point_vf_timing_over_frequency_1_grid_following":"Over Frequency Trip 1 - Timing","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Omvormer herkwalificatietijd net","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Volt","grid_code_unit_V_pu":"V / V_nominal","grid_code_unit_bool":"0 = nee, 1 = ja","grid_code_unit_enum":"genummerde waarde, zie handleiding","grid_code_unit_s":"seconden","grid_code_view_advanced_label":"GEAVANCEERDE INSTELLINGEN","grid_code_view_confirmation":"Bevestig dat de geselecteerde netcode van toepassing is op deze locatie","grid_code_view_country_label":"LAND","grid_code_view_distributor_label":"NETBEHEERDER","grid_code_view_filter_freq":"Deze locatie is momenteel niet met het elektriciteitsnet verbonden. Keuze uit alle netcodes toestaan.","grid_code_view_filter_freq_warning":"Selecteer zorgvuldig de juiste netcode om ervoor te zorgen dat het systeem op de gewenste spanning en frequentie draait.","grid_code_view_frequency":"Frequentie","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Bevestig dat de voorgeconfigureerde netcode van toepassing is op deze locatie","grid_code_view_preconfigured_label":"VOORGECONFIGUREERDE NETCODE","grid_code_view_region_label":"REGIO","grid_code_view_reset_modal_body":"Deze locatie heeft aangepaste instellingen voor de netcode. Deze geconfigureerde instellingen worden gewist wanneer de netcode wordt gewijzigd of gereset.","grid_code_view_reset_modal_cancel_button":"Annuleren","grid_code_view_reset_modal_confirm_button":"Instellingen wissen en doorgaan","grid_code_view_reset_modal_header":"SELECTIE VAN NETCODE RESETTEN?","grid_code_view_reset_selection":"SELECTIE VAN NETCODE RESETTEN","grid_code_view_retailer_label":"ENERGIELEVERANCIER","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"NETCODE","grid_code_view_utility_label":"ENERGIEMAATSCHAPPIJ","grid_code_view_volt_freq_label":"SPANNING/FREQUENTIE","grid_code_view_voltage":"Spanning","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"BEWERKEN","label_button_enter_manually":"HANDMATIG INVOEREN","label_button_finish":"VOLTOOIEN","label_button_scan_barcode":"BARCODE SCANNEN","label_button_scan_qrcode":"QR-CODE SCANNEN","label_button_upload":"UPLOADEN","label_factory_reset":"INSTELLINGEN WISSEN","label_form_input_file":"BESTAND","label_form_input_software_update":"SOFTWARE-UPDATE","label_model":"Model","label_part_number":"Onderdeelnummer","label_part_number_psn":"Onderdeelnummer (TPN)","label_serial_number":"Serienummer","label_serial_number_tsn":"Serienummer (TSN)","menu_card_label_active_alerts":"Actief: {alertCount}","menu_card_label_no_active_alerts":"Geen actief","menu_card_label_version":"Versie: {version}","modal_close":"SLUITEN","modal_refresh":"VERNIEUWEN","modal_save":"OPSLAAN","navigation_back":"TERUG","navigation_cancel":"ANNULEREN","navigation_forward":"DOORGAAN","navigation_skip":"OVERSLAAN","network_view_cable_connected_label":"Kabel aangesloten:","network_view_connection_heading":"Verbinding","network_view_connection_not_supported_label":"Verbinding (niet ondersteund)","network_view_disable_button_label":"Uitschakelen","network_view_dns_label_":"DNS:","network_view_edit_button_label":"Bewerken","network_view_enable_button_label":"Inschakeling","network_view_enabled_info_label":"Ingeschakeld:","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Mobiel","network_view_internet_connection_label":"Verbonden met internet:","network_view_ip_address_label":"Adres:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"MAC-adres","network_view_mac_address_label":"MAC-adres:","network_view_primary_connection_label":"Actief:","network_view_signal_strength_label":"Signaalsterkte:","network_view_ssid_label":"Geconfigureerd netwerk:","network_view_subnet_mask_label":"Subnet:","network_view_tesla_connection_label":"Verbonden met Tesla:","network_view_wifi_title":"Wifi","network_view_wireless_connected_label":"Verbonden:","not_found_description":"Het spijt ons, maar de pagina die u zoekt bestaat niet.","not_found_title":"404 pagina niet gevonden","password_input_view_password":"PASWOORD","password_input_view_show_password":"Paswoord tonen","phase_type_single":"Enkele fase","phase_type_split":"Gesplitste fasen","phase_type_three":"Drie fasen","phase_type_two":"Twee fasen","phase_type_wye_ll":"Wye L-L","prompt_required_field":"Dit veld is vereist.","service_factory_reset_confirmation":"De lokale instellingen worden verwijderd en het apparaat wordt opnieuw opgestart. Bevestig.","sideload_container_subtitle":"Selecteer een .bin-bestand","summary_container_title":"Overzicht","title_installation":"Installatie","title_networks":"Netwerken","title_service":"Service","title_site_meter":"Locatiemeter","title_software":"Software","title_software_update":"Software-update","update_handshake_result_failed":"Kan geen contact maken met de server. Controleer de internetverbinding van het apparaat en probeer het opnieuw.","update_handshake_result_non_actionable":"Geen updates beschikbaar.","update_handshake_result_update_staged":"Er is een nieuwe softwareversie beschikbaar.","update_handshake_result_update_staged_version":"Softwareversie {version} is beschikbaar.","update_last_update_result_failed":"De nieuwste software-update is mislukt. Probeer het opnieuw of neem contact op met Tesla Service.","update_status_downloading":"Update downloaden...","update_view_button_label_check_for_update":"CONTROLEREN OP UPDATE","update_view_button_label_install":"INSTALLEREN","update_view_check_notice_not_internet_connected":"Kan niet zoeken naar updates zonder internetverbinding. Controleer de netwerkconfiguratie van het apparaat.","update_view_handshake_failed":"Kan geen contact maken met de server om te controleren of er een update is.","update_view_handshake_non_actionable":"Er zijn geen updates beschikbaar.","update_view_handshake_update_staged":"Er is een update beschikbaar, die in de achtergrond wordt gedownload.","update_view_install_notice_not_internet_connected":"Kan de software-update niet downloaden zonder internetverbinding. Controleer de netwerkconfiguratie van het apparaat.","update_view_label_current_version":"Huidige versie: {version} ({identifier})","update_view_latest_version":"Nieuwste versie: {version}","update_view_not_yet_checked":"Nog niet gecontroleerd op update.","update_view_notice_automatic_update":"Klik om nu toe te passen. Anders wordt de update later in de achtergrond geïnstalleerd.","update_view_result_failed":"De nieuwste software-update is mislukt. Probeer het opnieuw of neem contact op met Tesla Service.","update_view_result_succeeded":"De laatste software-update is geslaagd.","update_view_status_downloaded":"Download voltooid. Tijdelijk opslaan update...","update_view_status_downloading":"Update downloaden...","update_view_status_staged":"Update tijdelijk opgeslagen. Klik op de installatieknop om door te gaan.","wifi_view_available_networks_subtitle":"BESCHIKBARE NETWERKEN","wifi_view_button_label_join":"VERBINDEN","wifi_view_button_label_manual":"HANDMATIG NETWERK INVOEREN","wifi_view_input_label_ssid":"NETWERK (SSID)","wifi_view_label_connecting_ssid":"Verbinding maken met {ssid}","wifi_view_mac_address_label":"MAC-adres: {mac}","wifi_view_no_networks":"Geen wifinetwerken gevonden!","wifi_view_no_password_placeholder":"Geen paswoord vereist","wifi_view_notice_joining":"Het proces kan enkele minuten duren en kan ervoor zorgen dat het apparaat opnieuw wordt opgestart. Mogelijk moet u opnieuw verbinding maken met het wifitoegangspunt van het apparaat om door te gaan met de installatie.","wifi_view_password_label":"PASWOORD","wifi_view_prompt_network_types":"Maak verbinding met beschikbare 2,4 GHz WPA-netwerken.","wifi_view_reconnect_notice":"Tijdens dit proces moet u mogelijk opnieuw verbinding maken met het wifi-toegangspunt van het apparaat om de installatie voort te zetten.","wifi_view_rescan":"OPNIEUW SCANNEN","wifi_view_username_label":"GEBRUIKERSNAAM","wifi_view_wpa2_password_label":"WPA2-WACHTWOORD"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"Alertes","alerts_view_no_active_alerts":"Pas d\'alerte active","barcode_reader_checksum_error":"Code-barres non valide. Veuillez réessayer en vous assurant que le code-barres correct est envoyé.","barcode_reader_format_error":"Format de code-barres incorrect. Veuillez réessayer en vous assurant que le code-barres correct est envoyé.","barcode_reader_internal_error":"Lecteur de code-barres indisponible. Feuillez fournir les informations manuellement.","barcode_reader_not_found":"Le code-barres n\'a pas pu être détecté. Veuillez réessayer en vous assurant que le code-barres est centré et suffisamment large.","button_factory_reset":"RÉINITIALISER","button_label_confirm":"CONFIRMER","button_label_factory_reset":"RÉTABLIR LES PARAMÈTRES D\'USINE","connection_details_network_configured":"Configuré","connection_details_network_configured_ip":"Réseau configuré: {AdresseIP}","connection_details_network_configured_ssid":"Réseau configuré: {ssid}","connection_details_network_configured_ssid_ip":"Réseau configuré : {ssid} ({AdresseIP})","connection_details_network_not_connected":"Déconnecté","connection_modal_description":"Ce comportement est prévisible lors de la mise sous tension de l\'appareil, de la mise en œuvre d\'une mise à jour logicielle, ou lorsque des modifications sont apportées à une certaine configuration de l\'appareil.{br}{br}Vous devrez peut-être vous reconnecter au point d\'accès Wi-Fi de l\'appareil pour continuer.","connection_modal_title":"Perte de la connexion à l\'appareil","connection_status_network_configured":"Configuré","connection_status_network_connected":"Connecté","connection_status_network_connection_problem":"Problème de connexion","connection_status_network_disabled":"Désactivé","connection_status_network_no_internet":"Pas de connexion à Internet. Vérifiez la configuration de l\'adresse IP et la liaison montante vers Internet.","connection_status_network_no_ip":"N\'a pas obtenu d\'adresse IP. Vérifiez la configuration du routeur pour les listes de blocs d\'adresses MAC ou semblables.","connection_status_network_no_tesla":"Pas de connexion avec Tesla. Vérifiez les paramètres du routeur et du pare-feu.","connection_status_network_not_connected":"Déconnecté","control_connect":"RELIER","control_delete":"SUPPRIMER","country_name_ad":"Andorre","country_name_ae":"Émirats arabes unis","country_name_am":"Arménie","country_name_at":"Autriche","country_name_au":"Australie","country_name_ba":"Bosnie-Herzégovine","country_name_be":"Belgique","country_name_bg":"Bulgarie","country_name_ca":"Canada","country_name_ch":"Suisse","country_name_cn":"Chine","country_name_cy":"Chypre","country_name_cz":"Tchéquie","country_name_de":"Allemagne","country_name_dk":"Danemark","country_name_ee":"Estonie","country_name_es":"Espagne","country_name_fi":"Finlande","country_name_fr":"France","country_name_gb":"Royaume-Uni","country_name_gi":"Gibraltar","country_name_gr":"Grèce","country_name_hk":"Hong Kong","country_name_hr":"Croatie","country_name_hu":"Hongrie","country_name_ie":"Irlande","country_name_il":"Israël","country_name_is":"Islande","country_name_it":"Italie","country_name_jp":"Japon","country_name_kr":"Corée du Sud","country_name_li":"Liechtenstein","country_name_lt":"Lituanie","country_name_lu":"Luxembourg","country_name_lv":"Lettonie","country_name_mc":"Monaco","country_name_mo":"Macao","country_name_mt":"Malte","country_name_mx":"Mexique","country_name_nl":"Pays-Bas","country_name_no":"Norvège","country_name_nz":"Nouvelle Zélande","country_name_pl":"Pologne","country_name_pt":"Portugal","country_name_ro":"Roumanie","country_name_rs":"Serbie","country_name_ru":"Russie","country_name_se":"Suède","country_name_sg":"Singapour","country_name_sk":"Slovaquie","country_name_sm":"Saint-Marin","country_name_tw":"Taïwan","country_name_uk":"Ukraine","country_name_us":"États-Unis","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energy}kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_meter_site_export_power":"{realPower} Exportation","display_meter_site_import_power":"{realPower} Importation","display_meter_solar_generation_power":"{realPower} Génération","display_phase_type_unknown":"inconnu","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"Sélectionner","error_boundary_label_error_details":"Détails de l\'erreur :","error_boundary_subtitle":"C\'est assez embarrassant. Nous avons rencontré une erreur dans l\'application.","error_boundary_title":"Mince alors ! Une erreur s’est produite.","error_messages_invalid_password":"Mot de passe non valide. Veuillez réessayer.","factory_reset_subtitle":"Supprime tous les paramètres du réseau et de l\'appareil. Nous tenterons de désapparier tout appareil associé. Les données relatives à la durée de vie ne seront pas affectées.","grid_code_container_title":"Norme électrique","grid_code_point_PINVrx_SmartInvSelect":"Caractéristiques de l\'onduleur intelligent activé","grid_code_point_nominal_grid_frequency":"Fréquence nominale du réseau","grid_code_point_nominal_grid_voltage":" Tension nominale du réseau (L-N)","grid_code_point_nominal_pinv_voltage":"Tension nominale du réseau des Powerwalls","grid_code_point_vf_limit_over_frequency_0_grid_following":"Limite de reconnexion de surfréquence","grid_code_point_vf_limit_over_frequency_1_grid_following":"Over Frequency Trip 1 - Limit","grid_code_point_vf_limit_over_voltage_0_grid_following":"Limite de reconnexion de surtension","grid_code_point_vf_limit_over_voltage_1_grid_following":"Over Voltage Trip 1 - Limit","grid_code_point_vf_limit_under_frequency_0_grid_following":"Limite de reconnexion de sous-fréquence","grid_code_point_vf_limit_under_frequency_1_grid_following":"Under Frequency Trip 1 - Limit","grid_code_point_vf_limit_under_voltage_0_grid_following":"Limite de reconnexion de sous tension","grid_code_point_vf_limit_under_voltage_1_grid_following":"Under Voltage Trip 1 - Limit","grid_code_point_vf_param_allow_charging_while_qualifying":"Permet la recharge de la batterie pendant la période de qualification du réseau","grid_code_point_vf_timing_over_frequency_1_grid_following":"Over Frequency Trip 1 - Timing","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Heure de requalification du réseau de l\'onduleur","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Volts","grid_code_unit_V_pu":"V / V_nominal","grid_code_unit_bool":"0 = non, 1 = oui","grid_code_unit_enum":"valeur énumérée, voir le manuel","grid_code_unit_s":"secondes","grid_code_view_advanced_label":"PARAMÈTRES AVANCÉS","grid_code_view_confirmation":"Confirmez que la norme électrique sélectionnée s’applique à ce lieu","grid_code_view_country_label":"PAYS","grid_code_view_distributor_label":"DISTRIBUTEUR","grid_code_view_filter_freq":"Le Powerwall n\'est pas actuellement connecté au réseau électrique. Veuillez parcourir les normes électriques disponibles afin de sélectionner celle qui s\'applique à votre localisation.","grid_code_view_filter_freq_warning":"Sélectionnez la norme électrique pour vous assurer que le système fonctionne à la tension et à la fréquence correcte.","grid_code_view_frequency":"Fréquence","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Confirme que le code de réseau sélectionné s’applique à ce lieu","grid_code_view_preconfigured_label":"CODE DE RÉSEAU PRÉCONFIGURÉ","grid_code_view_region_label":"RÉGION","grid_code_view_reset_modal_body":"Ce site utilise des paramètres de code de réseau personnalisés. Ces paramètres personnalisés sont effacés lorsque le code de réseau est modifié ou réinitialisé.","grid_code_view_reset_modal_cancel_button":"Annuler","grid_code_view_reset_modal_confirm_button":"Effacer les paramètres et continuer","grid_code_view_reset_modal_header":"RÉINITIALISER LA SÉLECTION DE CODE DE RÉSEAU ?","grid_code_view_reset_selection":"RÉINITIALISER LA SÉLECTION DE CODE DE RÉSEAU","grid_code_view_retailer_label":"FOURNISSEUR","grid_code_view_settings_summary":"{voltage} {fréquence} {phase}","grid_code_view_standard_label":"NORME ELECTRIQUE","grid_code_view_utility_label":"PRODUCTEUR","grid_code_view_volt_freq_label":"TENSION/FRÉQUENCE","grid_code_view_voltage":"Tension","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"ÉDITER","label_button_enter_manually":"SAISIR MANUELLEMENT","label_button_finish":"TERMINER","label_button_scan_barcode":"SCANNER LE CODE-BARRES","label_button_scan_qrcode":"SCANNER LE QR CODE","label_button_upload":"TRANSFÉRER","label_factory_reset":"RESTAURATION D\'USINE","label_form_input_file":"FICHIER","label_form_input_software_update":"METTRE À JOUR","label_model":"Modèle","label_part_number":"Référence","label_part_number_psn":"Référence (TPN)","label_serial_number":"Numéro de série","label_serial_number_tsn":"N° de série (TSN)","menu_card_label_active_alerts":"Actif : {alertCount}","menu_card_label_no_active_alerts":"Aucune active","menu_card_label_version":"Version : {version}","modal_close":"FERMER","modal_refresh":"ACTUALISER","modal_save":"ENREGISTRER","navigation_back":"RETOUR","navigation_cancel":"ANNULER","navigation_forward":"CONTINUER","navigation_skip":"IGNORER","network_view_cable_connected_label":"Câble connecté :","network_view_connection_heading":"Connexion","network_view_connection_not_supported_label":"Connexion (non prise en charge)","network_view_disable_button_label":"Désactiver","network_view_dns_label_":"DNS :","network_view_edit_button_label":"Modifier","network_view_enable_button_label":"Activer","network_view_enabled_info_label":"Activé :","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Cellulaire","network_view_internet_connection_label":"Connecté à Internet :","network_view_ip_address_label":"Adresse :","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"Adresse MAC","network_view_mac_address_label":"Adresse MAC :","network_view_primary_connection_label":"Actif :","network_view_signal_strength_label":"Puissance du signal :","network_view_ssid_label":"Réseau configuré :","network_view_subnet_mask_label":"Sous-réseau :","network_view_tesla_connection_label":"Connecté à Tesla :","network_view_wifi_title":"Wi-Fi","network_view_wireless_connected_label":"Connecté :","not_found_description":"Désolé, la page que vous cherchez n’existe pas.","not_found_title":"404 page introuvable","password_input_view_password":"MOT DE PASSE","password_input_view_show_password":"Afficher le mot de passe","phase_type_single":"Monophasé","phase_type_split":"Phase auxiliaire","phase_type_three":"Triphasé","phase_type_two":"Biphasé","phase_type_wye_ll":"Wye L-L","prompt_required_field":"Ce champ est obligatoire.","service_factory_reset_confirmation":"Les paramètres locaux seront supprimés et l\'appareil redémarrera. Veuillez S.V.P. Confirmer.","sideload_container_subtitle":"Sélectionner un fichier .bin","summary_container_title":"Synthèse","title_installation":"Installation","title_metering":"Comptage","title_networks":"Réseaux","title_service":"Entretien","title_site_info":"Informations sur le site","title_site_meter":"Compteur de site","title_software":"Logiciel","title_software_update":"Mise à jour du logiciel","update_handshake_result_failed":"Impossible de contacter le serveur. Vérifiez la connexion Internet de l\'appareil et réessayez.","update_handshake_result_non_actionable":"Aucune mise à jour disponible.","update_handshake_result_update_staged":"Une nouvelle version du logiciel est disponible.","update_handshake_result_update_staged_version":"La version {version} du logiciel est disponible.","update_last_update_result_failed":"La dernière mise à jour du logiciel a échoué. Veuillez réessayer ou contacter l\'assistance Tesla.","update_status_downloading":"Téléchargement de la mise à jour...","update_view_button_label_check_for_update":"VÉRIFIER LES MISES À JOUR","update_view_button_label_install":"INSTALLER","update_view_check_notice_not_internet_connected":"Impossible de rechercher des mises à jour sans connexion Internet. Vérifiez la configuration de la mise en réseau de l\'appareil.","update_view_handshake_failed":"Impossible de contacter le serveur pour vérifier la mise à jour.","update_view_handshake_non_actionable":"Pas de mise à jour disponible.","update_view_handshake_update_staged":"Une mise à jour est disponible et sera téléchargée en arrière-plan.","update_view_install_notice_not_internet_connected":"Téléchargement d\'une mise à jour logicielle impossible sans connexion Internet. Vérifiez la configuration de la mise en réseau de l\'appareil.","update_view_label_current_version":"Version actuelle : {version} ({identifier})","update_view_latest_version":"Dernière version : {version}","update_view_not_yet_checked":"Vérification de mise à jour pas encore effectuée.","update_view_notice_automatic_update":"Cliquez ici pour appliquer maintenant. Dans le cas contraire, la mise à jour sera installée ultérieurement en arrière-plan.","update_view_result_failed":"La dernière mise à jour du logiciel a échoué. Veuillez réessayer ou contacter l\'assistance Tesla.","update_view_result_succeeded":"La dernière mise à jour du logiciel a réussi.","update_view_status_downloaded":"Téléchargement terminé. Organisation de la mise à jour...","update_view_status_downloading":"Téléchargement de la mise à jour...","update_view_status_staged":"Mise à jour organisée. Cliquez sur le bouton d\'installation pour poursuivre.","wifi_page_available_networks":"Réseaux disponibles","wifi_page_cancel_button_label":"Annuler","wifi_page_check_password":"Impossible de se connecter, veuillez vérifier le mot de passe du Wi-Fi.","wifi_view_available_networks_subtitle":"RÉSEAUX DISPONIBLES","wifi_view_button_label_join":"REJOINDRE","wifi_view_button_label_manual":"SAISIR MANUELLEMENT LE RÉSEAU","wifi_view_input_label_ssid":"RÉSEAU (SSID)","wifi_view_label_connecting_ssid":"Connexion à {ssid}","wifi_view_mac_address_label":"Adresse MAC : {mac}","wifi_view_no_networks":"Aucun réseau Wi-Fi trouvé !","wifi_view_no_password_placeholder":"Aucun mot de passe requis","wifi_view_notice_joining":"Ce processus peut prendre plusieurs minutes et entraîner un redémarrage de l\'appareil. Il se peut que vous deviez vous reconnecter au point d\'accès Wi-Fi de l\'appareil pour continuer l\'installation.","wifi_view_password_label":"MOT DE PASSE","wifi_view_prompt_network_types":"Connectez-vous aux réseaux WPA de 2,4 Ghz disponibles.","wifi_view_reconnect_notice":"Pendant ce processus, il se peut que vous deviez vous reconnecter au point d\'accès Wi-Fi pour continuer l\'installation.","wifi_view_rescan":"RELANCER LA RECHERCHE","wifi_view_username_label":"NOM D\'UTILISATEUR","wifi_view_wpa2_password_label":"MOT DE PASSE WPA2"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"アラート","alerts_view_no_active_alerts":"アクティブなアラートがありません","barcode_reader_checksum_error":"無効なバーコードです。正しいバーコードを送信していることを確認したうえでやり直してください。","barcode_reader_format_error":"無効なバーコードのフォーマットです。正しいバーコードを送信していることを確認したうえでやり直してください。","barcode_reader_internal_error":"バーコード スキャナが使用できません。情報を手入力してください。","barcode_reader_not_found":"バーコードを検出できませんでした。バーコードは、確実に焦点を当て、十分な大きさになるようにしてください。","button_factory_reset":"リセット","button_label_confirm":"確定","button_label_factory_reset":"工場デフォルトにリセット","connection_details_network_configured":"構成済み","connection_details_network_configured_ip":"構成済みのネットワーク: {ipAddress}","connection_details_network_configured_ssid":"構成済みのネットワーク: {ssid}","connection_details_network_configured_ssid_ip":"構成済みのネットワーク: {ssid} ({ipAddress})","connection_details_network_connected":"接続されています","connection_details_network_connected_ip":"({ipAddress})に接続されています","connection_details_network_connected_to_ssid":"{ssid}に接続されています","connection_details_network_connected_to_ssid_ip":"{ssid}({ipAddress})に接続されています","connection_details_network_not_connected":"接続されていません","connection_modal_description":"これは、デバイスの電源を入れ直した場合、ソフトウェアを更新した場合、特定のデバイスの設定を変更した場合に起こりえます。{br}{br}継続するにはそのデバイスのWi-Fiアクセス ポイントに再接続する必要がある場合があります。","connection_modal_title":"デバイスへの接続が失われました","connection_status_network_configured":"設定済み","connection_status_network_connected":"接続されました","connection_status_network_connection_problem":"接続問題","connection_status_network_disabled":"無効になっています","connection_status_network_no_internet":"インターネットと接続されていません。IPアドレスの構成とインターネット アップリンクを確認してください。","connection_status_network_no_ip":"IPアドレスが割り当てられていません。ルーター構成でMACアドレス ブロック リストなどの情報を確認してください。","connection_status_network_no_tesla":"Teslaに接続されていません。ルーターとファイアウォールの設定を確認してください。","connection_status_network_not_connected":"接続されていません","control_connect":"接続","control_delete":"削除","country_name_ad":"アンドラ","country_name_ae":"アラブ首長国連邦","country_name_am":"アメリカ","country_name_at":"オーストリア","country_name_au":"オーストラリア","country_name_ba":"ボスニア・ヘルツェゴビナ","country_name_be":"ベルギー","country_name_bg":"ブルガリア","country_name_ca":"カナダ","country_name_ch":"スイス","country_name_cn":"中国","country_name_cy":"キプロス","country_name_cz":"チェコ共和国","country_name_de":"ドイツ","country_name_dk":"デンマーク","country_name_ee":"エストニア","country_name_es":"スペイン","country_name_fi":"フィンランド","country_name_fr":"フランス","country_name_gb":"英国","country_name_gi":"ジブラルタル","country_name_gr":"ギリシャ","country_name_hk":"香港","country_name_hr":"クロアチア","country_name_hu":"ハンガリー","country_name_ie":"アイルランド","country_name_il":"イスラエル","country_name_is":"アイスランド","country_name_it":"イタリア","country_name_jp":"日本","country_name_kr":"韓国","country_name_li":"リヒテンシュタイン","country_name_lt":"リトアニア","country_name_lu":"ルクセンブルク","country_name_lv":"ラトビア","country_name_mc":"モナコ","country_name_mo":"マカオ","country_name_mt":"マルタ","country_name_mx":"メキシコ","country_name_nl":"オランダ","country_name_no":"ノルウェー","country_name_nz":"ニュージーランド","country_name_pl":"ポーランド","country_name_pt":"ポルトガル","country_name_ro":"ルーマニア","country_name_rs":"セルビア","country_name_ru":"ロシア","country_name_se":"スウェーデン","country_name_sg":"シンガポール","country_name_sk":"スロバキア","country_name_sm":"サンマリノ","country_name_tw":"台湾","country_name_uk":"ウクライナ","country_name_us":"米国","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energy}kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_meter_site_export_power":"{realPower}エクスポート","display_meter_site_import_power":"{realPower}インポート","display_meter_solar_generation_power":"{realPower}生成","display_phase_type_unknown":"不明","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"選択","error_boundary_label_error_details":"エラーの内容:","error_boundary_subtitle":"アプリケーションにエラーが発生しました。","error_boundary_title":"問題が発生しました。","error_messages_invalid_password":"パスワードが無効です。もう一度実行してください。","factory_reset_subtitle":"すべてのネットワーク設定とデバイス設定をクリアします。ペアリングされているデバイスのペアリング解除のためにベストエフォートが実施されます。寿命データは影響を受けません。","grid_code_container_title":"グリッドコード:","grid_code_point_PINVrx_SmartInvSelect":"スマート インバーター機能が有効です","grid_code_point_nominal_grid_frequency":"公称配電網周波数","grid_code_point_nominal_grid_voltage":" 公称配電網電圧(L-N)","grid_code_point_nominal_pinv_voltage":"接続されているPowerwallの公称配電網電圧","grid_code_point_vf_limit_over_frequency_0_grid_following":"周波数再接続限度を超えています","grid_code_point_vf_limit_over_frequency_1_grid_following":"OFR","grid_code_point_vf_limit_over_voltage_0_grid_following":"電圧再接続限度を超えています","grid_code_point_vf_limit_over_voltage_1_grid_following":"OVR","grid_code_point_vf_limit_under_frequency_0_grid_following":"周波数再接続限度に達していません","grid_code_point_vf_limit_under_frequency_1_grid_following":"UFR","grid_code_point_vf_limit_under_voltage_0_grid_following":"電圧再接続限度に達していません","grid_code_point_vf_limit_under_voltage_1_grid_following":"UVR","grid_code_point_vf_param_allow_charging_while_qualifying":"配電網認定期間はバッテリー充電ができます","grid_code_point_vf_timing_over_frequency_1_grid_following":"OFR 時限","grid_code_point_vf_timing_over_voltage_1_grid_following":"OVR 時限","grid_code_point_vf_timing_qualifying_time_grid_following":"インバーター再接続時間","grid_code_point_vf_timing_under_frequency_1_grid_following":"UFR 時限","grid_code_point_vf_timing_under_voltage_1_grid_following":"UVR 時限","grid_code_unit_Hz":"Hz","grid_code_unit_V":"ボルト","grid_code_unit_V_pu":"p.u.","grid_code_unit_bool":"0 = いいえ、1 = はい","grid_code_unit_enum":"列挙値については、マニュアルを参照してください","grid_code_unit_s":"秒","grid_code_view_advanced_label":"詳細設定","grid_code_view_confirmation":"選択されたグリッド コードがこの場所に適用されることを確認します。","grid_code_view_country_label":"国","grid_code_view_distributor_label":"DNO","grid_code_view_filter_freq":"このサイトは、現在オフグリッドです。すべてのグリッド コードからの選択を許可。","grid_code_view_filter_freq_warning":"システムが意図した電圧および周波数で動作することを保証するために適切なグリッド コードを慎重に選択してください。","grid_code_view_frequency":"周波数","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"事前設定済みグリッド コードがこの場所に適用されることを確認します。","grid_code_view_preconfigured_label":"事前設定済みグリッド コード","grid_code_view_region_label":"都道府県","grid_code_view_reset_modal_body":"特定のグリットコードの設定がされています。設定は変更・リセットすると初期化されます。","grid_code_view_reset_modal_cancel_button":"キャンセル","grid_code_view_reset_modal_confirm_button":"設定を取り消して次に進む","grid_code_view_reset_modal_header":"グリットコードの設定をリセットしますか?","grid_code_view_reset_selection":"グリッド コードの選択をリセットします","grid_code_view_retailer_label":"電力小売り事業者","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"規格","grid_code_view_utility_label":"電力会社","grid_code_view_volt_freq_label":"電圧/周波数","grid_code_view_voltage":"電圧","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"編集","label_button_enter_manually":"手入力","label_button_finish":"完了","label_button_scan_barcode":"バーコードをスキャン","label_button_scan_qrcode":"QRコードをスキャン","label_button_upload":"アップロード","label_factory_reset":"出荷時状態にリセット","label_form_input_file":"ファイル","label_form_input_software_update":"ソフトウェア アップデート","label_model":"モデル","label_part_number":"部品番号","label_part_number_psn":"部品番号 (TPN)","label_serial_number":"シリアル番号","label_serial_number_tsn":"シリアル番号 (TSN)","menu_card_label_active_alerts":"アクティブ: {alertCount}","menu_card_label_no_active_alerts":"アクティブなし","menu_card_label_version":"バージョン: {version}","modal_close":"閉じる","modal_refresh":"更新","modal_save":"保存","navigation_back":"戻る","navigation_cancel":"キャンセル","navigation_forward":"次へ","navigation_skip":"スキップ","network_view_cable_connected_label":"ケーブル接続されています:","network_view_connection_heading":"接続","network_view_connection_not_supported_label":"接続(サポート対象外)","network_view_disable_button_label":"無効","network_view_dns_label_":"DNS:","network_view_edit_button_label":"編集","network_view_enable_button_label":"有効","network_view_enabled_info_label":"有効:","network_view_ethernet_title":"イーサネット","network_view_gsm_title":"モバイルデータ通信","network_view_internet_connection_label":"インターネットに接続されています:","network_view_ip_address_label":"アドレス:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"MACアドレス","network_view_mac_address_label":"MACアドレス:","network_view_primary_connection_label":"アクティブ:","network_view_signal_strength_label":"信号強度:","network_view_ssid_label":"構成済みのネットワーク:","network_view_subnet_mask_label":"サブネット マスク:","network_view_tesla_connection_label":"Teslaに接続されました:","network_view_wifi_title":"Wi-Fi","network_view_wireless_connected_label":"接続あり:","not_found_description":"申し訳ございませんが、お探しのページは存在しません。","not_found_title":"404エラー ページが見つかりませんでした","password_input_view_password":"パスワード","password_input_view_show_password":"パスワード表示","phase_type_single":"単相","phase_type_split":"分相","phase_type_three":"3相","phase_type_two":"2相","phase_type_wye_ll":"ワイL-L","prompt_required_field":"このフィールドは必須です。","service_factory_reset_confirmation":"ローカル設定は削除され、デバイスは再起動します。確認してください。","sideload_container_subtitle":".binファイルを選択します","summary_container_title":"まとめ","title_installation":"設置","title_metering":"測定","title_networks":"ネットワーク","title_service":"サービス","title_site_info":"サイト情報","title_site_meter":"サイト メーター","title_software":"ソフトウェア","title_software_update":"ソフトウェア アップデート","update_handshake_result_failed":"サーバと通信することができません。デバイスのインターネット接続を確認してからやり直してください。","update_handshake_result_non_actionable":"アップデートはありません。","update_handshake_result_update_staged":"新しいソフトウェアバージョンを入手できます。","update_handshake_result_update_staged_version":"ソフトウェアバージョン{version}が入手できます。","update_last_update_result_failed":"最新のソフトウェア アップデートができませんでした。やり直すか、Teslaサービスにお問い合わせください。","update_status_downloading":"アップデートのダウンロード中...","update_view_button_label_check_for_update":"アップデートの確認","update_view_button_label_install":"インストール","update_view_check_notice_not_internet_connected":"インターネット接続なしでアップデートを確認することはできません。デバイスのネットワーク設定を確認してください。","update_view_handshake_failed":"サーバーに接続してアップデートがあるか確認できません。","update_view_handshake_non_actionable":"アップデートはありません。","update_view_handshake_update_staged":"アップデートがあります。バックグラウンドでダウンロードされます。","update_view_install_notice_not_internet_connected":"ソフトウェアのアップデートをダウンロードするには、インターネットへの接続が必要です。デバイスのネットワーク設定を確認してください。","update_view_label_current_version":"現在のバージョン: {version}({identifier})","update_view_latest_version":"最新バージョン: {version}","update_view_not_yet_checked":"アップデートの確認はまだ実施されていません。","update_view_notice_automatic_update":"クリックするとすぐに適用されます。そうしない場合、アップデートは後でバックグラウンドでインストールされます。","update_view_result_failed":"最新のソフトウェア アップデートができませんでした。やり直すか、Teslaサービスにお問い合わせください。","update_view_result_succeeded":"最新のソフトウェア アップデートが完了しました。","update_view_status_downloaded":"ダウンロードが完了しました。アップデートのステージング...","update_view_status_downloading":"アップデートのダウンロード...","update_view_status_staged":"アップデートがステージされました。インストール ボタンをクリックして操作を続けます。","wifi_page_available_networks":"利用可能なネットワーク","wifi_page_cancel_button_label":"キャンセル","wifi_page_check_password":"接続できません。Wi-Fiのパスワードを確認してください。","wifi_view_available_networks_subtitle":"利用可能なネットワーク","wifi_view_button_label_join":"参加","wifi_view_button_label_manual":"手動でネットワークに接続","wifi_view_input_label_ssid":"ネットワーク(SSID)","wifi_view_label_connecting_ssid":"{ssid}に接続中","wifi_view_mac_address_label":"MACアドレス: {mac}","wifi_view_no_networks":"Wi-Fiネットワークは見つかりませんでした","wifi_view_no_password_placeholder":"パスワードは必要ありません","wifi_view_notice_joining":"この処理には数分かかり、デバイスが再起動する可能性があります。インストールを続行するためには、デバイスのWi-Fiアクセス ポイントへの再接続が必要になる場合があります。","wifi_view_password_label":"パスワード","wifi_view_prompt_network_types":"使用可能な2.4 GHz WPネットワークに接続します。","wifi_view_reconnect_notice":"このプロセス中に、インストールを続行するためデバイスのWi-Fiアクセス ポイントへの再接続が必要になる場合があります。","wifi_view_rescan":"再スキャン","wifi_view_username_label":"ユーザー名","wifi_view_wpa2_password_label":"WPA2パスワード"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Error","advanced_settings_submit":"Submit","advanced_settings_submitted":"Submitted","advanced_settings_title":"Advanced Settings","alert_container_ac_phase_1_over_voltage":"AC Over-Voltage","alert_container_ac_phase_1_under_voltage":"AC Under-Voltage","alert_container_ac_phase_2_over_voltage":"AC Over-Voltage","alert_container_ac_phase_2_under_voltage":"AC Under-Voltage","alert_container_ac_phase_3_over_voltage":"AC Over-Voltage","alert_container_ac_phase_3_under_voltage":"AC Under-Voltage","alert_container_over_frequency":"AC Over-Frequency","alert_container_rate_of_change_frequency":"AC Rate of Change of Frequency","alert_container_under_frequency":"AC Under-Frequency","app_container_engineering_mode_banner_message":"Tesla Service Mode requires no authentication. Please \'Stop System\' if you are making operational changes. Before closing the browser, leave the System in an acceptable state. Please close the browser when completed since this mode requires no authentication.","app_container_engineering_mode_title":"Tesla Service Mode","app_container_firmware_update_banner_message":"Leave installation and wiring undisturbed and remain on this page until update is complete.","app_container_firmware_update_banner_title":"Firmware Update In Progress","app_container_sitemaster_message_title":"The system is currently running. In order to view the status of the battery blocks, the system must be shut down. You can stop the system from the home page.","app_container_sitemaster_power_supply_mode_banner_message":"Battery producing AC voltage to power devices for pairing and configuration. Button to stop system on landing page.","app_container_sitemaster_power_supply_mode_banner_title":"Grid Forming Mode","app_container_sitemaster_running_banner_title":"System Running","auto_config_check_network_button":"Check the network and enable wifi","auto_config_check_system_and_summary":"Check the System and Summary pages.","auto_config_done_button_text":"Done","auto_config_instructions_cannot_determine_grid_connection":"Check wiring to the Backup Switch or Gateway before starting system.","auto_config_instructions_determining_on_grid":"If this message persists for more than 3 minutes, check the wiring to the Backup Switch or Gateway.","auto_config_instructions_finding_contactor_controller":"If this message persists for more than 3 minutes, check the wiring to the Backup Switch or Gateway.","auto_config_instructions_finding_powerwalls":"If this message persists for more than 3 minutes, verify Powerwall wiring.","auto_config_instructions_lookup_failed_retry":"Scan the serial number sticker into Bolt to enable automatic Powerwall setup, and then {retryButton}","auto_config_instructions_lookup_failed_wizard":"Or {wizardButton} for manual Powerwall setup.","auto_config_instructions_missing_info_1":"Automatic Powerwall setup failed because the following information was missing:","auto_config_instructions_missing_info_2":"{wizardButton} to enter it manually.","auto_config_instructions_missing_info_3":"{registrationButton} manually.","auto_config_instructions_no_grid_detected":"Check wiring and breakers before starting system.","auto_config_instructions_no_network_retry":"{networkLink} to enable automatic Powerwall setup and then {retryButton}","auto_config_instructions_no_network_wizard":"Or {wizardButton} for manual Powerwall setup.","auto_config_instructions_retry":"{networkLink} if the problem persists","auto_config_instructions_retry_wizard":"Or {wizardButton} for manual Powerwall setup.","auto_config_instructions_updating":"A software update is required before automatic Powerwall setup can begin. The update will be downloaded and applied automatically. You may need to re-connect to Powerwall\'s WiFi network afterward.","auto_config_missing_grid":"Grid for the customer site","auto_config_missing_gridcode":"Grid code for the customer site","auto_config_missing_registration":"Customer information for product registration","auto_config_missing_timezone":"Timezone at the customer site","auto_config_network_button_text":"Setup the Network","auto_config_registration_button_text":"Enter Customer Information","auto_config_retry_button_label":"Retry","auto_config_run_button_label":"Set Up Powerwall Automatically","auto_config_run_wizard_button_text":"Run the Wizard","auto_config_section_title":"Automatic Powerwall Setup","auto_config_status_cancelled":"Automatic setup was cancelled. You can try again:","auto_config_status_cannot_determine_grid_connection":"Could not determine grid connection.","auto_config_status_complete":"Successfully completed","auto_config_status_determining_on_grid":"Determining grid connection...","auto_config_status_finding_contactor_controller":"Finding Contactor Controller...","auto_config_status_finding_powerwalls":"Finding Powerwalls...","auto_config_status_in_progress":"In progress","auto_config_status_lookup_failed":"Serial Number Lookup Failed","auto_config_status_missing_information":"Missing Information","auto_config_status_no_grid_detected":"No grid detected.","auto_config_status_no_network":"Not Connected to Tesla","auto_config_status_not_applicable":"Automatic setup is not needed or has already been run. You can run it again:","auto_config_status_retrying":"Retrying failed network request","auto_config_status_timeout":"Automatic setup has timed out. You can try again:","auto_config_status_updating":"Software update required","auto_config_stop_system_modal_message":"Automatic setup process cannot run while the system is running. Stop the system and try again.","auto_config_stop_system_modal_title":"Cannot start automatic setup","battery_container_add_all_batteries_button_label":"ADD ALL","battery_container_available_batteries_subtitle":"These batteries will not be part of system operation unless added to the \\"Configured\\" list.","battery_container_available_batteries_title":"Available Battery Blocks","battery_container_available_chargers_subtitle":"These chargers will not be part of system operation unless added to the \\"Configured\\" list.","battery_container_available_chargers_title":"Available Charger Blocks","battery_container_cannot_communicate_with_device":"Cannot communicate with device. Check CAN bus wiring and termination.","battery_container_chinv":"Compressor and Heater VFD (CHINV) {index}","battery_container_configured_batteries_label":"Configured Battery Blocks","battery_container_configured_batteries_subtitle":"These batteries will be part of system operation.","battery_container_configured_chargers_label":"Configured Charger Blocks","battery_container_configured_chargers_subtitle":"These chargers will be part of system operation.","battery_container_confirm_update_firmware":"This process may take several minutes. Do not interrupt the update or navigate away from this page.","battery_container_dcbc":"Battery Block {index}","battery_container_dcbc_comms_failure":"Communications failure. Check network connection to the unit and scan again.","battery_container_dcbc_dcdisconnect_opened":"DC Disconnect handle is in the off position.","battery_container_dcbc_door_switch_opened":"Inverter door enable line open. Investigate door switch.","battery_container_dcbc_enable_line_return_low_estop":"Inverter remote shutdown open. Investigate remote shutdown circuit.","battery_container_dcbc_enable_line_return_low_inv":"Inverter system enable line open. Investigate circuit breaker feedback.","battery_container_dcbc_enable_line_return_low_str":"Enable line for one or more Powerpack rows is open. Investigate wiring and Powerpack doors. Refer to the Enable Line Troubleshooting Guide for diagnosis.","battery_container_delete_button_title":"Delete this device","battery_container_diagnosis_incomplete":"Diagnosis incomplete. A firmware update is required before further checks can be performed.","battery_container_faults":"Faults","battery_container_firmware_update_needed":"Firmware update needed.","battery_container_gateway_contactor_meter_controller":"Gateway Contactor/Meter Controller","battery_container_industrial_confirm_update_firmware_info":"This will update the firmware of each battery block in the \\"Configured\\" list and its subcomponents.","battery_container_internal_communications_fault":"Internal communications fault. Check CAN bus wiring and termination and perform a firmware update.","battery_container_meter_socket_adapter":"Backup Switch","battery_container_mpbc":"Battery Block {index}","battery_container_mpthc":"Thermal Controller (MPTHC) {index}","battery_container_no_msa_detected":"No Backup Switch Detected.","battery_container_no_sync_detected":"No Contactor Controller Detected. No Backup Capability Detected.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Post (LCC) {index}","battery_container_post_missing":"Missing Post {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Powerstage {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"The Powerwall is switched off. Ensure the switch is in the ON position.","battery_container_qbms":"Qbert (QBMS)","battery_container_qhvp":"High Voltage Processor (QHVP)","battery_container_residential_confirm_update_firmware":"This will update the firmware of each Powerwall and the Contactor Controller (if present).","battery_container_resolve_connectivity":"Resolve connectivity issues before running a firmware update.","battery_container_scan":"SCAN","battery_container_scan_in_progress":"SCANNING...","battery_container_scbc":"Charger Block {index}","battery_container_scthc":"Thermal Controller (SCTHC) {index}","battery_container_self_tests_failure":"Did not pass self test.","battery_container_self_tests_inconclusive":"Self test results inconclusive.","battery_container_self_tests_internal_error":"Self tests failed due to internal system error.","battery_container_self_tests_stall":"Timeout: self tests unable to start.","battery_container_self_tests_system_down":"Cannot run self tests while system is down. Start the system and try again.","battery_container_self_tests_updating":"Cannot run self tests while batteries are updating. Try again when the update completes.","battery_container_serial_number":"SN: {sn}","battery_container_solar_powerwall":"{index} Solar Powerwall","battery_container_starc":"DC-DC Converter (STARC) {index}","battery_container_stitch":"Control Power DC-DC (STITCH)","battery_container_unknown":"Unknown Bus Controller {index}","battery_container_update_failed":"Update failed. Try again and ensure wiring and enable switches are not interrupted during the update process.","battery_container_update_firmware":"UPDATE FIRMWARE","battery_container_update_in_progress":"UPDATE IN PROGRESS...","battery_container_waiting_to_report_firmware":"Waiting for unit to report firmware version.","battery_container_warnings":"Warnings","button_label_generate":"GENERATE","can_reboot_message_backup":"Backup Mode","can_reboot_message_block_update":"Block Update in progress","can_reboot_message_enumeration":"Enumeration in progress","can_reboot_message_initializing":"System Initializing","can_reboot_message_power_flow_is_too_high":"Power flow is too high","can_reboot_message_updating":"Site Package Update in progress","caution":"CAUTION","charger_settings_all_posts_have_meter":"All posts have a DC meter installed","charger_settings_cabinet_2":"Cabinet {state}","charger_settings_cabinet_posts_warning":"These controls stop post enable and cabinet internal HV bus only. You must still isolate power and follow complete safety procedure when accessing cabinets.","charger_settings_cabinet_title":"Cabinet {sn}","charger_settings_common_bus":"Common Bus {state}","charger_settings_common_bus_usage":"Disable to stop common HV bus.","charger_settings_common_bus_warning":"Stops common HV bus only. You must still isolate power and follow complete safety procedure when accessing cabinets.","charger_settings_dc_bus_group":"DC Bus Group","charger_settings_disabled":"disabled","charger_settings_enabled":"enabled","charger_settings_kiosk_support":"Kiosk support {state}","charger_settings_kiosk_usage":"Enable only for sites with a kiosk","charger_settings_no_dc_meter":"No DC Meter","charger_settings_no_posts_have_meter":"No posts have a DC meter installed","charger_settings_payter_serial":"Payter S/N","charger_settings_payter_support":"Show Payter serial number inputs","charger_settings_payter_support_usage":"Enable only for sites with Payter payment modules","charger_settings_post":"Post {id} {state}","charger_settings_post_label":"Post {id} Label","charger_settings_saving":"saving {spinner}","charger_settings_semicharger":"Semi Charger {state}","charger_settings_semicharger_usage":"Enable only for Semi Charger sites.","charger_settings_some_posts_have_no_meter":"Some posts are missing a DC meter","client_protocols_container_subtitle":"Enable or disable client protocols.","client_protocols_container_title":"Client Protocols","client_protocols_menu_title":"Client Protocols","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"Modbus TCP/IP","client_protocols_view_service_shell_label":"Service Shell","compliance_container_label_fcc_id":"FCC ID: {fccId}","compliance_container_label_ic_id":"IC: {icId}","compliance_container_label_manufacturer":"Manufacturer: {manufacturer}","compliance_container_label_model":"Model: {model}","compliance_container_title":"Compliance","component-menu-title":"Components","conductor_limit":"Batteries are controlled to avoid exceeding configured current limits on each phase of the conductor CTs. Review conductor limit application note for more details about where this is used, and what limits should be configured.","conductor_min_current":"Conductor Export Limit","control_container_add_on":"ADD ON","control_container_always_active":"ALWAYS ACTIVE","control_container_battery_ok":"FULL BATTERY EXPORT ALLOWED","control_container_charge_power_target":"CHARGE POWER TARGET","control_container_conductor_max_current":"Conductor Import Limit","control_container_conductor_min_current_max_bound":"{mode} has maximum value of 200 A","control_container_conductor_min_current_min_bound":"{mode} has minimum value of 5 A","control_container_control_subtitle":"Control subtitle","control_container_control_title":"Control title","control_container_direct":"DIRECT","control_container_disable":"Disable","control_container_discharge_power_target":"DISCHARGE POWER TARGET","control_container_enabled":"ENABLED","control_container_energy_target":"ENERGY TARGET. This value should match the system size per the design documents and inspectors report","control_container_error_message":"{mode} is required","control_container_explanation_bullet_five_max_site_meter_power_kw":"When net load is larger than this limit, batteries will discharge in a best effort manner to prevent surpassing this limit.","control_container_explanation_bullet_five_min_site_meter_power_kw":"When net generation is larger than this limit, batteries will charge in an best effort manner to prevent surpassing this limit.","control_container_explanation_bullet_four_max_site_meter_power_kw":"When net load is smaller than this limit, batteries will be limited in their allowed charge power.","control_container_explanation_bullet_four_min_site_meter_power_kw":"When net generation is smaller than this limit, batteries will be limited in their allowed discharge power.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Site Import Limit is an optional setting. Leave this field empty to disable limiting.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Site Export Limit is an optional setting. Leave this field empty to disable limiting.","control_container_explanation_bullet_three_max_site_meter_power_kw":"This is an aggregate limit across all phases on all Site meters. (Note: When Load meters are used, the Site meter is calculated using Load, Solar and Battery).","control_container_explanation_bullet_three_min_site_meter_power_kw":"This is an aggregate limit across all phases on all Site meters. (Note: When Load meters are used, the Site meter is calculated using Load, Solar and Battery).","control_container_explanation_bullet_two_max_site_meter_power_kw":"When enabled, the sitemaster controls the maximum power that is allowed to be imported from the grid into the site.","control_container_explanation_bullet_two_min_site_meter_power_kw":"When enabled, the sitemaster controls the maximum power that is allowed to be exported from the site to the grid.","control_container_explanation_export_restrictions_locked":"Determines how the system may export power to the grid. Once set, regulation requires that it can only be changed by contacting Tesla.","control_container_explanation_export_restrictions_unlocked":"Regulation requires that export characteristics can only be set during initial commissioning. Please contact Tesla to modify.","control_container_explanation_nominal_system":"This value should match the system size as per the design documents and inspector\'s report.","control_container_heat_for_energy":"HEAT FOR ENERGY","control_container_heat_mode":"HEAT MODE","control_container_heco_committed_capacity":"Committed Capacity","control_container_heco_committed_discharge_power_W_max_bound":"{mode} has maximum value of 100000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode} has minimum value of 100 W","control_container_loading":"Loading","control_container_max_site_meter_power_W_max_bound":"{mode} has maximum value of 50000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} has minimum value of 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} must be greater than or equal to 0","control_container_max_site_meter_power_kw":"Site Import Limit","control_container_max_site_meter_power_w":"Site Import Limit","control_container_menu":"Menu","control_container_min_site_meter_power_kW_positive":"{mode} must be greater than or equal to 0","control_container_min_site_meter_power_kw":"Site Export Limit","control_container_min_site_meter_power_w":"Site Export Limit","control_container_minimum_charge_power":"MINIMUM CHARGE POWER","control_container_minimum_discharge_power":"MINIMUM DISCHARGE POWER","control_container_misc":"MISC","control_container_net_meter_mode":"Site Export Restrictions","control_container_never":"NO SITE EXPORT","control_container_nominal_system_energy_kW_positive":"{mode} must be greater than or equal to 0","control_container_nominal_system_energy_kWh_positive":"{mode} must be greater than or equal to 0","control_container_nominal_system_energy_kwh":"Nominal System Energy","control_container_nominal_system_energy_max_error":"Nominal System Energy exceeds the max energy limit","control_container_nominal_system_power_kw":"Nominal System Power","control_container_nominal_system_power_max_error":"Nominal System Power exceeds the max power limit","control_container_number_error_message":"{mode} must be a numerical input","control_container_power":"POWER","control_container_pv_only":"EXPORT UP TO PV METER READING OK","control_container_reactive_mode":"REACTIVE MODE","control_container_real_mode":"REAL MODE","control_container_reset":"Reset","control_container_site_control":"SITE CONTROL","control_container_site_limits":"SITE LIMITS","control_container_site_max_power":"SITE MAX POWER","control_container_site_min_power":"SITE MIN POWER","control_container_submit":"Submit","control_container_submitting_control":"Submitting Control","control_start":"START","control_stop":"STOP","current_password_placeholder_text":"Enter your current password","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Amp {id}","current_transformer_item_view_battery_ct":"Battery","current_transformer_item_view_calculated_reading":"Calculated:","current_transformer_item_view_conductor_ct":"Conductor","current_transformer_item_view_ct_voltage_pairing_1":"Phase L1","current_transformer_item_view_ct_voltage_pairing_2":"Phase L2","current_transformer_item_view_ct_voltage_pairing_3":"Phase L3","current_transformer_item_view_ct_voltage_pairing_default":"Default Phase","current_transformer_item_view_doubled_solar_ct":"Solar (1CT x2)","current_transformer_item_view_flip":"Flip","current_transformer_item_view_generator_ct":"Generator","current_transformer_item_view_load_ct":"Load","current_transformer_item_view_measure_pw_plus_input":"Measuring a Powerwall+ Inverter","current_transformer_item_view_measured_reading":"Per CT:","current_transformer_item_view_missing_ct":"Missing","current_transformer_item_view_no_reading":"No reading","current_transformer_item_view_none_ct":"None","current_transformer_item_view_phase_sequence_dropdown_title":"Phase","current_transformer_item_view_site_ct":"Site","current_transformer_item_view_smart_ct":"Smart","current_transformer_item_view_solar_ct":"Solar","current_transformer_item_view_solar_rgm_ct":"Solar Revenue-Only","current_transformers_container_800a_ct_ensure":"Ensure the CT selection on this page matches what is installed.","current_transformers_container_800a_ct_larger":"800 A CTs are physically larger than the 200/264 A CTs.","current_transformers_container_800a_ct_use_case":"When metering large conductors or panels (like 400A / 800A), use and configure the 800A CT.","current_transformers_container_amps_explanation":"Current flowing through the current transformer","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Ensure the CT is installed on the correct phase ({sequence}).","current_transformers_container_configure_subtitle":"Configure the meter current transformers.","current_transformers_container_ct_flipping_ensure_direction":"First ensure the CT label is facing the solar inverter (for solar CT) or facing the grid supply (for site CT). Then check the phase wiring, and verify the reported current, power, and power factor readings.","current_transformers_container_ct_flipping_modal_title":"Flipping CT in Software","current_transformers_container_ct_flipping_software_incorrect_metering":"Using software to flip a CT installed on the wrong phase will result in incorrect metering.","current_transformers_container_ct_flipping_wrong_phase":"A negative power reading may indicate the CT is installed backwards or on the wrong phase.","current_transformers_container_double_check_recommendation":"Double-check wiring, voltage taps, CTs, and meter configuration before continuing.","current_transformers_container_doubled_solar_ct_explanation":"A single CT may be used to meter a balanced PV inverter","current_transformers_container_doubled_solar_ct_modal_title":"Metering a Split-Phase Solar Inverter with one CT","current_transformers_container_grid_code_phase_modal_title":"Warning: Number of CTs does not match grid code phase recommendation","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Warning: Number of CTs does not match grid code phase recommendation for multiple meters","current_transformers_container_grid_code_phase_multiple_warnings_message":"Unexpected number of CTs attached to the following {numMeters} meters:","current_transformers_container_grid_code_phase_warning_message":"Unexpected number of CTs attached to the following meter:","current_transformers_container_grid_code_single_phase_warning":"The applied grid code is single phase. Single-phase systems typically have either a 1- or 3-phase service. {lb} An odd number of CTs (1 or 3) is recommended.","current_transformers_container_grid_code_split_phase_warning":"The applied grid code is split phase. Split-phase systems typically have one CT on each \\"hot\\" conductor. {lb} An even number of CTs (2 or 4) is recommended if not using the single solar CT option.","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"A Neurio meter measuring Powerwall+ solar inverters is required to enable Revenue Grade Metering (RGM).","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Select Yes if this measures a Powerwall+ solar inverter. Select No if this measures a solar inverter not part of a Powerwall+ assembly.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"Is this measuring a Powerwall+ Inverter?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Ensure the label on the CT faces the solar inverter.","current_transformers_container_label_modal_title":"Explanation of Labels","current_transformers_container_load_ct_ensure":"When configuring Load CTs, ensure all loads on site are metered and that backed-up and non-backup loads are metered separately.","current_transformers_container_load_ct_modal_title":"Load CT","current_transformers_container_load_ct_recommended":"Configuring Load CTs is only recommended for specific uses where it is not possible to configure a Site CT.","current_transformers_container_meter_id":"Meter {id}","current_transformers_container_no_load_and_site_ct":"There cannot be both a Load and Site CT.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"There cannot be loads behind the CT.","current_transformers_container_no_site_or_load_warning":"NO SITE OR LOAD CURRENT TRANSFORMERS CONFIGURED","current_transformers_container_no_solar_ct_warning":"NO SOLAR CURRENT TRANSFORMER CONFIGURED","current_transformers_container_phase_usages_modal_title":"Warning: CT configuration does not match phase configuration","current_transformers_container_phase_usages_warning":"The number of configured phases does not match the number of configured CTs. {lb} {num} configured CT(s) are recommended.","current_transformers_container_phase_usages_warning_message":"Unexpected number of CTs attached to the following meter(s):","current_transformers_container_power_amperage_configure_warning":"{type} CT requires both positive power and amperage to be configured correctly.","current_transformers_container_power_factor_explanation":"Power Factor (Power_Real / Power_Apparent). Only shown for high power levels. For common resistive loads, power factor should be close to 1. A low power factor may indicate that a current transformer is installed incorrectly, or there are very large capacitive/inductive loads.","current_transformers_container_power_factor_out_of_range_warning":"Power Factor measurement is out of expected range. {lb} Measured Power Factor: {powerFactor} PF {lb} The meter may be installed incorrectly or on an incorrect phase, or there are very large capacitive/inductive loads.","current_transformers_container_system_test_configured_incorrect":"Warning: CT {id} may be configured incorrectly","current_transformers_container_title":"Current Transformers","current_transformers_container_voltage_out_of_range_warning":"Voltage is out of range. {lb} Measured Voltage: {volts} V {lb} Measured voltage of this CT is outside normal operating range.","current_transformers_container_volts_explanation":"Voltage from line to neutral on the voltage tap associated with the current transformer","current_transformers_container_watts_explanation":"Power as current flowing through the current transformer multiplied by voltage on the associated voltage tap","customer_installation_view_email_label":"CUSTOMER EMAIL","customer_installation_view_email_placeholder":"Email","customer_registration_view_address_label":"ADDRESS","customer_registration_view_address_placeholder":"Address","customer_registration_view_city_label":"CITY","customer_registration_view_city_placeholder":"City","customer_registration_view_country_label":"country","customer_registration_view_customer_information":"CUSTOMER INFORMATION","customer_registration_view_email_address_label":"EMAIL","customer_registration_view_email_address_label_confirmation":"RE-ENTER EMAIL","customer_registration_view_email_placeholder":"Email","customer_registration_view_family_name_label":"FAMILY NAME (LAST NAME)","customer_registration_view_family_name_warning":"Enter the customer\'s last name.","customer_registration_view_given_name_label":"GIVEN NAME (FIRST NAME)","customer_registration_view_given_name_warning":"Enter the customer\'s first name.","customer_registration_view_homeowner_family_name_placeholder":"Last Name","customer_registration_view_homeowner_given_name_placeholder":"First Name","customer_registration_view_installation_address":"INSTALLATION ADDRESS","customer_registration_view_phone_number_label":"PHONE","customer_registration_view_phone_placeholder":"Phone","customer_registration_view_skip_explanation":"If skipped, the homeowner will have to perform registration themselves through the Tesla mobile app before getting access to the system.","customer_registration_view_state_placeholder":"State","customer_registration_view_state_province_region_label":"STATE / PROVINCE / REGION","customer_registration_view_zip_label":"ZIP / POSTAL CODE","customer_registration_view_zip_placeholder":"ZIP / Postal Code","diagnostic-alert-affected-children":"Affected Components ({count})","diagnostic-alerts-missing-alert-information":"Missing Alert Information","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Toolbox Article","diagnostic-alerts-toolbox-article-external-link":"External Links","diagnostic_alert_alert_name":"Alert Name","diagnostic_alert_alert_type":"Alert Type","diagnostic_alert_audience":"Audience","diagnostic_alert_clear_condition":"Clear Condition","diagnostic_alert_description":"Description","diagnostic_alert_display_name":"Display Name","diagnostic_alert_id":"Alert ID","diagnostic_alert_impact_category":"Impact Category","diagnostic_alert_latching":"Latching","diagnostic_alert_max":"Max","diagnostic_alert_min":"Min","diagnostic_alert_name":"Name","diagnostic_alert_node":"Node","diagnostic_alert_offset":"Offset","diagnostic_alert_payload_signals":"Payload Signals","diagnostic_alert_potential_impact":"Potential Impact","diagnostic_alert_safety_reason":"Safety Reason","diagnostic_alert_scale":"Scale","diagnostic_alert_set_condition":"Set Condition","diagnostic_alert_signal_name":"Signal Name","diagnostic_alert_signoff":"Sign Off","diagnostic_alert_sna_value":"SNA Value","diagnostic_alert_supplier_dtc_name":"Supplier DTC Name","diagnostic_alert_uiID":"UI ID","diagnostic_alert_units":"Units","diagnostic_alert_urgent":"Urgent","diagnostic_category_item_view_alerts_description":"Site, component and subcomponent alerts","diagnostic_category_item_view_download_results":"DOWNLOAD RESULTS","diagnostic_category_item_view_internal_comms_description":"Check all device communications","diagnostic_category_item_view_internal_comms_title":"Device Communications","diagnostic_category_item_view_live_results":"LIVE RESULTS","diagnostic_category_item_view_metering_description":"Check meter connections","diagnostic_category_item_view_metering_title":"Metering","diagnostic_category_item_view_networking_description":"Check network connection","diagnostic_category_item_view_networking_title":"Networking","diagnostic_category_item_view_no_selected_tests":"NO SELECTED TESTS","diagnostic_category_item_view_rerun_selected":"RERUN {num} SELECTED TESTS","diagnostic_category_item_view_rerun_selected_test":"RERUN SELECTED TEST","diagnostic_category_item_view_run_selected":"RUN {num} SELECTED TESTS","diagnostic_category_item_view_run_selected_test":"RUN SELECTED TEST","diagnostic_category_item_view_select_all_tests":"Select All","diagnostic_category_item_view_self_tests_description":"Initiate charge and discharge tests on the system","diagnostic_category_item_view_self_tests_title":"Self Tests","diagnostic_input_view_blocks_label":"BLOCKS","diagnostic_input_view_individual_test_name_label":"INDIVIDUAL TEST NAME","diagnostic_input_view_max_allowed_charge_power_label":"MAX ALLOWED CHARGE POWER","diagnostic_input_view_max_allowed_discharge_power_label":"MAX ALLOWED DISCHARGE POWER","diagnostic_test_enable_line":"Enable Line","diagnostic_test_item_view_ac_self_test_description_2":"Runs a sequence of power slosh tests on the AC system. Powerpack systems will use the \\"MAX_ALLOWED_POWER\\" settings. Set these to 0 for Megapack and Supercharger systems.","diagnostic_test_item_view_dc_self_test_description_2":"Runs a sequence of tests on the DC system including thermal checks.","diagnostic_test_item_view_enable_line_description":"Test enable line high for all Powerwalls","diagnostic_test_item_view_enable_line_resolution":"Toggle Enable Line and try again","diagnostic_test_item_view_individual_self_test_description":"Select from a list of self tests available on the configured bus controllers.","diagnostic_test_item_view_meter_comms_description":"Ping meter communications","diagnostic_test_item_view_network_connection_description":"Test connection to Internet and Tesla servers","diagnostic_test_item_view_network_connection_resolution":"Reconfigure networking","diagnostic_test_item_view_resolution_generic_text":"Reconfigure {name} and try again","diagnostic_test_item_view_step_canceled":"Test was canceled by user","diagnostic_test_item_view_step_config_update_status":"Check Tesla Configuration Server Status","diagnostic_test_item_view_step_google_http":"Ping Google HTTP","diagnostic_test_item_view_step_google_https":"Ping Google HTTPS","diagnostic_test_item_view_step_hermes_status":"Check Tesla Logging Server Status","diagnostic_test_item_view_step_results_ip_address":"IP Address","diagnostic_test_item_view_step_results_subnet_mask":"Subnet","diagnostic_test_item_view_table_header_key":"Identifier","diagnostic_test_item_view_table_header_name":"Step","diagnostic_test_item_view_table_header_value":"Value","diagnostic_test_meter_comms":"Meter Communications","diagnostic_test_network_connection":"Network Connection","diagnostics_composite_view_no_tests_found":"NO AVAILABLE TESTS FOUND","diagnostics_composite_view_run_all_selected_tests":"RUN ALL SELECTED TESTS","diagnostics_container_industrial_disruptive_tests_description":"The following tests will trigger the fan and thermal systems to operate, which will generate noise. Approximately 30kW per inverter draw should be expected. Additionally, the following tests may disrupt normal operation of the system:","diagnostics_container_required_inputs_description":"The following tests require additional inputs:","diagnostics_container_residential_disruptive_tests_description":"The following tests may disrupt normal operation of both the Gateway and Powerwall:","diagnostics_container_stop_test_title":"Stop {name} Test?","diagnostics_container_subtitle":"Tools to diagnose issues on the system installation.","diagnostics_container_tests_running":"Diagnostic Tests Running","diagnostics_container_title":"Diagnostics","disabled_reason_battery_breaker_open":"Battery breaker is open","disabled_reason_checking_firmware_update":"Checking for firmware update","disabled_reason_config":"Disabled by configuration file","disabled_reason_excessive_voltage_drop":"Excessive voltage drop","disabled_reason_firmware_update_failed":"Firmware update failed","disabled_reason_gridcode_write_failed":"Grid code setting failed","disabled_reason_user_requested":"Disabled at user request","dropdown_default_placeholder":"Type...","dropdown_list_view_not_listed_label":"Not Listed: \\"{searchText}\\"","dropdown_list_view_select_all":"Select All","dropdown_list_view_select_field":"Please select a field.","dropdown_list_view_show_complete":"SWITCH TO COMPLETE LIST","dropdown_list_view_show_searchable":"SWITCH TO SEARCHABLE LIST","enumeration_warning_details_miswired_12v":"When connecting two Powerwall+, only the unit connected to Gateway/Backup Switch should have 12V applied. Remove 12V from all subsequent Powerwall+ in the chain, then Rescan Devices (at the bottom of this page) to clear this warning.","enumeration_warning_details_multiple_controllers_gateway":"Unplug the power harness of all Powerwall+ site controllers, located in the top-right of the Solar Assembly.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Unplug the power harness of the Expansion Powerwall+ site controller (not connected to Backup Switch), located in the top-right of the Solar Assembly.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Unplug the power harness of all Powerwall+ site controllers, located in the top-right of the Solar Assembly. Commission the system by connecting to the Backup Gateway.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Only a single site controller must be active. When using Backup Gateway, unplug all Powerwall+ controllers. When using a Backup Switch, unplug all but one Powerwall+ controller. Run Wizard is disabled until there is only one site controller active.","enumeration_warning_title_miswired_12v":"12v Wiring Error","enumeration_warning_title_multiple_controllers":"Multiple Site Controllers are Active","error_details":"Error Details","error_item_view_check_network":"Check network connection.","error_item_view_disconnected":"Disconnected from Gateway. Check network connection and {refresh}","error_item_view_forgot_password":"Click to reset password.","error_item_view_refresh_browser":"Refresh browser.","error_item_view_try_logging_in_again":"Try logging in again.","ethernet_view_backup_dns_label":"BACKUP DNS SERVER","ethernet_view_backup_dns_warning":"Valid Backup DNS Server","ethernet_view_configuration_label":"CONFIGURATION","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY","ethernet_view_gateway_warning":"Valid Gateway (Router) IP","ethernet_view_ip_address_label":"IP ADDRESS","ethernet_view_ip_address_warning":"Valid IP Address","ethernet_view_not_available":"Not available","ethernet_view_primary_dns_label":"PRIMARY DNS SERVER","ethernet_view_primary_dns_warning":"Valid Primary DNS Server","ethernet_view_static_label":"Static","ethernet_view_subnet_mask_label":"SUBNET MASK","ethernet_view_subnet_mask_warning":"Valid Subnet Mask","factory_reset_message":"This will cause the unit to reset to the default state as provided by Tesla. This action cannot be undone. The unit will need to be re-commissioned by a professional installer before operation is possible. You may need to reconnect to the unit\'s WiFi network.","field_false":"False","field_true":"True","follower_powerwall_message":"This Powerwall is controlled by {leader}","follower_powerwall_title":"Follower Powerwall","form_legend_text":"denotes a required field","generation_container_connecting_status":"Connecting","generation_container_connection":"Inverter {id} Connection","generation_container_connection_summary":"During this connection process, you may temporarily disconnect from the network. {lb} Ensure you reconnect to the correct network. This may take up to 3 minutes.","generation_container_subtitle":"Add both solar inverter and generator information below.","generation_container_title":"Generation","generator_item_view_disconnect_type_label":"DISCONNECT TYPE","generator_item_view_generator":"GENERATOR {id}","generator_item_view_manufacturer_label":"MANUFACTURER (OPT)","generator_item_view_model_label":"MODEL","generator_item_view_serial_label":"SERIAL","generator_item_view_sustained_power_label":"SUSTAINED POWER","generator_view_add_generator":"ADD GENERATOR","grid_code_container_off_grid_confirmation":"Is the system off grid?","grid_code_container_off_grid_detected":"Off grid system detected. Make sure that this is the correct setting.","grid_code_container_off_grid_warning":"{warning}: Could not detect off grid status of the system. Setting the wrong off grid status could result in system failure.","grid_code_container_results":"Grid Detection Results","grid_code_container_retrieving":"Retrieving Grid Codes","grid_code_container_saving":"Saving Grid Code","grid_code_container_subtitle":"Based on location and meter readings, find the best settings for your installation.","grid_services_view_grid_services":"Grid Services","heading_change_password":"Change Password","help_view_how_password":"Finding the password on a Gateway","help_view_how_password_description":"Open the door on the Gateway. The password is found on the sticker after \\"Password:\\"","help_view_how_serial_number":"Finding the serial number on a Non-Backup Gateway","help_view_how_serial_number_backup":"Finding the serial number on a Backup Gateway","help_view_how_serial_number_backup_description":"Open the door on the Backup Gateway. The serial number begins with an \\"(S):\\"","help_view_how_serial_number_description":"Open the door on the Gateway. The serial number begins with an \\"(S):\\"","help_view_how_to_enable_line":"Toggling a Powerwall","help_view_how_to_enable_line_description":"Toggle the Powerwall switch off and back on. With multi-Powerwall systems, you only need to toggle one switch","hierarchy_charger":"Charger Block {name}","hierarchy_chinv":"VFD for Compressor and Heater (CHINV)","hierarchy_converter":"DC-DC Converter (STARC)","hierarchy_inverter":"Battery Block {name}","hierarchy_mega_thermal_controller":"Thermal Controller (MPTHC)","hierarchy_missing_post":"Missing Post","hierarchy_mpbc":"Battery Block {name}","hierarchy_part_number":"Part Number","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Pods Reporting","hierarchy_post":"Post (LCC)","hierarchy_posts":"Posts","hierarchy_power_stage":"Power Stage","hierarchy_power_stages":"Power Stages","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Battery Management Board (QBMS)","hierarchy_qhvp":"High Voltage Processor (QHVP)","hierarchy_scthcs":"Thermal Controllers","hierarchy_serial_number":"Serial Number","hierarchy_sitemaster":"Sitemaster {name}","hierarchy_starcs":"DC-DC Converters","hierarchy_stitch":"Control Power DC-DC (STITCH)","hierarchy_thermal_controller":"Thermal Controller (SCTHC)","higher_order_login_login_required":"Login Required","higher_order_login_title":"Let\'s get started.","home_container_caution":"⚠️ Caution","home_container_caution_deenergize":"To safely de-energize the system turn all Powerwall switches OFF.","home_container_caution_energized":"System may remain energized if solar strings are connected.","home_container_inactive_meter":"Stale Meter Data","home_container_inactive_meter_description":"Check {type} meter connection.","home_container_inactive_meter_timestamp":"Last meter reading at {timestamp}","home_container_login_required":"Login Required","home_container_missing_meter":"Meter is Missing","home_container_positive_meter":"Warning: {type} meter may be configured incorrectly","home_container_positive_meter_description":"{type} meter requires both positive power and amperage to be configured correctly.","home_container_powerwall_error":"Powerwall System Error","home_container_powerwall_start_error":"Unable to start system: {reason}","home_container_site_controller_error":"Site Controller System Error","home_container_sitemaster_confirm_industrial":"Are you sure you want to stop the system?","home_container_sitemaster_confirm_wizard":"Run Wizard requires the system to be stopped. Proceed and stop the system?","home_container_sitemaster_header_warning_industrial":"{warning} This system is in a state where Tesla does not recommend stopping it. Reason: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} This system is in a state where Tesla does not recommend stopping it. Reason: \\"{reason}\\"","home_container_start_powerwall":"Start System","home_container_start_system_button":"START SYSTEM","home_container_stop_powerwall":"Stop System","home_container_stop_system_button":"STOP SYSTEM","home_view_compliance":"COMPLIANCE","home_view_download_all_logs":"Download All Logs","home_view_download_logs":"DOWNLOAD LOGS","home_view_download_logs_description_one":"This downloads a compressed set of system logs that can be helpful to diagnose operating system, software, and networking issues.","home_view_download_logs_description_three":"Logs are signed and encrypted and should be sent to Tesla Energy Service for investigation.","home_view_download_logs_description_two":"This is especially useful when the Gateway cannot be connected to the network, and advanced troubleshooting is needed.","home_view_login":"LOGIN","home_view_logout":"LOGOUT","home_view_run_wizard":"RUN WIZARD","input_accept":"I accept","input_confirm":"I acknowledge all system warnings.","input_consent":"I consent","input_decline":"I decline","input_no_consent":"I do not consent","input_title_email":"Enter a valid email address: name@name.domain","installation_container_relay_section_modal_title":"Gateway Low Voltage Relay","installation_container_residual_current_device_modal_title":"Installation Requirement for Site RCDs","installation_container_subtitle":"Installer and site information","installation_container_sync_relay_usage_open_off_grid":"Open Relay when Off-Grid","installation_container_title":"Installation Information","installation_problem_detail_site_shutdown_0":"To re-enable system:","installation_problem_detail_site_shutdown_1":"Turn on all Powerwall ON/OFF switches","installation_problem_detail_site_shutdown_2":"Close E-Stops","installation_problem_detail_site_shutdown_3":"Ensure Rapid shutdown jumpers are properly installed","installation_problem_detail_site_shutdown_4":"Check shutdown circuit wiring.","installation_problem_detail_title_site_shutdown":"Site Shutdown circuit triggered","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Site shutdown circuit triggered by a Powerwall+ rapid shutdown.","installation_problem_details_pvacs_with_no_solar_rgm":"Solar meters are only required when measuring solar inverters that are not part of a Powerwall+ assembly. Meters that measure a Powerwall+ inverter should be marked as such on the Current Transformers page.","installation_problem_details_too_few_solar_rgm":"The number of CTs measuring a Powerwall+ solar inverter should match the number of Powerwall+ solar inverters. Run wizard, pair the Neurio meter if needed, and adjust the CT configuration on the Current Transfomers page.","installation_problem_details_too_many_solar_rgm":"The number of CTs measuring a Powerwall+ solar inverter should match the number of Powerwall+ solar inverters. Run wizard and adjust the CT configuration on the Current Transfomers page.","installation_problem_title_pvacs_with_no_solar_rgm":"Solar meter not measuring Powerwall+ inverter. Is this correct?","installation_problem_title_site_shutdown":"Site shutdown circuit triggered. All Powerwalls and Powerwall+ solar inverters are disabled.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Site shutdown circuit triggered by a Powerwall+ rapid shutdown. All Powerwalls and Powerwall+ solar inverters are disabled.","installation_problem_title_too_few_solar_rgm":"Too few solar meters measuring Powerwall+ inverter","installation_problem_title_too_many_solar_rgm":"Too many solar meters measuring Powerwall+ inverter","installation_view_add_on_solar":"Add-on","installation_view_additional_connections_label":"ADDITIONAL CONNECTIONS","installation_view_back_wiring":"Back","installation_view_backup_configuration_label":"BACKUP CONFIGURATION","installation_view_basement_location":"Basement","installation_view_company_label":"COMPANY NAME","installation_view_company_placeholder":"Company name","installation_view_conditioned_space_location":"Conditioned Space","installation_view_existing_solar":"Existing","installation_view_floor_mounting":"Floor","installation_view_garage_location":"Garage","installation_view_home_label":"HOME WIRING","installation_view_location_label":"POWERWALL INSTALL LOCATION","installation_view_modem_ethernet":"Has cellular modem to Ethernet?","installation_view_modem_wifi":"Has cellular modem to Wi-Fi?","installation_view_mounting_label":"POWERWALL MOUNTING","installation_view_na_backup_configuration":"N/A","installation_view_new_solar":"New","installation_view_none_solar":"None","installation_view_outdoor_location":"Outdoor","installation_view_pad_mounting":"Pad","installation_view_partial_home_backup_configuration":"Partial Home","installation_view_phone_label":"PHONE","installation_view_phone_placeholder":"Installer phone number","installation_view_powerline_ethernet":"Has power line to Ethernet?","installation_view_relay_enabled":"Open Relay when Off-Grid","installation_view_relay_label":"GATEWAY LOW VOLTAGE RELAY","installation_view_relay_options_modal_content":"When On-Grid or connected to another AC voltage source this relay will be closed. {lb1} When Off-grid this relay will be open. {lb1} As an example, this can be used to allow an Air Conditioner to run when on-grid, then not run when off-grid to prevent the associated high inrush current from overloading the Powerwalls.","installation_view_relay_section_modal_content":"The Gateway has a built in Relay that is controlled to turn on and off according to system status. {lb1} This can be used to control an external device, such as a load, or secondary energy source. {lb1} On Backup Gateway 1, use Pins 1 & 2 on the Auxiliary connector (9 pin Large Green Phoenix connector). {lb1} On Backup Gateway 2, use Pins 3 & 4 (GSO/GSI) on the Auxiliary connector (5 pin Green Phoenix connector). {lb1} This relay is rated to 60 Volts / 2 Amps, and is commonly used with 12V or 24V circuits. {lb1} Review load shedding and related application notes for more details.","installation_view_residual_current_device":"Has RCD installed upstream of Gateway?","installation_view_residual_current_device_modal_content":"Site-level Residual Current Devices (RCDs) may be required for certain installations, such as grids with TT earthing configuration. {lb1}{lb2} To reduce risk of nuisance tripping during off-grid operation, Tesla recommends ensuring all upstream RCDs are Time-Delay (Type S), or relocating site RCD after the Gateway’s contactor if possible. {lb1}{lb2} For additional information refer to the RCD and Fault Protection Application Note.","installation_view_satellite_ethernet":"Has satellite to Ethernet?","installation_view_satellite_wifi":"Has satellite to Wi-Fi?","installation_view_side_wiring":"Side","installation_view_solar_label":"SOLAR INSTALLATION","installation_view_solar_panels":"Solar Panels","installation_view_solar_roof":"Solar Roof","installation_view_solar_type_label":"SOLAR INSTALLATION TYPE","installation_view_stack_kit":"Has Stack Kit?","installation_view_type_commercial":"Commercial","installation_view_type_label":"INSTALLATION INFORMATION","installation_view_type_perm_off_grid":"Permanently Off-Grid","installation_view_type_residential":"Residential","installation_view_wall_mounting":"Wall","installation_view_whole_home_backup_configuration":"Whole Home","installation_view_wifi_extender":"Has Wi-Fi extender?","installation_view_wiring_label":"POWERWALL WIRING","inverter_test_view_accuracy_magnitude":"Accuracy Magnitude","inverter_test_view_accuracy_time":"Accuracy Time","inverter_test_view_complete":"Complete","inverter_test_view_current_magnitude":"Current Magnitude","inverter_test_view_fail":"Fail","inverter_test_view_na":"N/A","inverter_test_view_not_run":"Not Run","inverter_test_view_pass":"Pass","inverter_test_view_running":"Running","inverter_test_view_set_magnitude":"Set Magnitude","inverter_test_view_set_time":"Set Time","inverter_test_view_test_description":"Performing Inverter Self Test","inverter_test_view_test_name_all":"All Tests","inverter_test_view_test_name_over_freq_stage_one":"Over Frequency Stage 1","inverter_test_view_test_name_over_freq_stage_two":"Over Frequency Stage 2","inverter_test_view_test_name_over_volt_one":"Over Voltage Stage 1","inverter_test_view_test_name_over_volt_two":"Over Voltage Stage 2","inverter_test_view_test_name_under_freq_stage_one":"Under Frequency Stage 1","inverter_test_view_test_name_under_freq_stage_two":"Under Frequency Stage 2","inverter_test_view_test_name_under_volt_one":"Under Voltage Stage 1","inverter_test_view_test_name_under_volt_two":"Under Voltage Stage 2","inverter_test_view_timestamp":"Timestamp","inverter_test_view_trip_magnitude":"Trip Magnitude","inverter_test_view_trip_time":"Trip Time","inverter_test_view_warning":"Note: The inverter test may take up to 20 to 30 minutes per inverter.","label_fail":"Fail","label_inconclusive":"Inconclusive","label_pass":"Pass","legal_container_customer_policy_subtitle":"Must be completed by homeowner.","legal_container_customer_policy_title":"Tesla Customer Privacy Policy & Limited Warranty","legal_container_no_meters_warning":"NO METERS CONFIGURED","legal_container_no_powerwalls_warning":"NO POWERWALLS DETECTED","login_type_customer":"Customer","login_type_engineer":"Engineer","login_type_installer":"Installer","login_view_cancel_login_auth":"Cancel Login","login_view_change_forgot_password":"CHANGE OR FORGOT PASSWORD","login_view_compliance":"COMPLIANCE","login_view_customer_email_placeholder":"Customer email","login_view_email":"EMAIL","login_view_email_placeholder":"Lead installer email","login_view_forgot_password":"FORGOT PASSWORD","login_view_forgot_password_login_type":"Please select login type","login_view_language_label":"LANGUAGE","login_view_login_type_label":"LOGIN TYPE","login_view_password_placeholder":"Enter your password","login_view_start_login_auth":"START LOGIN PROCESS","login_view_start_login_auth_how_to_enable_line_description":"To login, toggle the Powerwall enable switch off and back on. With multi-Powerwall systems, you only need to toggle one switch","login_view_username":"USERNAME","login_view_username_placeholder":"Username","login_warning_view_expand":"If the Wizard does not launch, {click}.","login_warning_view_firmware_update":"When a firmware update is in progress","login_warning_view_heading":"{warning} Launching the Wizard stops battery operation.","login_warning_view_protect_system":"To protect the system, the Wizard will not launch:","login_warning_view_stop_operation":"Force Launch Wizard","login_warning_view_supported_browsers":"{warning} Only Chrome and Safari web browsers are currently supported.","login_warning_view_system_force_launch":"If you want to launch the Wizard and stop system operation, select Force Launch Wizard.","login_warning_view_system_off_grid":"When the electrical system is off-grid","login_warning_view_warning_click":"click for more","mater_item_view_bad_barcode":"Incorrect barcode scanned","mater_item_view_barcode_scan_failed":"Barcode scan failed","menu-switch-tesla-pros-reason":"The current experience is no longer supported","menu-switch-to-tesla-pros-title":"Switch to Tesla Pros for a better commissioning experience","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Battery","meter_aggregate_type_load":"Load","meter_aggregate_type_site":"Site","meter_aggregate_type_solar":"Solar","meter_container_add_meter_error":"Verifying Meter","meter_container_add_meter_status":"Adding Meter","meter_container_authorizing_status":"Authorizing","meter_container_decode":"Could not decode serial from image.","meter_container_detecting_status":"Detecting Wired Meters","meter_container_failed_status":"Failed to Add Meter","meter_container_reconnecting_status":"Reconnecting","meter_container_skip_title":"No meters have been commissioned, are you sure you want to continue?","meter_container_starting_status":"Starting","meter_container_subtitle":"Enter the energy meter short ID(s) and serial(s) to connect. Test each meter after it is commissioned.","meter_container_subtitle_industrial":"Enter the energy meter IP address(es) and location(s) to connect. Test each meter after it is commissioned.","meter_container_success_status":"Meter Successfully Added","meter_container_title":"Meters","meter_container_unknown_status":"Unknown","meter_container_updating_status":"Updating Meter","meter_container_verification":"Meter {id} Verification","meter_container_verification_gw1":"During this WiFi pairing process, you may be temporarily disconnected from the Gateway WiFi network. {lb} Ensure you reconnect to the correct network. This may take up to 3 minutes.","meter_container_verification_gw2":"The WiFi pairing process may take up to 3 minutes.","meter_container_verify_meter_error":"Verifying Meter","meter_container_verifying_status":"Verifying Meter","meter_item_view_add_failed":"Failed to Add Meter","meter_item_view_add_failed_help":"Check short ID and Serial number. Power cycle meter and connect when meter chimes. If issue persists, delete meter and try again.","meter_item_view_advanced_settings":"ADVANCED SETTINGS (OPTIONAL)","meter_item_view_battery_location":"Battery","meter_item_view_check_meter":"CHECK METER {id} CONNECTION","meter_item_view_conductor_location":"Conductor","meter_item_view_cts":"{count} CTs detected","meter_item_view_doubled_solar_location":"Doubled Solar","meter_item_view_generator_location":"Generator","meter_item_view_ip_address":"IP ADDRESS","meter_item_view_load_location":"Load","meter_item_view_mac_address":"MAC ADDRESS","meter_item_view_meter_location":"METER LOCATION","meter_item_view_none_location":"None","meter_item_view_remote_ip_address_placeholder":"e.g. 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"e.g. 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"e.g. OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"e.g. 01234","meter_item_view_serial":"SERIAL","meter_item_view_short_id":"SHORT ID","meter_item_view_site_location":"Site","meter_item_view_solar_location":"Solar","meter_item_view_solar_rgm_location":"Solar Revenue-Only","meter_item_view_success":"SUCCESSFULLY CONNECTED!","meter_item_view_unable":"UNABLE TO READ METER!","meter_item_view_upgrading":"METER IS UPGRADING!","meter_list_view_add":"ADD WI-FI METER","meter_list_view_add_ip":"ADD IP METER","meter_list_view_detect":"DETECT WIRED METERS","meter_list_view_enable_inverter_readings":"Enable Battery Inverter Readings","meter_list_view_inverter_meter":"INVERTER METERS","meter_list_view_inverter_meter_desc":"When enabled and there are no battery meters configured, the Site Controller will use readings from the battery inverters as the battery meter.","meter_msa_id":"BACKUP SWITCH {id}","meter_sync_x_id":"INTERNAL PRIMARY METER X (GATEWAY) {id}","meter_sync_y_id":"INTERNAL AUXILIARY METER Y (GATEWAY) {id}","meter_update_modal_fetch_status_error":"Error: Unable to fetch meter update status","meter_update_modal_footer":"Meter Update may take up to 2 Minutes","meter_update_modal_remaining_time":"Time Remaining: {seconds} seconds","meter_update_modal_timeout_error":"Error: Timeout occurred while updating the meter","meter_update_modal_title":"Meter Update is Underway","meter_validation_container_error":"Meter Validation unavailable while site controller is running.","meter_validation_container_error_placeholder":"Meter Validation unavailable: {error}.","meter_validation_container_power_command":"Power Command","meter_validation_container_power_start":"Start","meter_validation_container_power_stop":"Stop","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Reactive Power Command","meter_validation_container_real_power_command":"Real Power Command","meter_validation_container_show_per_phase":"Show Per Phase values","meter_validation_container_title":"Meter Validation","meter_validation_container_usage":"Send a power command and validate meter data. You must stay on this page to keep the power command continuous. Negative values will cause the system to charge. Positive values will cause the system to discharge.","meter_validation_control_subtitle":"Control","meter_validation_control_title":"Control title","meter_validation_disable":"Disable","meter_validation_loading":"Loading","meter_validation_menu":"Menu","meter_validation_reset":"Reset","meter_validation_submit":"Submit","meter_validation_submitting_control":"Submitting Control","meter_validation_title":"Meter Validation","meter_validation_view_apparent_power":"Apparent Power (kVA)","meter_validation_view_battery_location":"Battery","meter_validation_view_conductor_location":"Conductor","meter_validation_view_current":"Current (A)","meter_validation_view_doubled_solar_location":"Doubled Solar","meter_validation_view_generator_location":"Generator","meter_validation_view_inverters":"Inverters ({length})","meter_validation_view_load_location":"Load","meter_validation_view_meter":"Meters ({length})","meter_validation_view_none_location":"None","meter_validation_view_pf":"Power Factor","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Average","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Total","meter_validation_view_reactive_power":"Reactive Power (kVAr)","meter_validation_view_real_power":"Real Power (kW)","meter_validation_view_site_location":"Site","meter_validation_view_solar_location":"Solar","meter_validation_view_solar_rgm_location":"Solar Revenue-Only","meter_validation_view_voltage":"Voltage (V)","meter_w1_wifi_id":"METER {id}","meter_w1_wired_id":"WIRED METER {id}","meter_w2_wifi_id":"METER {id}","meter_w2_wired_id":"WIRED METER {id}","metrics_aggregate":"System","metrics_apparent_power":"Apparent Power ({unit})","metrics_battery":"Battery","metrics_current":"Current ({unit})","metrics_meter":"Meter","metrics_no_metrics":"No Metrics to Display.","metrics_power_factor":"Power Factor","metrics_reactive_power":"Reactive Power ({unit})","metrics_real_power":"Real Power ({unit})","metrics_subtitle":"Metrics","metrics_voltage_l_n":"Voltage L-N ({unit})","modal_acknowledge":"ACKNOWLEDGE","modal_confirm":"CONFIRM","modal_exit":"EXIT","modal_no":"NO","modal_note":"Note","modal_ok":"OK","modal_reconfigure":"RECONFIGURE","modal_yes":"YES","modbus_container_title":"Modbus Interface","modbus_table_register_address":"Address","modbus_table_register_name":"Name","modbus_table_register_type":"Type","modbus_table_register_value":"Value","modbus_table_register_value_decimal":"Value (decimal)","modbus_table_register_value_hex":"Value (hex)","msa-off-grid":"Off Grid","msa-on-grid":"On Grid","navigation_email":"EMAIL","network-switch-menu-item":"Network Switches","network_cellular_configured":"Configured, but not connected. Ensure cellular network is available and there are no obstructions around antenna.","network_connected":"Connected","network_container_connect_ethernet":"Connecting to Ethernet","network_container_connect_to_internet":"Please wait while the system attempts to connect to the Internet.","network_container_connect_wifi":"Connecting to {ssid}","network_container_connect_wifi_description":"During this process you may have to reconnect to the Gateway network to continue installation.","network_container_connman":"Network Connection Manager connects dynamically to the best network.","network_container_connman_body":"To ensure connectivity, configure all available connection types:","network_container_delete_network":"Delete Configured Network?","network_container_ethernet_and_wifi_warning":"Configure available Ethernet and Wi-Fi networks to ensure connectivity.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configure available Ethernet networks to ensure connectivity.","network_container_network_description":"Connect to the Internet with all available network types.","network_container_network_subtitle":"Network","network_container_no_internet_bullet_four":"Powerwall can send performance data to Tesla, allowing Technical Support to identify issues","network_container_no_internet_bullet_four_industrial":"Devices can send performance data to Tesla, allowing Technical Support to identify issues","network_container_no_internet_bullet_one":"Powerwall registration information is sent to Tesla, activating the full 10-year warranty","network_container_no_internet_bullet_three":"The customer can use the Tesla mobile app to monitor energy usage and control Powerwall","network_container_no_internet_bullet_two":"Powerwall can receive remote firmware updates, enabling performance improvements and new features","network_container_no_internet_bullet_two_industrial":"Devices can receive remote firmware updates, enabling performance improvements and new features","network_container_no_internet_bullet_zero":"It is possible to determine whether a firmware update is required before commissioning","network_container_no_internet_no_cell_title":"If the installation site has an available Internet connection, do not skip this step. Connect to the customer\'s Internet service via Ethernet (preferred) or Wi-Fi.","network_container_no_internet_title":"If the installation site has an available Internet connection, do not skip this step. Connect to the customer\'s Internet service via Ethernet (preferred) or Wi-Fi, or establish a cellular link.","network_container_no_internet_warning":"It is important to establish a reliable Internet connection so that:","network_container_scan_networks":"Scan Wi-Fi Networks","network_container_scan_wifi_disconnect_warning":"Warning: Scanning for new networks will temporarily disconnect the wireless connection.","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"Configure available Wi-Fi networks to ensure connectivity.","network_disabled":"Disabled","network_disconnected":"Not connected","network_ethernet_configured":"Configured, but not connected. Check the ethernet cable connection.","network_switches_container_discover_failure":"Last discovery failure: {error}","network_switches_container_discover_switches":"Discover Network Switches","network_switches_container_discovered_label":"Discovered Network Switches","network_switches_container_discovering_stop_button":"Stop Discovery","network_switches_container_discovery_switches_running_label":"Currently running discovery of network switches. You can stop discovery below.","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"Network Switches supported only on industrial systems.","network_switches_container_password_not_set":"Password is not set","network_switches_container_password_set":"Password is set","network_switches_container_passwords_error":"Password Setting Status: {status}","network_switches_container_set_password_label":"Set password on all Network Switches that are still using the factory default password.\\n All the passwords will be set to the same value.","network_switches_container_set_passwords":"Set Passwords","network_switches_container_set_passwords_button":"Set Password","network_switches_container_setting_passwords_button":"Setting Password...","network_switches_container_start_discovering_button":"Start Discovery","network_switches_container_start_discovery_help":"Network Switch Discovery is run automatically and periodically but can be triggered via the Start Discovery button.","network_switches_container_subtitle":"View Network Switches","network_switches_container_title":"Network Switches","network_view_check_connection":"CHECK INTERNET CONNECTION","network_view_connection_failed":"NOT CONNECTED!","network_view_connection_success":"SUCCESSFULLY CONNECTED!","network_view_continue_no_internet":"CONTINUE WITHOUT INTERNET","network_view_default_error":"Connection Error","network_view_local_network_connected":"Local Network Connected","network_view_local_network_disconnected":"Local Network Error","network_view_tesla_internet_connected":"Tesla Services and Internet Connected","network_view_tesla_internet_disconnected":"Tesla Services and Internet Connection Error","network_warning":"Warning","network_wifi_configured":"Configured, but not connected. Check your WiFi settings.","open_meter_validatiion_container_title":"Open Meter Validation","operation_mode_autonomous":"Autonomous Mode","operation_mode_backup":"Backup Charging Only","operation_mode_self_consumption":"Self-consumption Mode","operation_mode_site_control":"Site Control","overview_menu_control_title":"Control","overview_menu_diagnostics_title":"Diagnostics","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Connected","overview_menu_network_no_connection":"No Connection","overview_menu_registration_complete":"Complete","overview_menu_registration_incomplete":"Incomplete","overview_menu_registration_pending":"Pending internet connection","overview_menu_security_title":"Change or reset password","overview_menu_settings_title":"Settings","overview_menu_summary_title":"Summary","overview_menu_system_title":"System","overview_menu_update_title":"Software Update","overview_menu_view_alerts_event":"Event","overview_menu_view_alerts_events":"Events","overview_menu_view_inverter_title":"Inverter test","overview_menu_view_network_title":"Network","overview_menu_view_registration_title":"Registration","overview_menu_view_test_title":"Self test","overview_meter_validation_title":"Meter Validation","password_generate_error":"There was an error generating a new password. Verify connectivity and the current password and try again.","password_generate_help_text":"Enter the existing password to generate a new random password.","password_generate_menu_title":"Change Password","password_generate_notice":"The password has been changed. Record the new password before leaving this page.","phase_container_detect_timeout":"Phase detection timed out","phase_container_detection_attempt":"Attempt #{num}","phase_container_grid_code_validating_modal_title":"Validating Grid Code","phase_container_grid_compliant_description":"Grid Compliant {checkmark}","phase_container_grid_modal_description":"Grid will be compliant in {time} seconds.","phase_container_grid_modal_title":"Waiting for Grid Compliance","phase_container_modal_description":"Phase detection may take up to 2 minutes per Powerwall.","phase_container_modal_title":"Running Phase Detection","phase_container_saving_phases_modal_title":"Saving Phases","phase_container_subtitle":"View which line each Powerwall is on and update Line Status","phase_container_supported_error":"No Powerwalls detected. Phase detection is not supported.","phase_container_title":"Phase","phase_container_voltage_caution_body":"Unexpected voltage {voltage}V detected on {lineNumber}. Double-check {lineStatus} is the appropriate setting for this phase.","phase_container_warning_body":"No Backup Phases have been selected. Therefore, the system will not support any loads when the grid connection is lost.","phase_container_warning_modal_header":"Backup is Disabled","phase_line_id":"Line-{id}","phase_line_item_view_line":"Line","phase_line_item_view_line_status_backup":"Backup","phase_line_item_view_line_status_configured":"Non Backup","phase_line_item_view_line_status_not_configured":"Not Configured","phase_line_status_backup":"Backup","phase_line_status_configured":"Non Backup","phase_line_status_not_configured":"Not Configured","phase_view_detect":"DETECT PHASES","phase_view_split_phase":"Split Phase","power_flow_view_go_off_grid":"GO OFF GRID","power_flow_view_go_on_grid":"GO ON GRID","power_flow_view_grid_button_disabled_reason":"System must be started in order to go off grid.","power_flow_view_grid_spinner_alt_label":"System Transitioning","power_flow_view_start_system":"START SYSTEM","power_flow_view_stop_system":"STOP SYSTEM","powerwall_container_industrial_no_additional_title":"No additional Battery Blocks found","powerwall_container_industrial_subtitle_auto_detection_2":"Listed are all the Battery or Charger Blocks auto-detected by the Site Controller. If a block is not listed, check networking equipment including wiring, and make the sure bus controllers are powered on.","powerwall_container_industrial_title_2":"Battery/Charger Blocks","powerwall_container_industrial_updating":"Verifying Battery Blocks","powerwall_container_no_additional_powerwalls_description":"Refer to the Powerwall Installation Manual for tips on resolving possible wiring issues.","powerwall_container_no_additional_powerwalls_title":"No additional Powerwalls found","powerwall_container_scan_again":"SCAN AGAIN","powerwall_container_scanning":"Scanning","powerwall_container_scanning_for_more":"Scanning for more","powerwall_container_subtitle_component_auto_detection":"Listed are all the components auto-detected by the Gateway. Check wiring if a component is not listed.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Verifying Powerwalls","powerwall_container_updating_note":"Note: This may take up to 60 seconds per Powerwall.","powerwall_item_view_blank_numbers":"Awaiting Verification...","powerwall_item_view_numbers":"PartNumber:{partNumber} Serial:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"Cancel","powerwall_pairing_connect":"Connect","powerwall_pairing_done":"Done","powerwall_pairing_error_already_paired":"Pairing Failed: the device is already paired","powerwall_pairing_error_bad_pairing_response":"Pairing Failed: device refused to pair. Ensure the follower has been stopped","powerwall_pairing_error_bad_qr_code":"Not a WiFi QR code","powerwall_pairing_error_internal":"Pairing Failed: internal error","powerwall_pairing_error_no_qr_code":"No QR code found","powerwall_pairing_error_no_response":"Pairing Failed: device did not respond.","powerwall_pairing_error_not_leader":"Pairing Failed: this is a follower device. Reconnect to the leader device.","powerwall_pairing_error_prohibited_uncommissioned":"Pairing Failed: this Powerwall is not commissioned yet","powerwall_pairing_error_too_many_devices":"Pairing Failed: the maximum number of devices are already paired","powerwall_pairing_error_unknown":"Pairing Failed: Unknown Error","powerwall_pairing_error_wifi_connection_failed":"Pairing Failed: Could not connect to WiFi. Check the password.","powerwall_pairing_error_wifi_not_found":"Pairing Failed: WiFi network not found","powerwall_pairing_exception":"Pairing Failed: Exception","powerwall_pairing_instructions_2":"Enter or scan the WiFi SSID and password for the Powerwall to be paired. Look for a QR code on the device.","powerwall_pairing_password_label":"Password:","powerwall_pairing_scan_qr_code":"Scan QR Code","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"Pairing complete. The new device may not start responding for a minute or more (longer if there is an update in progress). Click Done to dismiss.","powerwall_pairing_state_monitoring":"Pairing new device. This may take up to a minute.","powerwall_starting":"Starting Powerwall","powerwall_view_detected_backup":"Detected Backup Capability","powerwall_view_detected_synchrometers":"Detected Meter Capability","powerwall_view_failed":"FAILED","powerwall_view_no_backup":"No Backup Capability Detected","powerwall_view_no_sync":"No Synchronizer Detected","powerwall_view_scan":"SCAN","powerwall_view_success":"SUCCESS","powerwall_view_synchrometer_detected":"Synchrometers Detected","powerwall_view_synchronizer_detected":"Synchronizer Detected","powerwall_view_update":"VERIFY POWERWALLS","privacy_policy_view_accept_warranty_title":"Accept Tesla Powerwall Limited Warranty","privacy_policy_view_contact_bullet_one":"via e‐mail at {privacyEmail};","privacy_policy_view_contact_bullet_two":"via mail at Tesla, Inc., Attn: Legal, 45500 Fremont Boulevard, Fremont, California 94538, United States.","privacy_policy_view_contact_header":"How to Contact Us","privacy_policy_view_contact_paragraph_one":"To contact us with a question or comment or to opt out from certain services, please contact us:","privacy_policy_view_contact_paragraph_three":"If you are located in the EEA or Switzerland, your local Tesla affiliate may be the entity responsible for processing your personal information.","privacy_policy_view_contact_paragraph_two":"Please note that e-mail communications are not always secure, so please do not include credit card information or sensitive information in your e-mails to us.","privacy_policy_view_cross_border_transfers_header":"Cross Border Transfers","privacy_policy_view_cross_border_transfers_paragraph_one":"The Services are controlled and operated from the United States. Information from or about you or your use of our products or the Services may be stored and processed in any country where we have facilities or in which we engage service providers. Those countries may not have the same data protection laws as the country in which you initially provided that information. When we transfer information from or about you or your use of our products or the Services to other countries, we will protect it as described in this Privacy Policy. By using our products, the Services, or otherwise providing information to us, you consent to the transfer of information from or about you or your use of our products or the Services to countries outside of your country of residence, including the United States.","privacy_policy_view_cross_border_transfers_paragraph_two":"If you are located in the EEA or Switzerland, we comply with applicable legal requirements providing adequate protection for the transfer of personal information to countries outside of the EEA or Switzerland. Tesla has certified its adherence to the EU-U.S. Privacy Shield Framework as set forth by the Department of Commerce and the European Commission with respect to the processing of certain personal information transferred from the EEA to Tesla and its wholly-owned U.S. subsidiaries. Tesla\'s {privacyShield} is available here.","privacy_policy_view_devices":"From or about you or your devices","privacy_policy_view_energy_products":"From or about your Tesla energy products","privacy_policy_view_eu_policy_warning":"You must consent to the Privacy Policy to register your Powerwall and monitor it in the Tesla mobile app.","privacy_policy_view_eu_warranty_warning":"If you do not consent to the Tesla Customer Privacy Policy, we may be unable to honor the full ten year Warranty. Tesla will honor your Warranty for at least four years following the date your Powerwall was installed for the first time, subject to the exclusions and limitations set out in the Warranty {warrantyLink}.","privacy_policy_view_grid_services":"Your Powerwall can support the reliability of the electrical grid by providing services under optional programs offered by utilities or third parties. These services typically involve a partial discharge of your Powerwall at opportune times in exchange for some financial benefit to you, and require us to share your energy usage and Powerwall information with utilities or third parties. Before we enroll you into one of these programs, we will provide you program details and give you an opportunity to opt out. If you do not opt out at that time, you will be enrolled into the program.","privacy_policy_view_grid_services_title":"Grid Services","privacy_policy_view_grid_warning":"You do not have to consent. If you don’t consent, we may still give you the opportunity to enroll in these programs later.","privacy_policy_view_here":"here","privacy_policy_view_homeowner_na":"HOMEOWNER NOT AVAILABLE","privacy_policy_view_homeowner_required":"Must be completed by homeowner","privacy_policy_view_information_collection_devices_bullet_five":"Through your browser or device: Certain information is collected by most browsers or automatically through your device, such as your Media Access Control (MAC) address, computer type (Windows or Macintosh), screen resolution, operating system name and version, device manufacturer and model, language, Internet browser type and version, and the name and version of the Services (such as the Tesla App) you are using. We use this information to ensure that the Services function properly.","privacy_policy_view_information_collection_devices_bullet_four":"Offline: We may collect information from or about you offline, such as when you visit a Tesla store or repair facility, attend one of our events, sign up for a test drive, place an order over the phone, or contact our customer service or sales department.","privacy_policy_view_information_collection_devices_bullet_one":"Through the Services: We may collect information from or about you through our websites, software applications, social media pages, e-mail messages, or other digital services (the “Services”), e.g., when you sign up for a newsletter, make a purchase, or register your product with us.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla: Customers who purchase certain Tesla products will receive a My Tesla account, which is hosted on our website. We may collect and process the following types of data for your My Tesla account that you elect to provide to us: your customer registration information; the status of your order; warranty and other documentation for your Tesla products; and general information about your Tesla products (including, for example, vehicle identification number or other product serial number, service plan information, or connectivity package), insurance forms, driver’s licenses, financing agreements, and similar information. You can access your My Tesla account to update the information from or about you in that account at any time.","privacy_policy_view_information_collection_devices_bullet_two":"From other sources: We also may receive information about you from other sources, such as public databases, joint marketing partners, certified installers, third-party vehicle repair or service centers, and social media platforms.","privacy_policy_view_information_collection_energy_products_bullet_one":"We may collect information about your product, such as your installation date, number of products installed, and serial number(s).","privacy_policy_view_information_collection_energy_products_bullet_two":"In order to provide and improve our energy products and services, we may collect data regarding where your product is installed and how it is configured, data related to the product’s use and performance, data regarding your aggregate home energy consumption, and other data relevant to diagnose issues.","privacy_policy_view_information_collection_header":"Information We May Collect","privacy_policy_view_information_collection_paragraph_five":"If you no longer wish us to collect performance data or any other data from your Tesla energy product, please contact us as indicated in the “How to Contact Us” section below. Please note that if you opt out from the collection of performance data from your Tesla energy product, we will not be able to notify you of issues applicable to your energy product in real time, and this may result in your energy product suffering from reduced functionality, serious damage, or inoperability, and it may also disable many features of your energy product including periodic software and firmware updates.","privacy_policy_view_information_collection_paragraph_four":"We may collect a variety of information from or about your Tesla energy products from you, via a certified installer or from the installed products (directly or via paired equipment, such as an inverter), including:","privacy_policy_view_information_collection_paragraph_one":"We collect three main types of information related to you or your use of our products and services: (1) information from or about you or your devices; (2) information from or about your Tesla vehicle; and (3) information from or about your Tesla energy products. Depending on the Tesla products and services you request, own, or use, not all of these types of information may be applicable to you.","privacy_policy_view_information_collection_paragraph_three":"When you visit our website or otherwise use our Services, we may use cookies, pixel tags, analytics tools, and other similar technologies to help provide and improve our Services, and as detailed below:","privacy_policy_view_information_collection_paragraph_two":"We may collect information from or about you (such as your name, address, phone number, e-mail, payment information, etc.) or your devices in a variety of ways, including:","privacy_policy_view_information_collection_services_bullet_five":"You can learn about Google’s practices in connection with this information collection and how to opt out of it by downloading the Google Analytics opt-out browser add-on, available at {website}.","privacy_policy_view_information_collection_services_bullet_four":"Analytics tools: We use website and application analytics services provided by third parties that use cookies and other similar technologies to collect information about website or application use and to report trends, without identifying individual visitors. The third parties that provide us with these services may also collect information about your use of third-party websites.","privacy_policy_view_information_collection_services_bullet_one":"Cookies: Cookies are pieces of information stored directly on the computer that you are using. Cookies allow us to collect information such as browser type, time spent on the Services, pages visited, language preferences, and other web traffic data. Our service providers and we use the information for security purposes, to facilitate online navigation, to display information more effectively, to personalize your experience while using the Services, and to otherwise analyze user activity. We can recognize your computer to assist your use of the Services. We also gather statistical information about the usage of the Services in order to continually improve their design and functionality, understand how the Services are used, and assist us with resolving questions regarding the Services. Cookies further allow us to select which of our advertisements or offers are most likely to appeal to you and to display them to you. We may also use cookies in online advertising to see how you interact with our advertisements, and we may use cookies or other files to understand your use of other websites.","privacy_policy_view_information_collection_services_bullet_three":"Pixel tags and other similar technologies: Pixel tags (also known as web beacons and clear GIFs) may be used in connection with some Services to, among other things, track the actions of users of the Services (including e-mail recipients), measure the success of our marketing campaigns, and compile statistics about usage of the Services and response rates.","privacy_policy_view_information_collection_services_bullet_two":"If you do not want information collected through the use of cookies when using your My Tesla account or our website, there is a simple procedure in most browsers that allows you to automatically decline cookies or gives you the choice of declining or accepting the transfer to your computer of a particular cookie (or cookies) from a particular site. You may also wish to refer to {website}. However, if you do not accept these cookies, you may experience some inconvenience in your use of the Services. For example, we may not be able to recognize your computer, and you may need to log in every time you visit the applicable Services.","privacy_policy_view_information_rights_choices_agree_eu":"You must consent to the Privacy Policy to register your Powerwall and monitor it in the Tesla mobile app.","privacy_policy_view_information_rights_choices_agree_one":"You must consent to the Privacy Policy to register your Powerwall and monitor it in the Tesla mobile app. No further action is needed if you don\'t want to access your Powerwall information via the Tesla mobile app.","privacy_policy_view_information_rights_choices_bullet_one":"You can access your My Tesla account to update the information from or about you in that account at any time.","privacy_policy_view_information_rights_choices_bullet_two":"If you would like to review, correct, update, suppress, or delete information from or about you that has been previously provided to us by you, you may contact us at the address below.","privacy_policy_view_information_rights_choices_header":"Rights and Choices","privacy_policy_view_information_rights_choices_paragraph_four":"Please note that we may need to retain certain information for recordkeeping or legal compliance purposes and/or to complete any transactions that you began prior to requesting such change or deletion (e.g., when you make a purchase or enter a promotion, you may not be able to change or delete the information provided until after the completion of such purchase or promotion). There may also be residual information that will remain within our databases and other records, which will not be removed.","privacy_policy_view_information_rights_choices_paragraph_one":"As detailed in the sections above, we give you many choices regarding our collection, use, and sharing of information from or about you or your use of our products or the Services. Subject to applicable law, in certain jurisdictions you may also have the rights to request access to and receive information about certain information we maintain about you, update and correct inaccuracies in that information, and have the information blocked or deleted, as appropriate. These rights may be limited in some circumstances by local law. We give you several methods to access, correct, update, or request blocking or deletion of information from or about you including:","privacy_policy_view_information_rights_choices_paragraph_three":"We will comply with your request(s) to exercise these rights and choices as soon as reasonably practicable.","privacy_policy_view_information_rights_choices_paragraph_two":"In your request, please make clear what information you would like to have changed, whether you would like to have the information that you have provided to us suppressed from our database, or otherwise let us know what limitations you would like to put on our use of the information that you have provided to us. For your protection, we may only implement requests with respect to the information associated with the particular e-mail address that you use to send us your request, and we may need to verify your identity before implementing your request.","privacy_policy_view_information_share_header":"How We May Share Information We Collect","privacy_policy_view_information_share_paragraph_eight":"In other circumstances","privacy_policy_view_information_share_paragraph_eleven":"If you wish to opt out of any processing of information for which you have provided your prior explicit opt-in consent, you may do so by contacting us as indicated in the “How to Contact Us” section below.","privacy_policy_view_information_share_paragraph_five":"We may share information with other third parties you authorize, such as in the following circumstances:","privacy_policy_view_information_share_paragraph_five_point_four":"With your social media account provider, if you connect your Services account and your social media account. If you do so, you authorize us to share information with your social media account provider and you understand that the use of the information we share will be governed by the social media account provider’s privacy policy.","privacy_policy_view_information_share_paragraph_five_point_one":"With our certified installers to facilitate the provision of energy products to you that you have requested.","privacy_policy_view_information_share_paragraph_five_point_three":"With third-party sponsors of contests and similar promotions, if you elect to participate.","privacy_policy_view_information_share_paragraph_five_point_two":"With third party service centers or providers, if you choose to utilize them. Note that some information about you is stored on certain Tesla products and may be accessible directly to the third party service centers or providers that you choose to utilize to diagnose or service your Tesla product.","privacy_policy_view_information_share_paragraph_four":"With other third parties you authorize","privacy_policy_view_information_share_paragraph_nine":"We may share information in other circumstances, such as:","privacy_policy_view_information_share_paragraph_nine_point_one":"With your employer or other fleet operator or the owner of the Tesla product, if you do not directly own it and as authorized under applicable law.","privacy_policy_view_information_share_paragraph_nine_point_two":"With a third party in connection with any reorganization, merger, sale, joint venture, assignment, transfer, or other disposition of all or any portion of our business, assets, or stock (including in connection with any bankruptcy or similar proceedings).","privacy_policy_view_information_share_paragraph_one":"We may share information we collect with our service providers and business partners, with other third parties you authorize, with other third parties when required by law, and in other circumstances. Examples of how we share information with these parties and under these circumstances are provided below.","privacy_policy_view_information_share_paragraph_seven":"Tesla may transfer and disclose information, including information that may or may not personally identify you, to third parties to comply with a legal obligation (including, but not limited to, subpoenas); when we believe in good faith that the law requires it; in response to a lawful request by governmental authorities conducting an investigation, including to comply with law enforcement requirements; to verify or enforce our policies and procedures; to respond to an emergency; to prevent or stop activity we may consider to be, or to pose a risk of being, illegal, unethical or legally actionable; or to protect the rights, property, safety, or security of the Services, Tesla, third parties, visitors to our Services, or the public, as determined by us in our sole discretion.","privacy_policy_view_information_share_paragraph_six":"With other third parties when required by law","privacy_policy_view_information_share_paragraph_ten":"We do not share information that personally identifies you with unaffiliated third parties for their marketing purposes unless you opt in to that sharing.","privacy_policy_view_information_share_paragraph_three":"We may share information with our service providers and business partners when necessary to perform services on our or on your behalf, such as in the following circumstances:","privacy_policy_view_information_share_paragraph_three_point_one":"With Tesla affiliates for the purposes described in this Privacy Policy. Tesla affiliates are companies that are owned or controlled by Tesla, Inc. and companies in which Tesla, Inc. has a substantial ownership interest.","privacy_policy_view_information_share_paragraph_three_point_three":"With other third party business partners to the extent that they are involved in your purchase or the service of your Tesla products. We share limited information from or about you to allow you to take advantage of those services if you elect to utilize them, with such partners as finance, leasing, registration, and title companies.","privacy_policy_view_information_share_paragraph_three_point_two":"With our third party service providers and channel partners to provide services such as website hosting, data analysis and storage, payment processing, order fulfillment and product installation, wireless connectivity to Tesla products, information technology and related infrastructure, customer service, product maintenance or related services, e-mail delivery, credit card processing, auditing, marketing, voice command processing, and other similar services.","privacy_policy_view_information_share_paragraph_two":"With our service providers and business partners","privacy_policy_view_information_use_commuicate":"To communicate with you","privacy_policy_view_information_use_header":"How We May Use Information We Collect","privacy_policy_view_information_use_other_purposes":"For other purposes","privacy_policy_view_information_use_paragraph_five":"We also may use information we collect for other purposes, such as:","privacy_policy_view_information_use_paragraph_five_point_one":"For our business purposes, such as: data analysis; audits; fraud monitoring and prevention; identifying usage trends; determining the effectiveness of our promotional campaigns; and operating and expanding our business activities.","privacy_policy_view_information_use_paragraph_five_point_two":"Except as described above and below, Tesla may use or share information that does not personally identify you for any purpose, such as for operational or research purposes, for industry analysis, to improve or modify our products and services, to better tailor our products and services to your needs, and where legally required.","privacy_policy_view_information_use_paragraph_four":"We may use information we collect to provide and improve our products and services, such as:","privacy_policy_view_information_use_paragraph_four_point_five":"To analyze and improve the safety and security of our products and services.","privacy_policy_view_information_use_paragraph_four_point_four":"To develop and promote new products and services, and to improve or modify our existing products and services.","privacy_policy_view_information_use_paragraph_four_point_one":"To complete and fulfill your purchase, e.g., to process your payments, have your order delivered to you, communicate with you regarding your purchase, and provide you with related customer service.","privacy_policy_view_information_use_paragraph_four_point_six":"To deliver any other services you have requested.","privacy_policy_view_information_use_paragraph_four_point_three":"To monitor your Tesla product’s performance and provide services related to your product.","privacy_policy_view_information_use_paragraph_four_point_two":"To provide service to your Tesla product, such as to contact you with service recommendations and to deliver over-the-air updates to your product.","privacy_policy_view_information_use_paragraph_one":"We may use information we collect to communicate with you, to provide and improve our products and services, and for other purposes. Examples of how we use information for these purposes are provided below.","privacy_policy_view_information_use_paragraph_three":"Your communication choices:","privacy_policy_view_information_use_paragraph_three_point_one":"Receiving electronic communications from us or our affiliates: If you no longer want to receive marketing-related e-mails from us or our affiliates, you may opt out of receiving them by following the opt-out instructions in any e-mail received from us or by contacting us at the address below. Please note that we may still send you important administrative and safety messages even if you opt out of receiving marketing e-mails.","privacy_policy_view_information_use_paragraph_three_point_two":"Receiving marketing-related calls from us: If you receive a marketing-related call from us and do not want to receive similar calls in the future, simply ask to be placed on our “do not call” list. Please note that we may still call you regarding administrative, safety, or product service issues even if you opt out of receiving marketing calls.","privacy_policy_view_information_use_paragraph_two":"We may use information we collect to communicate with you, such as:","privacy_policy_view_information_use_paragraph_two_point_five":"To present products and offers tailored to you and to enhance our lists with information from other sources.","privacy_policy_view_information_use_paragraph_two_point_four":"To send administrative information to you, for example, information regarding the Services and changes to our terms, conditions, and policies.","privacy_policy_view_information_use_paragraph_two_point_one":"To respond to your inquiries and fulfill your requests, such as to send you newsletters or product information, information alerts, or brochures.","privacy_policy_view_information_use_paragraph_two_point_seven":"To facilitate social sharing and communications functionality.","privacy_policy_view_information_use_paragraph_two_point_six":"To allow you to participate in contests and similar promotions and to administer these activities.","privacy_policy_view_information_use_paragraph_two_point_three":"To advise you of important safety-related information or to notify first responders in the event of an accident involving your vehicle.","privacy_policy_view_information_use_paragraph_two_point_two":"To set up, evaluate, and provide feedback regarding your Tesla test drive.","privacy_policy_view_information_use_provide":"To provide and improve our products and services","privacy_policy_view_links_header":"Links","privacy_policy_view_links_paragraph_one":"This Privacy Policy does not address, and we are not responsible for, the privacy, information, or other practices of any third parties, including any third party operating any site or service to which the Services link. The inclusion of a link on the Services does not imply endorsement of the linked site or service by us or by our affiliates, nor does it imply an affiliation with the third party.","privacy_policy_view_links_paragraph_two":"Please note that we are not responsible for the collection, use, or disclosure policies and practices (including the data security practices) of other organizations, such as any other app developer, app provider, social media platform provider, operating system provider, or wireless service provider, including any information you disclose to other organizations through or in connection with our software applications or social media pages.","privacy_policy_view_minors_header":"Minors","privacy_policy_view_minors_paragraph":"The Services are not directed to individuals under the age of sixteen (16), and we request that these individuals not provide any information to Tesla.","privacy_policy_view_offers_eu":"Yes, I’d like to receive marketing communications by e-mail, including surveys, promotions, offers, from Tesla and its affiliates about Tesla’s products and services. You have the right to withdraw your consent at any time. More information {legalLink}.","privacy_policy_view_offers_title":"Product Announcements and New Offers","privacy_policy_view_offers_usa":"I agree to be contacted at the number provided with more information or offers about Tesla products. I understand these calls or texts may use computer-assisted dialing or pre-recorded messages. This consent is not a condition of purchase.","privacy_policy_view_powerwall_warranty":"Tesla Powerwall Limited Warranty","privacy_policy_view_privacy_policy":"Privacy Notice","privacy_policy_view_privacy_policy_agreement_eu":"I, the homeowner, have read the Tesla Customer Privacy Policy in full and consent to the processing of my Personal Information by Tesla as described in the Tesla Customer Privacy Policy. You have the right to withdraw your consent at any time, as described in the Tesla Customer Privacy Policy.","privacy_policy_view_privacy_policy_agreement_usa_australia":"I, the homeowner, have read the Tesla Customer Privacy Policy in full and consent to the processing of my Personal Information by Tesla as described in the Tesla Customer Privacy Policy.","privacy_policy_view_privacy_shield":"Privacy Shield Policy","privacy_policy_view_retention_period_header":"Retention Period","privacy_policy_view_retention_period_paragraph":"We will retain information we collect from or about our customers, our products, and the Services for the period necessary to fulfill the purposes outlined in this Privacy Policy unless a longer retention period is required or permitted by law.","privacy_policy_view_security_header":"Security","privacy_policy_view_security_paragraph_one":"We seek to use reasonable organizational, technical, and administrative measures to protect information within our organization. Unfortunately, no data transmission or storage system can be guaranteed to be 100% secure. If you have reason to believe that your interaction with us is no longer secure (for example, if you feel that the security of any account with us has been compromised), please immediately notify us of the problem by contacting us in accordance with the “How to Contact Us” section below.","privacy_policy_view_security_paragraph_two":"If you sell or transfer your Tesla product to another person, please notify us so that we can determine whether additional steps are required to help safeguard information from or about you from disclosure to the purchaser or transferee of the Tesla product.","privacy_policy_view_title":"View Full Privacy Policy","privacy_policy_view_updates_header":"Updates to this Policy","privacy_policy_view_updates_paragraph":"We may change this Privacy Policy. Please take a look at the “Last Updated” legend at the bottom of this page to see when this Privacy Policy was last revised. Any changes to this Privacy Policy will become effective when we post the revised Privacy Policy on the Services. By using our products, the Services, or otherwise providing information to us following these changes, you accept the revised Privacy Policy.","privacy_policy_view_us_warranty_warning":"You must consent to the Tesla Limited Warranty to register your Powerwall and monitor it in the Tesla mobile app.","privacy_policy_view_warranty_information":"I, the homeowner, accept the terms of the Tesla Powerwall Limited Warranty, available {warrantyLink}. Those terms include an arbitration provision that waives my right to bring or participate in class actions and jury trials. I can opt out of this provision within 30 days by following the process described in the provision.","prompt_factory_reset_confirmation":"Confirm you really wish to reset the unit to factory settings?","pvac-state-active":"Active","pvac-state-faulted":"Faulted","pvac-state-init":"Initializing...","pvac-state-standby":"Wait for Solar","pvac_alert_ac_fault":"Inverter AC Fault","pvac_alert_check_ac_note":"Check AC wiring and grid connection. Reboot inverter and retry operation.","pvac_alert_check_dc_string1_note":"Check String 1 DC wiring and panels. Reboot inverter and retry operation.","pvac_alert_check_dc_string2_note":"Check String 2 DC wiring and panels. Reboot inverter and retry operation.","pvac_alert_check_dc_string3_note":"Check String 3 DC wiring and panels. Reboot inverter and retry operation.","pvac_alert_check_dc_string4_note":"Check String 4 DC wiring and panels. Reboot inverter and retry operation.","pvac_alert_confirm_grid_code_note":"Check AC wiring and grid connection. Confirm selected grid code.","pvac_alert_dc_fault_string1":"Inverter DC Fault - String 1","pvac_alert_dc_fault_string2":"Inverter DC Fault - String 2","pvac_alert_dc_fault_string3":"Inverter DC Fault - String 3","pvac_alert_dc_fault_string4":"Inverter DC Fault - String 4","pvac_alert_freq_change":"Grid Uncompliant - Frequency Change","pvac_alert_internal_comms":"Internal Communication Issue","pvac_alert_over_freq":"Grid Uncompliant - Over Frequency","pvac_alert_over_temp":"Inverter Over Temperature","pvac_alert_over_voltage":"Grid Uncompliant - Over Voltage","pvac_alert_production_limited_note":"Production may be limited. Ensure proper wire terminations, sufficient airflow, and installation environment.","pvac_alert_reboot_note":"Reboot inverter, ensure system is up to date and fully commissioned.","pvac_alert_under_freq":"Grid Uncompliant - Under Frequency","pvac_alert_under_voltage":"Grid Uncompliant - Under Voltage","pvi-power-status-dc-only":"DC Only","pvi-power-status-disabled":"Disabled","pvi-power-status-enabled":"Enabled","pvi-reset-button-label":"Restart Inverter and Clear Alerts","pvs-self-test-1":"Self-test (1/6): Ground Fault","pvs-self-test-2":"Self-test (2/6): Arc Fault","pvs-self-test-3":"Self-test (3/6): MCI","pvs-self-test-4":"Self-test (4/6): Isolation","pvs-self-test-5":"Self-test (5/6): Relay Weld","pvs-self-test-6":"Self-test (6/6): Impedance","pvs_alert_check_arc_fault_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Arc fault issues.","pvs_alert_check_dc_note":"Check DC wiring, connections, panels, and rapid shutdown devices for ground fault issues.","pvs_alert_check_dc_string1_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 1.","pvs_alert_check_dc_string2_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 2.","pvs_alert_check_dc_string3_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 3.","pvs_alert_check_dc_string4_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 4.","pvs_alert_check_dc_strings_note":"Check DC wiring, connections, panels, and string configurations.","pvs_alert_dc_arc_fault_detected":"DC Arc Fault - Detected","pvs_alert_dc_arc_fault_lockout":"DC Arc Fault - Lockout","pvs_alert_dc_ground_fault":"DC Ground Fault","pvs_alert_dc_isolation_string1":"DC Isolation Issue - String 1","pvs_alert_dc_isolation_string2":"DC Isolation Issue - String 2","pvs_alert_dc_isolation_string3":"DC Isolation Issue - String 3","pvs_alert_dc_isolation_string4":"DC Isolation Issue - String 4","pvs_alert_dc_over_voltage":"DC Over Voltage","pvs_alert_rapid_shutdown":"Rapid Shutdown Initiated","pvs_alert_rapid_shutdown_note":"Check AC breaker and low-voltage rapid shutdown circuit.","registration_container_continue_header":"Customer email entered: {email}","registration_container_continue_modal_description":"The customer will be unable to access the Tesla Mobile App if the email is incorrect. Confirm customer email is valid.","registration_container_customer_email_required":"Customer email is necessary to enable the Tesla Mobile App.","registration_container_customer_information_title":"Site Information","registration_container_fill_required_fields":"Installer or customer must fill in all required fields.","registration_container_loading_modal_registering":"Registering","registration_container_reset_form_modal_description":"Please confirm that you would like to proceed with resetting the form.","registration_container_reset_form_modal_header":"Any information previously entered will be lost.","security_container_settings_title_customer":"Change or Reset Password (Customer)","security_container_settings_title_installer":"Change or Reset Password (Installer)","security_view_copied_to_clipboard":"Copied!","security_view_not_wifi_qr_code_error":"Not a WiFi QR code.","security_view_scan_qr_code_not_found_error":"No QR Code found.","security_view_settings_change_password_error":"New passwords do not match","security_view_settings_change_password_label":"CHANGE PASSWORD","security_view_settings_completed":"COMPLETE","security_view_settings_new_password_label":"NEW PASSWORD","security_view_settings_old_password":"CURRENT PASSWORD","security_view_settings_password_change_info":"To change the password, enter the current password and a new password.","security_view_settings_password_customer":"PASSWORD","security_view_settings_password_customer_placeholder":"Last 5 characters of the Gateway sticker password","security_view_settings_password_installer_label":"Gateway password","security_view_settings_password_reset_info":"To reset the password, toggle the switch on a Powerwall, then enter the 5 last characters of the Gateway sticker password.","security_view_settings_password_reset_info_serial":"To reset the password, toggle the switch on a Powerwall, then enter the 5 last characters of the Gateway serial number.","security_view_settings_password_reset_installer_info":"To reset the password, toggle the switch on a Powerwall, then enter the Gateway sticker password.","security_view_settings_password_reset_installer_info_serial":"To reset the password, toggle the switch on a Powerwall, then enter the Gateway serial number.","security_view_settings_re_enter_password_label":"RE-ENTER NEW PASSWORD","security_view_settings_reset_password_label":"RESET PASSWORD","security_view_settings_serial_customer":"SERIAL NUMBER","security_view_settings_serial_customer_placeholder":"Last 5 characters of the Gateway serial number","security_view_settings_serial_installer_label":"Gateway serial number","security_view_settings_success":"Password successfully updated","security_view_settings_success_new_password":"The new password is:","security_view_settings_toggled_password":"Forgot Password?","self_test_result_viewer_resi_only":"Self Test Log Viewer is not available.","self_test_results_viewer_collapse_all":"Collapse All","self_test_results_viewer_column_name":"Name","self_test_results_viewer_column_result":"Result","self_test_results_viewer_column_spec":"Specification","self_test_results_viewer_column_test_time":"Test Time","self_test_results_viewer_column_value":"Value","self_test_results_viewer_expand_all":"Expand All","self_test_results_viewer_failed":"Failed","self_test_results_viewer_in_progress":"In Progress","self_test_results_viewer_inconclusive":"Inconclusive","self_test_results_viewer_not_started":"Not Started","self_test_results_viewer_passed":"Passed","self_test_results_viewer_skipped":"Skipped","self_test_results_viewer_warning":"Warning","settings_container_confirm_reset_operation_mode":"Confirm mode change to {operation}","settings_container_heco_modal_description":"This setting can not be changed after selection. Confirm that the customer is currently enrolled in the HECO Battery Bonus Program before submitting your selection.","settings_container_heco_modal_title":"Confirm Enrollment","settings_container_heco_view_description":"Powerwall will discharge, at the comitted capacity daily, to meet the program requirements. This setting can not be changed after activation.","settings_container_heco_view_scheduled_dispatch_start_time":"Start Time","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"HECO Scheduled Dispatch","settings_container_heco_view_title":"HECO Battery Bonus Program","settings_container_operation_modes_modal_content":"Use the Tesla Mobile App \'Customize\' screen to change operation modes.","settings_container_operation_modes_modal_reset":"RESET MODE","settings_container_operation_modes_modal_title":"Operation Mode","settings_container_operation_modes_modal_warning":"This is a one way change. Advanced modes can only be re-enabled via the Tesla Mobile App.","settings_container_operation_modes_reset_modal_title":"Reset Operation Mode?","settings_container_operation_settings_subtitle":"Set the name of your system, operation mode, and export limitations, if any.","settings_container_operation_settings_title":"Operation Settings","settings_container_save_instructions":"Click CONTINUE to save.","settings_container_saving_site_info_modal":"Saving Site Settings","settings_container_site_import_description":"Site Import Limit is an optional setting. Leave this field empty to disable import limiting. When enabled this setting specifies the maximum power allowed to be imported from the grid to the site.","settings_container_site_limits_header":"Site Limits","settings_view_custom_modes_label":"PRECONFIGURED MODE","settings_view_energy_reserve_heco_label":"Changes to backup reserve are restricted due to enrollment in the HECO Battery Bonus program. The customer will be able to set backup reserve in their app.","settings_view_energy_reserve_label":"BACKUP RESERVE","settings_view_instruction_site_name":"Enter a site name","settings_view_net_meter_mode":"Export Mode","settings_view_operation_label":"OPERATION MODE","settings_view_operation_set_label":"OPERATION MODE TO SET","settings_view_set_net_meter_mode_never_label":"Permanent Non Export","settings_view_set_net_meter_mode_solar_label":"Solar Export","settings_view_site_name":"SITE NAME","settings_view_site_name_placeholder":"Ex. My Home","settings_view_solar_export_limitation_slider":"Solar export limitation","settings_view_solar_feature":"This feature should only be activated when interconnection requires the solar system to not export energy to the grid. Typical in Hawaii (CSS) and Australia regions.","settings_view_solar_limitation":"POWERWALL INSTALLED ALONGSIDE A SOLAR SYSTEM THAT IS NOT A POWERWALL+?","site_info_container_submit":"SUBMIT","soft-blocker-continue-button":"CONTINUE","solar_item_view_baudrate_label":"Baud rate","solar_item_view_brand_input_label":"BRAND","solar_item_view_brand_label":"Brand","solar_item_view_check_inverter":"CHECK INVERTER {id} CONNECTION","solar_item_view_connection_warning":"Could not establish connection","solar_item_view_inverter_brand":"Inverter Brand","solar_item_view_inverter_communication":"Configure direct inverter communication","solar_item_view_inverter_model_label":"Inverter Model","solar_item_view_ip_label":"IP ADDRESS","solar_item_view_model_label":"MODEL","solar_item_view_power_rating_explanation":"This is the total power rating of the photovoltaic system with respect to the modules/panels. This is the nominal power of the array. For example if you have 10x 300W solar panels, list 3000W, even if the PV inverter is 2500W or 3500W.","solar_item_view_pv_array_dc_power_rating":"PV Array DC Power Rating","solar_item_view_pv_array_dc_power_rating_label":"PV ARRAY DC POWER RATING","solar_item_view_revenue_grade":"Revenue Grade","solar_item_view_revenue_grade_explanation":"Check this only if the inverter has an integrated revenue grade meter. Inverter data will be read from the meter instead of the inverter if this option is enabled.","solar_item_view_revenue_grade_title":"Revenue Grade","solar_item_view_solar":"SOLAR {id}","solar_item_view_success":"SUCCESSFULLY CONNECTED!","solar_item_view_unable":"UNABLE TO READ INVERTER!","solar_list_view_continue_add_solar":"ADD SOLAR","solar_view_continue_add_solar":"ADD SOLAR","status_update_urgency_none":"Up To Date","status_update_urgency_optional":"Update Optional","status_update_urgency_required":"Update Required","status_update_urgency_unknown":"Unknown","success_view_awesome":"AWESOME!","success_view_copied_to_clipboard":"Copied!","success_view_installation_complete":"Installation complete","success_view_new_password_error_title":"Wizard Password","success_view_new_password_title":"New Wizard Password","success_view_password_set":"Password is already set","success_view_record_password":"Please record this password before continuing","success_view_retry_registration":"RETRY REGISTRATION","success_view_set_customer_password":"SET CUSTOMER PASSWORD","success_view_syncing_configuration":"Syncing configuration","summary_container_company":"Company","summary_container_connection_type":"Connection Type","summary_container_email":"Email","summary_container_installer_information":"Installer Information","summary_container_ip_address":"IP Address","summary_container_location":"Location","summary_container_meter":"Meter #{index}","summary_container_meter_information":"Meter Information","summary_container_phone":"Phone Number","summary_container_print":"Print","summary_container_serial_number":"Serial Number","summary_container_site_info":"Site Information","summary_container_site_name":"Site Name","summary_container_subtitle":"Product and Installation Information","summary_site_information":"SITE INFORMATION","summary_view_autonomous":"Time-based control","summary_view_backup":"Backup-only","summary_view_backup_capable":"Backup Capable","summary_view_backup_reserve":"BACKUP RESERVE","summary_view_backup_switch":"BACKUP SWITCH","summary_view_conductor_export":"CONDUCTOR EXPORT LIMIT","summary_view_conductor_import":"CONDUCTOR IMPORT LIMIT","summary_view_control":"Site Control","summary_view_customer_version":"CUSTOMER VERSION","summary_view_direct":"Direct","summary_view_disabled":"DISABLED","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"PV EXPORT LIMIT","summary_view_extra_programs":"EXTRA PROGRAMS","summary_view_followers":"FOLLOWERS","summary_view_gateway":"GATEWAY","summary_view_grid_code":"GRID CODE","summary_view_gsm":"CELLULAR","summary_view_heco_battery_bonus":"HECO Battery Bonus","summary_view_ip_address":"IP ADDRESS","summary_view_leader":"LEADER","summary_view_mode":"MODE","summary_view_msg_cannot_read_solar_assembly":"Stop system first to see part number and serial of Powerwall+ solar assembly.","summary_view_network":"NETWORK","summary_view_non_backup":"Non-Backup","summary_view_panel_limit":"PANEL MAXIMUM CURRENT","summary_view_partnum":"Part {partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Aggregation","summary_view_self_consumption":"Self Consumption","summary_view_serialnum":"Serial {serialNumber}","summary_view_site_export":"SITE EXPORT LIMIT","summary_view_site_import":"SITE IMPORT LIMIT","summary_view_site_name":"SITE NAME","summary_view_solar_assembly":"SOLAR ASSEMBLY","summary_view_sync":"BACKUP CAPABILITY","summary_view_time":"SUMMARY COMPILATION TIME","summary_view_time_zone":"TIME ZONE","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"WiFi-paired device is not currently responding","system-device-unknown-sitecontroller":"Device has not yet discovered its children","system_acpw_vitals_charge":"Charge Level: {charge}%","system_acpw_vitals_power":"AC Power: {power}","system_acpw_vitals_power_charging":"AC Power: {power} Charging","system_acpw_vitals_power_discharging":"AC Power: {power} Discharging","system_acpw_vitals_state":"Powerwall State: {state}","system_acpw_vitals_voltage":"AC Voltage: {voltage}","system_controller_din":"Controller: {din}","system_device_alert_disabled":"Device disabled","system_device_gateway_not_islanding":"This is not the islanding controller.","system_device_name_backup_switch":"Backup Switch ({sn})","system_device_name_battery_assembly":"Battery Assembly ({sn})","system_device_name_gateway":"Gateway ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus_leader":"Leader Powerwall+","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+ (wired)","system_device_name_powerwall_plus_wireless":"Powerwall+ (wireless)","system_device_name_remote_meter":"Remote Meter ({sn})","system_device_name_solar_assembly_1":"Solar Assembly","system_device_name_sync":"Gateway Contactor / Meter Controller ({sn})","system_firmware_update":"Updating: {percent}% ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"Backup state: {backupState}","system_islanding_vitals_grid_line":"Grid Line {lineNumber}: {v} {f}","system_islanding_vitals_island_line":"Island Line {lineNumber}: {v} {f}","system_overview_connected":"Connected To Tesla","system_overview_disconnected":"Not Connected To Tesla","system_overview_follower":"Follower Powerwall","system_overview_login_required":"Login Required To View System Operation","system_overview_scanning":"Scanning for devices...","system_overview_site_controller":"Site Controller","system_overview_updating":"Updating devices...","system_pvi_vitals_ac_solar_power_only":"AC Solar Power: {power}","system_pvi_vitals_lifetime_energy_kwh":"Lifetime Energy: {energy}","system_pvi_vitals_state":"State: {message}","system_pvi_vitals_string":"String {number}: {voltage} / {current}","system_pvi_vitals_string_not_connected":"String {number}: Not connected","system_remote_meter_ct_line":"CT {n} ({location}): {value}","system_remote_meter_no_cts":"No CTs configured","system_rescan_button_text":"Rescan Devices","system_scanning_label_text":"Scanning for Devices...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Test that the system is working as expected.","test_container_system_test_title":"System Test","test_inverter_container_error_grid_uncompliant":"The test cannot be run because the grid is noncompliant.","test_inverter_container_error_not_idle":"The Powerwall must be in standby to perform the test.","test_inverter_container_results_error_plural_subtitle":"{num} Tests Failed","test_inverter_container_results_error_singular_subtitle":"{num} Test Failed","test_inverter_container_results_success_plural_subtitle":"{num} Tests Passed","test_inverter_container_results_success_singular_subtitle":"{num} Test Passed","test_inverter_container_results_success_subtitle":"All Tests Passed","test_inverter_container_results_title":"Inverter Self Test Results","test_inverter_container_title":"Inverter Self Test","test_meter_composite_view_configure_meters":"CONFIGURE METERS","test_meter_composite_view_current_transformer_setup_instructions":"Use at least one Site CT OR Load CT, but not both.","test_meter_composite_view_external_meter_setup_instructions":"At least one current transformer must be set for each external meter.","test_meter_composite_view_external_meters_title":"External Meters","test_meter_composite_view_internal_meters_gateway_title":"Internal Meters (Gateway)","test_meter_composite_view_no_configured_meters":"NO CONFIGURED METERS. PLEASE {configure} TO CONTINUE.","test_meter_composite_view_note":"NOTE","test_meter_item_view_acuvim_label":"Meter {id}: Acuvim Meter","test_meter_item_view_backup_switch_label":"Meter {id}: Backup Switch Meter","test_meter_item_view_configure_phases_note":"Configure phases in order to enable CTs for this meter","test_meter_item_view_internal_meter_x_gateway_label":"Meter {id}: Internal Primary Meter X (Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"Meter {id}: Internal Auxiliary Meter Y (Gateway)","test_meter_item_view_remote_w1_wifi_label":"Meter {id}: Remote Wi-Fi","test_meter_item_view_remote_w1_wired_label":"Meter {id}: Remote Wired","test_meter_item_view_remote_w2_wifi_label":"Meter {id}: Remote Wi-Fi","test_meter_item_view_remote_w2_wired_label":"Meter {id}: Remote Wired","test_meter_item_view_reset":"RESET ALL","test_meter_item_view_toggle_advanced":"Advanced","test_meter_item_view_toggle_power":"Power","test_view_canceled_status":"Test Has Been Canceled","test_view_failed_status":"Test Has Failed","test_view_idle_status":"Beginning System Testing","test_view_init_status":"Preparing To Start Test","test_view_inverter_test_warning_message":"If you have a 0 Export PV inverter, the self test procedure of the Gateway is unable to adequately qualify the system. Turn off the PV inverter until after the self test is complete.","test_view_passed_status":"Test Has Passed","test_view_prep_status":"Initializing Controls: May take a few minutes!","test_view_running_status":"Running Charge Tests","test_view_skip_start_system_test_text":"Confirm to skip the system test","test_view_start_system_test_warning":"WARNING","test_view_system_test_completed_message":"System Test Completed!","time_minute":"minute","time_minutes":"minutes","time_second":"second","time_seconds":"seconds","time_started_at":"Started at: {time}","timezone_container_subtitle":"Based on location and IP address, we can help you find the time zone for your installation.","timezone_container_title":"Time Zone","timezone_view_label":"time zone","toast_view_standard_title":"Note","toast_view_warning_title":"Warning","update_container_industrial_updating_description":"The Site Controller will now automatically restart in order to install the update. {lb1}{lb2} Please wait for 2 minutes, reconnect to the Site Controller network, and then {refresh}","update_container_preparing_title":"Preparing for Latest Update","update_container_refresh_browser":"Refresh your Browser","update_container_residential_updating_description":"The Gateway will now automatically restart in order to install the update. {lb1}{lb2} Please wait for 2 minutes, reconnect to the Gateway network, and then {refresh}","update_container_skip_title":"Skip Update?","update_container_subtitle":"Check for Updates. Note: Pushing Firmware Update to the Powerwalls occurs on the Powerwall page.","update_container_subtitle_industrial":"Check for Updates. Note: Pushing Firmware Update to Batteries occurs on the Battery Page.","update_container_title":"Update","update_container_updating_title":"Installing Update","update_step_item_view_resolution_title":"Suggested Fix","update_view_check_again":"CLICK TO CHECK AGAIN","update_view_check_for_update":"CHECK FOR GATEWAY UPDATE","update_view_check_for_update_industrial":"CHECK FOR SITE CONTROLLER UPDATE","update_view_checking_update":"Checking for update","update_view_current_version":"Current Version: {version}","update_view_downloading":"DOWNLOADING","update_view_downloading_update":"Downloading update","update_view_no_power_cicle":"DO NOT POWER CYCLE!","update_view_percent_complete":"{percent} complete","update_view_progress":"UPDATE PROGRESS","update_view_staged":"NEW VERSION STAGED","update_view_staged_update":"Ready to install update","update_view_staging":"STAGING","update_view_staging_update":"Staging update","update_view_time_remaining":"remaining","update_view_up_to_date":"VERSION UP-TO-DATE","update_view_update_now":"UPDATE NOW","update_view_update_urgency_label":"Update Status: {status}","update_view_updated_industrial":"Site Controller Software is up-to-date.","update_view_updated_residential":"Gateway Software is up-to-date.","update_view_wait_minutes":"PLEASE WAIT A FEW MINUTES","upgrade_page_banner_prompt":"Tesla Pros is a better commissioning experience","upgrade_page_improvements_title":"Improvements include:","upgrade_page_instructions_step_1_description":"Disconnect from the TEG Wi-Fi network","upgrade_page_instructions_step_1_label":"Step 1:","upgrade_page_instructions_step_2_description":"Tap the button below to download Tesla Pros","upgrade_page_instructions_step_2_external_link":"Or visit: {externalLink}","upgrade_page_instructions_step_2_label":"Step 2:","upgrade_page_instructions_step_2_wifi_disconnect_symbol_label":"Turn off Wi-Fi on your phone","upgrade_page_navigation":"Upgrade Now","upgrade_screen_upgrade_later_button":"UPGRADE LATER","upgrade_tesla_pros_improvement_1":"Better update experience and quicker commissioning","upgrade_tesla_pros_improvement_2":"Access to more system information and self-tests","upgrade_tesla_pros_improvement_3":"Improved Neurio meter pairing","upgrade_tesla_pros_improvement_4":"Better diagnostics and alerts","upgrade_to_tesla_pros_banner_title":"Tesla Pros is a better commissioning experience","upgrade_to_tesla_pros_download_prompt":"UPGRADE NOW","validation_phone":"Input a valid telephone number","vitals_header_subtitle_firmware_update":"Firmware update in progress...","vitals_header_subtitle_firmware_update_failed":"Firmware update failed. Check enable switches and wiring.","vitals_header_title":"System","vitals_powerwall_state_ac_fault":"AC Stage Fault","vitals_powerwall_state_dc_fault":"DC Stage Fault","vitals_powerwall_state_grid_following":"Grid Following","vitals_powerwall_state_grid_forming":"Grid Forming","vitals_powerwall_state_init":"Initializing","vitals_powerwall_state_off":"Off","vitals_powerwall_state_standby":"Standby","vitals_powerwall_state_support_dc":"Support DC","warning":"WARNING","warning_off_grid":"If the electrical system is off-grid, any backed up loads will be dropped within 5 minutes.","warning_on_grid":"If the electrical system is on-grid, Powerwall will stop charging/discharging.","warning_sitemaster_container_not_running":"The Sitemaster is not running","wifi_pairing_link_message":"Add a WiFi-connected Powerwall","wifi_view_find_network":"FIND NETWORK BY SSID","wifi_view_note":"Note: The Gateway is only compatible with 2.4 GHz wireless networks.","wifi_view_note_five_ghz":"Note: The Gateway is compatible with both 2.4 GHz and 5 GHz wireless networks.","wifi_view_readonly":"This is a follower Powerwall, so its wireless network configuration may not be edited.","wifi_view_security_label":"SECURITY","wizard_container_commissioning_wizard":"Tesla Commissioning Wizard","wizard_container_login_required":"Login Required","wizard_container_title":"Let\'s get started.","wizard_container_verifying_login_title":"Verifying Login"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Fehler","advanced_settings_submit":"Senden","advanced_settings_submitted":"Gesendet","advanced_settings_title":"Erweiterte Einstellungen","alert_container_ac_phase_1_over_voltage":"AC-Überspannung","alert_container_ac_phase_1_under_voltage":"AC-Unterspannung","alert_container_ac_phase_2_over_voltage":"AC-Überspannung","alert_container_ac_phase_2_under_voltage":"AC-Unterspannung","alert_container_ac_phase_3_over_voltage":"AC-Überspannung","alert_container_ac_phase_3_under_voltage":"AC-Unterspannung","alert_container_over_frequency":"AC-Überfrequenz","alert_container_rate_of_change_frequency":"AC-Frequenzgradientenüberwachung","alert_container_under_frequency":"AC-Unterfrequenz","app_container_engineering_mode_banner_message":"Für den Tesla Service-Modus ist keine Authentifizierung erforderlich. Stoppen Sie bitte das System, bevor Sie Veränderungen an der Installation durchführen. Verlassen Sie das System in einem akzeptablen Status, bevor Sie den Browser schließen. Schließen Sie nach Abschluss der Arbeiten bitte den Browser, da für diesen Modus keine Authentifizierung erforderlich ist.","app_container_engineering_mode_title":"Tesla Service-Modus","app_container_firmware_update_banner_message":"Lassen Sie die Installation und die Verkabelung unberührt und bleiben Sie auf dieser Seite, bis die Aktualisierung abgeschlossen ist.","app_container_firmware_update_banner_title":"Firmware-Update wird durchgeführt","app_container_sitemaster_message_title":"Das System ist aktuell in Betrieb. Um den Status der Batterie(n) einsehen zu können, muss das System heruntergefahren sein. Sie können das System über die Startseite stoppen.","app_container_sitemaster_power_supply_mode_banner_message":"Die Batterie erzeugt Wechselstrom, um alle für die Konfiguration nötigen Geräte zu betreiben. Die Schaltfläche auf der Startseite, um das System zu stoppen.","app_container_sitemaster_power_supply_mode_banner_title":"Netzbildungs-Modus","app_container_sitemaster_running_banner_title":"System ist in Betrieb","auto_config_check_network_button":"Überprüfen Sie das Netzwerk und aktivieren Sie W-LAN","auto_config_check_system_and_summary":"Sehen Sie sich die Seiten \\"System\\" und \\"Zusammenfassung\\" an.","auto_config_done_button_text":"Fertig","auto_config_instructions_cannot_determine_grid_connection":"Bevor Sie das System in Betrieb nehmen, überprüfen Sie die Verkabelung zum Backup-Switch oder Gateway.","auto_config_instructions_determining_on_grid":"Sollte diese Meldung länger als 3 Minuten andauern, überprüfen Sie die Verkabelung zum Backup-Switch oder Gateway.","auto_config_instructions_finding_contactor_controller":"Sollte diese Meldung länger als 3 Minuten andauern, überprüfen Sie die Verkabelung zum Backup-Switch oder Gateway.","auto_config_instructions_finding_powerwalls":"Sollte diese Meldung länger als 3 Minuten andauern, überprüfen Sie die Verkabelung der Powerwall.","auto_config_instructions_finding_solar_powerwall":"Sollte diese Meldung länger als 3 Minuten andauern, überprüfen Sie die Verkabelung der Solar Powerwall.","auto_config_instructions_lookup_failed_retry":"Scannen Sie den Seriennummern-Aufkleber in Bolt, um die automatische Einrichtung der Powerwall zu aktivieren, und dann {retryButton}","auto_config_instructions_lookup_failed_wizard":"Oder {wizardButton} für eine manuelle Powerwall-Einrichtung.","auto_config_instructions_missing_info_1":"Die automatische Powerwall-Einrichtung ist fehlgeschlagen, weil die folgenden Informationen nicht vorhanden waren:","auto_config_instructions_missing_info_2":"{wizardButton}, um sie manuell einzugeben.","auto_config_instructions_missing_info_3":"{registrationButton} manuell.","auto_config_instructions_no_grid_connection":"Überprüfen Sie die Verkabelung zum Backup-Switch oder Gateway","auto_config_instructions_no_grid_detected":"Bevor Sie das System in Betrieb nehmen, überprüfen Sie die Verkabelung und die Schutzschalter.","auto_config_instructions_no_network_retry":"{networkLink} zum Aktivieren der automatischen Powerwall-Einrichtung und danach {retryButton}","auto_config_instructions_no_network_wizard":"Oder {wizardButton} zur manuellen Einrichtung der Powerwall.","auto_config_instructions_retry":"{networkLink} falls das Problem weiterhin besteht","auto_config_instructions_retry_wizard":"Oder {wizardButton} zur manuellen Einrichtung der Powerwall.","auto_config_instructions_updating":"Bevor die automatische Einrichtung der Powerwall beginnen kann, ist ein Software-Update erforderlich. Der Download und die Anwendung des Updates erfolgen automatisch. Es kann sein, dass Sie sich danach erneut mit dem W-LAN-Netzwerk der Powerwall verbinden müssen.","auto_config_missing_grid":"Netz für den Kundenstandort","auto_config_missing_gridcode":"Netzanschlussbedingungen für den Kundenstandort","auto_config_missing_registration":"Kundeninformationen für die Produktregistrierung","auto_config_missing_timezone":"Zeitzone am Kundenstandort","auto_config_network_button_text":"Netzwerk einrichten","auto_config_registration_button_text":"Kundeninformationen eingeben","auto_config_retry_button_label":"Erneut versuchen","auto_config_run_button_label":"Powerwall automatisch einrichten","auto_config_run_wizard_button_text":"Assistent ausführen","auto_config_section_title":"Automatische Powerwall-Einrichtung","auto_config_status_cancelled":"Die automatische Einrichtung wurde abgebrochen. Sie können es erneut versuchen:","auto_config_status_cannot_determine_grid_connection":"Netzanschluss konnte nicht ermittelt werden.","auto_config_status_complete":"Erfolgreich abgeschlossen","auto_config_status_determining_on_grid":"Netzanschluss wird bestimmt...","auto_config_status_finding_contactor_controller":"Nach Schützsteuerung suchen...","auto_config_status_finding_powerwalls":"Suche Powerwalls ...","auto_config_status_finding_solar_powerwall":"Nach Solar Powerwall suchen...","auto_config_status_in_progress":"Vorgang läuft","auto_config_status_lookup_failed":"Suche nach Seriennummer fehlgeschlagen","auto_config_status_missing_information":"Informationen fehlen","auto_config_status_no_grid_connection":"Keine Verbindung zum Netz","auto_config_status_no_grid_detected":"Es wurde kein Netz erkannt.","auto_config_status_no_network":"Nicht mit Tesla verbunden","auto_config_status_not_applicable":"Eine automatische Einrichtung ist nicht erforderlich oder sie wurde bereits ausgeführt. Sie können sie erneut ausführen:","auto_config_status_retrying":"Fehlgeschlagene Netzwerkanforderung erneut versuchen","auto_config_status_timeout":"Das Zeitlimit für die automatische Einrichtung ist abgelaufen. Sie können es erneut versuchen:","auto_config_status_updating":"Software-Update erforderlich","auto_config_stop_system_modal_message":"Der automatische Einrichtungsvorgang kann nicht ausgeführt werden, während das System in Betrieb ist. Stoppen Sie das System und versuchen Sie es erneut.","auto_config_stop_system_modal_title":"Automatische Einrichtung kann nicht gestartet werden","battery_container_add_all_batteries_button_label":"ALLE HINZUFÜGEN","battery_container_available_batteries_subtitle":"Diese Batterien sind nicht Teil des Systembetriebs, es sei denn, sie werden hinzugefügt.","battery_container_available_batteries_title":"Verfügbare Batterieblöcke","battery_container_cannot_communicate":"Kommunikation mit Powerwall nicht möglich. Prüfen Sie die Verkabelung und diie Terminierung des CAN-Bus.","battery_container_cannot_communicate_with_device":"Keine Kommunikation mit dem Gerät möglich. Prüfen Sie die Verkabelung und diie Terminierung des CAN-Bus.","battery_container_chinv":"VFD für Kompressor and Heizung (CHINV) {index}","battery_container_configured_batteries_label":"Konfigurierte Batterieblöcke","battery_container_configured_batteries_subtitle":"Diese Batterien sind Teil des Systembetriebs.","battery_container_confirm_update_firmware":"Dieser Vorgang kann einige Minuten in Anspruch nehmen. Unterbrechen Sie das Update nicht und bleiben Sie auf dieser Seite.","battery_container_dcbc":"Batterieblock {index}","battery_container_dcbc_comms_failure":"Kommunikationsfehler. Prüfen Sie die Netzwerkverbindung zum Gerät und führen Sie einen erneuten Scan durch.","battery_container_dcbc_dcdisconnect_opened":"Der Gleichstrom-Trennschalter befindet sich in Position Aus.","battery_container_dcbc_door_switch_opened":"Freischaltleitung der Wechselrichterklappe unterbrochen. Prüfen Sie den Türschalter.","battery_container_dcbc_enable_line_return_low_estop":"Wechselrichter-Fernabschaltung unterbrochen. Schaltkreis für Fernabschaltung prüfen.","battery_container_dcbc_enable_line_return_low_inv":"Freischaltleitung des Wechselrichtersystems unterbrochen. Prüfen Sie die Rückmeldung des Leitungsschutzschalters.","battery_container_dcbc_enable_line_return_low_str":"Die Freischaltleitung für eine oder mehrere Powerpack-Reihen ist unterbrochen. Prüfen Sie die Verdrahtung und die Klappen des Powerpack. Lesen Sie für eine Diagnose die Anleitung zur Problemlösung für die Freischaltleitung.","battery_container_delete_button_title":"Dieses Gerät entfernen","battery_container_diagnosis_incomplete":"Diagnose unvollständig. Bevor weitere Prüfungen ausgeführt werden können, ist ein Firmware-Update erforderlich.","battery_container_faults":"Fehler","battery_container_firmware_update_needed":"Firmware-Update erforderlich.","battery_container_gateway_contactor_meter_controller":"Gateway-Schütz/Zählersteuerung","battery_container_industrial_confirm_update_firmware":"Dies aktualisiert die Firmware aller Batterieblöcke und ihrer Teilkomponenten.","battery_container_industrial_confirm_update_firmware_info":"Hierdurch wird die Firmware jedes Batterieblocks in aktualisiert.","battery_container_internal_communications_fault":"Interner Kommunikationsfehler. Prüfen Sie Verkabelung und Terminierung des CAN-Bus und aktualisieren Sie die Firmware.","battery_container_meter_socket_adapter":"Backup-Switch","battery_container_mpbc":"Batterieblock {index}","battery_container_mpthc":"Thermosteuergerät (MPTHC) {index}","battery_container_no_msa_detected":"Es wurde kein Backup-Switch erkannt.","battery_container_no_sync_detected":"Keine Schützsteuerung erkannt. Keine Backup-Fähigkeit erkannt.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Eintrag (LCC) {index}","battery_container_post_missing":"Fehlender Eintrag {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Leistungsstufe {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"Die Powerwall ist ausgeschaltet. Stellen Sie sicher, dass sich der Schalter in Position EIN befindet.","battery_container_qbms":"Batterieüberwachungsplatine (QBMS)","battery_container_qhvp":"Hochvoltprozessor (QHVP)","battery_container_residential_confirm_update_firmware":"Dies aktualisiert die Firmware aller Powerwalls und der Schützsteuerung (falls vorhanden).","battery_container_resolve_connectivity":"Beheben Sie mögliche Verbindungsprobleme, bevor Sie die Firmware aktualisieren.","battery_container_scan":"SCAN","battery_container_scan_in_progress":"SCANNT ...","battery_container_scbc":"Ladeblock {index}","battery_container_scthc":"Thermosteuergerät (SCTHC) {index}","battery_container_self_tests_failure":"Selbsttest nicht bestanden.","battery_container_self_tests_inconclusive":"Unklare Ergebnisse des Selbsttests.","battery_container_self_tests_internal_error":"Selbsttest wegen internem Systemfehler fehlgeschlagen.","battery_container_self_tests_stall":"Timeout: Selbsttests können nicht gestartet werden.","battery_container_self_tests_system_down":"Selbsttests können nicht ausgeführt werden, wenn das System abgeschaltet ist. Starten Sie das System und versuchen Sie es erneut.","battery_container_self_tests_updating":"Es können keine Selbsttests durchgeführt werden, während die Batterien aktualisiert werden. Versuchen Sie es erneut, wenn das Update abgeschlossen ist.","battery_container_serial_number":"Seriennummer: {sn}","battery_container_solar_powerwall":"{index} Solar Powerwall","battery_container_starc":"Gleichspannungswandler (STARC) {index}","battery_container_stitch":"Regelspannung DC-DC (STITCH)","battery_container_synchronizer":"Schützsteuerung","battery_container_unknown":"Unbekannter Bus-Regler {index}","battery_container_update_failed":"Update fehlgeschlagen. Versuchen Sie es erneut. Sorgen Sie dafür, dass die Drähte und die Freigabeschalter während des Updates nicht getrennt werden.","battery_container_update_firmware":"FIRMWARE AKTUALISIEREN","battery_container_update_in_progress":"UPDATE WIRD DURCHGEFÜHRT ...","battery_container_waiting_to_report_firmware":"Warte darauf, dass die Einheit die Firmware-Version meldet.","battery_container_warnings":"Warnhinweise","button_label_generate":"GENERIEREN","can_reboot_message_backup":"Backup-Modus","can_reboot_message_block_update":"Block-Update wird ausgeführt","can_reboot_message_enumeration":"Nummerierung wird ausgeführt","can_reboot_message_initializing":"System wird initialisiert","can_reboot_message_power_flow_is_too_high":"Stromfluss zu hoch","can_reboot_message_updating":"Site Package-Update wird ausgeführt","caution":"VORSICHT","charger_settings_cabinet":"Schrank {sn} {state}","charger_settings_cabinet_posts_warning":"Mit diesen Steuerelementen werden nur die Nachfreigabe und der schrankinterne HV-Bus gestoppt. Beim Zugang zu den Schränken müssen Sie trotzdem die Stromzufuhr unterbrechen und alle Sicherheitsvorschriften beachten.","charger_settings_common_bus":"Gemeinsamer Bus {state}","charger_settings_common_bus_warning":"Stoppt nur den gemeinsamen HV-Bus. Beim Zugang zu den Schränken müssen Sie trotzdem die Stromzufuhr unterbrechen und alle Sicherheitsvorschriften beachten.","charger_settings_disabled":"deaktiviert","charger_settings_enabled":"aktiviert","charger_settings_post":"Post {id} {state}","charger_settings_saving":"speichern {spinner}","client_protocols_container_subtitle":"Client-Protokolle ein- oder ausschalten.","client_protocols_container_title":"Client-Protokolle","client_protocols_menu_title":"Client-Protokolle","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"Modbus TCP/IP","compliance_container_label_fcc_id":"FCC-ID: {fccId}","compliance_container_label_ic_id":"IC: {icId}","compliance_container_label_manufacturer":"Hersteller: {manufacturer}","compliance_container_label_model":"Modell: {model}","compliance_container_title":"Konformität","component-menu-title":"Komponenten","conductor_limit":"Batterien werden geregelt, um auf allen Phasen der Stromwandler ein Überschreiten der konfigurierten Spannungsgrenzwerte zu vermeiden. In den Anwendungshinweisen zu den Spannungsgrenzwerten finden Sie weitere Informationen zu den Anwendungsbereichen und den zu konfigurierenden Grenzwerten.","conductor_min_current":"Exportgrenzwert des Leiters","control_container_add_on":"HINZUFÜGEN","control_container_always_active":"IMMER AKTIV","control_container_battery_ok":"VOLLSTÄNDIGER BATTERIE-EXPORT ZULÄSSIG","control_container_charge_power_target":"ZIEL FÜR LADESTROM","control_container_conductor_max_current":"Importgrenzwert des Leiters","control_container_conductor_min_current_max_bound":"Der Maximalwert für {mode} beträgt 200 A","control_container_conductor_min_current_min_bound":"Der Minimalwert für {mode} beträgt 5 A","control_container_control_subtitle":"Steuer-Untertitel","control_container_control_title":"Steuertitel","control_container_direct":"DIREKT","control_container_disable":"Deaktivieren","control_container_discharge_power_target":"ZIEL FÜR ENTLADESTROM","control_container_enabled":"AKTIVIERT","control_container_energy_target":"ENERGIEZIEL. Dieser Wert sollte der Systemgröße laut Konstruktionsdokumenten und dem Prüfbericht entsprechen","control_container_error_message":"{mode} ist erforderlich","control_container_explanation_bullet_five_max_site_meter_power_kw":"Wenn die Nettoleistung diesen Grenzwert übersteigt, werden die Batterien entladen, um bestmöglich ein Überschreiten dieses Grenzwerts zu verhindern.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Wenn die Nettoerzeugung diesen Grenzwert übersteigt, werden die Batterien geladen, um bestmöglich ein Überschreiten dieses Grenzwerts zu verhindern.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Wenn die Nettoleistung diesen Grenzwert unterschreitet, wird der zulässige Ladestrom der Batterien begrenzt.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Wenn die Nettoerzeugung diesen Grenzwert unterschreitet, wird der zulässige Entladestrom der Batterien begrenzt.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Import-Grenzwert der Anlage ist eine optionale Einstellung. Lassen Sie dieses Feld frei, um die Begrenzung zu deaktivieren.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Export-Grenzwert der Anlage ist eine optionale Einstellung. Lassen Sie dieses Feld frei, um die Begrenzung zu deaktivieren.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Dies ist ein Gesamtlimit über alle Phasen an allen Zählern der Anlage. (Hinweis: Wenn Verbraucherzähler verwendet werden, wird der Anlagenzähler mithilfe der Werte für Last, Solar und Batterie berechnet).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Dies ist ein Gesamtlimit über alle Phasen an allen Zählern der Anlage. (Hinweis: Wenn Verbraucherzähler verwendet werden, wird der Anlagenzähler mithilfe der Werte für Last, Solar und Batterie berechnet).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Wenn dieser Wert aktiviert ist, regelt der Anlagen-Master die Maximalleistung, die aus dem Netz in die Anlage eingespeist werden darf.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Wenn dieser Wert aktiviert ist, regelt der Anlagen-Master die Maximalleistung, die aus der Anlage in das Netz eingespeist werden darf.","control_container_explanation_export_restrictions_locked":"Bestimmt, wie das System Strom in das Netz einspeist. Sobald der Wert eingestellt ist, erfordern die Vorschriften, dass er nur über Tesla geändert werden darf.","control_container_explanation_export_restrictions_unlocked":"Gemäß den Vorschriften darf die Export-Charakteristik nur während der ersten Inbetriebnahme eingestellt werden. Wenden Sie sich für eine Änderung an Tesla.","control_container_explanation_nominal_system":"Dieser Wert sollte der Systemgröße nach den Konstruktionsdokumenten und dem Prüfbericht entsprechen.","control_container_heat_for_energy":"WÄRME FÜR ENERGIE","control_container_heat_mode":"HEIZMODUS","control_container_heco_committed_capacity":"Vereinbarte Kapazität","control_container_heco_committed_discharge_power_W_max_bound":"Der Maximalwert für {mode} beträgt 100000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"Der Minimalwert für {mode} beträgt 100 W","control_container_loading":"Wird geladen","control_container_max_site_meter_power_W_max_bound":"Der Maximalwert für {mode} beträgt 50000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"Der Minimalwert für {mode} beträgt 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} muss größer oder gleich 0 sein","control_container_max_site_meter_power_kw":"Importgrenzwert der Anlage","control_container_max_site_meter_power_w":"Importgrenzwert der Anlage","control_container_menu":"Menü","control_container_min_site_meter_power_kW_positive":"{mode} muss größer oder gleich 0 sein","control_container_min_site_meter_power_kw":"Exportgrenzwert der Anlage","control_container_min_site_meter_power_w":"Exportgrenzwert der Anlage","control_container_minimum_charge_power":"MINIMALER LADESTROM","control_container_minimum_discharge_power":"MINIMALER ENTLADESTROM","control_container_misc":"VERSCHIEDENES","control_container_net_meter_mode":"Exportbegrenzungen der Anlage","control_container_never":"KEIN EXPORT DER ANLAGE","control_container_nominal_system_energy_kW_positive":"{mode} muss größer oder gleich 0 sein","control_container_nominal_system_energy_kWh_positive":"{mode} muss größer oder gleich 0 sein","control_container_nominal_system_energy_kwh":"Nennstrom des Systems","control_container_nominal_system_energy_max_error":"Nennstrom des Systems überschreitet maximalen Stromgrenzwert","control_container_nominal_system_power_kw":"Nennleistung des Systems","control_container_nominal_system_power_max_error":"Nennleistung des Systems überschreitet maximalen Leistungsgrenzwert","control_container_number_error_message":"{mode} muss eine numerische Eingabe sein","control_container_power":"LEISTUNG","control_container_pv_only":"EXPORT BIS ZU PV-ZÄHLERWERT OK","control_container_reactive_mode":"REAKTIVER MODUS","control_container_real_mode":"REALER MODUS","control_container_reset":"Reset","control_container_site_control":"ANLAGEN-REGELUNG","control_container_site_limits":"ANLAGEN-GRENZWERTE","control_container_site_max_power":"MAX. ANLAGENLEISTUNG","control_container_site_min_power":"MIN. ANLAGENLEISTUNG","control_container_submit":"Senden","control_container_submitting_control":"Steuerung übermitteln","control_start":"STARTEN","control_stop":"UNTERBRECHEN","current_password_placeholder_text":"Geben Sie Ihr aktuelles Passwort ein","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"A {id}","current_transformer_item_view_battery_ct":"Batterie","current_transformer_item_view_calculated_reading":"Berechnet:","current_transformer_item_view_conductor_ct":"elektrischer Leiter","current_transformer_item_view_ct_voltage_pairing_1":"Phase L1","current_transformer_item_view_ct_voltage_pairing_2":"Phase L2","current_transformer_item_view_ct_voltage_pairing_3":"Phase L3","current_transformer_item_view_ct_voltage_pairing_default":"Standardphase","current_transformer_item_view_doubled_solar_ct":"Solar (1Stromwandler x2)","current_transformer_item_view_flip":"Flip","current_transformer_item_view_generator_ct":"Stromerzeuger","current_transformer_item_view_load_ct":"Lasten","current_transformer_item_view_measure_pw_plus_input":"Messen eines Powerwall+-Wechselrichters","current_transformer_item_view_measured_reading":"Pro Stromwandler:","current_transformer_item_view_missing_ct":"Fehlt","current_transformer_item_view_no_reading":"Keine Daten vorhanden","current_transformer_item_view_none_ct":"Keiner","current_transformer_item_view_phase_sequence_dropdown_title":"Phase","current_transformer_item_view_site_ct":"Netzanschluss","current_transformer_item_view_smart_ct":"Smart","current_transformer_item_view_solar_ct":"Solarstrom","current_transformer_item_view_solar_rgm_ct":"Ausschließlich Solarüberschuss","current_transformers_container_800a_ct_ensure":"Stellen Sie sicher, dass die Stromwandler-Auswahl auf dieser Seite der Installation entspricht.","current_transformers_container_800a_ct_larger":"Stromwandler mit 800 A sind physisch größer als solche mit 200 / 264 A.","current_transformers_container_800a_ct_use_case":"Wenn Sie große Leiter messen (z. B. 400 A / 800 A), verwenden und konfigurieren Sie den Stromwandler mit 800 A.","current_transformers_container_amps_explanation":"Strom, der durch den Stromwandler fließt","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Stellen Sie sicher, dass die Stromwandler auf der korrekten Phase installiert wurde ({sequence}).","current_transformers_container_configure_subtitle":"Zähler und Stromwandler werden konfiguriert.","current_transformers_container_ct_flipping_ensure_direction":"Stellen Sie zunächst sicher, dass der Stromwandler-Aufkleber zum Solar-Wechselrichter (für Solar-Stromwandler) oder zur Netzeinspeisung weist (für Anlagen-Stromwandler). Prüfen Sie als nächstes das Drehfeld und prüfen Sie die gemeldeten Ablesewerte für Strom, Leistung und Leistungsfaktor.","current_transformers_container_ct_flipping_modal_title":"Stromwandler in Software umdrehen","current_transformers_container_ct_flipping_software_incorrect_metering":"Wenn Sie ein auf der falschen Phase installierten Stromwandler über die Software umdrehen, führt dies zu falschen Messwerten.","current_transformers_container_ct_flipping_wrong_phase":"Ein negativer Ablesewert für die Leistung kann darauf hindeuten, dass der Stromwandler rückwärts oder auf der falschen Phase installiert wurde.","current_transformers_container_double_check_recommendation":"Überprüfen Sie die Verkabelung, Spannungsabgriffe, CTs und Meterkonfigurationen, bevor Sie fortfahren.","current_transformers_container_doubled_solar_ct_explanation":"Ein balancierter PV-Wechselrichter kann mit einem einzelnen CT gemessen werden","current_transformers_container_doubled_solar_ct_modal_title":"Einen Solar-Wechselrichter mit Split-Phase mithilfe eines einzelnen CT messen","current_transformers_container_grid_code_phase_modal_title":"Warnung: Anzahl der CTs entspricht nicht der Netzstandard-Phasenempfehlung","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Warnung: Anzahl der CTs entspricht nicht der Netzstandard-Phasenempfehlung für mehrere Messgeräte","current_transformers_container_grid_code_phase_multiple_warnings_message":"Unerwartete Anzahl von CTs an folgende {numMeters} Messgeräte angeschlossen:","current_transformers_container_grid_code_phase_warning_message":"Unerwartete Anzahl von CTs an folgendes Messgerät angeschlossen:","current_transformers_container_grid_code_single_phase_warning":"Der angewendete Netzstandard ist einphasig. Einphasige Systeme verfügen typischerweise entweder über einen 1- oder einen 3-Phasen-Service. {lb} Eine ungerade Anzahl von CTs (1 oder 3) wird empfohlen.","current_transformers_container_grid_code_split_phase_warning":"Der angewendete Netzstandard ist Split-Phase. Split-Phasen-Systeme verfügen typischerweise über einen CT an jedem \\"hot\\" Leiter. {lb} Eine gerade Anzahl von CTs (2 oder 4) wird empfohlen. ","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"Für das Revenue Grade Metering (RGM) ist ein Neurio-Zähler erforderlich, der Powerwall+-Solarwechselrichter misst.","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Wählen Sie Ja, wenn damit ein Powerwall+-Solarwechselrichter gemessen wird. Wählen Sie Nein, wenn damit ein Solarwechselrichter gemessen wird, der nicht Teil einer Powerwall+-Baugruppe ist.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"Wird damit ein Powerwall+-Wechselrichter gemessen?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Sorgen Sie dafür, dass die Kennzeichnung des Stromwandlers zum Solar-Wechselrichter weist.","current_transformers_container_label_modal_title":"Erklärung der Labels","current_transformers_container_load_ct_ensure":"Wenn Sie Verbraucher-Stromwandler konfigurieren, stellen Sie sicher, dass alle Lasten innerhalb der Anlage gemessen werden und dass Lasten mit bzw. ohne Backup getrennt voneinander gemessen werden.","current_transformers_container_load_ct_modal_title":"Verbraucher-CTs","current_transformers_container_load_ct_recommended":"Die Konfiguration von Verbraucher-nStromwandler ist nur für bestimmte Anwendungen empfohlen, bei denen es nicht möglich ist, einen Anlagen-Stromwandler zu konfigurieren.","current_transformers_container_meter_id":"Messgerät {id}","current_transformers_container_no_load_and_site_ct":"Ein Verbraucher-Stromwandler und ein Anlagen-Stromwandler können nicht gleichzeitig verwendet werden.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"Hinter dem Stromwandler dürfen sich keine Verbraucher befinden.","current_transformers_container_no_site_or_load_warning":"KEINE STROMWANDLER (CTS) AM NETZANSCHLUSS ODER AN LAST (VERBRAUCHER) KONFIGURIERT","current_transformers_container_no_solar_ct_warning":"KEIN SOLAR STROMWANDLER KONFIGURIERT","current_transformers_container_no_solar_inverter_warning":"KEIN SOLAR WECHSELRICHTER AUSGEWÄHLT","current_transformers_container_phase_usages_modal_title":"Warnung: Die Stromwandler-Konfiguration entspricht nicht der Phasen-Konfiguration","current_transformers_container_phase_usages_warning":"Die Anzahl der konfigurierten Phasen entspricht nicht der Anzahl der konfigurierten Stromwandler. {lb} {num} konfigurierte Stromwandler werden empfohlen.","current_transformers_container_phase_usages_warning_message":"Unerwartete Anzahl von Stromwandlern an folgende Messgeräte angeschlossen:","current_transformers_container_power_amperage_configure_warning":"{type} Stromwandler müssen positive Leistung und Strom messen um richtig konfiguriert zu sein.","current_transformers_container_power_factor_explanation":"Leistungsfaktor (Wirkleistung / Scheinleistung) Wird nur bei hohen Leistungswerten angezeigt. Bei normalen ohmschen Lasten sollte der Leistungsfaktor etwa 1 betragen. Ein niedriger Leistungsfaktor könnte ein Anzeichen für eine fehlerhafte Installation des Stromwandlers sein oder für das Vorhandensein von sehr großen kapazitiven/induktiven Lasten.","current_transformers_container_power_factor_out_of_range_warning":"Leistungsfaktorwerte liegen außerhalb des erwarteten Bereichs. {lb} Gemessener Leistungsfaktor: {powerFactor} PF {lb} Das Messgerät ist möglicherweise falsch oder an einer falschen Phase installiert, oder es liegt eine sehr hohe kapazitive/induktive Last vor.","current_transformers_container_system_test_configured_incorrect":"Warnung: CT {id} ist möglicherweise falsch konfiguriert","current_transformers_container_title":"Stromwandler","current_transformers_container_voltage_out_of_range_warning":"Spannung liegt außerhalb des Bereichs. {lb} Gemessene Spannung: {volts} V {lb} Die bei diesem CT gemessene Spannung liegt außerhalb des normalen Betriebsbereichs.","current_transformers_container_volts_explanation":"Spannung zwischen Leiter und Neutralleiter am Spannungsabgriff, der mit dem Stromwandler verknüpft ist","current_transformers_container_watts_explanation":"Leistung als Produkt aus Strom, der durch den Stromwandler fließt, und Spannung am entsprechenden Spannungsabgriff","customer_installation_view_email_label":"E-MAIL-ADRESSE DES KUNDEN","customer_installation_view_email_placeholder":"E-Mail-Adresse","customer_registration_view_address_label":"ADRESSE","customer_registration_view_address_placeholder":"Adresse","customer_registration_view_city_label":"STADT","customer_registration_view_city_placeholder":"Stadt","customer_registration_view_clear_form":"FORMULAR LEEREN","customer_registration_view_country_label":"Land","customer_registration_view_customer_information":"KUNDENINFORMATIONEN","customer_registration_view_email_address_label":"E-MAIL-ADRESSE","customer_registration_view_email_address_label_confirmation":"E-MAIL ERNEUT EINGEBEN","customer_registration_view_email_placeholder":"Email","customer_registration_view_family_name_label":"FAMILIENNAME (NACHNAME)","customer_registration_view_family_name_warning":"Geben Sie den Nachnamen des Kunden ein.","customer_registration_view_given_name_label":"VORNAME","customer_registration_view_given_name_warning":"Geben Sie den Vornamen des Kunden ein.","customer_registration_view_homeowner_family_name_placeholder":"Nachname","customer_registration_view_homeowner_given_name_placeholder":"Vorname","customer_registration_view_installation_address":"Installationsadresse","customer_registration_view_phone_number_label":"TELEFON","customer_registration_view_phone_placeholder":"Telefon","customer_registration_view_skip_explanation":"Wird dies übersprungen, muss der Hausbesitzer die Registrierung selbst über die mobile Tesla-App vornehmen, bevor er Zugang zum System erhält,.","customer_registration_view_state_placeholder":"Bundesland","customer_registration_view_state_province_region_label":"STAAT / BUNDESLAND / REGION","customer_registration_view_zip_label":"Postleitzahl","customer_registration_view_zip_placeholder":"PLZ","diagnostic-alert-affected-children":"Betroffene Komponenten ({count})","diagnostic-alerts-missing-alert-information":"Warnhinweise fehlen","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Toolbox-Artikel","diagnostic-alerts-toolbox-article-external-link":"Externe Links","diagnostic_alert_alert_name":"Name der Warnung","diagnostic_alert_alert_type":"Art der Warnung","diagnostic_alert_audience":"Zielgruppe","diagnostic_alert_clear_condition":"Zustand löschen","diagnostic_alert_description":"Beschreibung","diagnostic_alert_display_name":"Anzeigename","diagnostic_alert_id":"Warnungs-ID","diagnostic_alert_impact_category":"Auswirkungskategorie","diagnostic_alert_latching":"Einrasten","diagnostic_alert_max":"Max","diagnostic_alert_min":"Min","diagnostic_alert_name":"Name","diagnostic_alert_node":"Knoten","diagnostic_alert_offset":"Abweichung","diagnostic_alert_payload_signals":"Payload-Signale","diagnostic_alert_potential_impact":"Mögliche Auswirkungen","diagnostic_alert_safety_reason":"Sicherheitsgrund","diagnostic_alert_scale":"Skala","diagnostic_alert_set_condition":"Zustand einstellen","diagnostic_alert_signal_name":"Name des Signals","diagnostic_alert_signoff":"Abmelden","diagnostic_alert_sna_value":"SNA-Wert","diagnostic_alert_supplier_dtc_name":"Hersteller-DTC-Name","diagnostic_alert_uiID":"UI-ID","diagnostic_alert_units":"Einheiten","diagnostic_alert_urgent":"Dringend","diagnostic_category_item_view_alerts_description":"Warnmeldungen zu Standorten, Komponenten und Unterkomponenten","diagnostic_category_item_view_download_results":"ERGEBNISSE HERUNTERLADEN","diagnostic_category_item_view_internal_comms_description":"Gesamte Gerätekommunikation prüfen","diagnostic_category_item_view_internal_comms_title":"Gerätekommunikation","diagnostic_category_item_view_live_results":"ECHTZEIT-ERGEBNISSE","diagnostic_category_item_view_metering_description":"Zählerverbindungen prüfen","diagnostic_category_item_view_metering_title":"Messungen","diagnostic_category_item_view_networking_description":"Netzwerkverbindung prüfen","diagnostic_category_item_view_networking_title":"Netze","diagnostic_category_item_view_no_selected_tests":"KEINE AUSGEWÄHLTEN TESTS","diagnostic_category_item_view_rerun_selected":"{num} AUSGEWÄHLTE TESTS ERNEUT AUSFÜHREN","diagnostic_category_item_view_rerun_selected_test":"AUSGEWÄHLTEN TEST ERNEUT AUSFÜHREN","diagnostic_category_item_view_run_selected":"{num} AUSGEWÄHLTE TESTS AUSFÜHREN","diagnostic_category_item_view_run_selected_test":"AUSGEWÄHLTEN TEST AUSFÜHREN","diagnostic_category_item_view_select_all_tests":"Alle auswählen","diagnostic_category_item_view_self_tests_description":"Leiten Sie die Lade- und Entladetests im System ein","diagnostic_category_item_view_self_tests_title":"Selbsttests","diagnostic_category_item_view_toggle_all_tests":"Alle auswählen","diagnostic_input_view_blocks_label":"BLÖCKE","diagnostic_input_view_individual_test_name_label":"INDIVIDUELLER TESTNAME","diagnostic_input_view_max_allowed_charge_power_label":"MAX. ZULÄSSIGE LADELEISTUNG","diagnostic_input_view_max_allowed_discharge_power_label":"MAX. ZULÄSSIGE ENTLADELEISTUNG","diagnostic_test_enable_line":"Freischaltleitung","diagnostic_test_item_view_ac_self_test_description":"Wechselstrom-Selbsttest","diagnostic_test_item_view_ac_self_test_description_2":"Führt eine Reihe von Power-Slosh-Tests für das AC-System durch. Bei Powerpack-Systemen wird die Einstellung \\"MAX_ALLOWED_POWER\\" verwendet. Setzen Sie diese Werte für Megapack- und Supercharger-Systeme auf 0.","diagnostic_test_item_view_dc_self_test_description":"Gleichstrom-Selbsttest","diagnostic_test_item_view_dc_self_test_description_2":"Führt eine Reihe von Tests am DC-System durch, einschließlich thermischer Prüfungen.","diagnostic_test_item_view_enable_line_description":"Freischaltleitung für alle Powerwalls testen","diagnostic_test_item_view_enable_line_resolution":"Freischaltleitung auswählen und erneut versuchen","diagnostic_test_item_view_individual_self_test_description":"Wählen Sie aus einer Liste von Selbsttests, die in den konfigurierten Buscontrollern verfügbar sind.","diagnostic_test_item_view_meter_comms_description":"Ping Zählerkommunikation","diagnostic_test_item_view_network_connection_description":"Verbindung zum Internet und zu den Tesla-Servern testen","diagnostic_test_item_view_network_connection_resolution":"Netzwerke erneut konfigurieren","diagnostic_test_item_view_resolution_generic_text":"{name} erneut konfigurieren und noch einmal versuchen","diagnostic_test_item_view_step_canceled":"Test wurde durch den Benutzer abgebrochen","diagnostic_test_item_view_step_config_update_status":"Prüfen Sie den Status des Tesla-Konfigurationsservers","diagnostic_test_item_view_step_google_http":"Ping Google-HTTP","diagnostic_test_item_view_step_google_https":"Ping Google-HTTPS","diagnostic_test_item_view_step_hermes_status":"Prüfen Sie den Status des Tesla-Protokollservers","diagnostic_test_item_view_step_results_ip_address":"IP-Adresse","diagnostic_test_item_view_step_results_subnet_mask":"Subnetz","diagnostic_test_item_view_table_header_key":"Identifikator","diagnostic_test_item_view_table_header_name":"Schritt","diagnostic_test_item_view_table_header_value":"Wert","diagnostic_test_meter_comms":"Zählerkommunikation","diagnostic_test_network_connection":"Netzwerkverbindung","diagnostics_composite_view_no_tests_found":"KEINE VERFÜGBAREN TESTS GEFUNDEN","diagnostics_composite_view_run_all_selected_tests":"ALLE AUSGEWÄHLTEN TESTS AUSFÜHREN","diagnostics_container_industrial_disruptive_tests_description":"Die folgenden Tests lösen den Betrieb der Lüfter und Kühlsysteme aus. Dies erzeugt Geräusche. Es ist mit einer Leistungsaufnahme von ungefähr 30 kW pro Wechselrichter zu rechnen. Zusätzlich können die folgenden Tests den normalen Systembetrieb stören:","diagnostics_container_required_inputs_description":"Die folgenden Tests erfordern zusätzliche Eingaben:","diagnostics_container_residential_disruptive_tests_description":"Die folgenden Tests können den normalen Betrieb des Gateway und der Powerwall stören:","diagnostics_container_stop_test_title":"Test {name} stoppen?","diagnostics_container_subtitle":"Werkzeuge zur Diagnose von Fehlern in der Systeminstallation.","diagnostics_container_tests_running":"Diagnosetests werden ausgeführt","diagnostics_container_title":"Diagnose","disabled_reason_battery_breaker_open":"Batterietrennschalter offen","disabled_reason_checking_firmware_update":"Nach Firmware-Updates suchen","disabled_reason_config":"Deaktiviert durch Konfigurationsdatei","disabled_reason_excessive_voltage_drop":"Zu hoher Spannungsabfall","disabled_reason_firmware_update_failed":"Firmware-Update fehlgeschlagen","disabled_reason_firmware_update_in_progress":"Firmware-Update wird ausgeführt.","disabled_reason_gridcode_write_failed":"Einrichtung der Netzwerkanschlussbedingungen fehlgeschlagen","disabled_reason_user_requested":"Auf Wunsch des Benutzers deaktiviert","dropdown_default_placeholder":"Eingeben ...","dropdown_list_view_not_listed_label":"Nicht aufgeführt: \\"{searchText}\\"","dropdown_list_view_select_all":"Alle auswählen","dropdown_list_view_select_field":"Bitte Eingabefeld auswählen","dropdown_list_view_show_complete":"Aus kompletter Liste auswählen","dropdown_list_view_show_searchable":"Liste mit Suchfunktion","enumeration_warning_details_miswired_12v":"Beim Anschließen von zwei Powerwall+ sollte nur das mit dem Gateway/Backup-Switch verbundene Gerät mit 12 V versorgt werden. Entfernen Sie die 12 V von allen weiteren Powerwall+ in der Kette und scannen Sie dann erneut die Geräte (unten auf dieser Seite), um diese Warnung zu löschen.","enumeration_warning_details_multiple_controllers_gateway":"Ziehen Sie den Stromkabelbaum aller Powerwall+-Standortsteuergeräte ab, der sich oben rechts in der Solaranlage befindet.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Ziehen Sie den Stromkabelbaum des Expansion Powerwall+ -Standortsteuergeräts ab (nicht mit dem Backup-Switch verbunden), der sich oben rechts in der Solaranlage befindet.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Ziehen Sie den Stromkabelbaum aller Powerwall+-Standortsteuergeräte ab, der sich oben rechts in der Solaranlage befindet. Nehmen Sie das System in Betrieb, indem Sie es mit dem Backup-Gateway verbinden.","enumeration_warning_details_multiple_controllers_unknown":"Bei einer CAN-verkabelten Multi-Powerwall+-Einrichtung darf es nur ein eingeschaltetes Standortsteuergerät geben.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Es muss nur ein einziger Site Controller aktiv sein. Bei Verwendung des Backup-Gateways müssen Sie alle Powerwall+-Steuerungen vom Stromnetz trennen. Bei Verwendung eines Backup-Switch müssen Sie alle Powerwall+-Steuerungen bis auf eine vom Stromnetz trennen. Der Ausführungsassistent ist so lange deaktiviert, bis nur noch ein Site Controller aktiv ist.","enumeration_warning_title_miswired_12v":"12V-Verkabelungsfehler","enumeration_warning_title_multiple_controllers":"Es sind mehrere Standortsteuergeräte aktiv","error_details":"Fehlerdetails","error_item_view_check_network":"Netzwerkverbindung prüfen","error_item_view_disconnected":"Vom Gateway getrennt. Prüfen Sie die Netzwerkverbindung und {refresh}","error_item_view_forgot_password":"Klicken Sie, um das Passwort zurückzusetzen.","error_item_view_refresh_browser":"Browserinhalt aktualisieren.","error_item_view_try_logging_in_again":"Anmelden neu versuchen.","ethernet_view_backup_dns_label":"BACKUP-DNS-SERVER","ethernet_view_backup_dns_warning":"Gültiger Backup-DNS-Server","ethernet_view_configuration_label":"KONFIGURATION","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY (OPT)","ethernet_view_gateway_warning":"Gültige Gateway- (Router-)IP","ethernet_view_ip_address_label":"IP ADRESSE","ethernet_view_ip_address_warning":"Gültige IP-Adresse","ethernet_view_not_available":"Nicht verfügbar","ethernet_view_primary_dns_label":"PRIMÄRER DNS-SERVER","ethernet_view_primary_dns_warning":"Gültiger primärer DNS-Server","ethernet_view_static_label":"Static","ethernet_view_subnet_mask_label":"SUBNET MASK (OPT)","ethernet_view_subnet_mask_warning":"Gültige Subnet Mask","factory_reset_message":"Hierdurch wird das Gerät auf den von Tesla vorgesehenen Standardzustand zurückgesetzt. Diese Aktion kann nicht rückgängig gemacht werden. Bevor der Betrieb möglich ist, muss das Gerät neu eingerichtet werden.","field_false":"Falsch","field_true":"Richtig","follower_powerwall_message":"Diese Powerwall wird gesteuert von {leader}","follower_powerwall_title":"Folge-Powerwall","form_legend_text":"bezeichnet ein Pflichtfeld","generation_container_connecting_status":"Verbinden","generation_container_connection":"Wechselrichter {id} Verbindung","generation_container_connection_summary":"Während dieses Verbindungs-Prozesses wird die Netzwerkverbindung zeitweilig unterbrochen {lb} Stellen Sie die Verbindung zum richtigen Netzwerk wieder her. Dies kann bis zu 3 Minuten dauern.","generation_container_subtitle":"Daten für Photovoltaikwechselrichter und Stromerzeuger hinzufügen","generation_container_title":"Erzeugung","generator_item_view_disconnect_type_label":"UNTERBRECHER TYP","generator_item_view_generator":"STROMERZEUGER {id}","generator_item_view_manufacturer_label":"HERSTELLER","generator_item_view_model_label":"TYP","generator_item_view_serial_label":"SERIENNUMMER","generator_item_view_sustained_power_label":"LEISTUNG DAUERBETRIEB","generator_view_add_generator":"STROMERZEUGER HINZUFÜGEN","grid_code_container_off_grid_confirmation":"Ist das System Off-grid.","grid_code_container_off_grid_detected":"Das System ist als off-grid erkannt. Stellen Sie sicher dass, dies die korrekte Konfiguration ist.","grid_code_container_off_grid_warning":"{warning}: Der Off-grid Status konnte nicht ermittelt werden. Bitte Off-grid Einstellung überprüfen, falsche einstellung kann zu Systemfehlern führen.","grid_code_container_results":"Netzerkennungs Ergebnisse","grid_code_container_retrieving":"Lade Netzstandards","grid_code_container_saving":"Speichere Netzcode","grid_code_container_subtitle":"Basierend auf Installationsort, Spannung und Netzfrequenz, wählen Sie den passenden Standard.","grid_services_view_grid_services":"Netz Service","heading_change_password":"Kennwort ändern","help_view_how_password":"Wo Sie das Passwort am Gateway finden.","help_view_how_password_description":"Gatewaytür öffnen. Das Passwort steht auf dem Passwortaufkleber. ","help_view_how_serial_number":"Anbringungsort der Seriennummer beim Gateway ohne Backup","help_view_how_serial_number_backup":"Anbringungsort der Seriennummer auf einem Backup-Gateway","help_view_how_serial_number_backup_description":"Öffnen Sie die Tür am Backup-Gateway. Die Seriennummer beginnt mit einem \\"(S):\\"","help_view_how_serial_number_description":"Öffnen Sie die Klappe am Gateway. Die Seriennummer beginnt mit einem \\"(S):\\"","help_view_how_to_enable_line":"Eine Powerwall auf Aus und Ein schalten","help_view_how_to_enable_line_description":"Stellen Sie den Schalter an der Powerwall auf Aus und wieder auf Ein. Bei Systemen mit mehreren Powerwalls muss nur ein Schalter betätigt werden.","hierarchy_charger":"Ladeblock {name}","hierarchy_chinv":"VFD für Kompressor and Heizung (CHINV)","hierarchy_converter":"Gleichspannungswandler (STARC)","hierarchy_inverter":"Batterieblock {name}","hierarchy_mega_thermal_controller":"Thermosteuergerät (MPTHC)","hierarchy_missing_post":"Fehlende Ladesäule","hierarchy_mpbc":"Batterieblock {name}","hierarchy_part_number":"Teilenummer","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Berichtende Pods","hierarchy_post":"Ladesäule (LCC)","hierarchy_posts":"Ladesäulen","hierarchy_power_stage":"Leistungsstufe","hierarchy_power_stages":"Leistungsstufen","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Batterieüberwachungsplatine (QBMS)","hierarchy_qhvp":"Hochvoltprozessor (QHVP)","hierarchy_scthcs":"Thermosteuergeräte","hierarchy_serial_number":"Seriennummer","hierarchy_sitemaster":"Anlagen-Master {name}","hierarchy_starcs":"Gleichspannungswandler","hierarchy_stitch":"Regelspannung DC-DC (STITCH)","hierarchy_thermal_controller":"Thermosteuergerät (SCTHC)","higher_order_login_login_required":"Anmeldung erforderlich","higher_order_login_title":"Jetzt starten.","home_container_caution":"⚠️ Vorsicht","home_container_caution_deenergize":"Schalten Sie für eine sichere Abschaltung des Systems alle Powerwall-Schalter AUS.","home_container_caution_energized":"Bei angeschlossenen Solarstrings kann es vorkommen, dass die Anlage unter Spannung bleibt.","home_container_inactive_meter":"Abgelaufene Zählerdaten","home_container_inactive_meter_description":"Prüfen Sie die Verbindung des {type}-Zählers.","home_container_inactive_meter_timestamp":"Letzte Zählerablesung um {timestamp}","home_container_login_required":"Anmeldung erforderlich","home_container_missing_meter":"Zähler fehlt","home_container_positive_meter":"Warnung: {type}-Zähler ist möglicherweise falsch konfiguriert","home_container_positive_meter_description":"Für eine korrekte Konfiguration benötigt der {type}-Zähler eine positive Leistung und Stromstärke.","home_container_powerwall_error":"Powerwall Systemfehler","home_container_powerwall_start_error":"System-Start nicht möglich: {reason}","home_container_site_controller_error":"Anlagenregler-Systemfehler","home_container_sitemaster_alternative":"Hinweis: Das System wird normalerweise durch Abschalten der Schalter an allen Powerwalls und Öffnen der Sicherungen deaktiviert.","home_container_sitemaster_confirm":"Ja klicken, wenn Sie sicher sind, dass der Systembetrieb unterbrochen werden soll.","home_container_sitemaster_confirm_industrial":"Möchten Sie das System wirklich stoppen?","home_container_sitemaster_confirm_wizard":"Run Wizard verlangt einen System-Stopp. Fortfahren und System stoppen?","home_container_sitemaster_header_warning":"{warning} Dies wird den Systembetrieb unterbrechen.","home_container_sitemaster_header_warning_industrial":"{warning} Dieses System befindet sich in einem Zustand, in dem Tesla einen Stopp des Systems nicht empfiehlt. Grund: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} Dieses System befindet sich in einem Zustand, in dem Tesla einen Stopp des Systems nicht empfiehlt. Grund: \\"{reason}\\"","home_container_sitemaster_logging":"Während der Systemunterbrechung werden keine Daten erfasst.","home_container_sitemaster_reset":"Um den Systembetrieb nach der Unterbrechung wieder zu starten, den Startknopf klicken.","home_container_sitemaster_update":"Wenn gerade ein Update eingespielt wird, wird dieser Vorgang unterbrochen.","home_container_start_powerwall":"Powerwall System starten","home_container_start_system_button":"SYSTEM STARTEN","home_container_stop_powerwall":"Powerwall System unterbrechen","home_container_stop_system_button":"SYSTEM STOPPEN","home_view_compliance":"COMPLIANCE","home_view_download_all_logs":"Alle Protokolle herunterladen","home_view_download_logs":"PROTOKOLLE HERUNTERLADEN","home_view_download_logs_description_one":"Lädt einen komprimierten Satz Systemprotokolle herunter, die Ihnen bei der Diagnose von Problemen im Betriebssystem, der Software und dem Netzwerk helfen können.","home_view_download_logs_description_three":"Die Protokolle sind signiert und verschlüsselt. Sie sollten für eine Untersuchung an Tesla Energy Service gesendet werden.","home_view_download_logs_description_two":"Dies ist besonders nützlich, wenn das Gateway nicht mit dem Netzwerk verbunden werden kann und eine erweiterte Fehlersuche erforderlich ist.","home_view_login":"ANMELDEN","home_view_logout":"ABMELDEN","home_view_run_wizard":"Konfigurationsassistent","input_accept":"Ich akzeptiere.","input_confirm":"Ich nehme alle Systemwarnungen zur Kenntnis.","input_consent":"Ich stimme zu","input_decline":"Ich lehne ab.","input_no_consent":"Ich stimme nicht zu","input_title_email":"Bitte eine gültige email Addresse eingeben: name@name.domain","installation_container_relay_section_modal_title":"Gateway-Unterspannungsrelais","installation_container_residual_current_device_modal_title":"Installationsanforderung für Anlagen-FIs","installation_container_subtitle":"Installations Informationen","installation_container_sync_relay_usage_open_off_grid":"Relais offen, wenn vom Stromnetz getrennt","installation_container_title":"Installations informationen","installation_problem_detail_site_shutdown_0":"Erneute Aktivierung des Systems:","installation_problem_detail_site_shutdown_1":"Schalten Sie alle Powerwall-EIN/AUS-Schalter ein.","installation_problem_detail_site_shutdown_2":"Not-Aus-Schalter schließen","installation_problem_detail_site_shutdown_3":"Stellen Sie sicher, dass die Schnellabschalt-Steckbrücken richtig installiert sind.","installation_problem_detail_site_shutdown_4":"Überprüfen Sie die Abschaltkreis-Verkabelung","installation_problem_detail_title_site_shutdown":"Standort-Abschaltkreis ausgelöst","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Standort-Abschaltkreis, ausgelöst durch eine Schnellabschaltung der Powerwall+.","installation_problem_details_pvacs_with_no_solar_rgm":"Solar-Zähler sind nur für die Messung von Solar-Wechselrichtern erforderlich, die nicht zu einer Powerwall+ gehören. Zähler zur Messung von Powerwall+-Wechselrichtern sollten auf der Stromwandler-Seite als solche gekennzeichnet sein.","installation_problem_details_too_few_solar_rgm":"Die Anzahl der CT, die einen Powerwall+-Solarwechselrichter messen, sollte mit der Anzahl der Powerwall+-Solarwechselrichter übereinstimmen. Assistent ausführen, Neurio-Zähler koppeln, falls erforderlich, und die CT-Konfiguration auf der Stromwandler-Seite anpassen.","installation_problem_details_too_many_solar_rgm":"Die Anzahl der CT, die einen Powerwall+-Solarwechselrichter messen, sollte mit der Anzahl der Powerwall+-Solarwechselrichter übereinstimmen. Assistent ausführen und die CT-Konfiguration auf der Stromwandler-Seite anpassen.","installation_problem_title_pvacs_with_no_solar_rgm":"Solar-Zähler misst Powerwall+-Wechselrichter nicht. Ist das richtig?","installation_problem_title_site_shutdown":"Standort-Abschaltkreis ausgelöst. Es sind alle Powerwalls und Powerwall+-Solarwechselrichter deaktiviert.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Standort-Abschaltkreis, ausgelöst durch eine Schnellabschaltung der Powerwall+. Es sind alle Powerwalls und Powerwall+-Solarwechselrichter deaktiviert.","installation_problem_title_too_few_solar_rgm":"Es messen zu wenige Solar-Zähler Powerwall+-Wechselrichter","installation_problem_title_too_many_solar_rgm":"Es messen zu viele Solar-Zähler Powerwall+-Wechselrichter","installation_view_add_on_solar":"Erweiterung","installation_view_additional_connections_label":"ZUSÄTZLICHE ANSCHLÜSSE","installation_view_back_wiring":"Hinten","installation_view_backup_configuration_label":"BACKUP-KONFIGURATION","installation_view_basement_location":"Keller","installation_view_company_label":"FIRMEN NAME","installation_view_company_placeholder":"Firmenname","installation_view_conditioned_space_location":"Klimatisierter Raum","installation_view_existing_solar":"Vorhanden","installation_view_floor_mounting":"Boden","installation_view_garage_location":"Garage","installation_view_home_label":"HAUSVERKABELUNG","installation_view_location_label":"POWERWALL INSTALLATIONSORT","installation_view_modem_ethernet":"Hat Mobilfunkmodem zu Ethernet?","installation_view_modem_wifi":"Mobilfunkmodem zu WLAN vorhanden?","installation_view_mounting_label":"POWERWALL-MONTAGE","installation_view_na_backup_configuration":"Unzutreffend","installation_view_new_solar":"Neu","installation_view_none_solar":"Keine","installation_view_outdoor_location":"Im Freien","installation_view_pad_mounting":"Grundplatte","installation_view_partial_home_backup_configuration":"Teil des Hauses","installation_view_phone_label":"Telefon","installation_view_phone_placeholder":"Installateur Telefonnummer","installation_view_powerline_ethernet":"Stromleitung zu Ethernet vorhanden?","installation_view_pv_panel":"PV-Panel","installation_view_relay_enabled":"Relais offen, wenn vom Stromnetz getrennt","installation_view_relay_label":"GATEWAY-NIEDERSPANNUNGSRELAIS","installation_view_relay_options_modal_content":"Dieses Relais wird geschlossen, wenn eine Verbindung zum Stromnetz oder einer anderen Wechselstromquelle besteht. {lb1} Dieses Relais ist geöffnet, wenn keine Verbindung zum Stromnetz besteht. {lb1} Dies kann beispielsweise genutzt werden, damit bei Verbindung mit dem Stromnetz eine Klimaanlage betrieben werden kann, die ohne Verbindung zum Netz abgeschaltet wird. So wird verhindert, dass der damit verbundene hohe Einschaltstrom die Powerwall(s) überlastet.","installation_view_relay_section_modal_content":"Das Gateway verfügt über ein eingebautes Relais, das je nach Systemstatus ein- und ausgeschaltet wird. {lb1} Dies kann verwendet werden, um ein externes Gerät zu steuern, wie einen Verbraucher oder eine sekundäre Energiequelle. {lb1} Verwenden Sie am Backup Gateway 1 die Eingänge 1 und 2 am Hilfsverbinder (9-poliger großer grüner Phoenix-Steckverbinder). {lb1} Verwenden Sie am Backup Gateway 2 die Eingänge 3 und 4 (GSO/GSI) am Aux-Steckverbinder (5-poliger grüner Phoenix-Steckverbinder). {lb1} Dieses Relais ist mit 60 Volt / 2 Ampere bemessen und wird üblicherweise in Stromkreisen mit 12 oder 24 V verwendet. {lb1} Prüfen Sie für weitere Informationen den Lastabwurf und die entsprechenden Anwendungshinweise.","installation_view_residual_current_device":"Ist dem Gateway ein FI vorgeschalten?","installation_view_residual_current_device_modal_content":"Für bestimmte Installationen sind Fehlerstrom-Schutzschalter (FIs) auf Anlagenebene erforderlich, wie bei Stromnetzen mit einer TT-Erdungskonfiguration. {lb1}{lb2} Um das Risiko von Fehlauslösungen im vom Netz getrennten Betrieb zu verringern, empfiehlt Tesla, dass alle vorgeschalteten FIs verzögert ansprechen (Typ S) oder, falls möglich, der Anlagen-FI hinter den Schütz des Gateway verlegt wird. {lb1}{lb2} Weitere Informationen finden Sie im Anwendungshinweis zu RCDs und zum Fehlerschutz.","installation_view_satellite_ethernet":"Satellit zu Ethernet vorhanden?","installation_view_satellite_wifi":"Satellit zu WLAN vorhanden?","installation_view_side_wiring":"Seite","installation_view_solar_label":"SOLARANLAGE","installation_view_solar_panels":"Solarpanele","installation_view_solar_roof":"Solar Roof","installation_view_solar_type_label":"SOLAR-INSTALLATIONSTYP","installation_view_solarglass":"Solarglas","installation_view_stack_kit":"Stack Kit vorhanden?","installation_view_type_commercial":"Großanlage ","installation_view_type_label":"INSTALLATIONSINFORMATIONEN","installation_view_type_perm_off_grid":"Dauerhaft vom Netz getrennt","installation_view_type_residential":"Häuslicher Bereich","installation_view_wall_mounting":"Wand","installation_view_whole_home_backup_configuration":"Gesamtes Haus","installation_view_wifi_extender":"WLAN-Repeater vorhanden?","installation_view_wiring_label":"VERKABELUNG POWERWALL","inverter_test_view_accuracy_magnitude":"Genauigkeit Wert","inverter_test_view_accuracy_time":"Genauigkeit Zeit","inverter_test_view_complete":"Komplett","inverter_test_view_current_magnitude":"Strom Wert","inverter_test_view_fail":"Fehler","inverter_test_view_na":"Nicht zutreffend","inverter_test_view_not_run":"Nicht ausgeführt","inverter_test_view_pass":"Erfolg","inverter_test_view_running":"Läuft","inverter_test_view_set_magnitude":"Wert stellen","inverter_test_view_set_time":"Zeit stellen","inverter_test_view_test_description":"Wechselrichterselbsttest wird ausgeführt","inverter_test_view_test_name_all":"Alle Tests","inverter_test_view_test_name_over_freq_stage_one":"Überfrequenz Stufe 1","inverter_test_view_test_name_over_freq_stage_two":"Überfrequenz Stufe 2","inverter_test_view_test_name_over_volt_one":"Überspannung Stufe 1","inverter_test_view_test_name_over_volt_two":"Überspannung Stufe 2","inverter_test_view_test_name_under_freq_stage_one":"Unterfrequenz Stufe 1","inverter_test_view_test_name_under_freq_stage_two":"Unterfrequenz Stufe 2","inverter_test_view_test_name_under_volt_one":"Unterspannung Stufe 1","inverter_test_view_test_name_under_volt_two":"Unterspannung Stufe 2","inverter_test_view_timestamp":"Zeitstempel","inverter_test_view_trip_magnitude":"Auslösewert","inverter_test_view_trip_time":"Auslösezeit","inverter_test_view_warning":"Hinweis: Der Wechselrichter-Test kann bis zu 20 bis 30 Minuten pro Wechselrichter aufnehmen.","label_fail":"Fehlgeschlagen","label_inconclusive":"Unklar","label_pass":"Erfolgreich","legal_container_customer_policy_subtitle":"Muss vom Kunden ausgefüllt werden.","legal_container_customer_policy_title":"Tesla Kunden Datenschutz & Garantie","legal_container_no_meters_warning":"KEINE ZÄHLER KONFIGURIERT","legal_container_no_powerwalls_warning":"KEINE POWERWALLS ERKANNT","login_type_customer":"Kunde","login_type_engineer":"Ingenieur","login_type_installer":"Installateur","login_view_cancel_login_auth":"Login abbrechen","login_view_change_forgot_password":"PASSWORT ÄNDERN ODER PASSWORT VERGESSEN","login_view_compliance":"COMPLIANCE","login_view_customer_email_placeholder":"E-Mail-Adresse des Kunden","login_view_email":"EMAIL","login_view_email_placeholder":"Email Installateur","login_view_forgot_password":"PASSWORT VERGESSEN","login_view_forgot_password_login_type":"Bitte Anmeldetyp wählen","login_view_language_label":"SPRACHE","login_view_login_type_label":"ANMELDETYP","login_view_password_placeholder":"Ihr Passwort eingeben","login_view_start_login_auth":"LOGIN-VORGANG STARTEN","login_view_start_login_auth_how_to_enable_line_description":"Schalten Sie zum Login den An/Aus-Schalter der Powerwall aus und wieder ein. Bei Systemen mit mehreren Powerwalls muss nur ein Schalter betätigt werden.","login_view_username":"BENUTZERNAME","login_view_username_placeholder":"Benutzername","login_warning_view_expand":"Falls der Konfigurationsassistent nicht startet, {click}.","login_warning_view_firmware_update":"Wenn ein Firmwareupdate installiert wird","login_warning_view_heading":"{warning} Der Start des Assistenten beendet den Batteriebetrieb.","login_warning_view_protect_system":"Um die Stromversorgung aufrecht zu erhalten wird der Konfigurationsassitent nicht gestartet:","login_warning_view_stop_operation":"Start des Konfigurationsasistenten erzwingen (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Derzeit werden nur Chrome und Safari Webbrowser unterstützt.","login_warning_view_system_force_launch":"Wenn Sie den Systembetrieb unterbrechen wollen, wählen Sie Start des Konfigurationsasistenten erzwingen aus.","login_warning_view_system_off_grid":"Wenn Ihr System im off-grid Modus betrieben wird","login_warning_view_warning_click":"klicken sie für mehr","mater_item_view_bad_barcode":"Falscher Barcode eingescannt","mater_item_view_barcode_scan_failed":"Barcode-Scan fehlgeschlagen","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Batterie","meter_aggregate_type_load":"Verbraucher","meter_aggregate_type_site":"Anlage","meter_aggregate_type_solar":"Solar","meter_container_add_meter_error":"Zähler überprüfen","meter_container_add_meter_status":"Zähler wird hinzugefügt","meter_container_authorizing_status":"Autorisieren","meter_container_decode":"Barcode konnte nicht gelesen werden.","meter_container_detecting_status":"Suche verdrahtete Zähler","meter_container_failed_status":"Fehler beim Zähler konfigurieren","meter_container_reconnecting_status":"Wieder verbinden","meter_container_skip_title":"Es wurden keine Zähler in Betrieb genommen. Möchten Sie wirklich fortfahren?","meter_container_starting_status":"Starte","meter_container_subtitle":"Stromzähler short ID(s) und Seriennummer(n) eingeben um eine Verbindung herzustellen. Verbindung zum Zähler überprüfen.","meter_container_subtitle_industrial":"Geben Sie die IP-Adressen und Positionen der Stromzähler ein, um die Verbindung herzustellen. Testen Sie jeden Zähler nach der Inbetriebnahme.","meter_container_success_status":"Zähler erfolgreich hinzugefügt","meter_container_title":"Zähler","meter_container_unknown_status":"Unbekannt","meter_container_updating_status":"Meter-Update läuft","meter_container_verification":"Zä {id} überprüfen","meter_container_verification_gw1":"Während die Verbindung zum WLAN hergestellt wird, werden Sie möglicherweise vorübergehend vom Gateway-WLAN getrennt. {lb} Stellen Sie sicher, dass Sie die erneute Verbindung mit dem korrekten Netzwerk herstellen. Dies kann bis zu 3 Minuten dauern.","meter_container_verification_gw2":"Es kann bis zu 3 Minuten dauern, die Verbindung zum WLAN herzustellen.","meter_container_verify_meter_error":"Zähler überprüfen","meter_container_verifying_status":"Zähler überprüfen","meter_item_view_add_failed":"Zähler konnte nicht hinzugefügt werden","meter_item_view_add_failed_help":"Prüfen Sie Kurz-ID und Seriennummer. Schalten Sie den Zähler aus und wieder ein und schließen Sie ihn an, wenn der Zähler einen Signalton abgibt. Wenn das Problem bestehen bleibt, löschen Sie den Zähler und versuchen Sie es erneut.","meter_item_view_advanced_settings":"ERWEITERTE EINSTELLUNGEN (OPTIONAL)","meter_item_view_battery_ct":"Batterie","meter_item_view_battery_location":"Batterie","meter_item_view_check_meter":"ZÄHLER {id} VERBINDUNG TESTEN","meter_item_view_conductor_location":"elektrischer Leiter","meter_item_view_cts":"{count} Stromwandler erkannt","meter_item_view_doubled_solar_location":"Solar, verdoppelt","meter_item_view_generator_location":"Generator","meter_item_view_ip_address":"IP-ADRESSE","meter_item_view_load_location":"Verbraucher","meter_item_view_mac_address":"MAC-ADRESSE","meter_item_view_meter_location":"ZÄHLERPOSITION","meter_item_view_none_location":"Keine","meter_item_view_remote_ip_address_placeholder":"z. B. 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"z. B. 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"z. B. OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"z. B. 01234","meter_item_view_serial":"SERIENNUMMER","meter_item_view_short_id":"SHORT ID","meter_item_view_site_ct":"Anlage","meter_item_view_site_location":"Anlage","meter_item_view_solar_ct":"Solar","meter_item_view_solar_location":"Solar","meter_item_view_solar_rgm_location":"Ausschließlich Solarüberschuss","meter_item_view_success":"ERFOLGREICH VERBUNDEN!","meter_item_view_unable":"ZÄHLER NICHT ERREICHBAR!","meter_item_view_upgrading":"Meter wird aktualisiert!","meter_list_view_add":"WLAN ZÄHLER HINZUFÜGEN","meter_list_view_add_ip":"IP-ZÄHLER HINZUFÜGEN","meter_list_view_detect":"VERDRAHTETE ZÄHLER ERKENNEN","meter_list_view_enable_inverter_readings":"Auslesen der Batterie-Wechselrichter aktivieren","meter_list_view_inverter_meter":"WECHSELRICHTER-ZÄHLER","meter_list_view_inverter_meter_desc":"Falls aktiviert ohne dass Batterie-Zähler konfiguriert wurden, werden die Messwerte aus den Batterie-Wechselrichtern als Batteriezähler verwendet.","meter_msa_id":"BACKUP-SWITCH {id}","meter_sync_id":"Meter Synchronisation {id}","meter_sync_x_id":"INTERNER PRIMÄRZÄHLER X (GATEWAY) {id}","meter_sync_y_id":"INTERNER HILFSZÄHLER Y (GATEWAY) {id}","meter_update_modal_fetch_status_error":"Status des Meter-Updates nicht verfügbar","meter_update_modal_footer":"Meter-Update kann bis zu 2 Minuten dauern","meter_update_modal_remaining_time":"Verbleibende Zeit {seconds} s","meter_update_modal_timeout_error":"Zeitüberschreitung während des Meter-Updates","meter_update_modal_title":"Meter Update…läuft","meter_validation_container_error":"Solange die Anlagensteuerung in Betrieb ist, kann der Zähler nicht validiert werden.","meter_validation_container_error_placeholder":"Validierung des Zählers nicht verfügbar: {error}.","meter_validation_container_power_command":"Stromzufuhr-Steueranweisung","meter_validation_container_power_start":"Start","meter_validation_container_power_stop":"Stopp","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Blindleistungs-Steueranweisung","meter_validation_container_real_power_command":"Wirkleistungs-Steueranweisung","meter_validation_container_show_per_phase":"Werte pro Phase anzeigen","meter_validation_container_title":"Validierung des Zählers","meter_validation_container_usage":"Eine Stromzufuhr-Steueranweisung senden und die Zählerdaten validieren. Lassen Sie diese Seite geöffnet, damit die Stromzufuhr-Steueranweisung nicht unterbrochen wird. Negative Werten versetzen das System in den Ladezustand. Positive Werten versetzen das System in den Entladezustand.","meter_validation_control_subtitle":"Steuerung","meter_validation_control_title":"Steuertitel","meter_validation_disable":"Deaktivieren","meter_validation_loading":"Wird geladen","meter_validation_menu":"Menü","meter_validation_reset":"Reset","meter_validation_submit":"Senden","meter_validation_submitting_control":"Steuerung übermitteln","meter_validation_title":"Validierung des Zählers","meter_validation_view_apparent_power":"Scheinleistung (kVA)","meter_validation_view_battery_location":"Batterie","meter_validation_view_conductor_location":"elektrischer Leiter","meter_validation_view_current":"Strom (A)","meter_validation_view_doubled_solar_location":"Solar, verdoppelt","meter_validation_view_generator_location":"Generator","meter_validation_view_inverters":"Wechselrichter ({length})","meter_validation_view_load_location":"Verbraucher","meter_validation_view_meter":"Zähler ({length})","meter_validation_view_none_location":"Keine","meter_validation_view_pf":"Leistungsfaktor","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Mittel","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Gesamt","meter_validation_view_reactive_power":"Blindleistung (kVAr)","meter_validation_view_real_power":"Wirkleistung (kW)","meter_validation_view_site_location":"Anlage","meter_validation_view_solar_location":"Solar","meter_validation_view_solar_rgm_location":"Ausschließlich Solarüberschuss","meter_validation_view_voltage":"Spannung (U)","meter_w1_wifi_id":"ZÄHLER {id}","meter_w1_wired_id":"KABELGEBUNDENER ZÄHLER {id}","meter_w2_wifi_id":"ZÄHLER {id}","meter_w2_wired_id":"KABELGEBUNDENER ZÄHLER {id}","meter_wifi_id":"ZÄHLER {id}","meter_wired_id":"Verkabelter Meter {id}","metrics_aggregate":"System","metrics_apparent_power":"Scheinleistung ({unit})","metrics_battery":"Batterie","metrics_current":"Strom ({unit})","metrics_meter":"Zähler","metrics_no_metrics":"Keine anzuzeigenden Metriken.","metrics_power_factor":"Leistungsfaktor","metrics_reactive_power":"Blindleistung ({unit})","metrics_real_power":"Wirkleistung ({unit})","metrics_subtitle":"Metriken","metrics_voltage_l_n":"Spannung L-N ({unit})","modal_acknowledge":"BESTÄTIGEN","modal_confirm":"BESTÄTIGEN","modal_exit":"BEENDEN","modal_no":"NEIN","modal_note":"Hinweis","modal_ok":"OK","modal_reconfigure":"ERNEUT KONFIGURIEREN","modal_yes":"JA","modbus_container_title":"Modbus-Schnittstelle","modbus_table_register_address":"Adresse","modbus_table_register_name":"Name","modbus_table_register_type":"Typ","modbus_table_register_value":"Wert","modbus_table_register_value_decimal":"Wert (dezimal)","modbus_table_register_value_hex":"Wert (hexadezimal)","msa-off-grid":"Mit dem Netz nicht verbunden","msa-on-grid":"Mit dem Netz verbunden","navigation_email":"E-MAIL","network-switch-menu-item":"Netzwerk-Switches","network_cellular_configured":"Konfiguriert, aber nicht verbunden. Stellen Sie sicher, dass das Handy Netzwerk verfügbar ist und sich um die Antenne keine Blockierungen befinden.","network_connected":"Verbunden","network_container_connect_ethernet":"Verbinde mit Ethernet","network_container_connect_to_internet":"Bitte warten das System versucht eine Internet Verbindung herzustellen.","network_container_connect_wifi":"Verbinde mit {ssid}","network_container_connect_wifi_description":"Während diesem Prozess kommt es vor dass Sie sich erneut mit dem Gateway Netzwerk verbinden müssen um die Konfiguration fortzusetzen.","network_container_connman":"Powerwall verbindet sich automatisch mit dem besten Netzwerk.","network_container_connman_body":"Um die Verbindung zu sichern, bitte alle verfügbaren Netzwerke konfigurieren:","network_container_delete_network":"Netzwerkkonfiguration entfernen?","network_container_ethernet_and_wifi_warning":"Bitte WLAN und Ethernet Netzwerke konfigurieren um eine gute Verbindung zu ermöglichen.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Bitte Ethernet Netzwerk konfigurieren um eine gute Verbindung zu ermöglichen.","network_container_network_description":"Mit allen verfügbaren Netzwerken verbinden.","network_container_network_subtitle":"Netzwerk","network_container_no_internet_bullet_four":"Die Powerwall kann Performancedaten an Tesla schicken um dem support team fern Diagnose zu ermöglichen.","network_container_no_internet_bullet_four_industrial":"Geräte können Leistungsdaten an Tesla senden, sodass der technische Support Probleme erkennen kann","network_container_no_internet_bullet_one":"Anmeldeinformation zur Powerwall werden Tesla zugestellt und aktivierten die volle 10-Jahre-Garantie.","network_container_no_internet_bullet_three":"Mit der Tesla App kann der Stromverbrauch beobachtet und der Powerwall Betriebsmodus eingestellt werden.","network_container_no_internet_bullet_two":"Die Powerwall kann Firmware-Updates herunterladen die Performance Verbesserungen und neue Funktionalitäten aktivieren.","network_container_no_internet_bullet_two_industrial":"Geräte können für Leistungsverbesserungen und neue Funktionen Firmware-Updates aus der Ferne empfangen","network_container_no_internet_bullet_zero":"Vor der Inbetriebnahme kann festgestellt werden, ob ein Firmware-Update erforderlich ist","network_container_no_internet_no_cell_title":"Falls der Installationsort über eine Internetverbindung verfügt, führen Sie diesen Schritt aus. Stellen Sie über Ethernet (bevorzugt) oder WLAN die Verbindung zum Internetdienst des Kunden her.","network_container_no_internet_title":"Diesen Schritt nicht übergehen wenn eine Internetverbindung möglich ist. Verbinden Sie die Powerwall mit der Internetverbindung des Kunden per Ethernet (bevorzugt), WLAN oder stellen Sie eine GSM Verbindung her.","network_container_no_internet_warning":"Betrieb ohne Internetverbindung kann die Powerwall Garantie beeinträchtigen.","network_container_scan_networks":"WLAN Netzwerke scannen.","network_container_scan_wifi_disconnect_warning":"Warnung: Um nach neuen Netzwerken zu suchen wird die drahtlose Verbindung vorübergehend getrennt.","network_container_wifi_subtitle":"WLAN","network_container_wifi_warning":"Bitte WLAN Netzwerk konfigurieren um eine gute Verbindung zu ermöglichen.","network_disabled":"Deaktiviert","network_disconnected":"Nicht verbunden","network_ethernet_configured":"Konfiguriert, aber nicht verbunden. Prüfen Sie die Ethernet-Kabelverbindung.","network_switches_container_discover_failure":"Letzter Erkennungsfehler: {error}","network_switches_container_discover_switches":"Netzwerk-Switches erkennen","network_switches_container_discovered_label":"Erkannte Netzwerk-Switches","network_switches_container_discovering_stop_button":"Erkennung stoppen","network_switches_container_discovery_switches_running_label":"Die Erkennung von Netzwerk-Switches läuft derzeit. Sie können die Erkennung unten beenden.","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"Netzwerk-Switches werden nur auf Industriesystemen unterstützt.","network_switches_container_password_not_set":"Passwort ist nicht eingerichtet","network_switches_container_password_set":"Das Passwort ist eingerichtet","network_switches_container_passwords_error":"Passwort-Einrichtungsstatus: {status}","network_switches_container_set_password_label":"Passwort auf allen Netzwerk-Switches einrichten, die noch das werkseitige Standardpasswort verwenden.\\n Alle Passwörter werden auf denselben Wert eingerichtet.","network_switches_container_set_passwords":"Passwörter einrichten","network_switches_container_set_passwords_button":"Passwort einrichten","network_switches_container_setting_passwords_button":"Passwort wird eingerichtet...","network_switches_container_start_discovering_button":"Erkennung starten","network_switches_container_start_discovery_help":"Die Netzwerk-Switch-Erkennung erfolgt automatisch und periodisch, kann aber über die \\"Erkennung Starten\\"-Schaltfläche ausgelöst werden.","network_switches_container_subtitle":"Netzwerk-Switches anzeigen","network_switches_container_title":"Netzwerk-Switches","network_view_check_connection":"INTERNET VERBINDUNG TESTEN","network_view_connection_failed":"NICHT VERBUNDEN!","network_view_connection_success":"ERFOLGREICH VERBUNDEN!","network_view_continue_no_internet":"OHNE INTERNET FORTFAHREN","network_view_default_error":"Fehler bei der Verbindung","network_view_local_network_connected":"Lokales Netzwerk verbunden","network_view_local_network_disconnected":"Fehler im lokalen Netzwerk","network_view_tesla_internet_connected":"Tesla-Dienste und Internet verbunden","network_view_tesla_internet_disconnected":"Fehler bei der Verbindung zu Tesla-Diensten und Internet","network_warning":"Warnung","network_wifi_configured":"Konfiguriert, aber nicht verbunden. Prüfen Sie Ihre WLAN-Einstellungen.","open_meter_validatiion_container_title":"Zählervalidierung öffnen","operation_mode_autonomous":"Autonomer Modus","operation_mode_backup":"Nur Backup-Laden","operation_mode_self_consumption":"Eigenverbrauchsmodus","operation_mode_site_control":"Anlagen-Regelung","overview_menu_control_title":"Steuerung","overview_menu_diagnostics_title":"Diagnose","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Verbunden","overview_menu_network_no_connection":"Keine Verbindung","overview_menu_registration_complete":"Abgeschlossen","overview_menu_registration_incomplete":"Unvollständig","overview_menu_registration_pending":"Warte auf Internetverbindung","overview_menu_security_title":"Passwort ändern oder zurücksetzen","overview_menu_settings_title":"Einstellungen","overview_menu_summary_title":"Zusammenfassung","overview_menu_system_title":"System","overview_menu_update_title":"Software-Update","overview_menu_view_alerts_event":"Vorfall","overview_menu_view_alerts_events":"Vorfälle","overview_menu_view_inverter_title":"Wechselrichtertest","overview_menu_view_network_title":"Netz","overview_menu_view_registration_title":"Registrierung","overview_menu_view_test_title":"Selbsttest","overview_meter_validation_title":"Validierung des Zählers","password_generate_error":"Beim Generieren eines neuen Passworts ist ein Fehler aufgetreten. Überprüfen Sie die Verbindung sowie das aktuelle Passwort und versuchen Sie es erneut.","password_generate_help_text":"Um ein neues Zufallspasswort zu generieren, geben Sie das vorhandene Passwort ein.","password_generate_menu_title":"Kennwort ändern","password_generate_notice":"Das Passwort wurde geändert. Notieren Sie sich das neue Passwort, bevor Sie diese Seite verlassen.","phase_container_detect_timeout":"Phasenerkennung abgelaufen","phase_container_detection_attempt":"Versuch Nr. {num}","phase_container_grid_code_validating_modal_title":"Anschlussbedingungen validieren","phase_container_grid_compliant_description":"Netzkonform {checkmark}","phase_container_grid_modal_description":"Netzkonform in {time} Sekunden.","phase_container_grid_modal_title":"Warten auf Netzkonformität","phase_container_modal_description":"Phasenerkennung dauert bis zu 2 Minuten pro Powerwall","phase_container_modal_title":"Phasenerkennung läuft","phase_container_saving_phases_modal_title":"Sparphasen","phase_container_subtitle":"Darstellung der Phasen und der angeschlossenen Powerwall. Ermöglicht die Konfiguration der Phasen.","phase_container_supported_error":"Keine Powerwalls erkannt. Phasenerkennung wird nicht unterstützt.","phase_container_title":"Phase","phase_container_voltage_caution_body":"Unerwartete Spannung von {voltage} V an {lineNumber} erkannt. Vergewissern Sie sich, ob {lineStatus} für diese Phase die geeignete Einstellung ist.","phase_container_warning_body":"Es wurden keine Backup-Phasen ausgewählt. Daher unterstützt das System keine Verbraucher, wenn die Verbindung zum Stromnetz unterbrochen wird.","phase_container_warning_modal_header":"Backup ist inaktiv","phase_line_id":"Zeilen-{id}","phase_line_item_view_line":"Phase","phase_line_item_view_line_status_backup":"Backup/Notstrom","phase_line_item_view_line_status_configured":"Non Backup","phase_line_item_view_line_status_not_configured":"Nicht konfiguriert","phase_line_status_backup":"Backup","phase_line_status_configured":"Nicht-Backup","phase_line_status_not_configured":"Nicht konfiguriert","phase_view_detect":"Phasenerkennung","phase_view_split_phase":"Split Phase","power_flow_view_go_off_grid":"VOM NETZ TRENNEN","power_flow_view_go_on_grid":"MIT NETZ VERBINDEN","power_flow_view_grid_button_disabled_reason":"Für eine Trennung vom Netz muss das System gestartet werden.","power_flow_view_grid_spinner_alt_label":"Systemumschaltung","power_flow_view_start_system":"SYSTEM STARTEN","power_flow_view_stop_system":"SYSTEM STOPPEN","powerwall_container_industrial_no_additional_title":"Keine zusätzlichen Batterieblöcke gefunden","powerwall_container_industrial_subtitle":"Es sind alle automatisch durch die Anlagensteuerung erkannten Batterien aufgeführt. Führen Sie einen neuen Scan durch, wenn die Batterie nicht aufgeführt ist.","powerwall_container_industrial_subtitle_auto_detection":"Es sind alle automatisch durch die Anlagensteuerung erkannten Batterien aufgeführt. Wenn ein Batterieblock nicht in der Liste aufgeführt ist, überprüfen Sie die Netzwerkausrüstung, einschließlich der Verkabelung, und stellen Sie sicher, dass die Bus-Controller eingeschaltet sind.","powerwall_container_industrial_title":"Batterie","powerwall_container_industrial_updating":"Batterien werden geprüft","powerwall_container_no_additional_powerwalls_description":"Im Installationshandbuch nach Tips zu verdrahtungsproblemen suchen.","powerwall_container_no_additional_powerwalls_title":"Keine weiteren Powerwalls gefunden","powerwall_container_scan_again":"ERNEUT SCANNEN","powerwall_container_scanning":"Scanne","powerwall_container_scanning_for_more":"Scanne ...","powerwall_container_subtitle":"Liste der automatisch erkannten Powerwalls. Erneut scannen falls eine Powerwall nicht aufgeistet ist.","powerwall_container_subtitle_component_auto_detection":"In der Liste sind alle Komponenten aufgeführt, die vom Gateway automatisch erkannt werden. Wenn eine Komponente nicht aufgeführt ist, überprüfen Sie die Verkabelung.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Powerwalls werden überprüft","powerwall_container_updating_note":"Hinweis: Dies dauert bis zu 60 Sekunden pro Powerwall.","powerwall_item_view_blank_numbers":"Wartet auf Überprüfung…","powerwall_item_view_numbers":"PartNummer:{partNumber} Seriennummer:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"Abbrechen","powerwall_pairing_connect":"Anschließen","powerwall_pairing_done":"Fertig","powerwall_pairing_error_already_paired":"Kopplung fehlgeschlagen: Das Gerät ist bereits gekoppelt","powerwall_pairing_error_bad_pairing_response":"Kopplung fehlgeschlagen: Gerät verweigert die Kopplung. Stellen Sie sicher, dass das Folgegerät gestoppt wurde","powerwall_pairing_error_bad_qr_code":"Kein W-LAN-QR-Code","powerwall_pairing_error_changes_prohibited":"Kopplung fehlgeschlagen Verboten","powerwall_pairing_error_internal":"Kopplung fehlgeschlagen: interner Fehler","powerwall_pairing_error_no_qr_code":"Es wurde kein QR-Code gefunden","powerwall_pairing_error_no_response":"Kopplung fehlgeschlagen: Gerät hat nicht geantwortet.","powerwall_pairing_error_not_leader":"Kopplung fehlgeschlagen: Dies ist ein Folgegerät. Verbinden Sie sich erneut mit dem Führungsgerät.","powerwall_pairing_error_prohibited_uncommissioned":"Kopplung fehlgeschlagen: Diese Powerwall wurde noch nicht in Betrieb genommen","powerwall_pairing_error_too_many_devices":"Kopplung fehlgeschlagen: Die maximale Anzahl von Geräten ist bereits gekoppelt","powerwall_pairing_error_unknown":"Kopplung fehlgeschlagen: Unbekannter Fehler","powerwall_pairing_error_wifi_connection_failed":"Kopplung fehlgeschlagen: Es konnte keine Verbindung zum W-LAN hergestellt werden. Bitte überprüfen Sie das Passwort.","powerwall_pairing_error_wifi_not_found":"Kopplung fehlgeschlagen: W-LAN-Netzwerk nicht gefunden","powerwall_pairing_exception":"Kopplung fehlgeschlagen: Ausnahme","powerwall_pairing_instructions_2":"Geben Sie die W-LAN-SSID und das Passwort für die zu koppelnde Powerwall ein oder scannen Sie sie. Suchen Sie auf dem Gerät nach einem QR-Code.","powerwall_pairing_password_label":"Kennwort:","powerwall_pairing_scan_qr_code":"QR-Code scannen","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"Kopplung abgeschlossen. Es kann sein, dass das neue Gerät erst nach einer Minute oder länger reagiert (länger, wenn gerade ein Update durchgeführt wird). Klicken Sie auf \\"Fertig\\", um den Vorgang abzubrechen.","powerwall_pairing_state_monitoring":"Neues Gerät koppeln. Dies kann bis zu einer Minute dauern.","powerwall_starting":"Powerwall wird gestartet","powerwall_view_detected_backup":"Notstromfunktion erkannt","powerwall_view_detected_synchrometers":"Meter-Leistungsfähigkeit","powerwall_view_failed":"PROBLEM","powerwall_view_no_backup":"Notstromfunktion nicht erkannt","powerwall_view_no_sync":"Synchronizer nicht erkannt","powerwall_view_scan":"SCANNEN","powerwall_view_success":"ERFOLG","powerwall_view_synchrometer_detected":"Synchrometer erkannt","powerwall_view_synchronizer_detected":"Synchronizer erkannt","powerwall_view_update":"POWERWALLS PRÜFEN","privacy_policy_view_accept_warranty_title":"Tesla Powerwall beschränkte Garantie akzeptieren","privacy_policy_view_contact_bullet_one":"per E-Mail an {privacyEmail};","privacy_policy_view_contact_bullet_two":"per Post an Tesla, Inc., z. Hd.: Legal, 45500 Fremont Boulevard, Fremont, Kalifornien, 94538, Vereinigte Staaten.","privacy_policy_view_contact_header":"Wie Sie uns erreichen","privacy_policy_view_contact_paragraph_one":"Um uns eine Frage oder Anmerkung zukommen zu lassen oder sich von bestimmten Dienstleistungen abzumelden, kontaktieren Sie uns bitte unter:","privacy_policy_view_contact_paragraph_three":"Falls Sie im EWR oder in der Schweiz Ihren Wohnsitz haben, ist für die Verarbeitung Ihrer personenbezogenen Daten womöglich Ihr lokales Tesla Unternehmen zuständig.","privacy_policy_view_contact_paragraph_two":"Bitte beachten Sie, dass E-Mail-Mitteilungen nicht immer sicher sind. Fügen Sie Ihren E-Mails an uns also keine Kreditkarteninformationen oder sensible Informationen bei.","privacy_policy_view_cross_border_transfers_header":"Grenzüberschreitende Übertragungen","privacy_policy_view_cross_border_transfers_paragraph_one":"Die Dienstleistungen werden von den Vereinigten Staaten aus kontrolliert und betrieben. Informationen von Ihnen, über Sie oder über Ihre Nutzung unserer Produkte oder der Dienstleistungen können in jedem Land, in dem wir Standorte haben oder wo wir Dienstleister beauftragen, gespeichert und verarbeitet werden. In diesen Ländern bestehen möglicherweise nicht die gleichen Datenschutzgesetze in dem Land, in dem Sie diese Informationen erstmalig mitgeteilt haben. Wenn wir Informationen von Ihnen, über Sie oder Ihre Nutzung unserer Produkte oder der Dienstleistungen in andere Länder übermitteln, schützen wir diese in der in dieser Datenschutzrichtlinie beschriebenen Weise. Mit der Nutzung unserer Produkte, unserer Dienstleistungen, oder indem Sie uns auf sonstige Weise Informationen zur Verfügung stellen, erklären Sie sich mit der Übermittlung von Informationen von Ihnen, über Sie oder über Ihre Nutzung unserer Produkte oder Dienstleistungen in Länder außerhalb Ihres Wohnsitzlandes, einschließlich der USA, einverstanden.","privacy_policy_view_cross_border_transfers_paragraph_two":"Falls Sie sich im EWR oder in der Schweiz befinden, befolgen wir maßgebliche Rechtsvorschriften, die einen angemessenen Schutz bei der Übermittlung personenbezogener Informationen in Länder außerhalb des EWR oder der Schweiz gewährleisten. Tesla ist zertifiziert und befolgt das von dem U.S. Handelsministerium und der Europäischen Kommission verfügbar gemachte EU-U.S. Privacy Shield Programm {privacyShield} in Bezug auf die Verarbeitung von bestimmten personenbezogenen Informationen, die aus dem EWR zu Tesla und zu ihren hundertprozentigen U.S. Tochtergesellschaften übertragen werden. Teslas EU-U.S. Privacy Shield Datenschutzrichtlinie ist hier verfügbar.","privacy_policy_view_devices":"Informationen von Ihnen, über Sie oder Ihre Geräte","privacy_policy_view_energy_products":"FVon oder über Ihre Tesla-Energieprodukte","privacy_policy_view_eu_policy_warning":"Sie müssen den Datenschutzrichtlinien zustimmen, um Ihre Powerwall zu registrieren und mit der Tesla Mobile App überwachen zu können.","privacy_policy_view_eu_warranty_warning":"Wenn Sie die Tesla Datenschutzerklärung nicht akzeptieren, sind wir unter Umständen nicht in der Lage die volle 10 Jahre Garantie zu erfüllen. Tesla erfüllt mindestens eine 4 Jahre Garantie vom Datum der ersten Installation der Powerwall, vorbehaltlich der Ausschlüsse und Beschränkungen in der Garantieerklärung {warrantyLink}.","privacy_policy_view_grid_services":"Ihre Powerwall kann kann die Zuverlässigkeit des Stromnetzes durch die Bereitstellung von Dienstleistungen unter optionalen Programmen, die von Dienstleistern oder Dritten angeboten werden, unterstützen. Diese Dienstleistungen beinhalten eine stückweise Entladung Ihrer Powerwall zu günstigen Zeiten mit finanziellen Vorteilen für Sie. Dazu müssen wir jedoch Ihre Energieverbrauchsdaten und Powerwall-Informationen an Versorger oder Drittparteien weitergeben. Bevor wir Sie in ein solches Netzdienstprogramm einbinden, werden wir Ihnen dessen Einzelheiten mitteilen und Ihnen die Möglichkeit bieten, diese Teilnahme zu verweigern. Wenn Sie zu diesem Zeitpunkt die Teilnahme nicht ablehnen, werden Sie in das Programm eingegliedert.","privacy_policy_view_grid_services_title":"Stromnets-Dienstleistungen","privacy_policy_view_grid_warning":"Sie müssen nicht zustimmen. Falls Sie ablehnen, können wir Ihnen evtl. zu einem späteren Zeitpunkt erneut die Gelegenheit bieten, an diesem Programmen teilzunehmen.","privacy_policy_view_here":"hier","privacy_policy_view_homeowner_na":"Hauseigentümer nicht verfügbar","privacy_policy_view_homeowner_required":"Muss vom Kunden ausgefüllt werden.","privacy_policy_view_information_collection_devices_bullet_five":"Über Ihren Browser oder Ihr Gerät: Bestimmte Informationen werden von den meisten Browsern oder automatisch über Ihr Gerät erfasst, wie beispielsweise Ihre Media Access Control (MAC) Adresse, Computertyp (Windows oder Macintosh), Bildschirmauflösung, Name und Version des Betriebssystems, Hersteller und Modell des Geräts, Sprache, Typ und Version des Internetbrowsers sowie Name und Version der Dienstleistungen (z. B. der Tesla App), die Sie verwenden. Wir verwenden diese Informationen um sicherzustellen, dass die Dienstleistungen ordnungsgemäß funktionieren.","privacy_policy_view_information_collection_devices_bullet_four":"Offline: Wir können offline von Ihnen oder über Sie Informationen erfassen, beispielsweise wenn Sie einen Tesla-Store oder einen Reparaturstandort besuchen, an einem unserer Events teilnehmen, sich für eine Probefahrt anmelden, eine telefonische Bestellung aufgeben oder unseren Kundenservice bzw. unsere Verkaufsabteilung kontaktieren.","privacy_policy_view_information_collection_devices_bullet_one":"Über die Dienstleistungen: Wir erfassen möglicherweise Informationen von Ihnen oder über Sie über unsere Webseiten, Softwareanwendungen, Seiten der sozialen Medien, E-Mail-Nachrichten oder andere digitale Dienstleistungen (die „Dienstleistungen“), z. B. wenn Sie sich für einen Newsletter anmelden, einen Einkauf tätigen oder Ihr Produkt bei uns registrieren.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla: Kunden, die bestimmte Tesla-Produkte kaufen, erhalten ein My Tesla-Konto, welches auf unserer Webseite gehostet wird. Wir können folgende Arten von Daten, die Sie uns freiwillig zur Verfügung stellen, über Ihr My Tesla-Konto erfassen und verarbeiten: Ihre Kundenanmeldedaten; den Status Ihrer Bestellung; Garantie- oder andere Dokumente über Ihre Tesla-Produkte sowie allgemeine Informationen über Ihre Tesla-Produkte (wie beispielsweise Fahrzeugidentifikationsnummer oder eine andere Produktseriennummer, Serviceplandaten oder das Konnektivitätspaket), Versicherungsformulare, Führerscheine, Finanzierungsverträge und ähnliche Informationen. Sie können auf Ihr My Tesla-Konto jederzeit zugreifen um die Informationen von Ihnen oder über Sie auf diesem Konto zu aktualisieren.","privacy_policy_view_information_collection_devices_bullet_two":"Aus anderen Quellen: Wir können möglicherweise auch aus anderen Quellen Informationen über Sie erhalten, wie beispielsweise aus öffentlichen Datenbanken, von gemeinsamen Marketingpartnern, zertifizierten Installationsunternehmen, externen Reparatur- oder Servicecentern und von Plattformen sozialer Medien.","privacy_policy_view_information_collection_energy_products_bullet_one":"Wir können Informationen über Ihr Produkt, wie Ihr Installationsdatum, die Anzahl der installierten Produkte und Seriennummer(n) erheben.","privacy_policy_view_information_collection_energy_products_bullet_two":"Damit wir unsere Energieprodukte und -dienstleistungen anbieten und verbessern können, können wir Daten darüber erfassen, wo Ihr Produkt installiert und wie es konfiguriert ist, Daten betreffend die Nutzung und Leistung des Produkts, Daten hinsichtlich Ihres aggregierten Heimenergieverbrauchs und weitere Daten, die für die Fehlerdiagnose von Bedeutung sind.","privacy_policy_view_information_collection_header":"Welche Informationen wir erfassen","privacy_policy_view_information_collection_paragraph_five":"Wenn Sie nicht mehr möchten, dass wir Telematikprotokolldaten oder andere Dateien von Ihrem Tesla Fahrzeug erhalten, kontaktieren Sie uns bitte wie im Abschnitt „Wie Sie uns erreichen“ unten beschrieben. Bitte beachten Sie, dass, wenn Sie der Erfassung von Telematikprotokolldaten oder anderer Daten von Ihrem Tesla Fahrzeug widersprechen (mit Ausnahme der oben angeführten Einstellungen für die Datenfreigabe), wir nicht in der Lage sind, Sie in Echtzeit über Probleme im Zusammenhang mit Ihrem Fahrzeug zu informieren. Dies kann dazu führen, dass bei Ihrem Fahrzeug eine lediglich eingeschränkte Funktionalität, ernsthafte Schäden oder Funktionsunfähigkeit eintreten können. Es können dadurch auch zahlreiche Funktionen Ihres Fahrzeugs außer Betrieb gesetzt werden, wie regelmäßige Software- und Firmwareaktualisierungen, Fernwartungen und die Interaktion mit mobilen Anwendungen und im Auto installierten Funktionen, wie beispielsweise Standortsuche, Internetradio, Sprachsteuerung und Webbrowserfunktionalität.","privacy_policy_view_information_collection_paragraph_four":"Wir können unterschiedliche Informationen von oder über Ihre Tesla Energieprodukte mithilfe des zertifizierten Installationsunternehmens oder von den installierten Produkten (direkt oder über verbundene Geräte wie beispielsweise Umwandler) erheben. Dazu zählen:","privacy_policy_view_information_collection_paragraph_one":"Wir erfassen im Wesentlichen drei Arten von Informationen über Sie oder darüber, wie Sie unsere Produkte und Dienstleistungen nutzen: (1) Informationen von Ihnen oder über Sie oder Ihre Geräte, (2) Informationen von oder über Ihr Tesla-Fahrzeug, und (3) Informationen von oder über Ihre Tesla-Energieprodukte. Abhängig davon welche Tesla-Produkte und -Dienstleistungen Sie anfragen, besitzen oder verwenden, treffen nicht alle genannten Arten von Informationen auf Sie zu.","privacy_policy_view_information_collection_paragraph_three":"Wenn Sie unsere Website besuchen oder andere unserer Dienstleistungen nutzen, können wir Cookies, Pixel Tags, Analysetools und andere vergleichbare Technologien verwenden, die uns dabei helfen, unsere Dienstleistungen anzubieten und zu verbessern. Nachstehend gehen wir näher darauf ein:","privacy_policy_view_information_collection_paragraph_two":"Wir erfassen möglicherweise auf unterschiedlichen Wegen Informationen von Ihnen oder über Sie (wie beispielsweise Name, Adresse, Telefonnummer, E-Mail, Zahlungsinformationen, etc.) oder Ihre Geräte, einschließlich:","privacy_policy_view_information_collection_services_bullet_five":"Wenn Sie sich das Add-on zum Google Analytics Opt-out-Browser herunterladen, verfügbar unter {website}, erfahren Sie mehr darüber, wie Google bei der Erfassung dieser Informationen vorgeht und wie Sie dem widersprechen können.","privacy_policy_view_information_collection_services_bullet_four":"Analysetools: Wir nutzen von Dritten erbrachte Dienste für die Website- und Anwendungsanalyse, bei denen zur Sammlung von Informationen über die Nutzung von Websites oder Anwendungen und der Meldung von Trends Cookies und ähnliche Technologien verwendet werden, ohne einzelne Besucher zu identifizieren. Diese Dritte, die solche Dienste für uns erbringen, können außerdem Informationen über Ihre Nutzung von Websites Dritter erheben.","privacy_policy_view_information_collection_services_bullet_one":"Cookies: Cookies sind Informationen, die direkt auf dem von Ihnen genutzten Computer gespeichert werden. Cookies ermöglichen es uns, Informationen wie Browsertyp, mit den Dienstleistungen verbrachte Zeit, besuchte Seiten, bevorzugte Sprachen und sonstige Daten über den Webverkehr zu sammeln. Gemeinsam mit unseren Dienstleistern nutzen wir diese Informationen zu Sicherheitszwecken, um die Online-Navigation zu erleichtern, zur effektiveren Anzeige von Informationen, zur individuellen Anpassung Ihrer Erfahrungen bei der Nutzung der Dienstleistungen und um die Benutzeraktivität auf andere Weise zu analysieren. Wir können Ihren Computer erkennen, um Ihre Nutzung der Dienstleistungen zu unterstützen. Wir sammeln auch statistische Daten über die Nutzung der Dienstleistungen, um deren Design und Funktionalität fortwährend zu verbessern, um zu verstehen, wie die Dienstleistungen genutzt werden und um uns bei der Beantwortung von Fragen in Bezug auf die Dienstleistungen zu unterstützen. Cookies ermöglichen es uns außerdem zu ermitteln, welche unserer Werbungen oder Angebote Sie am meisten ansprechen und ermöglichen uns deren Einblendung. Wir können Cookies auch in Online-Werbungen verwenden um festzustellen, wie Sie mit unseren Anzeigen interagieren und wir können Cookies oder andere Dateien zur Nachvollziehung Ihrer Nutzung von anderen Webseiten verwenden.","privacy_policy_view_information_collection_services_bullet_three":"Pixel Tags und sonstige ähnliche Technologien: Pixel-Tags (auch Web Beacons oder Clear GIFs genannt) können in Verbindung mit einigen Dienstleistungen unter anderem dazu verwendet werden, die Handlungen von Nutzern der Dienstleistungen (inklusive E-Mail-Empfängern) nachzuvollziehen, den Erfolg unserer Werbekampagnen zu messen und Statistiken über die Nutzung der Dienstleistungen und die Ansprechraten zusammenzustellen.","privacy_policy_view_information_collection_services_bullet_two":"Wenn Sie bei der Nutzung Ihres Kontos „My Tesla“ oder unserer Website auf eine Datenerhebung mittels Cookies verzichten möchten, sehen die meisten Browser eine einfache Möglichkeit vor, mit der Sie Cookies automatisch ablehnen können oder die Ihnen die Wahl bietet, die Übertragung eines bestimmten oder mehrerer Cookies von einer bestimmten Website auf Ihren Computer abzulehnen oder zu akzeptieren. Lesen Sie sich gegebenenfalls auch die Informationen auf {website} durch. Wenn Sie diese Cookies jedoch nicht akzeptieren, können bei Ihrer Nutzung der Dienstleistungen möglicherweise Unannehmlichkeiten auftreten. So kann uns beispielsweise die Erkennung Ihres Computers nicht möglich sein und Sie müssen sich bei jedem Besuch der betreffenden Dienstleistungen neu einloggen.","privacy_policy_view_information_rights_choices_agree_eu":"Sie müssen der Datenschutzrichtlinie zustimmen, um Ihre Powerwall registrieren und mit der Tesla Mobile App überwachen zu können.","privacy_policy_view_information_rights_choices_agree_one":"Sie müssen der Datenschutzrichtlinie zustimmen, um Ihre Powerwall registrieren und mit der Tesla Mobile App überwachen zu können. Es ist keine weitere Handlung erforderlich, wenn Sie nicht auf Ihre Powerwall-Informationen über die Tesla Mobile App zugreifen möchten.","privacy_policy_view_information_rights_choices_bullet_one":"Sie können auf Ihr My Tesla Konto jederzeit zugreifen um die Informationen von Ihnen oder über Sie auf diesem Konto zu aktualisieren.","privacy_policy_view_information_rights_choices_bullet_two":"Wenn Sie vorher von Ihnen uns zur Verfügung gestellte Informationen über sich oder von Ihnen überprüfen, korrigieren, aktualisieren, sperren oder löschen möchten, können Sie uns unter der unten angeführten Adresse kontaktieren.","privacy_policy_view_information_rights_choices_header":"Rechte und Wahlmöglichkeiten","privacy_policy_view_information_rights_choices_paragraph_four":"Beachten Sie bitte, dass wir bestimmte Informationen gegebenenfalls zu Dokumentverwaltungs- oder gesetzlich vorgeschriebenen Zwecken und/oder zum Abschluss von Transaktionen aufbewahren müssen, die vor der erbetenen Änderung oder Löschung begonnen haben (wenn Sie z. B. einen Kauf tätigen oder an einer Werbeaktion teilnehmen, können Sie die mitgeteilten personenbezogenen Informationen möglicherweise erst nach Abschluss dieses Kaufs oder dieser Werbeaktion ändern oder löschen). Es können auch Restinformationen vorhanden sein, die in unseren Datenbanken und anderen Aufzeichnungen verbleiben und nicht entfernt werden.","privacy_policy_view_information_rights_choices_paragraph_one":"Wie oben ausgeführt, stellen wir Ihnen zahlreiche Wahlmöglichkeiten hinsichtlich der Erfassung, Nutzung und Weitergabe von Informationen von Ihnen, über Sie oder Ihrer Nutzung unserer Produkte oder Dienstleistungen durch uns zur Verfügung. Vorbehaltlich geltendem Recht haben Sie in manchen Ländern womöglich das Recht, Zugang zu bestimmten Informationen, die wir über Sie speichern, oder Informationen über diese zu erhalten, diese zu aktualisieren und Fehler in diesen Informationen zu korrigieren und diese Daten sperren oder löschen zu lassen. Diese Rechte können unter bestimmten Umständen durch örtliche Gesetze eingeschränkt sein. Wir bieten Ihnen mehrere Möglichkeiten auf Informationen von Ihnen oder über Sie zuzugreifen, diese zu korrigieren, aktualisieren oder deren Sperrung oder Löschung zu verlangen. Zu diesen zählen:","privacy_policy_view_information_rights_choices_paragraph_three":"Wir werden bezüglich Ihrer Anfrage(n) der Geltendmachung dieser Rechte und Wahlmöglichkeiten so schnell wie möglich nachkommen.","privacy_policy_view_information_rights_choices_paragraph_two":"Bitte geben Sie in Ihrer Anfrage deutlich an welche Informationen Sie ändern möchten, ob Sie möchten, dass die uns von Ihnen zur Verfügung gestellten Informationen in unserer Datenbank gesperrt werden bzw. welche sonstigen Einschränkungen Sie uns bezüglich der Nutzung der von Ihnen bereitgestellten Informationen auferlegen möchten. Zu Ihrem Schutz bearbeiten wir nur Anfragen bezüglich Informationen, die mit der von Ihnen für die Übermittlung der Anfrage verwendeten E-Mail-Adresse verbunden sind. Wir müssen möglicherweise Ihre Identität prüfen bevor wir Ihrer Anfrage nachkommen.","privacy_policy_view_information_share_header":"Wie wir die von uns erhobenen Informationen weitergeben","privacy_policy_view_information_share_paragraph_eight":"Unter anderen Umständen","privacy_policy_view_information_share_paragraph_eleven":"Wenn Sie der Verarbeitung von Informationen widersprechen möchten, für welche Sie zuvor ausdrücklich Ihre Einwilligung erteilt haben, kontaktieren Sie uns bitte wie im Abschnitt „Wie Sie uns erreichen“ unten beschrieben.","privacy_policy_view_information_share_paragraph_five":"Wir können Informationen an andere von Ihnen genehmigte Dritte weitergeben, beispielsweise unter den folgenden Umständen:","privacy_policy_view_information_share_paragraph_five_point_four":"An den Anbieter Ihres Kontos für soziale Medien, wenn Sie Ihr Konto für die Dienstleistungen und Ihr Konto für soziale Medien miteinander vernetzen. Wenn Sie das tun, ermächtigen Sie uns Informationen an den Anbieter Ihres Kontos für soziale Medien weiterzugeben und Sie verstehen, dass die Nutzung der Informationen die wir weitergeben der Datenschutzlinie des Anbieters des Kontos für soziale Medien unterliegt.","privacy_policy_view_information_share_paragraph_five_point_one":"An unsere zertifizierten Installationsunternehmen, damit wir Ihnen die von Ihnen angefragten Energieprodukte leichter zur Verfügung stellen können.","privacy_policy_view_information_share_paragraph_five_point_three":"An externe Sponsoren von Preisausschreiben oder ähnlichen Werbeaktionen, wenn Sie beschließen an diesen teilzunehmen.","privacy_policy_view_information_share_paragraph_five_point_two":"An externe Servicecenter oder Dienstleister, wenn Sie sich zu deren Nutzung entschieden haben. Beachten Sie, dass einige Informationen über Sie auf bestimmten Tesla Produkten gespeichert werden und externe Servicecenter oder Dienstleister, die Sie mit der Diagnostizierung oder Wartung Ihres Tesla Produkts beauftragen, darauf möglicherweise direkten Zugriff haben.","privacy_policy_view_information_share_paragraph_four":"An andere von Ihnen genehmigte Dritte","privacy_policy_view_information_share_paragraph_nine":"Wir können Informationen unter anderen Umständen weitergeben, beispielsweise:","privacy_policy_view_information_share_paragraph_nine_point_one":"An Ihren Arbeitgeber, andere Fuhrparkbetreiber oder den Eigentümer von Tesla Produkten, wenn das Produkt nicht Ihnen selbst gehört und sofern dies nach geltendem Recht zulässig ist.","privacy_policy_view_information_share_paragraph_nine_point_two":"An Dritte in Zusammenhang mit jeder Neuorganisierung, Fusion, Verkauf, Joint Venture, Abtretung, Übertragung oder sonstigen Verfügungen über unser gesamtes Geschäft, Vermögen oder unsere Aktien (auch in Zusammenhang mit jedweden Konkurs- oder vergleichbaren Verfahren) oder über einen Teil davon.","privacy_policy_view_information_share_paragraph_one":"Wir können die von uns erfassten Informationen an unsere Dienstleister und Geschäftspartner weitergeben, an von Ihnen genehmigte Dritte, an andere Dritte, wenn dies rechtlich vorgeschrieben ist und unter anderen Umständen. Beispiele dafür, wie wir Informationen an diese Dritten weitergeben und unter welchen Umständen, finden Sie unten.","privacy_policy_view_information_share_paragraph_seven":"Tesla kann Informationen an Dritte übertragen und diesen gegenüber offenlegen. Dazu zählen auch Informationen, die möglicherweise Rückschlüsse auf Ihre Identität zulassen können, um eine rechtliche Verpflichtung zu erfüllen (beispielsweise, aber nicht beschränkt auf Vorladungen); wenn wir gutgläubig der Ansicht sind, dass dies rechtlich vorgeschrieben ist; in Beantwortung einer rechtmäßigen Anfrage von staatlichen Behörden, die eine Ermittlung durchführen, dazu zählt auch die Erfüllung von Rechtsdurchsetzungsanforderungen; um unsere Richtlinien und Verfahren zu überprüfen oder durchzusetzen; um auf einen Notfall zu reagieren; um eine Handlung zu verhindern oder zu unterbinden, von der wir der Ansicht sind, dass sie möglicherweise oder tatsächlich rechtswidrig, unethisch oder rechtlich angreifbar ist; um die Rechte, das Eigentum oder die Sicherheit der Dienstleistungen von Tesla, Dritter, von Besuchern, die unsere Dienstleistungen abrufen oder der Öffentlichkeit zu schützen, was wir ausschließlich nach unserem eigenen Ermessen bestimmen.","privacy_policy_view_information_share_paragraph_six":"An andere Dritte in rechtlich vorgeschriebenen Fällen","privacy_policy_view_information_share_paragraph_ten":"Wir geben keine Informationen, die einen Rückschluss auf Ihre Identität zulassen, an nicht an uns angeschlossene Dritte für deren Marketingzwecke weiter, sofern Sie dieser Weitergabe nicht einwilligen.","privacy_policy_view_information_share_paragraph_three":"Wir können Informationen an unsere Dienstleister und Geschäftspartner weitergeben, wenn dies notwendig ist um Dienstleistungen für uns oder Sie zu erbringen, beispielsweise unter den folgenden Umständen:","privacy_policy_view_information_share_paragraph_three_point_one":"An die an Tesla angeschlossene Unternehmen zu den in der Datenschutzrichtlinie beschriebenen Zwecken. An Tesla angeschlossene Unternehmen sind Unternehmen, die im Eigentum von Tesla, Inc. stehen oder von dieser kontrolliert werden bzw. Unternehmen, an denen Tesla, Inc. eine wesentliche Beteiligung hält.","privacy_policy_view_information_share_paragraph_three_point_three":"An andere externe Geschäftspartner insoweit diese in Ihren Kauf oder die Wartung von Tesla Produkten eingebunden sind. Wir geben begrenzte Informationen von Ihnen oder über Sie an Partner in den Bereichen Finanz-, Leasing- und Anmeldewesen sowie an Rechtstitelversicherungsfirmen weiter, damit Sie diese Dienstleistungen in Anspruch nehmen können, falls Sie sich für deren Nutzung entscheiden.","privacy_policy_view_information_share_paragraph_three_point_two":"An unsere externen Dienstleister und Vertriebskanalpartner um Dienstleistungen wie Website-Hosting, Datenanalyse und -speicherung, Zahlungsbearbeitung, Auftragserfüllung und Produktinstallation, drahtlose Konnektivität mit Tesla Produkten, Informationstechnologie und dazugehörige Infrastruktur, Kundenservice, Produktwartung und dazugehörige Dienstleistungen, E-Mail-Zustellungen, Kreditkartenzahlungen, Buchführung, Marketing, Verarbeitung der Sprachsteuerung und vergleichbare Dienstleistungen zur Verfügung zu stellen.","privacy_policy_view_information_share_paragraph_two":"An unsere Dienstleister und Geschäftspartner","privacy_policy_view_information_use_commuicate":"Zur Kommunikation mit Ihnen","privacy_policy_view_information_use_header":"Nutzung der von uns erhobenen Informationen","privacy_policy_view_information_use_other_purposes":"Für andere Zwecke","privacy_policy_view_information_use_paragraph_five":"Wir können die von uns erfassten Informationen auch für andere Zwecke nutzen, beispielsweise:","privacy_policy_view_information_use_paragraph_five_point_one":"Für unsere Geschäftszwecke, wie beispielsweise Datenanalyse, Audits, Betrugsüberwachung und –prävention, Ermittlung von Nutzertrends, Bestimmung der Effektivität unserer Werbekampagnen und Betrieb und Ausweitung unserer Geschäftstätigkeit.","privacy_policy_view_information_use_paragraph_five_point_two":"Ausgenommen der oben genannten und unten aufgeführten Fälle kann Tesla Informationen, die keine Rückschlüsse auf Ihre Identität zulassen, für jedwede Zwecke nutzen oder weitergeben, beispielsweise für betriebliche oder Forschungszwecke, für Branchenanalysen, zur Verbesserung oder Änderung unserer Produkte und Dienstleistungen, um unsere Produkte und Dienstleistungen besser auf Ihre Bedürfnisse abzustimmen und wenn dies rechtlich erforderlich ist.","privacy_policy_view_information_use_paragraph_four":"Wir können die von uns erfassten Informationen nutzen um unsere Produkte und Dienstleistungen anzubieten und zu verbessern, beispielsweise:","privacy_policy_view_information_use_paragraph_four_point_five":"Um die Sicherheit unserer Produkte und Dienstleistungen zu überprüfen und zu verbessern.","privacy_policy_view_information_use_paragraph_four_point_four":"Um neue Produkte und Dienstleistungen zu entwickeln und zu bewerben und unsere bestehenden Produkte und Dienstleistungen zu verändern oder zu verbessern.","privacy_policy_view_information_use_paragraph_four_point_one":"Um Ihren Kauf abzuwickeln und zu erfüllen, beispielsweise um Ihre Zahlungen zu bearbeiten, Ihnen Ihre Bestellung zuzusenden, mit Ihnen hinsichtlich Ihres Kaufs zu kommunizieren und Ihnen den dazugehörigen Kundenservice zu bieten.","privacy_policy_view_information_use_paragraph_four_point_six":"Um Ihnen alle sonstigen von Ihnen angeforderten Dienstleistungen bereitzustellen.","privacy_policy_view_information_use_paragraph_four_point_three":"Um die Leistung Ihres Tesla-Produkts zu überwachen und Ihnen entsprechende Dienstleistungen bereitzustellen.","privacy_policy_view_information_use_paragraph_four_point_two":"Um Ihr Tesla Produkt zu warten, beispielsweise um Sie bezüglich Service-Empfehlungen zu kontaktieren und Ihr Produkt drahtlos zu aktualisieren.","privacy_policy_view_information_use_paragraph_one":"Wir können die von Ihnen erhobenen Daten zur Kommunikation mit Ihnen, zum zur Verfügung stellen von Produkten und Dienstleistungen für andere Zwecke nutzen. Beispiele dafür, wie wir Informationen für diese Zwecke nutzen, finden Sie nachstehend.","privacy_policy_view_information_use_paragraph_three":"Ihre Kommunikationswahlmöglichkeiten:","privacy_policy_view_information_use_paragraph_three_point_one":"Erhalt elektronischer Mitteilungen von uns oder uns angeschlossener Unternehmen: Wenn Sie von uns oder den uns angeschlossenen Unternehmen keine E-Mails mit Marketinginhalten mehr erhalten möchten, können Sie dem Erhalt widersprechen indem Sie die Opt-Out-Anweisungen befolgen, die Sie in jeder unserer E-Mails finden oder indem Sie uns unter der unten angeführten Adresse kontaktieren. Bitte beachten Sie, dass auch wenn Sie den Erhalt von Marketing-E-Mails abgewählt haben, wir Ihnen weiterhin wichtige administrative und sicherheitsrelevante Mitteilungen übermitteln können.","privacy_policy_view_information_use_paragraph_three_point_two":"Erhalt von Marketinganrufen von uns: Lassen Sie sich bitte einfach auf die „Nicht anrufen“-Liste setzen wenn Sie von uns Marketinganrufe erhalten und in Zukunft keine derartigen Anrufe mehr erhalten möchten. Bitte beachten Sie, dass wir Sie weiterhin in Bezug auf administrative, sicherheitsrelevante oder produktservicetechnische Fragen anrufen können, auch wenn Sie den Erhalt von Marketing-Anrufen abgewählt haben.","privacy_policy_view_information_use_paragraph_two":"Wir können die von uns erfassten Informationen nutzen, um mit Ihnen zu kommunizieren, wie beispielsweise:","privacy_policy_view_information_use_paragraph_two_point_five":"Um Ihnen auf Sie individuell angepasste Produkte und Angebote vorzustellen und unsere Listen mit Informationen aus anderen Quellen zu ergänzen.","privacy_policy_view_information_use_paragraph_two_point_four":"Um Ihnen administrative Informationen zukommen zu lassen, wie beispielsweise Informationen über die Dienstleistungen und Änderungen unserer Geschäftsbedingungen und Richtlinien.","privacy_policy_view_information_use_paragraph_two_point_one":"Um auf Ihre Anfragen zu antworten und Ihre Aufträge zu erfüllen, wie indem wir Ihnen Newsletter oder Produktinformationen, Informationsbenachrichtigungen oder Broschüren zukommen lassen","privacy_policy_view_information_use_paragraph_two_point_seven":"Um das Teilen in den sozialen Medien und die Kommunikationsfunktionalitäten zu erleichtern.","privacy_policy_view_information_use_paragraph_two_point_six":"Um es Ihnen zu ermöglichen, an Preisausschreiben oder ähnlichen Werbeaktionen teilzunehmen und um diese Aktivitäten zu verwalten","privacy_policy_view_information_use_paragraph_two_point_three":"Um Sie auf wichtige sicherheitsbezogene Informationen hinzuweisen oder um Einsatzkräfte im Falle eines Unfalls mit Ihrem Fahrzeug zu verständigen.","privacy_policy_view_information_use_paragraph_two_point_two":"Um Feedback bezüglich Ihrer Tesla Probefahrt einzuholen, auszuwerten und bereitzustellen.","privacy_policy_view_information_use_provide":"Um unsere Produkte und Dienstleistungen anzubieten und zu verbessern","privacy_policy_view_links_header":"Links","privacy_policy_view_links_paragraph_one":"Diese Datenschutzrichtlinie bezieht sich nicht auf den Datenschutz, Informationen oder sonstige Praktiken von Dritten und wir sind für diese nicht verantwortlich. Dazu zählen auch Dritte, die Seiten oder Dienstleistungen betreiben, auf welche die Dienstleistungen verlinkt sind. Die Aufnahme eines Links in die Dienstleistungen bedeutet keine Unterstützung der verlinkten Seite oder Leistung unsererseits oder seitens unserer verbundenen Unternehmen und sie ist auch kein Hinweis auf eine Zugehörigkeit zu diesem Dritten.","privacy_policy_view_links_paragraph_two":"Bitte beachten Sie, dass wir nicht für die Erfassungs-, Nutzungs- oder Offenlegungsrichtlinien und -praktiken (einschließlich Datenschutzpraktiken) anderer Organisationen, wie die anderer App-Entwickler, App-Anbieter, Anbieter von Plattformen für soziale Medien, Betriebssystemanbieter oder WLAN-Anbieter verantwortlich sind. Ebenso sind wir nicht für Informationen verantwortlich, die Sie gegenüber anderen Organisationen über oder in Verbindung mit unseren Software-Anwendungen oder Seiten in den sozialen Medien offenlegen.","privacy_policy_view_minors_header":"Minderjährige","privacy_policy_view_minors_paragraph":"Die Dienstleistungen richten sich nicht an Personen, die jünger als sechzehn (16) Jahre sind und wir bitten darum, dass diese Personen Tesla keine Informationen zur Verfügung stellen.","privacy_policy_view_offers_eu":"Ja, ich möchte gerne Marketing-Mitteilungen per E-Mail empfangen. Dazu gehören Umfragen, Aktionen, sowie Angebote von Produkten und Dienstleistungen durch Tesla und Tesla-Partnern. Ich habe das Recht, diese Zustimmung jederzeit zurückzuziehen. Weitere Informationen: {legalLink}.","privacy_policy_view_offers_title":"Zustimmung Zum Empfang Von Marketing-Informationen","privacy_policy_view_offers_usa":"Ich erlaube Tesla mich per automatischer Text- oder Sprachnachricht auf der angegebenen Nummer zu kontaktieren.","privacy_policy_view_powerwall_warranty":"Tesla Powerwall Garantie","privacy_policy_view_privacy_policy":"Anmerkung Zum Datenschutz","privacy_policy_view_privacy_policy_agreement_eu":"Ich, der Hauseigentümer, habe die Tesla Datenschutzrichtlinien in Gänze durchgelesen und stimme der Verarbeitung meiner persönlichen Angaben durch Tesla, wie in den Tesla Datenschutzrichtlinien beschrieben, zu. Ich habe das Recht, diese Zustimmung jederzeit zurückzuziehen, wie in den Tesla Datenschutzrichtlinien dargelegt.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Ich, der Eigentümer, habe die gesamte Tesla Datenschutzerklärung gelesen und stimme der Verarbeitung und Nutzung meiner privaten Daten der Datenschutzerklärung entsprechend zu.","privacy_policy_view_privacy_shield":"Privacy Shield Datenschutzrichtlinie","privacy_policy_view_retention_period_header":"Aufbewahrungsfrist","privacy_policy_view_retention_period_paragraph":"Wir bewahren Informationen, die wir von Ihnen oder über unsere Kunden, unsere Produkte und die Dienstleistungen erfassen, so lange auf, wie es erforderlich ist um die in dieser Datenschutzrichtlinie dargestellten Zwecke zu erfüllen, es sei denn eine längere Aufbewahrungsfrist ist rechtlich zulässig oder vorgeschrieben.","privacy_policy_view_security_header":"Sicherheit","privacy_policy_view_security_paragraph_one":"Wir sind bestrebt, für angemessene organisatorische, technische und verwaltungstechnische Sicherheitsmaßnahmen zu sorgen, um Informationen innerhalb unserer Organisation zu schützen. Leider kann die Sicherheit einer Datenübertragung oder eines Speichersystems niemals zu 100% garantiert werden. Wenn Sie Grund zu der Annahme haben, dass Ihre Interaktion mit uns nicht mehr sicher ist (z.B. wenn Sie glauben, dass die Sicherheit eines Ihrer Konten bei uns beeinträchtigt wurde), informieren Sie uns bitte umgehend über das Problem, indem Sie sich mit uns, wie im Abschnitt „Wie Sie uns erreichen“ unten beschrieben, in Verbindung setzen.","privacy_policy_view_security_paragraph_two":"Verkaufen oder übertragen Sie Ihr Tesla Produkt an eine andere Person, benachrichtigen Sie uns bitte, damit wird feststellen können, welche weiteren Schritte erforderlich sind, um die Informationen von Ihnen oder über Sie gegen Offenlegung gegenüber dem Käufer oder Übertragungsempfänger des Tesla-Produkts zu schützen.","privacy_policy_view_title":"Datenschutzbestimmungen ansehen","privacy_policy_view_updates_header":"Aktualisierungen dieser Richtlinie","privacy_policy_view_updates_paragraph":"Wir können diese Datenschutzrichtlinie ändern. Bitte sehen Sie sich die „Zuletzt aktualisiert am“-Legende am Seitenende an um festzustellen, wann diese Datenschutzrichtlinie das letzte Mal überarbeitet wurde. Alle Änderungen dieser Datenschutzrichtlinie werden, sobald wir die überarbeitete Datenschutzrichtlinie über die Dienstleistungen veröffentlichen, wirksam. Durch die Nutzung unserer Produkte, der Dienstleistungen oder indem Sie uns auf andere Weise Informationen nach diesen Änderungen zur Verfügung stellen, nehmen Sie die überarbeitete Datenschutzrichtlinie an.","privacy_policy_view_us_warranty_warning":"Sie müssen den Datenschutzrichtlinien zustimmen, um Ihre Powerwall zu registrieren und mit der Tesla Mobile App überwachen zu können.","privacy_policy_view_warranty_information":"Ich, der Hauseigentümer, akzeptiere die Bedingungen der Tesla Powerwall Garantie unter {warrantyLink}. In diesen Bedingungen ist eine Schlichtungsbestimmung enthalten, durch die ich auf das Recht verzichte, an Sammelklagen oder an Verfahren in Geschworenengerichten teilzunehmen. Ich kann innerhalb von 30 Tagen dieser Bestimmung widersprechen, indem ich den entsprechenden Prozess, die in der Bestimmung beschrieben ist, befolge.","prompt_factory_reset_confirmation":"Möchten Sie das Gerät wirklich auf die Werkseinstellungen zurücksetzen?","pvac-state-active":"Aktiv","pvac-state-faulted":"Fehlerhaft","pvac-state-init":"Initialisieren ...","pvac-state-standby":"Warten auf","pvac_alert_ac_fault":"AC-Fehler des Solarwechselrichters","pvac_alert_check_ac_note":"Überprüfen Sie die AC-Verkabelung und den Netzanschluss. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_check_dc_string1_note":"Überprüfen Sie die DC-Verkabelung und die Schalttafeln von String 1. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_check_dc_string2_note":"Überprüfen Sie die DC-Verkabelung und die Schalttafeln von String 2. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_check_dc_string3_note":"Überprüfen Sie die DC-Verkabelung und die Schalttafeln von String 3. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_check_dc_string4_note":"Überprüfen Sie die DC-Verkabelung und die Schalttafeln von String 4. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_confirm_grid_code_note":"Überprüfen Sie die AC-Verkabelung und den Netzanschluss. Bestätigen Sie die ausgewählten Netzanschlussbedingungen.","pvac_alert_dc_fault_string1":"Wechselrichter-DC-Fehler - String 1","pvac_alert_dc_fault_string2":"Wechselrichter-DC-Fehler - String 2","pvac_alert_dc_fault_string3":"Wechselrichter-DC-Fehler - String 3","pvac_alert_dc_fault_string4":"Wechselrichter-DC-Fehler - String 4","pvac_alert_freq_change":"Nicht netzkonform - Frequenzänderung","pvac_alert_internal_comms":"Internes Kommunikationsproblem","pvac_alert_over_freq":"Nicht netzkonform - Überfrequenz","pvac_alert_over_temp":"Wechselrichter-Übertemperatur","pvac_alert_over_voltage":"Nicht netzkonform - Überspannung","pvac_alert_production_limited_note":"Die Produktion kann eingeschränkt sein. Stellen Sie sicher, dass die Kabel ordnungsgemäß angeschlossen sind, ein ausreichender Luftstrom vorhanden ist und die Installationsumgebung stimmt.","pvac_alert_reboot_note":"Wechselrichter neu starten, sicherstellen, dass das System auf dem neuesten Stand und vollständig in Betrieb ist.","pvac_alert_under_freq":"Nicht netzkonform - Unterfrequenz","pvac_alert_under_voltage":"Nicht netzkonform - Unterspannung","pvi-power-status-dc-only":"Nur Gleichstrom","pvi-power-status-disabled":"Deaktiviert","pvi-power-status-enabled":"Aktiviert","pvi-reset-button-label":"Starten Sie den Wechselrichter neu und löschen Sie Warnmeldungen","pvs-self-test-1":"Selbsttest (1/6): Erdschluss","pvs-self-test-2":"Selbsttest (2/6): Lichtbogenfehler","pvs-self-test-3":"Selbsttest (3/6): MCI","pvs-self-test-4":"Selbsttest (4/6): Isolation","pvs-self-test-5":"Selbsttest (5/6): Relais-Schweißung","pvs-self-test-6":"Selbsttest (6/6): Impedanz","pvs_alert_check_arc_fault_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Lichtbogenfehler.","pvs_alert_check_dc_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Erdschlussprobleme.","pvs_alert_check_dc_string1_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Isolationsprobleme, mit Schwerpunkt auf String 1.","pvs_alert_check_dc_string2_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Isolationsprobleme, mit Schwerpunkt auf String 2.","pvs_alert_check_dc_string3_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Isolationsprobleme, mit Schwerpunkt auf String 3.","pvs_alert_check_dc_string4_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Isolationsprobleme, mit Schwerpunkt auf String 4.","pvs_alert_check_dc_strings_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und String-Konfigurationen.","pvs_alert_dc_arc_fault_detected":"Gleichstrom-Lichtbogenfehler - Erkannt","pvs_alert_dc_arc_fault_lockout":"Gleichstrom-Lichtbogenfehler - Sperre","pvs_alert_dc_ground_fault":"Gleichstrom-Erdschlussfehler","pvs_alert_dc_isolation_string1":"Gleichstrom-Isolationsproblem - String 1","pvs_alert_dc_isolation_string2":"Gleichstrom-Isolationsproblem - String 2","pvs_alert_dc_isolation_string3":"Gleichstrom-Isolationsproblem - String 3","pvs_alert_dc_isolation_string4":"Gleichstrom-Isolationsproblem - String 4","pvs_alert_dc_over_voltage":"Gleichstrom-Überspannung","pvs_alert_rapid_shutdown":"Schnellabschaltung ist eingeleitet","pvs_alert_rapid_shutdown_note":"Wechselspannungstrennschalter und Niederspanungs-Schnellabschaltungskreis prüfen.","registration_container_continue_header":"Eingegebene E-Mail-Adresse des Kunden: {email}","registration_container_continue_modal_description":"Mit einer falschen E-Mail-Adresse kann der Kunde nicht auf die Tesla Mobile App zugreifen. Prüfen Sie, ob die E-Mail-Adresse des Kunden korrekt ist.","registration_container_customer_email_required":"Für die Aktivierung der Tesla Mobile App ist die E-Mail-Adresse des Kunden erforderlich.","registration_container_customer_information_title":"Kundeninformation","registration_container_fill_required_fields":"Alle Felder sind durch den Installateur oder den Kunden auszufüllen.","registration_container_loading_modal_registering":"Registrierung läuft","registration_container_reset_form_modal_description":"Bitte bestätigen Sie, dass Sie das Formular tatsächlich zurücksetzen möchten.","registration_container_reset_form_modal_header":"Alle zuvor eingegebenen Informationen werden gelöscht.","security_container_settings_title_customer":"Passwort ändern oder zurücksetzen (Kunde)","security_container_settings_title_installer":"Passwort ändern oder zurücksetzen (Installateur)","security_view_copied_to_clipboard":"Kopiert!","security_view_not_wifi_qr_code_error":"Kein WLAN-QR-Code.","security_view_scan_qr_code_not_found_error":"Kein QR-Code gefunden.","security_view_settings_change_password_error":"Die neuen Kennwörter stimmen nicht überein.","security_view_settings_change_password_label":"PASSWORT ÄNDERN","security_view_settings_completed":"FERTIG","security_view_settings_new_password_label":"NEUES PASSWORT","security_view_settings_old_password":"AKTUELLES PASSWORT","security_view_settings_password_change_info":"Geben Sie zum Ändern des Passworts bitte das aktuelle Passwort und ein neues Passwort ein.","security_view_settings_password_customer":"PASSWORT","security_view_settings_password_customer_placeholder":"letzten 5 Zeichen des Passworts (Gatewayaufkleber)","security_view_settings_password_installer_label":"Gateway Passwort","security_view_settings_password_reset_info":"Betätigen Sie zum Zurücksetzen des Passworts den Schalter an der Powerwall, und geben Sie anschließend die letzten 5 Zeichen der Gateway-Seriennummer ein.","security_view_settings_password_reset_info_serial":"Betätigen Sie zum Zurücksetzen des Kennworts den Schalter an der Powerwall, und geben Sie anschließend die letzten 5 Zeichen der Gateway-Seriennummer ein.","security_view_settings_password_reset_installer_info":"Betätigen Sie zum Zurücksetzen des Passworts den Schalter an der Powerwall, und geben Sie anschließend die Gateway-Seriennummer ein.","security_view_settings_password_reset_installer_info_serial":"Betätigen Sie zum Zurücksetzen des Kennworts den Schalter an der Powerwall, und geben Sie anschließend die Gateway-Seriennummer ein.","security_view_settings_re_enter_password_label":"NEUES PASSWORT ERNEUT EINGEBEN","security_view_settings_reset_password_label":"PASSWORT ZURÜCKSETZEN","security_view_settings_serial_customer":"SERIENNUMMER","security_view_settings_serial_customer_placeholder":"Letzte 5 Zeichen der Gateway-Seriennummer","security_view_settings_serial_installer_label":"Gateway-Seriennummer","security_view_settings_success":"Passwort wurde aktualisiert","security_view_settings_success_new_password":"Das neue Passwort lautet:","security_view_settings_toggled_password":"Passwort vergessen?","self_test_result_viewer_resi_only":"Selbsttest-Protokollanzeige ist nicht verfügbar.","self_test_results_viewer_collapse_all":"Alle einklappen","self_test_results_viewer_column_name":"Name","self_test_results_viewer_column_result":"Ergebnis","self_test_results_viewer_column_spec":"Spezifikation","self_test_results_viewer_column_test_time":"Testzeit","self_test_results_viewer_column_value":"Wert","self_test_results_viewer_expand_all":"Alle ausklappen","self_test_results_viewer_failed":"Fehlgeschlagen","self_test_results_viewer_in_progress":"In Bearbeitung","self_test_results_viewer_inconclusive":"Unklar","self_test_results_viewer_not_started":"Nicht gestartet","self_test_results_viewer_passed":"bestanden","self_test_results_viewer_skipped":"Übersprungen","self_test_results_viewer_warning":"Warnung","settings_container_confirm_reset_operation_mode":"Bestätigen Sie den Wechsel in den Modus {operation}","settings_container_heco_modal_description":"Diese Einstellung kann nach der Auswahl nicht mehr geändert werden. Bestätigen Sie, dass der Kunde derzeit beim HECO-Batterie-Bonusprogramm angemeldet ist, bevor Sie Ihre Auswahl senden.","settings_container_heco_modal_title":"Anmeldung bestätigen","settings_container_heco_view_description":"Die Powerwall entlädt sich täglich mit der vereinbarten Kapazität, um die Anforderungen des Programms zu erfüllen. Diese Einstellung kann nach der Aktivierung nicht mehr geändert werden.","settings_container_heco_view_scheduled_dispatch_start_time":"Startzeit","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"HECO geplanter Versand","settings_container_heco_view_title":"HECO-Batterie-Bonusprogramm","settings_container_operation_modes_modal_content":"Wechseln Sie den Betriebsmodus über den Bildschirm ‚Anpassen‘ der Tesla Mobile App.","settings_container_operation_modes_modal_reset":"MODUS ZURÜCKSETZEN","settings_container_operation_modes_modal_title":"Betriebsmodus","settings_container_operation_modes_modal_warning":"Diese Änderung kann nicht rückgängig gemacht werden. Erweiterte Modi können nur über die Tesla Mobile App wieder aktiviert werden.","settings_container_operation_modes_reset_modal_title":"Betriebsmodus zurücksetzen?","settings_container_operation_settings_subtitle":"Benennen Sie ihr System, Einstellungen für Betriebsmodus und Exportlimits.","settings_container_operation_settings_title":"Betriebseinstellung","settings_container_save_instructions":"Klicken Sie zum Speichern auf WEITER.","settings_container_saving_site_info_modal":"Energiespar-Einstellungen der Anlage","settings_container_site_import_description":"Import-Grenzwert der Anlage ist eine optionale Einstellung. Lassen Sie dieses Feld frei, um die Importbegrenzung zu deaktivieren. Bei Aktivierung gibt diese Einstellung die Maximalleistung, die aus der Anlage in das Netz eingespeist werden darf, an.","settings_container_site_limits_header":"Anlagen-Grenzwerte","settings_view_custom_modes_label":"Voreinstellung - {mode}","settings_view_energy_reserve_heco_label":"Änderungen an der Backup-Reserve sind aufgrund der Anmeldung für das HECO-Batterie-Bonusprogramm eingeschränkt. Der Kunde kann in seiner App eine Backup-Reserve festlegen.","settings_view_energy_reserve_label":"ENERGIE RESERVE (FÜR NOTSTROM IST NICHT FÜR SELBSTNUTZUNG VERFÜGBAR)","settings_view_instruction_site_name":"Bitte Namen eingeben","settings_view_net_meter_mode":"Export-Modus","settings_view_operation_label":"BETRIEBSMODUS","settings_view_operation_set_label":"EINZUSTELLENDER BETRIEBSMODUS","settings_view_set_net_meter_mode_never_label":"Kein Export","settings_view_set_net_meter_mode_solar_label":"Solar-Export","settings_view_site_name":"HAUS NAME","settings_view_site_name_placeholder":"zB. Mein Haus","settings_view_solar_export_limitation_slider":"Solarstrom Einspeiselimit","settings_view_solar_feature":"Diese Funktion sollte nur aktiviert werden, wenn das Solarsystem nicht in das Netz einspeisen darf. Typisch in Hawaii (CSS) und Australien.","settings_view_solar_limitation":"WURDE EINE POWERWALL ZUSAMMEN MIT EINEM SOLARSYSTEM INSTALLIERT, DAS KEINE POWERWALL+ IST?","settings_view_solar_zero_export":"POWERWALL NEBEN EINEM SOLARSYSTEM OHNE EXPORT INSTALLIERT?","site_info_container_submit":"SENDEN","solar_item_view_baudrate_label":"Baudrate","solar_item_view_brand_input_label":"HERSTELLER","solar_item_view_brand_label":"Hersteller","solar_item_view_check_inverter":"Wechselrichter {id} Verbindung überprüfen","solar_item_view_connection_warning":"Verbindung konnte nicht hergestellt werden","solar_item_view_inverter_brand":"Solar Wechselrichter Hersteller","solar_item_view_inverter_communication":"Wechselrichter Kommunikation","solar_item_view_inverter_model_label":"Wechselrichter Modell","solar_item_view_ip_label":"IP Adresse","solar_item_view_model_label":"MODEL","solar_item_view_power_rating_explanation":"Dies ist die Gesamtnennleistung der PV-Anlage hinsichtlich der Module/Panelen. Zum Beispiel: geben Sie bei zehn 300W Panelen als Gesamtnennleistung 3000W an, auch wenn der PV-Wechselrichter eine Nennleistung von 2500W oder 3500W hat.","solar_item_view_pv_array_dc_power_rating":"PV-Anlage DC-Nennleistung","solar_item_view_pv_array_dc_power_rating_label":"Photovoltaik Anlagen DC Nennleistung","solar_item_view_revenue_grade":"Wirkungsgrad","solar_item_view_revenue_grade_explanation":"Nur auswählen, wenn der Wechselrichtger über einen integrierten Wirkungsgradmesser verfügt. Die Wechselrichterdaten werden dann von diesem Messer übernommen.","solar_item_view_revenue_grade_title":"Wirkungsgrad","solar_item_view_solar":"SOLAR {id}","solar_item_view_success":"ERFOLGREICH VERBUNDEN!","solar_item_view_unable":"Wechselrichter nicht erkannt","solar_list_view_continue_add_solar":"Photovoltaik Anlage hinzufügen","solar_view_continue_add_solar":"SOLAR HINZUFÜGEN","status_update_urgency_none":"Auf dem aktuellen Stand","status_update_urgency_optional":"Aktualisierung optional","status_update_urgency_required":"Aktualisierung erforderlich","status_update_urgency_unknown":"Unbekannt","success_view_awesome":"SUPER!","success_view_copied_to_clipboard":"Kopiert!","success_view_installation_complete":"Installation komplett","success_view_new_password_error_title":"Passwort des Assistenten","success_view_new_password_title":"Neues Passwort des Assistenten","success_view_password_set":"Passwort wurde bereits festgelegt","success_view_record_password":"Bitte notieren Sie dieses Passwort, bevor Sie fortfahren.","success_view_retry_registration":"REGISTRIERUNG ERNEUT VERSUCHEN","success_view_set_customer_password":"KUNDENPASSWORT FESTLEGEN","success_view_syncing_configuration":"Konfiguration synchronisieren","summary_container_company":"Unternehmen","summary_container_connection_type":"Anschluss","summary_container_email":"E-Mail-Adresse","summary_container_installer_information":"Informationen des Installateurs","summary_container_ip_address":"IP-Adresse","summary_container_location":"Standort","summary_container_meter":"Zähler Nr. {index}","summary_container_meter_information":"Zählerinformationen","summary_container_phone":"Telefonnummer","summary_container_print":"Drucken","summary_container_serial_number":"Seriennummer","summary_container_site_info":"Standortinformationen","summary_container_site_name":"Name des Standorts","summary_container_subtitle":"Produkt- und Installationsinformationen","summary_site_information":"STANDORTINFORMATIONEN","summary_view_autonomous":"Zeitbasierte Einstellung","summary_view_backup":"Ausschließlich Notstrom","summary_view_backup_capable":"Backup möglich","summary_view_backup_reserve":"NOTSTROMRESERVE","summary_view_backup_switch":"BACKUP-SWITCH","summary_view_conductor_export":"EXPORTGRENZWERT DES LEITERS","summary_view_conductor_import":"IMPORTGRENZWERT DES LEITERS","summary_view_control":"Anlagen-Regelung","summary_view_customer_version":"KUNDENVERSION","summary_view_direct":"Direkt","summary_view_disabled":"DEAKTIVIERT","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"PV-EXPORTGRENZE","summary_view_extra_programs":"EXTRA PROGRAMME","summary_view_followers":"FOLGEGERÄTE","summary_view_gateway":"GATEWAY","summary_view_grid_code":"NETZ-STANDARD","summary_view_gsm":"MOBILFUNK","summary_view_heco_battery_bonus":"HECO-Batterie-Bonus","summary_view_ip_address":"IP-ADRESSE","summary_view_leader":"FÜHRUNGSGERÄT","summary_view_mode":"MODUS","summary_view_msg_cannot_read_solar_assembly":"Stoppen Sie das System zuerst, um die Teilenummer und die Seriennummer der Powerwall+-Solar-Baugruppe zu sehen.","summary_view_network":"NETZWERK","summary_view_non_backup":"Ohne Backup","summary_view_panel_limit":"SCHALTTAFEL-MAXIMALSTROM","summary_view_part_number":"Teilenummer","summary_view_partnum":"Teil {partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Aggregation","summary_view_self_consumption":"Eigenverbrauch","summary_view_serial":"Serie","summary_view_serialnum":"Seriennummer {serialNumber}","summary_view_site_export":"EXPORTGRENZWERT DER ANLAGE","summary_view_site_import":"IMPORTGRENZWERT DER ANLAGE","summary_view_site_name":"NAME DES STANDORTS","summary_view_solar_assembly":"SOLAR-BAUGRUPPE","summary_view_sync":"BACKUP-MÖGLICHKEIT","summary_view_time":"ZUSAMMENFASSUNG KOMPILIERZEIT","summary_view_time_zone":"ZEITZONE","summary_view_wifi":"WLAN","system-device-follower-not-responding":"W-LAN-gekoppeltes Gerät antwortet momentan nicht","system-device-unknown-sitecontroller":"Das Gerät hat seine Untergeräte noch nicht entdeckt","system_acpw_vitals_charge":"Ladestufe: {charge}%","system_acpw_vitals_power":"Wechselstromleistung {power}","system_acpw_vitals_power_charging":"Wechselstromleistung {power} Laden","system_acpw_vitals_power_discharging":"Wechselstromleistung: {power} Entladen","system_acpw_vitals_state":"Powerwall-Status: {state}","system_acpw_vitals_voltage":"Wechselstromspannung: {voltage}","system_controller_din":"Steuergerät: {din}","system_device_alert_disabled":"Gerät deaktiviert","system_device_alert_updating":"Firmware wird aktualisiert...","system_device_gateway_not_islanding":"Es handelt sich nicht um den Inselbildungsregler.","system_device_leader":"Führungsgerät","system_device_name_backup_switch":"Backup-Switch ({sn})","system_device_name_battery_assembly":"Batterie-Baugruppe ({sn})","system_device_name_gateway":"Gateway ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus":"{role} Powerwall+","system_device_name_powerwall_plus_leader":"Haupt-Powerwall+","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+ (verkabelt)","system_device_name_powerwall_plus_wireless":"Powerwall+ (drahtlos)","system_device_name_remote_meter":"Remote-Messgerät({sn})","system_device_name_solar_assembly":"Solar-Baugruppe ({sn})","system_device_name_solar_assembly_1":"Solar-Baugruppe","system_device_name_sync":"Gateway Schütz/Zählersteuerung ({sn})","system_firmware_update":"Aktualisierung: {percent}% ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"Backup-Status: {backupState}","system_islanding_vitals_grid_line":"Netzleitung {lineNumber}: {v} {f}","system_islanding_vitals_island_line":"Inselleitung {lineNumber}: {v} {f}","system_overview_connected":"Mit Tesla verbunden","system_overview_disconnected":"Nicht mit Tesla verbunden","system_overview_follower":"Folge-Powerwall","system_overview_login_required":"Login erforderlich, um Systembetrieb anzuzeigen","system_overview_scanning":"Scan nach weiteren Geräten läuft...","system_overview_site_controller":"Anlagensteuerung","system_overview_updating":"Geräte werden aktualisiert ...","system_pvi_vitals_ac_solar_power":"AC Solarenergie: {power} / {current}","system_pvi_vitals_ac_solar_power_only":"AC Solarenergie: {power}","system_pvi_vitals_lifetime_energy_kwh":"Lebensdauer Energie: {energy}","system_pvi_vitals_state":"Bundesland: {message}","system_pvi_vitals_string":"String {number}: {voltage} / {current}","system_pvi_vitals_string_not_connected":"String {number}: Nicht verbunden","system_remote_meter_ct_line":"CT {n} ({location}): {value}","system_remote_meter_no_cts":"Keine CTs konfiguriert","system_rescan_button_text":"Geräte erneut scannen","system_scanning_label_text":"Scan nach weiteren Geräten läuft...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Prüfen ob das System normal funktioniert.","test_container_system_test_title":"System Test","test_inverter_container_error_grid_uncompliant":"Der Test konnte nicht ausgeführt werden, da das Netz den Vorgaben nicht entspricht.","test_inverter_container_error_not_idle":"Die Powerwall muss im Ruhezustand sein um den Test auszuführen","test_inverter_container_results_error_plural_subtitle":"{num} Tests fehlgeschlagen","test_inverter_container_results_error_singular_subtitle":"{num} Test fehlgeschlagen","test_inverter_container_results_success_plural_subtitle":"{num} Tests bestanden","test_inverter_container_results_success_singular_subtitle":"{num} Test bestanden","test_inverter_container_results_success_subtitle":"Alle Tests erfolgreich ausgeführt","test_inverter_container_results_title":"Ergebnisse Wechselrichterselbsttest","test_inverter_container_title":"Wechselrichterselbsttest","test_meter_composite_view_auxiliary_meter_setup_instructions":"Mindestens ein Stromwandler (CT) pro Meter muss konfiguriert sein","test_meter_composite_view_auxiliary_meters_title":"zusätzliche Meter","test_meter_composite_view_configure_meters":"ZÄHLER KONFIGURIEREN","test_meter_composite_view_current_transformer_setup_instructions":"Mindestens einen Netz-Stromwandler (CT) oder Verbraucherstromwandler (CT) auswählen, aber nicht beides","test_meter_composite_view_external_meter_setup_instructions":"Für jeden externen Stromzähler muss mindestens ein Stromwandler festgelegt werden.","test_meter_composite_view_external_meters_title":"Externe Stromzähler","test_meter_composite_view_internal_meters_gateway_title":"Interne Stromzähler (Gateway)","test_meter_composite_view_internal_meters_title":"Interne Meter","test_meter_composite_view_no_configured_meters":"KEINE ZÄHLER KONFIGURIERT. BITTE {configure} UM FORTZUFAHREN.","test_meter_composite_view_note":"HINWEIS","test_meter_item_view_acuvim_label":"Zähler {id}: Acuvim-Stromzähler","test_meter_item_view_backup_switch_label":"Zähler {id}: Backup-Switch-Stromzähler","test_meter_item_view_configure_phases_note":"Phasen bestimmen, um die Stromwandler (CTs) für diesen Meter zu konfigurieren","test_meter_item_view_internal_meter_x_gateway_label":"Zähler {id}: Interner Primärstromzähler X (Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"Zähler {id}: Interner Hilfsstromzähler Y (Gateway)","test_meter_item_view_remote_w1_wifi_label":"Zähler {id}: Remote-W-LAN","test_meter_item_view_remote_w1_wired_label":"Zähler {id}: Remote-Verkabelt","test_meter_item_view_remote_w2_wifi_label":"Zähler {id}: Remote-W-LAN","test_meter_item_view_remote_w2_wired_label":"Zähler {id}: Remote-Verkabelt","test_meter_item_view_reset":"ZURÜCKSETZEN","test_meter_item_view_site_meter_title":"Interner Netzanschluss Meter","test_meter_item_view_sync_id":"Meter Synchronisation {id}","test_meter_item_view_toggle_advanced":"Fortgeschritten","test_meter_item_view_toggle_power":"Leistung","test_meter_item_view_wifi_id":"Meter {id}","test_meter_item_view_wired_id":"Verkabelter Meter {id}","test_view_canceled_status":"Test wurde abgebrochen","test_view_failed_status":"Test ist fehlgeschlagen","test_view_idle_status":"System Testing beginnt","test_view_init_status":"Vorbereitung um Test zu starten","test_view_inverter_test_warning_message":"Falls die Solaranlage für 0 Export eingestellt ist kann die System Test Funktion des Gateways das System nicht korrekt konfigurieren. Bitte Wechselrichter für den Test abstellen.","test_view_passed_status":"Test ist erfolgreich abgeschlossen","test_view_prep_status":"Initializierung: Dies kann ein paar Minuten dauern!","test_view_running_status":"Lade Test wird ausgeführt","test_view_skip_start_system_test_text":"Bestätigen um den System Test zu überspringen","test_view_start_system_test_warning":"WARNUNG","test_view_system_test_completed_message":"System Test Abgeschlossen!","time_minute":"Minute","time_minutes":"Minuten","time_second":"Sekunde","time_seconds":"Sekunden","time_started_at":"Start um: {time}","timezone_container_subtitle":"Aufgrund von Ort und IP Adresse, helfen wir die Zeitzone auszuwählen.","timezone_container_title":"Zeitzone","timezone_view_label":"Zeitzone","toast_view_standard_title":"Hinweis","toast_view_warning_title":"Warnung","update_container_industrial_updating_description":"Der Anlagenregler startet nun automatisch neu, um das Update zu installieren. {lb1}{lb2} Warten Sie bitte 2 Minuten, stellen Sie die Verbindung zum Netzwerk der Anlagensteuerung wieder her und {refresh} anschließend","update_container_preparing_title":"Aktuellstes Update wird vorbereitet","update_container_refresh_browser":"Seite neu laden.","update_container_residential_updating_description":"Das Gateway wird jetzt neu gestartet um das neueste Update zu laden. {lb1}{lb2} Bitte 2 Minuten warten, danach erneut mit dem Gateway Netzwerk verbinden, und die Seite neu laden.","update_container_skip_title":"Update überspringen?","update_container_subtitle":"Bitte System updaten um die letzte Software und Firmware zu installieren.","update_container_subtitle_industrial":"Nach Updates suchen. Hinweis: Das Senden von Firmware-Updates zu Batterien erfolgt auf der Batterie-Seite.","update_container_title":"Update","update_container_updating_title":"System wird upgedatet","update_step_item_view_resolution_title":"Vorgeschlagene Fehlerbehebung","update_view_check_again":"KLICKEN UM ERNEUT ZU SUCHEN","update_view_check_for_update":"NACH UPDATE SUCHEN","update_view_check_for_update_industrial":"NACH UPDATE DES ANLAGENREGLERS SUCHEN","update_view_checking_update":"SUCHE NACH UPDATE","update_view_current_version":"Aktuelle Version: {version}","update_view_current_version_label":"INSTALLIERTE VERSION:","update_view_downloading":"HERUNTERLADEN","update_view_downloading_update":"Update wird heruntergeladen","update_view_no_power_cicle":"NICHT NEUSTARTEN!","update_view_percent_complete":"{percent} geladen","update_view_progress":"UPDATE FORTSCHRITT","update_view_staged":"NEUE VERSION VORBEREITET","update_view_staged_update":"Bereit für update","update_view_staging":"VORBEREITUNG","update_view_staging_update":"Update wird vorbereitet","update_view_time_remaining":"verbleibend","update_view_up_to_date":"NEUESTE VERSION IST INSTALLIERT","update_view_update_now":"JETZT UPDATEN","update_view_update_urgency_label":"Aktualisierungsstatus: {status}","update_view_updated_industrial":"Die Software der Anlagensteuerung ist auf dem neuesten Stand.","update_view_updated_residential":"Die neueste Firmware ist installiert.","update_view_wait_minutes":"BITTE EIN PAAR MINUTEN WARTEN ...","validation_phone":"Eine gültige Telefonnummer eingeben","vitals_header_subtitle_firmware_update":"Firmware-Update läuft...","vitals_header_subtitle_firmware_update_failed":"Firmware-Update fehlgeschlagen. Überprüfen Sie Freigabeschalter und Verkabelung.","vitals_header_title":"System","vitals_powerwall_state_ac_fault":"AC-Stufenfehler","vitals_powerwall_state_dc_fault":"DC-Stufenfehler","vitals_powerwall_state_grid_following":"Netzverfolgung","vitals_powerwall_state_grid_forming":"Netzformung","vitals_powerwall_state_init":"Initialisieren","vitals_powerwall_state_off":"Aus","vitals_powerwall_state_standby":"Standby","vitals_powerwall_state_support_dc":"DC-Unterstützung","warning":"WARNUNG","warning_off_grid":"Wenn Ihr System im off-grid Modus betrieben wird, wird die Versorgung innerhalb der nächsten 5 Minuten unterbrochen.","warning_on_grid":"Wenn Ihr System im on-grid Modus betrieben wird, wird der Lade oder Entladevorgang der Powerwall unterbrochen.","warning_sitemaster_container_not_running":"Der Anlagen-Master ist nicht in Betrieb","wifi_pairing_link_message":"Hinzufügen einer Powerwall mit W-LAN-Anschluss","wifi_view_find_network":"NETZWERK nach SSID suchen","wifi_view_note":"Note: Gateway ist nur mit 2.4 GHz WLAN Netzwerken kompatibel.","wifi_view_note_five_ghz":"Hinweis: Das Gateway ist sowohl mit 2,4 GHz- als auch mit 5 GHz-Drahtlosnetzwerken kompatibel.","wifi_view_readonly":"Da dies eine Folge-Powerwall ist, kann ihre drahtlose Netzwerkkonfiguration nicht bearbeitet werden.","wifi_view_security_label":"SICHERHEIT","wizard_container_commissioning_wizard":"Tesla Konfigurationsassistent","wizard_container_login_required":"Anmeldung erforderlich","wizard_container_title":"Jetzt starten.","wizard_container_verifying_login_title":"Anmeldung wird geprüft"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Errore","advanced_settings_submit":"Invia","advanced_settings_submitted":"Inviate","advanced_settings_title":"Impostazioni avanzate","alert_container_ac_phase_1_over_voltage":"Sovratensione CA","alert_container_ac_phase_1_under_voltage":"Sottotensione CA","alert_container_ac_phase_2_over_voltage":"Sovratensione CA","alert_container_ac_phase_2_under_voltage":"Sottotensione CA","alert_container_ac_phase_3_over_voltage":"Sovratensione CA","alert_container_ac_phase_3_under_voltage":"Sottotensione CA","alert_container_over_frequency":"Sovrafrequenza CA","alert_container_rate_of_change_frequency":"Tasso di variazione di frequenza CA","alert_container_under_frequency":"Sottofrequenza CA","app_container_engineering_mode_banner_message":"La Modalità assistenza Tesla non richiede l\'autenticazione. Selezionare \\"Arresta sistema\\" se si stanno apportando modifiche operative. Prima di chiudere il browser, lasciare il sistema in uno stato accettabile. Al termine, chiudere il browser perché questa modalità non richiede l\'autenticazione.","app_container_engineering_mode_title":"Modalità assistenza Tesla","app_container_firmware_update_banner_message":"Non proseguire con l\'installazione e il cablaggio e rimanere su questa pagina fino al completamento dell\'aggiornamento.","app_container_firmware_update_banner_title":"Aggiornamento firmware in corso","app_container_sitemaster_message_title":"Il sistema è attualmente in funzione. Per poter visualizzare lo stato dei gruppi batterie, è necessario arrestare il sistema. È possibile arrestare il sistema dalla home page.","app_container_sitemaster_power_supply_mode_banner_message":"Batteria che produce tensione CA per alimentare i dispositivi per l\'abbinamento e la configurazione. Pulsante per arrestare il sistema sulla pagina iniziale.","app_container_sitemaster_power_supply_mode_banner_title":"Modalità a isola","app_container_sitemaster_running_banner_title":"Sistema in funzione","auto_config_check_network_button":"Controllare la rete e attivare il Wi-Fi.","auto_config_check_system_and_summary":"Controllare le pagine Sistema e Sintesi.","auto_config_done_button_text":"Fatto","auto_config_instructions_cannot_determine_grid_connection":"Controllare il cablaggio al Backup Switch o Gateway prima di avviare il sistema.","auto_config_instructions_determining_on_grid":"Se il messaggio persiste per più di 3 minuti, controllare il cablaggio al Backup Switch o Gateway.","auto_config_instructions_finding_contactor_controller":"Se il messaggio persiste per più di 3 minuti, controllare il cablaggio al Backup Switch o Gateway.","auto_config_instructions_finding_powerwalls":"Se il messaggio persiste per più di 3 minuti, controllare il cablaggio dell\'unità Powerwall.","auto_config_instructions_lookup_failed_retry":"Scansionare l\'adesivo con il numero di serie in Bolt per eseguire la configurazione automatica dell\'unità Powerwall, quindi premere {retryButton}","auto_config_instructions_lookup_failed_wizard":"oppure {wizardButton} per configurare manualmente l\'unità Powerwall.","auto_config_instructions_missing_info_1":"Non è stato possibile eseguire la configurazione automatica dell\'unità Powerwall poiché non erano disponibili le seguenti informazioni:","auto_config_instructions_missing_info_2":"{wizardButton} per inserirle manualmente.","auto_config_instructions_missing_info_3":"{registrationButton} manualmente.","auto_config_instructions_no_grid_detected":"Controllare il cablaggio e gli interruttori prima di avviare il sistema.","auto_config_instructions_no_network_retry":"{networkLink} per eseguire la configurazione automatica dell\'unità Powerwall, quindi premere {retryButton}","auto_config_instructions_no_network_wizard":"oppure {wizardButton} per configurare manualmente l\'unità Powerwall.","auto_config_instructions_retry":"{networkLink} se il problema persiste","auto_config_instructions_retry_wizard":"oppure {wizardButton} per configurare manualmente l\'unità Powerwall.","auto_config_instructions_updating":"Prima di poter eseguire la configurazione automatica dell\'unità Powerwall è necessario un aggiornamento software. L\'aggiornamento verrà scaricato e applicato automaticamente. Potrebbe essere necessario ricollegarsi alla rete Wi-Fi dell\'unità Powerwall.","auto_config_missing_grid":"Rete per il sito del cliente","auto_config_missing_gridcode":"Codice rete per il sito del cliente","auto_config_missing_registration":"Informazioni del cliente per la registrazione del prodotto","auto_config_missing_timezone":"Fuso orario del sito del cliente","auto_config_network_button_text":"Configurazione della rete","auto_config_registration_button_text":"Inserire le informazioni del cliente","auto_config_retry_button_label":"Riprova","auto_config_run_button_label":"Configura automaticamente Powerwall","auto_config_run_wizard_button_text":"Esegui la procedura guidata","auto_config_section_title":"Configurazione automatica Powerwall","auto_config_status_cancelled":"La configurazione automatica è stata annullata. È possibile riprovare:","auto_config_status_cannot_determine_grid_connection":"Impossibile determinare la connessione alla rete.","auto_config_status_complete":"Completata correttamente","auto_config_status_determining_on_grid":"Determinazione della connessione alla rete...","auto_config_status_finding_contactor_controller":"Ricerca del controller contattore...","auto_config_status_finding_powerwalls":"Ricerca Powerwall...","auto_config_status_in_progress":"In corso","auto_config_status_lookup_failed":"Ricerca del numero di serie non riuscita","auto_config_status_missing_information":"Informazioni mancanti","auto_config_status_no_grid_detected":"Nessuna rete rilevata.","auto_config_status_no_network":"Non connesso a Tesla","auto_config_status_not_applicable":"La configurazione automatica non è necessaria o è già stata eseguita. È possibile eseguirla nuovamente:","auto_config_status_retrying":"Nuovo tentativo richiesta rete non riuscita","auto_config_status_timeout":"Timeout configurazione automatica. È possibile riprovare:","auto_config_status_updating":"Aggiornamento software necessario","auto_config_stop_system_modal_message":"Non è possibile eseguire la procedura di configurazione automatica mentre il sistema è in funzione. Arrestare il sistema e riprovare.","auto_config_stop_system_modal_title":"Impossibile avviare la configurazione automatica","battery_container_add_all_batteries_button_label":"AGGIUNGI TUTTE","battery_container_available_batteries_subtitle":"Queste batterie non faranno parte del funzionamento del sistema a meno che non vengano aggiunte a \\"Configured\\" list.","battery_container_available_batteries_title":"Gruppi batterie disponibili","battery_container_cannot_communicate":"Impossibile comunicare con il Powerwall. Controllare il cablaggio e la terminazione del bus CAN.","battery_container_cannot_communicate_with_device":"Impossibile comunicare con il dispositivo. Controllare il cablaggio e la terminazione del bus CAN.","battery_container_chinv":"VFD per compressore e riscaldatore (CHINV) {index}","battery_container_configured_batteries_label":"Gruppi batterie configurati","battery_container_configured_batteries_subtitle":"Queste batterie faranno parte del funzionamento del sistema.","battery_container_confirm_update_firmware":"L\'operazione potrebbe richiedere alcuni minuti. Non interrompere l\'aggiornamento e non uscire da questa pagina.","battery_container_dcbc":"Gruppo batterie {index}","battery_container_dcbc_comms_failure":"Errore di comunicazione. Controllare la connessione di rete all\'unità ed eseguire nuovamente la scansione.","battery_container_dcbc_dcdisconnect_opened":"La manopola di sezionamento CC è in posizione OFF.","battery_container_dcbc_door_switch_opened":"Linea di attivazione dello sportello dell\'inverter aperta. Controllare l\'interruttore dello sportello.","battery_container_dcbc_enable_line_return_low_estop":"Pulsante di arresto da remoto dell\'inverter aperto. Controllare il circuito di arresto da remoto.","battery_container_dcbc_enable_line_return_low_inv":"Linea di attivazione del sistema inverter aperta. Controllare feedback dell\'interruttore automatico.","battery_container_dcbc_enable_line_return_low_str":"La linea di attivazione per una o più file di unità Powerpack. Controllare il cablaggio e gli sportelli del Powerpack. Per la diagnosi, consultare la Guida alla risoluzione dei problemi della linea di attivazione.","battery_container_delete_button_title":"Elimina questo dispositivo","battery_container_diagnosis_incomplete":"Diagnosi incompleta. Prima di poter eseguire ulteriori controlli è necessario aggiornare il firmware.","battery_container_faults":"Guasti","battery_container_firmware_update_needed":"Necessario aggiornare il firmware.","battery_container_gateway_contactor_meter_controller":"Controller contattore/contatore gateway","battery_container_industrial_confirm_update_firmware":"Verrà aggiornato il firmware di ogni gruppo batterie e dei relativi componenti secondari.","battery_container_industrial_confirm_update_firmware_info":"Verrà aggiornato il firmware di ogni gruppo batterie in \\"Configured\\" list and its subcomponents.","battery_container_internal_communications_fault":"Errore di comunicazione interno. Controllare il cablaggio e la terminazione del bus CAN e aggiornare il firmware.","battery_container_meter_socket_adapter":"Backup Switch","battery_container_mpbc":"Gruppo batterie {index}","battery_container_mpthc":"Controller termico (MPTHC) {index}","battery_container_no_msa_detected":"Nessun Backup Switch rilevato.","battery_container_no_sync_detected":"Nessun controller contattore rilevato. Funzionalità di backup non rilevata.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"Unità modulare {index}","battery_container_post":"Colonnina (LCC) {index}","battery_container_post_missing":"Colonnina mancante {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Powerstage {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"L\'unità Powerwall è spenta. Verificare che l\'interrutore sia in posizione ON.","battery_container_qbms":"Quadro di gestione batterie (QBMS)","battery_container_qhvp":"Processore ad alta tensione (QHVP)","battery_container_residential_confirm_update_firmware":"Verrà aggiornato il firmware di ogni unità Powerwall e del controller contattore (se presente).","battery_container_resolve_connectivity":"Risolvere i problemi di connettività prima di esegure un aggiornamento del firmware.","battery_container_scan":"SCANSIONA","battery_container_scan_in_progress":"SCANSIONE IN CORSO...","battery_container_scbc":"Gruppo caricatore {index}","battery_container_scthc":"Controller termico (SCTHC) {index}","battery_container_self_tests_failure":"Autodiagnosi non superata.","battery_container_self_tests_inconclusive":"Risultati autodiagnosi inconcludenti.","battery_container_self_tests_internal_error":"Autodiagnosi non riuscite a causa di un errore di sistema interno.","battery_container_self_tests_stall":"Timeout: impossibile avviare le autodiagnosi.","battery_container_self_tests_system_down":"Impossibile eseguire le autodiagnosi quando il sistema non è attivo. Avviare il sistema e riprovare.","battery_container_self_tests_updating":"Impossibile eseguire le autodiagnosi quando è in corso l\'aggiornamento delle batterie. Riprovare al termine dell\'aggiornamento.","battery_container_serial_number":"SN: {sn}","battery_container_solar_powerwall":"{index} Solar Powerwall","battery_container_starc":"Convertitore CC-CC (STARC) {index}","battery_container_stitch":"CC-CC centralina elettronica (STITCH)","battery_container_synchronizer":"Controller contattore","battery_container_unknown":"Controller bus sconosciuto {index}","battery_container_update_failed":"Aggiornamento non riuscito. Riprovare e controllare che il cablaggio e gli interruttori di attivazione non siano interrotti durante l\'aggiornamento.","battery_container_update_firmware":"AGGIORNA FIRMWARE","battery_container_update_in_progress":"AGGIORNAMENTO IN CORSO...","battery_container_waiting_to_report_firmware":"In attesa che l\'unità indichi la versione del firwmare.","battery_container_warnings":"Avvertenze","button_label_generate":"GENERA","can_reboot_message_backup":"Modalità di backup","can_reboot_message_block_update":"Aggiornamento gruppo in corso","can_reboot_message_enumeration":"Enumerazione in corso","can_reboot_message_initializing":"Inizializzazione sistema","can_reboot_message_power_flow_is_too_high":"Il flusso di potenza è troppo elevato","can_reboot_message_updating":"Aggiornamento in corso del pacchetto del sito","caution":"ATTENZIONE","charger_settings_cabinet":"Armadietto {sn} {state}","charger_settings_cabinet_posts_warning":"Questi comandi arrestano solo l\'attivazione delle colonnine e il bus AT interno dell\'armadietto. È comunque necessario isolare l\'alimentazione e seguire la procedura di sicurezza completa quando si accede agli armadietti.","charger_settings_common_bus":"Bus comune {state}","charger_settings_common_bus_warning":"Arresta solo il bus AT comune. È comunque necessario isolare l\'alimentazione e seguire la procedura di sicurezza completa quando si accede agli armadietti.","charger_settings_disabled":"disattivato","charger_settings_enabled":"attivato","charger_settings_post":"Colonnina {id} {state}","charger_settings_saving":"risparmio di {spinner}","client_protocols_container_subtitle":"Attivare o disattivare i protocolli del client.","client_protocols_container_title":"Protocolli del client","client_protocols_menu_title":"Protocolli del client","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"TCP/IP Modbus","compliance_container_label_fcc_id":"FCC ID: {fccId}","compliance_container_label_ic_id":"IC: {icId}","compliance_container_label_manufacturer":"Produttore: {manufacturer}","compliance_container_label_model":"Modello: {model}","compliance_container_title":"Compatibilità","component-menu-title":"Componenti","conductor_limit":"Le batterie sono controllate per evitare di superare i limiti di corrente configurati su ogni fase dei trasformatori del conduttore. Per ulteriori informazioni su dove viene utilizzato e sui limiti da configurare, consultare la nota sull\'applicazione dei limiti del conduttore.","conductor_min_current":"Limite esportazione conduttore","control_container_add_on":"COMPONENTE AGGIUNTIVO","control_container_always_active":"SEMPRE ATTIVO","control_container_battery_ok":"CONSENTITA ESPORTAZIONE BATTERIA COMPLETA","control_container_charge_power_target":"POTENZA DI CARICA DESIDERATA","control_container_conductor_max_current":"Limite importazione conduttore","control_container_conductor_min_current_max_bound":"{mode} ha un valore massimo di 200 A","control_container_conductor_min_current_min_bound":"{mode} ha un valore minimo di 5 A","control_container_control_subtitle":"Sottotitolo comando","control_container_control_title":"Titolo comando","control_container_direct":"DIRETTO","control_container_disable":"Disattiva","control_container_discharge_power_target":"POTENZA DI SCARICA DESIDERATA","control_container_enabled":"ATTIVATO","control_container_energy_target":"ENERGIA DESIDERATA. Questo valore dovrebbe corrispondere alle dimensioni del sistema in base ai documenti di progettazione e al rapporto dell\'ispettore","control_container_error_message":"{mode} è obbligatoria","control_container_explanation_bullet_five_max_site_meter_power_kw":"Quando il carico netto è superiore a questo limite, le batterie si scaricheranno nel miglior modo possibile per evitare di superare tale limite.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Quando la generazione netta è superiore a questo limite, le batterie si caricheranno nel miglior modo possibile per evitare di superare tale limite.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Quando il carico netto è inferiore a questo limite, la potenza di ricarica consentita delle batterie sarà limitata.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Quando la generazione netta è inferiore a questo limite, la potenza di scarica consentita delle batterie sarà limitata.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Il Limite importazione sito è un\'impostazione opzionale. Lasciare questo campo vuoto per disattivare la limitazione.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Il Limite esportazione sito è un\'impostazione opzionale. Lasciare questo campo vuoto per disattivare la limitazione.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Limite aggregato tra tutte le fasi su tutti i contatori del sito. (Nota: quando si utilizzano contatori del carico, il contatore del sito viene calcolato utilizzando il carico, l\'energia solare e la batteria).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Limite aggregato tra tutte le fasi su tutti i contatori del sito. (Nota: quando si utilizzano contatori del carico, il contatore del sito viene calcolato utilizzando il carico, l\'energia solare e la batteria).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Quando attivato, il sitemaster controlla la potenza massima che è possibile importare dalla rete nel sito.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Quando attivato, il sitemaster controlla la potenza massima che è possibile esportare dalla rete al sito.","control_container_explanation_export_restrictions_locked":"Determina in che modo il sistema può esportare la potenza alla rete. Una volta impostata, la normativa prevede che possa essere modificata solo contattando Tesla.","control_container_explanation_export_restrictions_unlocked":"La normativa prevede che le caratteristiche di esportazione possono essere impostate solo durante la messa in servizio iniziale. Contattare Tesla per modificarle.","control_container_explanation_nominal_system":"Questo valore dovrebbe corrispondere alle dimensioni del sistema in base ai documenti di progettazione e al rapporto dell\'ispettore.","control_container_heat_for_energy":"ENERGIA TERMICA","control_container_heat_mode":"MODALITÀ CALORE","control_container_heco_committed_capacity":"Capacità messa in servizio","control_container_heco_committed_discharge_power_W_max_bound":"{mode} ha un valore massimo di 100000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode} ha un valore minimo di 100 W","control_container_loading":"Caricamento","control_container_max_site_meter_power_W_max_bound":"{mode} ha un valore massimo di 50000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} ha un valore minimo di 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} deve essere superiore o uguale a 0","control_container_max_site_meter_power_kw":"Limite importazione sito","control_container_max_site_meter_power_w":"Limite importazione sito","control_container_menu":"Menu","control_container_min_site_meter_power_kW_positive":"{mode} deve essere superiore o uguale a 0","control_container_min_site_meter_power_kw":"Limite esportazione sito","control_container_min_site_meter_power_w":"Limite esportazione sito","control_container_minimum_charge_power":"POTENZA DI CARICA MINIMA","control_container_minimum_discharge_power":"POTENZA DI SCARICA MINIMA","control_container_misc":"VARIE","control_container_net_meter_mode":"Restrizioni esportazione sito","control_container_never":"NESSUNA ESPORTAZIONE SITO","control_container_nominal_system_energy_kW_positive":"{mode} deve essere superiore o uguale a 0","control_container_nominal_system_energy_kWh_positive":"{mode} deve essere superiore o uguale a 0","control_container_nominal_system_energy_kwh":"Energia nominale del sistema","control_container_nominal_system_energy_max_error":"L\'Energia nominale del sistema supera il limite di energia massimo","control_container_nominal_system_power_kw":"Potenza nominale del sistema","control_container_nominal_system_power_max_error":"La Potenza nominale del sistema supera il limite di potenza massimo","control_container_number_error_message":"{mode} deve essere un valore numerico","control_container_power":"POTENZA","control_container_pv_only":"ESPORTAZIONE FINO A LETTURA CONTATORE FOTOVOLTAICO OK","control_container_reactive_mode":"MODALITÀ REATTIVA","control_container_real_mode":"MODALITÀ REALE","control_container_reset":"Reset","control_container_site_control":"CONTROLLO SITO","control_container_site_limits":"LIMITI SITO","control_container_site_max_power":"POTENZA MAX. SITO","control_container_site_min_power":"POTENZA MIN. SITO","control_container_submit":"Invia","control_container_submitting_control":"Invio comando","control_start":"FAI PARTIRE","control_stop":"FERMA","current_password_placeholder_text":"Immettere la password corrente","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Amp {id}","current_transformer_item_view_battery_ct":"Batteria","current_transformer_item_view_calculated_reading":"Calcolato:","current_transformer_item_view_conductor_ct":"Conduttore","current_transformer_item_view_ct_voltage_pairing_1":"Fase L1","current_transformer_item_view_ct_voltage_pairing_2":"Fase L2","current_transformer_item_view_ct_voltage_pairing_3":"Fase L3","current_transformer_item_view_ct_voltage_pairing_default":"Fase predefinita","current_transformer_item_view_doubled_solar_ct":"PV Solare (1TA x2)","current_transformer_item_view_flip":"Girare in senso opposto","current_transformer_item_view_generator_ct":"Gruppo Elettrogeno","current_transformer_item_view_load_ct":"Carico","current_transformer_item_view_measure_pw_plus_input":"Misurazione di un inverter Powerwall+","current_transformer_item_view_measured_reading":"Per TA:","current_transformer_item_view_missing_ct":"Mancante","current_transformer_item_view_no_reading":"Nessuna misura","current_transformer_item_view_none_ct":"Non Disponibile","current_transformer_item_view_phase_sequence_dropdown_title":"Fase","current_transformer_item_view_site_ct":"Sito","current_transformer_item_view_smart_ct":"Smart","current_transformer_item_view_solar_ct":"PV / Solare","current_transformer_item_view_solar_rgm_ct":"Solo ricavo da fotovoltaico","current_transformers_container_800a_ct_ensure":"Assicurati che la selezione dei TA in questa pagina combaci con quelli installati","current_transformers_container_800a_ct_larger":"I TA da 800A sono fisicamente più grandi che quelli da 200/264 A","current_transformers_container_800a_ct_use_case":"Quando stai misurando cavi di sezione grande (portata 400A / 800A), usa e configura i TA da 800A","current_transformers_container_amps_explanation":"Corrente che passa attraverso il trasformatore di corrente","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Assicurati che il TA sia installato nella fase corretta ({sequence}).","current_transformers_container_configure_subtitle":"Configura i trasduttori di corrente per il/i meter contatori","current_transformers_container_ct_flipping_ensure_direction":"Assicurati che l\'etichetta del TA sia rivolta verso l\'inverter solare (PV-solare) o verso il contatore di scambio (sito). Poi assicurati che la fase, la corrente, la tensione e il fattore di potenza siano corretti","current_transformers_container_ct_flipping_modal_title":"Gira il verso del TA via software","current_transformers_container_ct_flipping_software_incorrect_metering":"Usare il software per girare i TA installati nella fase sbagliata poterà a letture sbagliate","current_transformers_container_ct_flipping_wrong_phase":"Una lettura di potenza negativa può indicare che un TA sia posizionato nel verso o nella fase sbagliata","current_transformers_container_double_check_recommendation":"Prima di continuare effettuare un doppio controllo su cablaggio, prese di tensione, trasformatori di corrente e configurazione del contatore.","current_transformers_container_doubled_solar_ct_explanation":"Un singolo trasformatore di corrente può essere usato per misurare un inverter fotovolaico bilanciato","current_transformers_container_doubled_solar_ct_modal_title":"Misurazione di un inverter fotovoltaico bifase con un trasformatore di corrente","current_transformers_container_grid_code_phase_modal_title":"Avvertenza: Il numero di trasformatori di corrente non corrisponde all\'indicazione di fase del codice rete","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Avvertenza: Il numero di trasformatori di corrente non corrisponde all\'indicazione di fase del codice rete per più contatori","current_transformers_container_grid_code_phase_multiple_warnings_message":"Numero inatteso di trasformatori di corrente collegati ai seguenti {numMeters} contatori:","current_transformers_container_grid_code_phase_warning_message":"Numero inatteso di trasformatori di corrente collegati al seguente contatore:","current_transformers_container_grid_code_single_phase_warning":"Il codice rete applicato è monofase. Solitamente i sistemi monofase sono a 1 o 3 fasi. {lb} Si consiglia un numero dispari di trasformatori di corrente (1 o 3).","current_transformers_container_grid_code_split_phase_warning":"Il codice rete applicato è bifase. Solitamente i sistemi bifase dispongono di un trasformatore di corrente su ciascun conduttore sotto tensione. {lb} Si consiglia un numero pari di trasformatori di corrente (2 o 4).","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"È necessario un contatore Neurio per inverter fotovoltaici Powerwall+ per attivare un contatore con ricavi energetici (RGM).","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Selezionare Sì se misura un inverter fotovoltaico Powerwall+. Selezionare No se misura un inverter fotovoltaico che non fa parte di un gruppo Powerwall+.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"Misura un inverter Powerwall+?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Assicurati che l\'etichetta nel TA sia rivolta verso l\'inverter solare","current_transformers_container_label_modal_title":"Spiegazione delle etichette","current_transformers_container_load_ct_ensure":"Quando stai configurando il TA \\"carico\\", assicurati che tutti i carichi siano misurati e che i carichi backup e non backup siano misurati separatamente","current_transformers_container_load_ct_modal_title":"TA carico","current_transformers_container_load_ct_recommended":"La configurazione a \\"Carico\\" è consigliata solamente quando non è possible configurare come \\"Sito\\"","current_transformers_container_meter_id":"Contatore {id}","current_transformers_container_no_load_and_site_ct":"Non ci possono essere contatori configurati come Carico e Sito","current_transformers_container_no_loads_doubled_solar_ct_bullet":"Non ci possono essere carichi prima del TA","current_transformers_container_no_site_or_load_warning":"TA DI CARICO O SITO NON CONFIGURATI","current_transformers_container_no_solar_ct_warning":"NESSUN TRASFORMATORE DI CORRENTE SOLARE CONFIGURATO","current_transformers_container_no_solar_inverter_warning":"NESSUN INVERTER FOTOVOLTAICO CONFIGURATO","current_transformers_container_phase_usages_modal_title":"Attenzione: Il numero di TA non combacia con le impostazioni di fase","current_transformers_container_phase_usages_warning":"Il numero di fasi configurate non combacia con il numero di TA configurati. {lb} {num} TA sono raccomandati","current_transformers_container_phase_usages_warning_message":"Numero di TA non atteso associati al seguente meter:","current_transformers_container_power_amperage_configure_warning":"Il trasduttore {type} necessita di una misura positiva di potenza e di corrente per funzionare correttamente.","current_transformers_container_power_factor_explanation":"Fattore di potenza (Potenza Reale / Potenza Apparente). Mostrato solo per livelli di potenza elevati. Per comuni carichi resistivi, il fattore di potenza dovrebbe essere prossimo a 1. Un fattore di potenza basso potrebbe indicare che un trasformatore di corrente non è installato correttamente oppure che sono presenti notevoli carichi capacitivi/induttivi.","current_transformers_container_power_factor_out_of_range_warning":"La misurazione del fattore di potenza è fuori dall\'intervallo previsto. {lb} Fattore di potenza misurato: {powerFactor} PF {lb} Il contatore potrebbe essere installato non correttamente o su una fase non corretta oppure sono presenti carichi capacitivi/induttivi.","current_transformers_container_system_test_configured_incorrect":"Avvertenza: Il trasformatore di corrente {id} potrebbe essere configurato non correttamente","current_transformers_container_title":"Trasduttori di Corrente","current_transformers_container_voltage_out_of_range_warning":"La tensione è fuori intervallo. {lb} Tensione misurata: {volts} V {lb} La tensione misurata di questo trasformatore di corrente è fuori dal normale intervallo di funzionamento.","current_transformers_container_volts_explanation":"Tensione tra fase e neutro sulla presa di tensione associata al trasformatore di corrente","current_transformers_container_watts_explanation":"Potenza calcolata come corrente che passa attraverso il trasformatore di corrente moltiplicata per la tensione sulla presa di tensione associata","customer_installation_view_email_label":"E-MAIL CLIENTE","customer_installation_view_email_placeholder":"E-mail","customer_registration_view_address_label":"INDIRIZZO","customer_registration_view_address_placeholder":"Indirizzo","customer_registration_view_city_label":"CITTÀ","customer_registration_view_city_placeholder":"Città","customer_registration_view_clear_form":"Cancella il modulo","customer_registration_view_country_label":"Stato","customer_registration_view_customer_information":"INFORMAZIONI DEL CLIENTE","customer_registration_view_email_address_label":"E-MAIL","customer_registration_view_email_address_label_confirmation":"REINSERIRE E-MAIL","customer_registration_view_email_placeholder":"E-mail","customer_registration_view_family_name_label":"COGNOME","customer_registration_view_family_name_warning":"Inserire il cognome del cliente.","customer_registration_view_given_name_label":"NOME","customer_registration_view_given_name_warning":"Inserire il nome del cliente.","customer_registration_view_homeowner_family_name_placeholder":"Cognome","customer_registration_view_homeowner_given_name_placeholder":"Nome","customer_registration_view_installation_address":"INDIRIZZO DI INSTALLAZIONE","customer_registration_view_phone_number_label":"TELEFONO","customer_registration_view_phone_placeholder":"Telefono","customer_registration_view_skip_explanation":"Se saltato, il proprietario dovrà eseguire la registrazione attraverso l\'app mobile Tesla prima di ottenere l\'accesso al sistema.","customer_registration_view_state_placeholder":"Regione","customer_registration_view_state_province_region_label":"STATO/PROVINCIA/REGIONE","customer_registration_view_zip_label":"CAP","customer_registration_view_zip_placeholder":"CAP","diagnostic-alert-affected-children":"Componenti interessati ({count})","diagnostic-alerts-missing-alert-information":"Informazioni su avvisi mancanti","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Articolo Toolbox","diagnostic-alerts-toolbox-article-external-link":"Collegamenti esterni","diagnostic_alert_alert_name":"Nome avviso","diagnostic_alert_alert_type":"Tipo di avviso","diagnostic_alert_audience":"Pubblico","diagnostic_alert_clear_condition":"Azzera condizione","diagnostic_alert_description":"Descrizione","diagnostic_alert_display_name":"Nome visualizzato","diagnostic_alert_id":"ID avviso","diagnostic_alert_impact_category":"Categoria impatto","diagnostic_alert_latching":"Bloccaggio","diagnostic_alert_max":"Max","diagnostic_alert_min":"Min.","diagnostic_alert_name":"Nome","diagnostic_alert_node":"Nodo","diagnostic_alert_offset":"Compensazione","diagnostic_alert_payload_signals":"Segnali payload","diagnostic_alert_potential_impact":"Possibile impatto","diagnostic_alert_safety_reason":"Motivi di sicurezza","diagnostic_alert_scale":"Scala","diagnostic_alert_set_condition":"Imposta condizione","diagnostic_alert_signal_name":"Nome segnale","diagnostic_alert_signoff":"Esci","diagnostic_alert_sna_value":"Valore SNA","diagnostic_alert_supplier_dtc_name":"Nome DTC fornitore","diagnostic_alert_uiID":"ID UI","diagnostic_alert_units":"Unità","diagnostic_alert_urgent":"Urgente","diagnostic_category_item_view_alerts_description":"Avvisi sito, componente e sottocomponente","diagnostic_category_item_view_download_results":"SCARICA RISULTATI","diagnostic_category_item_view_internal_comms_description":"Controlla la connessione a tutti i dipositivi","diagnostic_category_item_view_internal_comms_title":"Comunicazione del dispositivo","diagnostic_category_item_view_live_results":"RISULTATI IN TEMPO REALE","diagnostic_category_item_view_metering_description":"Controllare connessioni contatore","diagnostic_category_item_view_metering_title":"Misurazioni","diagnostic_category_item_view_networking_description":"Controlla la connessione alla rete","diagnostic_category_item_view_networking_title":"Reti","diagnostic_category_item_view_no_selected_tests":"Nessun test selezionato","diagnostic_category_item_view_rerun_selected":"Esegui nuovamente {num} test selezionati","diagnostic_category_item_view_rerun_selected_test":"Fai ripartire i test selezionati","diagnostic_category_item_view_run_selected":"Esegui {num} test selezionati","diagnostic_category_item_view_run_selected_test":"Fai partire i test selezionati","diagnostic_category_item_view_select_all_tests":"Seleziona tutto","diagnostic_category_item_view_self_tests_description":"Avviare i test di carica/scarica sul sistema","diagnostic_category_item_view_self_tests_title":"Autodiagnosi","diagnostic_category_item_view_toggle_all_tests":"Attiva/disattiva tutto","diagnostic_input_view_blocks_label":"BLOCCHI","diagnostic_input_view_individual_test_name_label":"NOME TEST INDIVIDUALE","diagnostic_input_view_max_allowed_charge_power_label":"POTENZA MAX DI CARICA CONSENTITA","diagnostic_input_view_max_allowed_discharge_power_label":"POTENZA MAX DI SCARICA CONSENTITA","diagnostic_test_enable_line":"Pulsante laterale","diagnostic_test_item_view_ac_self_test_description":"Autodiagnosi potenza CA","diagnostic_test_item_view_ac_self_test_description_2":"Esegue una sequenza di perdita di potenza nel sistema CA. I sistemi Powerpack utilizzano le impostazioni \\"MAX_ALLOWED_POWER\\". Impostarle 0 per i sistemi Megapack e Supercharger.","diagnostic_test_item_view_dc_self_test_description":"Autodiagnosi potenza CC","diagnostic_test_item_view_dc_self_test_description_2":"Esegue una sequenza di test sul sistema CC, compresi i controlli termici.","diagnostic_test_item_view_enable_line_description":"Controlla che il tasto di accensione sia su \\"I\\" su ogni Powerwall","diagnostic_test_item_view_enable_line_resolution":"Spegni e accendi l\'interruttore laterale e prova di nuovo","diagnostic_test_item_view_individual_self_test_description":"Selezionare da un elenco di autodiagnosi disponibili sui controller bus configurati.","diagnostic_test_item_view_meter_comms_description":"Esecuzione ping comunicazioni contatore","diagnostic_test_item_view_network_connection_description":"Controlla la connessione a Internet e ai server Tesla","diagnostic_test_item_view_network_connection_resolution":"Riconfigurare reti","diagnostic_test_item_view_resolution_generic_text":"Riconfigurare {name} e riprovare","diagnostic_test_item_view_step_canceled":"Il test è stato cancellato dall\'utente","diagnostic_test_item_view_step_config_update_status":"Controlla lo stato di connessione al server Tesla","diagnostic_test_item_view_step_google_http":"Ping Google HTTP","diagnostic_test_item_view_step_google_https":"Ping Google HTTPS","diagnostic_test_item_view_step_hermes_status":"Controlla lo stato di connessione al server Tesla","diagnostic_test_item_view_step_results_ip_address":"INDIRIZZO IP","diagnostic_test_item_view_step_results_subnet_mask":"Subnet","diagnostic_test_item_view_table_header_key":"Identificativo","diagnostic_test_item_view_table_header_name":"Punto","diagnostic_test_item_view_table_header_value":"Valore","diagnostic_test_meter_comms":"Comunicazioni contatore","diagnostic_test_network_connection":"Connessione alla rete","diagnostics_composite_view_no_tests_found":"Nessun test disponibile","diagnostics_composite_view_run_all_selected_tests":"Fai partire tutti i test","diagnostics_container_industrial_disruptive_tests_description":"I seguenti test attiveranno la ventola e gli impianti termici, che produrranno rumore. Prevedere circa 30 kW di assorbimento per inverter. I seguenti test potrebbero inoltre interrompere il normale funzionamento del sistema:","diagnostics_container_required_inputs_description":"I seguenti test richiedono ulteriori input:","diagnostics_container_residential_disruptive_tests_description":"I seguenti test potrebbero interrompere la normale operatività del Gateway e del Powerwall:","diagnostics_container_stop_test_title":"Stop {name} Test?","diagnostics_container_subtitle":"Strumento di diagnostica problemi di installazione","diagnostics_container_tests_running":"Test di diagnostica in esecuzione","diagnostics_container_title":"Diagnostica","disabled_reason_battery_breaker_open":"L\'interruttore batteria è aperto","disabled_reason_checking_firmware_update":"Controllo aggiornamenti firmware","disabled_reason_config":"Disattivato dal file di configurazione","disabled_reason_excessive_voltage_drop":"Caduta di tensione eccessiva","disabled_reason_firmware_update_failed":"Aggiornamento firmware non riuscito","disabled_reason_gridcode_write_failed":"Configurazione del codice di rete non riuscita","disabled_reason_user_requested":"Disattivata su richiesta dell\'utente","dropdown_default_placeholder":"Digita...","dropdown_list_view_not_listed_label":"Non elencato: \\"{searchText}\\"","dropdown_list_view_select_all":"Seleziona tutto","dropdown_list_view_select_field":"Per favore selezionare un campo","dropdown_list_view_show_complete":"MOSTRA LISTA COMPLETA","dropdown_list_view_show_searchable":"MOSTRA LISTA CON RICERCA","enumeration_warning_details_miswired_12v":"Quando si collegano due unità Powerwall+, i 12V devono essere applicati solo sull\'unità collegata al Gateway/Backup Switch. Rimuovere 12V da tutte le successive unità Powerwall+ nella catena, quindi selezionare Riscansiona dispositivi (in fondo a questa pagina) per eliminare questa avvertenza.","enumeration_warning_details_multiple_controllers_gateway":"Scollegare il cavo di alimentazione dei controller sito di tutte le unità Powerwall+ situati in alto a destra nel gruppo fotovoltaico.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Scollegare il cavo di alimentazione del controller sito di Expansion Powerwall+ (non collegato al Backup Switch) situato in alto a destra nel gruppo fotovoltaico.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Scollegare il cavo di alimentazione dei controller sito di tutte le unità Powerwall+ situati in alto a destra nel gruppo fotovoltaico. Mettere in servizio il sistema collegandosi al Backup Gateway.","enumeration_warning_details_multiple_controllers_unknown":"In una configurazione con più unità Powerwall+ collegate tramite CAN, deve essere alimentato un solo controller sito.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Deve essere attivo un solo controller del sito. Quando si usa un Backup Gateway, scollegare tutti i controller Powerwall+. Quando si usa un interruttore Backup, scollegare tutti i controller Powerwall+ tranne uno. L\'esecuzione della procedura guidata è disattivata finché è attivo solo un controller del sito.","enumeration_warning_title_miswired_12v":"Errore cablaggio 12 V","enumeration_warning_title_multiple_controllers":"Sono attivi più controller sito","error_details":"Dettagli di errore","error_item_view_check_network":"Controllare la connessione di rete.","error_item_view_disconnected":"Disconnesso dal Gateway. Controllare la connessione di rete e {refresh}","error_item_view_forgot_password":"Clicca per resettare la password","error_item_view_refresh_browser":"Aggiornare il browser.","error_item_view_try_logging_in_again":"Provare a eseguire nuovamente l\'accesso.","ethernet_view_backup_dns_label":"ESEGUI BACKUP SERVER DNS","ethernet_view_backup_dns_warning":"Server DNS di backup valido","ethernet_view_configuration_label":"CONFIGURAZIONE","ethernet_view_dhcp_label":"DHCP (indirizzo dinamico)","ethernet_view_gateway_label":"GATEWAY (OPZ.)","ethernet_view_gateway_warning":"IP (Router) Gateway valido","ethernet_view_ip_address_label":"INDIRIZZO IP","ethernet_view_ip_address_warning":"Indirizzo IP valido","ethernet_view_not_available":"Non disponibile","ethernet_view_primary_dns_label":"SERVER DNS PRINCIPALE","ethernet_view_primary_dns_warning":"Server DNS principale valido","ethernet_view_static_label":"Indirizzo statico","ethernet_view_subnet_mask_label":"MASCHERA SUB-NET (OPZ.)","ethernet_view_subnet_mask_warning":"Subnet mask valida","factory_reset_message":"Verrà ripristinato lo stato predefinito dell\'unità configurato da Tesla. L\'operazione non può essere annullata. Prima di poterla utilizzare, un installatore professionista dovrà mettere nuovamente in servizio l\'unità. Potrebbe essere necessario doversi ricollegare alla rete WiFi dell\'unità.","field_false":"Falso","field_true":"Vero","follower_powerwall_message":"Questa unità Powerwall è controllata da {leader}","follower_powerwall_title":"Powerwall secondario","form_legend_text":"Indica un campo obbligatorio","generation_container_connecting_status":"In avvio","generation_container_connection":"Inverter {id} Connessione","generation_container_connection_summary":"Durante questa procedura di connessione, è possibile disconnettersi temporaneamente dalla rete. {lb} Assicurarsi di riconnettersi alla rete corretta. Questo può richiedere fino a 3 minuti.","generation_container_subtitle":"Aggiungi qui informazioni su inverter solari e gruppi elettrogeni","generation_container_title":"Generazione","generator_item_view_disconnect_type_label":"TIPO DI INTERRUTTORE ALIMENTAZIONE","generator_item_view_generator":"GRUPPO ELETTROGENO {id}","generator_item_view_manufacturer_label":"COSTRUTTORE (OPT)","generator_item_view_model_label":"MODELLO","generator_item_view_serial_label":"NUMERO SERIALE","generator_item_view_sustained_power_label":"POTENZA IN FUNZIONAMENTO CONTINUO","generator_view_add_generator":"AGGIUNGI GRUPPO ELETTROGENO","grid_code_container_off_grid_confirmation":"Il sistema è disconnesso dalla rete?","grid_code_container_off_grid_detected":"Il sistema è disconnesso dalla rete. Controllare che è l\'impostazione corretta.","grid_code_container_off_grid_warning":"{warning}: Non è possibile determinare se il sistema è disconnesso dalla rete. Un\'impostazione incorretta potrebbe causare danni al sistema.","grid_code_container_results":"Risultati del rilevamento dello stato di Rete","grid_code_container_retrieving":"Caricamento delle Tipologie di Rete","grid_code_container_saving":"Salvataggio codice rete","grid_code_container_subtitle":"Basato sulla posizione e lettura dai contatori, trova la configurazione più adatta alla tua installazione","grid_services_view_grid_services":"Servizi di rete","heading_change_password":"Cambia password","help_view_how_password":"Trovare la password nel Gateway","help_view_how_password_description":"Apri la porta del Gateway. La password è posizionata nell\'etichetta","help_view_how_serial_number":"Individuazione del numero di serie su un gateway non di backup","help_view_how_serial_number_backup":"Individuazione del numero di serie su un gateway di backup","help_view_how_serial_number_backup_description":"Apertura porta del gateway di backup. Il numero di serie inizia con un \\"(S):\\"","help_view_how_serial_number_description":"Apertura della porta gateway. Il numero di serie inizia con un \\"(S):\\"","help_view_how_to_enable_line":"Attivazione/disattivazione dell\'unità Powerwall","help_view_how_to_enable_line_description":"Disattivare quindi attivare l\'unità Powerwall tramite l\'interruttore. In caso di più sistemi Powerwall, è sufficiente agire su un solo interruttore","hierarchy_charger":"Gruppo caricatore {name}","hierarchy_chinv":"VFD per compressore e riscaldatore (CHINV)","hierarchy_converter":"Convertitore CC-CC (STARC)","hierarchy_inverter":"Gruppo batterie {name}","hierarchy_mega_thermal_controller":"Controller termico (MPTHC)","hierarchy_missing_post":"Colonnina mancante","hierarchy_mpbc":"Gruppo batterie {name}","hierarchy_part_number":"Numero parte","hierarchy_pod":"Unità modulare","hierarchy_pods_reporting":"Reporting unità modulari","hierarchy_post":"Colonnina (LCC)","hierarchy_posts":"Colonnine","hierarchy_power_stage":"Powerstage","hierarchy_power_stages":"Powerstage","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Quadro di gestione batterie (QBMS)","hierarchy_qhvp":"Processore ad alta tensione (QHVP)","hierarchy_scthcs":"Controller termici","hierarchy_serial_number":"Numero di serie","hierarchy_sitemaster":"Sitemaster {name}","hierarchy_starcs":"Convertitori DC-DC","hierarchy_stitch":"CC-CC centralina elettronica (STITCH)","hierarchy_thermal_controller":"Controller termico (SCTHC)","higher_order_login_login_required":"Accesso necessario","higher_order_login_title":"Cominciamo.","home_container_caution":"⚠️ Attenzione","home_container_caution_deenergize":"Per disattivare l\'alimentazione del sistema in sicurezza, spegnere tutti gli interruttori dell\'unità Powerwall.","home_container_caution_energized":"Se le stringhe del fotovoltaico sono collegate, il sistema potrebbe rimanere alimentato.","home_container_inactive_meter":"Dati del contatore scaduti","home_container_inactive_meter_description":"Controlla {type} la connessione del meter","home_container_inactive_meter_timestamp":"Ultima lettura del contatore alle: {timestamp}","home_container_login_required":"Accesso necessario","home_container_missing_meter":"Il contatore è mancante","home_container_positive_meter":"Avvertenza: {type} contantore potrebbe essere configurato in modo errato","home_container_positive_meter_description":"{type} contantore richiede potenza e amperaggio positivi per essere configurato correttamente.","home_container_powerwall_error":"Errore di Sistema Powerwall","home_container_powerwall_start_error":"Impossibile avviare il sistema: {reason}","home_container_site_controller_error":"Errore di sistema Controller sito","home_container_sitemaster_alternative":"Nota: Normalmente il sistema va disattivato posizionando su OFF gli interruttori sul lato destro dei Powerwall e aprendo i relativi interruttori di circuito.","home_container_sitemaster_confirm":"Clicca Sí a fondo pagine se sei sicuro che il sistema deve essere fermato.","home_container_sitemaster_confirm_industrial":"Arrestare il sistema?","home_container_sitemaster_confirm_wizard":"Per poter eseguire la procedura guidata è necessario arrestare il sistema. Procedere e arrestare il sistema?","home_container_sitemaster_header_warning":"{warning} Questo comando fermerà il Powerwall e il normale funzionamento del sistema.","home_container_sitemaster_header_warning_industrial":"{warning} Il sistema è in uno stato tale che Tesla sconsiglia di arrestarlo. Motivo: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} Il sistema è in uno stato tale che Tesla sconsiglia di arrestarlo. Motivo: \\"{reason}\\"","home_container_sitemaster_logging":"Mentre il sistema è spento, la raccolta dati verrà interrotta","home_container_sitemaster_reset":"Dopo aver fermato il sistema, si prega di cliccare il pulsante \\"Fai Partire...\\" per far ripartire il sistema.","home_container_sitemaster_update":"Se c\'è un aggiornamento in corso, verrà interrotto","home_container_start_powerwall":"Fai Partire il Sistema Powerwall","home_container_start_system_button":"AVVIA SISTEMA","home_container_stop_powerwall":"Ferma il Sistema Powerwall","home_container_stop_system_button":"ARRESTA SISTEMA","home_view_compliance":"COMPATIBILITÀ","home_view_download_all_logs":"Scarica tutti i rapporti","home_view_download_logs":"SCARICA RAPPORTI","home_view_download_logs_description_one":"Verrà scaricato un file compresso contenente rapporti di sistema che possono essere utili per diagnosticare i problemi del sistema operativo, del software e di rete.","home_view_download_logs_description_three":"I rapporti sono firmati e crittografati e devono essere inviati a Tesla Energy Service per essere esaminati.","home_view_download_logs_description_two":"È particolarmente utile quando il Gateway non riesce a connettersi alla rete ed è necessaria un\'avanzata risoluzione del problema.","home_view_login":"ACCESSO","home_view_logout":"DISCONNESSIONE","home_view_run_wizard":"INIZIA GUIDA","input_accept":"Accetto","input_confirm":"Confermo di aver preso visione di tutte le avvertenze del sistema.","input_consent":"Dò il mio consenso","input_decline":"Non accetto","input_no_consent":"Non dò il mio consenso","input_title_email":"Si prega di inserire un indirizzo e-mail valido: nome@nome.dominio","installation_container_relay_section_modal_title":"Relè bassa tensione del Gateway","installation_container_residual_current_device_modal_title":"Requisito di installazione per interruttori differenziali del sito","installation_container_subtitle":"Informazioni su installatore e sito","installation_container_sync_relay_usage_open_off_grid":"Aprire relè quando fuori rete","installation_container_title":"Dettagli dell\' Installazione","installation_problem_detail_site_shutdown_0":"Per riattivare il sistema:","installation_problem_detail_site_shutdown_1":"Spegnere tutti gli interruttori ON/OFF delle unità Powerwall","installation_problem_detail_site_shutdown_2":"Chiudere gli E-stop","installation_problem_detail_site_shutdown_3":"Assicurarsi che i ponticelli per lo spegnimento rapido siano correttamente installati","installation_problem_detail_site_shutdown_4":"Controllare il cablaggio del circuito di spegnimento.","installation_problem_detail_title_site_shutdown":"Circuito di spegnimento del sito attivato","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Circuito di spegnimento del sito attivato da uno spegnimento rapido di Powerwall+","installation_problem_details_pvacs_with_no_solar_rgm":"I contatori solari sono necessari solo quando si misurano gli inverter fotovoltaici che non fanno parte di un gruppo Powerwall+. I contatori che misurano l\'inverter Powerwall+ devono essere contrassegnati come tali nella pagina Trasformatori di corrente.","installation_problem_details_too_few_solar_rgm":"Il numero di trasformatori di corrente che misurano l\'inverter fotovoltaico Powerwall+ deve corrispondere al numero di inverter fotovoltaici Powerwall+. Eseguire la procedura guidata, associare il contatore Neurio se necessario e adattare la configurazione dei TA nella pagina Trasformatori di corrente.","installation_problem_details_too_many_solar_rgm":"Il numero di trasformatori di corrente che misurano l\'inverter fotovoltaico Powerwall+ deve corrispondere al numero di inverter fotovoltaici Powerwall+. Eseguire la procedura guidata e adattare la configurazione dei TA nella pagina Trasformatori di corrente.","installation_problem_title_pvacs_with_no_solar_rgm":"Il contatore solare non misura l\'inverter Powerwall+. È corretto?","installation_problem_title_site_shutdown":"Circuito di spegnimento del sito attivato. Tutte le unità Powerwall e gli inverter fotovoltaici Powerwall+ sono disattivati.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Circuito di spegnimento del sito attivato da uno spegnimento rapido di Powerwall+ Tutte le unità Powerwall e gli inverter fotovoltaici Powerwall+ sono disattivati.","installation_problem_title_too_few_solar_rgm":"Troppo pochi contatori solari misurano l\'inverter Powerwall+","installation_problem_title_too_many_solar_rgm":"Troppi contatori solari misurano l\'inverter Powerwall+","installation_view_add_on_solar":"Estensione","installation_view_additional_connections_label":"COLLEGAMENTI AGGIUNTIVI","installation_view_back_wiring":"Retro","installation_view_backup_configuration_label":"CONFIGURAZIONE DI BACKUP","installation_view_basement_location":"Cantina","installation_view_company_label":"DITTA","installation_view_company_placeholder":"Nome della ditta","installation_view_conditioned_space_location":"Spazio confinato","installation_view_existing_solar":"Esistente","installation_view_floor_mounting":"Pavimento","installation_view_garage_location":"Garage","installation_view_home_label":"CABLAGGIO CASA","installation_view_location_label":"LUOGO DELL\' INSTALLAZIONE POWERWALL ","installation_view_modem_ethernet":"Modem cellulare via Ethernet?","installation_view_modem_wifi":"Modem cellulare via Wi-Fi?","installation_view_mounting_label":"MONTAGGIO DEL POWERWALL","installation_view_na_backup_configuration":"Non applicabile","installation_view_new_solar":"Nuovo","installation_view_none_solar":"Nessuno","installation_view_outdoor_location":"Esterno","installation_view_pad_mounting":"Basamento","installation_view_partial_home_backup_configuration":"Parte dell\'abitazione","installation_view_phone_label":"TELEFONO","installation_view_phone_placeholder":"Numero telefonico dell\'installatore","installation_view_powerline_ethernet":"Powerline via Ethernet?","installation_view_pv_panel":"Pannello fotovoltaico","installation_view_relay_enabled":"Aprire relè quando fuori rete","installation_view_relay_label":"RELÈ BASSA TENSIONE GATEWAY","installation_view_relay_options_modal_content":"Quando fuori rete o connesso a un\'altra fonte di tensione CA, questo relè sarà chiuso. {lb1} Quando fuori rete, questo relè sarà aperto. {lb1} Ad esempio, può essere usato per attivare un impianto di aria condizionata quando collegato alla rete, quindi per disattivarlo quando fuori rete per impedire all\'elevata corrente di spunto associata di sovraccaricare le unità Powerwall.","installation_view_relay_section_modal_content":"Il Gateway ha un relè integrato la cui attivazione e disattivazione sono controllate in base allo stato del sistema. {lb1} Può essere utilizzato per controllare un dispositivo esterno, ad esempio un carico o una fonte di energia secondaria. {lb1} Sul Backup Gateway 1, usare i pin 1 e 2 sul connettore ausiliario (connettore grande Phoenix verde a 9 pin). {lb1} Sul Backup Gateway 2, usare i pin 3 e 4 (GSO/GSI) sul connettore ausiliario (connettore grande Phoenix verde a 5 pin). {lb1} Questo relè ha una potenza nominale di 60 Volt/2 Amp ed è comunemente utilizzato con circuiti da 12 V o 24 V. {lb1} Per ulteriori informazioni, consultare le relative note sulla distribuzione del carico e sull\'applicazione.","installation_view_residual_current_device":"L\'interruttore differenziale è stato installato a monte del Gateway?","installation_view_residual_current_device_modal_content":"Per alcune installazioni quali reti con configurazione TT, potrebbero essere necessari interruttori differenziali (RCD) a livello di sito. {lb1}{lb2} Per ridurre il rischio di scatto degli interruttori durante il funzionamento fuori rete, Tesla raccomanda di assicurare che tutti gli interruttori differenziali a monte siano temporizzati (di tipo S) o di spostare l\'interruttore differenziale del sito dopo il contattore del Gateway, se possibile. {lb1}{lb2} Per ulteriori informazioni, consultare la Nota di applicazione protezione da guasti e RCD.","installation_view_satellite_ethernet":"Internet satellitare via Ethernet?","installation_view_satellite_wifi":"Internet satellitare via Wi-Fi?","installation_view_side_wiring":"Laterale","installation_view_solar_label":"INSTALLAZIONE DELL\'IMPIANTO FOTOVOLTAICO","installation_view_solar_panels":"Pannelli fotovoltaici","installation_view_solar_roof":"Solar Roof","installation_view_solar_type_label":"TIPO DI INSTALLAZIONE IMPIANTO FOTOVOLTAICO","installation_view_solarglass":"Solarglass","installation_view_stack_kit":"È installato il Powerwall Stack Kit?","installation_view_type_commercial":"Commerciale","installation_view_type_label":"INFORMAZIONI SULL\'INSTALLAZIONE","installation_view_type_perm_off_grid":"Permanentemente fuori rete","installation_view_type_residential":"Residenziale","installation_view_wall_mounting":"Parete","installation_view_whole_home_backup_configuration":"Tutta l\'abitazione","installation_view_wifi_extender":"Ripetitore WiFi?","installation_view_wiring_label":"CABLAGGIO DEL POWERWALL","inverter_test_view_accuracy_magnitude":"Precisione della soglia","inverter_test_view_accuracy_time":"Precisione del tempo","inverter_test_view_complete":"Completo","inverter_test_view_current_magnitude":"Valore attuale","inverter_test_view_fail":"Fallire","inverter_test_view_na":"N/A","inverter_test_view_not_run":"Non eseguito","inverter_test_view_pass":"Passare","inverter_test_view_running":"In esecuzione","inverter_test_view_set_magnitude":"Valore impostato","inverter_test_view_set_time":"Tempo impostato","inverter_test_view_test_description":"Esecuzione autotest Inverter","inverter_test_view_test_name_all":"Tutti i test","inverter_test_view_test_name_over_freq_stage_one":"Sovrafrequenza del 1˚ Stadio","inverter_test_view_test_name_over_freq_stage_two":"Sovrafrequenza del 2˚ Stadio","inverter_test_view_test_name_over_volt_one":"Sovratensione del 1˚ Stadio","inverter_test_view_test_name_over_volt_two":"Sovratensione del 2˚ Stadio","inverter_test_view_test_name_under_freq_stage_one":"Sottofrequenza del 1˚ Stadio","inverter_test_view_test_name_under_freq_stage_two":"Sottofrequenza del 2˚ Stadio","inverter_test_view_test_name_under_volt_one":"Sottotensione del 1˚ Stadio","inverter_test_view_test_name_under_volt_two":"Sottotensione del 2˚ Stadio","inverter_test_view_timestamp":"Tempo attuale","inverter_test_view_trip_magnitude":"Soglia di intervento","inverter_test_view_trip_time":"Tempo di intervento","inverter_test_view_warning":"Nota: il test dell\'inverter può richiedere fino a 20-30 minuti per inverter.","label_fail":"Fallito","label_inconclusive":"Senza risoluzione","label_pass":"Passato","legal_container_customer_policy_subtitle":"Deve essere completata dal proprietario dell\'abitazione o sito commerciale.","legal_container_customer_policy_title":"Informativa sulla Privacy & Garanzia per Utenti Tesla","legal_container_no_meters_warning":"NON CI SONO CONTATORI CONFIGURATI","legal_container_no_powerwalls_warning":"NON CI SONO POWERWALL CONFIGURATI","login_type_customer":"Cliente","login_type_engineer":"Ingegnere","login_type_installer":"Installatore","login_view_cancel_login_auth":"Annulla accesso","login_view_change_forgot_password":"PASSWORD MODIFICATA O DIMENTICATA","login_view_compliance":"COMPATIBILITÀ","login_view_customer_email_placeholder":"E-mail cliente","login_view_email":"E-MAIL","login_view_email_placeholder":"Indirizzo e-mail dell\'installatore","login_view_forgot_password":"PASSWORD DIMENTICATA","login_view_forgot_password_login_type":"Selezionare il tipo di accesso","login_view_language_label":"LINGUA","login_view_login_type_label":"TIPO DI ACCESSO","login_view_password_placeholder":"Inserire la password","login_view_start_login_auth":"AVVIA PROCEDURA DI ACCESSO","login_view_start_login_auth_how_to_enable_line_description":"Per accedere, spegnere e riaccendere l\'interruttore laterale di attivazione dell\'unità Powerwall. In caso di più sistemi Powerwall, è sufficiente agire su un solo interruttore","login_view_username":"NOME UTENTE","login_view_username_placeholder":"Nome utente","login_warning_view_expand":"Se la Configurazione Guidata non inizia, {click}","login_warning_view_firmware_update":"Quando l\'aggiornamento del firmware in corso","login_warning_view_heading":"{warning} L\'avvio della procedura guidata interrompe il funzionamento a batteria.","login_warning_view_protect_system":"Per proteggere il sistema, la Configurazione Guidata non sarò avviata","login_warning_view_stop_operation":"Forza avvio della Configurazione Guidata (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Sono attualmente supportati solo browser web Chrome e Safari.","login_warning_view_system_force_launch":"Se vuoi far partire la Configurazione Guidata e fermare l\'operazione del sistema, selezione \\"Forza avvio della Configurazione Guidata\\".","login_warning_view_system_off_grid":"Quando la rete elettrica disconnessa","login_warning_view_warning_click":"clic per dettagli","mater_item_view_bad_barcode":"Codice a barre scansionato non corretto","mater_item_view_barcode_scan_failed":"Scansione del codice a barre non riuscita","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Batteria","meter_aggregate_type_load":"Carico","meter_aggregate_type_site":"Sito","meter_aggregate_type_solar":"Fotovoltaico","meter_container_add_meter_error":"Verificando Contatore...","meter_container_add_meter_status":"Aggiungendo contatore...","meter_container_authorizing_status":"Autorizzando...","meter_container_decode":"Impossibile leggere numero di serie dall\'immagine.","meter_container_detecting_status":"Identificando Contatori RS-485","meter_container_failed_status":"Problema nell\'aggiungere Contatore","meter_container_reconnecting_status":"In riconnessione...","meter_container_skip_title":"Nessun contatore messo in funzione. Continuare?","meter_container_starting_status":"In avvio...","meter_container_subtitle":"Per collegarli, imposta l\'ID breve e il numero di serie dei meter / contatori. Verifica ogni meter appena entra in servizio.","meter_container_subtitle_industrial":"Immettere gli indirizzi IP e le posizioni dei contatori di energia per connettersi. Testare ogni contatore dopo la messa in servizio.","meter_container_success_status":"Contatore ѐ stato aggiunto","meter_container_title":"Contatori","meter_container_unknown_status":"Sconosciuto","meter_container_updating_status":"Aggiornamento del contatore","meter_container_verification":"Verifica del Meter {id}","meter_container_verification_gw1":"Durante la procedura di abbinamento Wi-Fi, si potrebbe essere momentaneamente disconnessi dalla rete Wi-Fi del Gateway. {lb} Assicurarsi di riconnettersi alla rete corretta. Questa procedura potrebbe richiedere fino a 3 minuti.","meter_container_verification_gw2":"La procedura di abbinamento Wi-Fi potrebbe richiedere fino a 3 minuti.","meter_container_verify_meter_error":"Verificando Contatore...","meter_container_verifying_status":"Verificando contatore...","meter_item_view_add_failed":"Impossibile aggiungere il contatore","meter_item_view_add_failed_help":"Controllare l\'ID breve e il numero di serie. Riavviare il contatore e collegarlo quando emette un suono. Se il problema persiste, eliminare il contatore e riprovare.","meter_item_view_advanced_settings":"IMPOSTAZIONI AVANZATE (OPZIONALE)","meter_item_view_battery_ct":"Batteria","meter_item_view_battery_location":"Batteria","meter_item_view_check_meter":"CONTROLLA CONNESSIONE AL CONTATORE {id}","meter_item_view_conductor_location":"Conduttore","meter_item_view_cts":"{count} trasformatori di corrente rilevati","meter_item_view_doubled_solar_location":"Valore fotovoltaico raddoppiato","meter_item_view_generator_location":"Generatore","meter_item_view_ip_address":"INDIRIZZO IP","meter_item_view_load_location":"Carico","meter_item_view_mac_address":"INDIRIZZO MAC","meter_item_view_meter_location":"POSIZIONE DEI CONTATORI","meter_item_view_none_location":"Nessuna","meter_item_view_remote_ip_address_placeholder":"Ad es. 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"Ad es. 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"Ad es. OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"Ad es. 01234","meter_item_view_serial":"NUMERO DI SERIE","meter_item_view_short_id":"ID BREVE","meter_item_view_site_ct":"Sito","meter_item_view_site_location":"Sito","meter_item_view_solar_ct":"Fotovoltaico","meter_item_view_solar_location":"Fotovoltaico","meter_item_view_solar_rgm_location":"Solo ricavo da fotovoltaico","meter_item_view_success":"CONNESSO!","meter_item_view_unable":"CONTATORE NON RAGGIUNGIBILE!","meter_item_view_upgrading":"Il contatore si sta aggiornando","meter_list_view_add":"AGGIUNGI CONTATORE WI-FI","meter_list_view_add_ip":"AGGIUNGI IP CONTATORE","meter_list_view_detect":"AGGIUNGI CONTATORE VIA RS-485","meter_list_view_enable_inverter_readings":"Attiva valori dell\'inverter batteria","meter_list_view_inverter_meter":"CONTATORI INVERTER","meter_list_view_inverter_meter_desc":"Quando attivato e se non sono configurati contatori della batteria, il Controller sito utilizzerà i valori degli inverter della batteria come contatore della batteria.","meter_msa_id":"BACKUP SWITCH {id}","meter_sync_id":"SINCRONIZZA CONTATORE {id}","meter_sync_x_id":"CONTATORE INTERNO PRINCIPALE X (GATEWAY) {id}","meter_sync_y_id":"CONTATORE AUSILIARIO INTERNO Y (GATEWAY) {id}","meter_update_modal_fetch_status_error":"Impossibile recuperare lo stato di aggiornamento del misuratore","meter_update_modal_footer":"L\'aggiornamento dello strumento può richiedere fino a 2 minuti","meter_update_modal_remaining_time":"Tempo rimanente: {seconds} secondi","meter_update_modal_timeout_error":"Il tempo è scaduto durante l\'aggiornamento del contatore","meter_update_modal_title":"L\'aggiornamento del contatore è in corso","meter_validation_container_error":"La convalida contatore non è disponibile mentre è in esecuzione il controller sito.","meter_validation_container_error_placeholder":"Convalida contatore non disponibile: {error}.","meter_validation_container_power_command":"Comando potenza","meter_validation_container_power_start":"Avvio","meter_validation_container_power_stop":"Stop","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Comando potenza reattiva","meter_validation_container_real_power_command":"Comando potenza reale","meter_validation_container_show_per_phase":"Mostra valori per fase","meter_validation_container_title":"Convalida contatore","meter_validation_container_usage":"Inviare un comando potenza e convalidare i dati del contatore. È necessario rimanere in questa pagina per mantenere continuo il comando potenza. Valori negativi indurranno il sistema a caricarsi. Valori positivi indurranno il sistema a scaricarsi.","meter_validation_control_subtitle":"Comando","meter_validation_control_title":"Titolo comando","meter_validation_disable":"Disattiva","meter_validation_loading":"Caricamento","meter_validation_menu":"Menu","meter_validation_reset":"Reset","meter_validation_submit":"Invia","meter_validation_submitting_control":"Invio comando","meter_validation_title":"Convalida contatore","meter_validation_view_apparent_power":"Potenza apparente (kVA)","meter_validation_view_battery_location":"Batteria","meter_validation_view_conductor_location":"Conduttore","meter_validation_view_current":"Corrente (A)","meter_validation_view_doubled_solar_location":"Valore fotovoltaico raddoppiato","meter_validation_view_generator_location":"Generatore","meter_validation_view_inverters":"Inverter ({length})","meter_validation_view_load_location":"Carico","meter_validation_view_meter":"Contatori ({length})","meter_validation_view_none_location":"Nessuna","meter_validation_view_pf":"Fattore di potenza","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Media","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Totale","meter_validation_view_reactive_power":"Potenza reattiva (kVAr)","meter_validation_view_real_power":"Potenza reale (kW)","meter_validation_view_site_location":"Sito","meter_validation_view_solar_location":"Fotovoltaico","meter_validation_view_solar_rgm_location":"Solo ricavo da fotovoltaico","meter_validation_view_voltage":"Tensione (V)","meter_w1_wifi_id":"CONTATORE {id}","meter_w1_wired_id":"CONTATORE CABLATO {id}","meter_w2_wifi_id":"CONTATORE {id}","meter_w2_wired_id":"CONTATORE CABLATO {id}","meter_wifi_id":"CONTATORE {id}","meter_wired_id":"Meter cablato {id}","metrics_aggregate":"Sistema","metrics_apparent_power":"Potenza apparente ({unit})","metrics_battery":"Batteria","metrics_current":"Corrente ({unit})","metrics_meter":"Misurazione","metrics_no_metrics":"Nessuna misurazione da visualizzare.","metrics_power_factor":"Fattore di potenza","metrics_reactive_power":"Potenza reattiva ({unit})","metrics_real_power":"Potenza reale ({unit})","metrics_subtitle":"Misurazioni","metrics_voltage_l_n":"Tensione L-N ({unit})","modal_acknowledge":"AMMETTERE","modal_confirm":"Conferma","modal_exit":"CHIUDI","modal_no":"NO","modal_note":"Nota","modal_ok":"OK","modal_reconfigure":"RICONFIGURA","modal_yes":"SÌ","modbus_container_title":"Interfaccia Modbus","modbus_table_register_address":"Indirizzo","modbus_table_register_name":"Nome","modbus_table_register_type":"Tipo","modbus_table_register_value":"Valore","modbus_table_register_value_decimal":"Valore (decimale)","modbus_table_register_value_hex":"Valore (esadecimale)","msa-off-grid":"Non collegato alla rete","msa-on-grid":"Collegato alla rete","navigation_email":"E-MAIL","network-switch-menu-item":"Switch di rete","network_cellular_configured":"Configurato ma non connesso. Assicurarsi che la rete cellulare sia disponibile e che non siano presenti ostruzioni attorno all\'antenna.","network_connected":"Connesso","network_container_connect_ethernet":"Connessione via Ethernet","network_container_connect_to_internet":"Si prega di attendere mentre il sistema prova una connessione ad Internet.","network_container_connect_wifi":"Connessione a {ssid} in corso","network_container_connect_wifi_description":"Durante questa fase può essere necessaria una riconnessione alla rete dati del gateway per continuare con l\'installazione.","network_container_connman":"Powerwall, tramite gestione di connessioni, ora utilizza la miglior rete per connettersi ai server.","network_container_connman_body":"Per garantire la connessione, configurare tutti i tipi di rete:","network_container_delete_network":"Rimuovere le Reti configurate?","network_container_ethernet_and_wifi_warning":"Configurare le reti Ethernet e Wi-Fi disponibili per garantire connessione","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configurare le reti Ethernet disponibili per garantire connessione","network_container_network_description":"Connetti ad Internet con tutte le reti disponibili.","network_container_network_subtitle":"Rete dati","network_container_no_internet_bullet_four":"Powerwall può trasmettere a Tesla dati sulle prestazioni, dando l\'opportunità ai Tecnici di Supporto di identificare problemi","network_container_no_internet_bullet_four_industrial":"I dispositivi possono inviare dati sulle prestazioni a Tesla, consentendo all\'assistenza tecnica di identificare i problemi.","network_container_no_internet_bullet_one":"La registrazione del Powerwall è trasmessa a Tesla, e attiva la garanzia di 10 anni","network_container_no_internet_bullet_three":"L\'utente può utilizzare l\'applicazione mobile Tesla per monitorare l\'utilizzo energetico e controllare Powerwall","network_container_no_internet_bullet_two":"Powerwall può ricevere aggiornamenti software da remote, permettendo miglioramenti delle prestazioni e nuove funzionalità","network_container_no_internet_bullet_two_industrial":"I dispositivi possono ricevere aggiornamenti del firmware da remoto, consentendo di migliorare le prestazioni e offrire nuove funzionalità","network_container_no_internet_bullet_zero":"È possibile determinare se è necessario un aggiornamento del firmware prima della messa in servizio","network_container_no_internet_no_cell_title":"Se sul sito di installazione è disponibile una connessione a Internet, non saltare questo passaggio. Connettersi al servizio Internet del cliente tramite la rete Ethernet (scelta consigliata) o Wi-Fi.","network_container_no_internet_title":"Se l\'installazione ha disponibile una connessione a Internet, si prega di non ignorare questo passo. Connettere Powerwall al servizio Internet dell\'utente tramite Ethernet (preferito) o Wi-Fi o create una connessione via cellulare.","network_container_no_internet_warning":"Il funzionamento senza una connessione ad Internet potrebbe influenzare i termini della garanzia Powerwall.","network_container_scan_networks":"Scansione delle Reti Wi-Fi","network_container_scan_wifi_disconnect_warning":"Attenzione: La scansione di nuove reti disconnetterà la connessione Wi-Fi.","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"Configurare le reti Wi-Fi disponibili per garantire connessione","network_disabled":"Disattivato","network_disconnected":"Non connesso","network_ethernet_configured":"Configurato ma non connesso. Controllare il collegamento del cavo Ethernet.","network_switches_container_discover_failure":"Ultimo errore individuato: {error}","network_switches_container_discover_switches":"Individua switch di rete","network_switches_container_discovered_label":"Switch di rete individuati","network_switches_container_discovering_stop_button":"Interrompi ricerca","network_switches_container_discovery_switches_running_label":"È in corso l\'individuazione degli switch di rete. Di seguito è possibile interrompere la ricerca.","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"Switch di rete supportati solo sui sistemi industriali.","network_switches_container_password_not_set":"La password non è impostata","network_switches_container_password_set":"La password è impostata","network_switches_container_passwords_error":"Stato impostazione password: {status}","network_switches_container_set_password_label":"Impostare la password su tutti gli switch di rete che utilizzano ancora la password predefinita di fabbrica.\\n Tutte le password saranno impostate sullo stesso valore.","network_switches_container_set_passwords":"Imposta password","network_switches_container_set_passwords_button":"Imposta password","network_switches_container_setting_passwords_button":"Impostazione della password...","network_switches_container_start_discovering_button":"Avvia individuazione","network_switches_container_start_discovery_help":"L\'individuazione degli switch di rete viene eseguita automaticamente e periodicamente ma può essere avviata tramite il pulsante Avvia individuazione.","network_switches_container_subtitle":"Visualizza switch di rete","network_switches_container_title":"Switch di rete","network_view_check_connection":"CONTROLLARE CONNESSIONE AD INTERNET","network_view_connection_failed":"NON CONNESSI!","network_view_connection_success":"SIAMO CONNESSI!","network_view_continue_no_internet":"CONTINUA SENZA CONNESSIONE AD INTERNET","network_view_default_error":"Errore collegamento","network_view_local_network_connected":"Rete locale connessa","network_view_local_network_disconnected":"Errore di rete locale","network_view_tesla_internet_connected":"Servizi Tesla e Internet connessi","network_view_tesla_internet_disconnected":"Errore di connessione ai Servizi Tesla e Internet","network_warning":"Attenzione","network_wifi_configured":"Configurato ma non connesso. Controllare le impostazioni Wi-Fi.","open_meter_validatiion_container_title":"Apri convalida contatore","operation_mode_autonomous":"Modalità autonoma","operation_mode_backup":"Solo ricarica di backup","operation_mode_self_consumption":"Modalità autoconsumo","operation_mode_site_control":"Controllo sito","overview_menu_control_title":"Controllo","overview_menu_diagnostics_title":"Diagnostica","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Connesso","overview_menu_network_no_connection":"Connessione assente","overview_menu_registration_complete":"Completa","overview_menu_registration_incomplete":"Incompleta","overview_menu_registration_pending":"In attesa della connessione ad internet","overview_menu_security_title":"Modifica o reimposta la password","overview_menu_settings_title":"Impostazioni","overview_menu_summary_title":"Riepilogo","overview_menu_system_title":"Sistema","overview_menu_update_title":"Aggiornamento software","overview_menu_view_alerts_event":"Evento","overview_menu_view_alerts_events":"Eventi","overview_menu_view_inverter_title":"Test dell\'inverter","overview_menu_view_network_title":"Rete","overview_menu_view_registration_title":"Registrazione","overview_menu_view_test_title":"Autotest","overview_meter_validation_title":"Convalida contatore","password_generate_error":"Si è verificato un errore durante la generazione di una nuova password. Verificare la connettività e la password corrente e riprovare.","password_generate_help_text":"Immettere la password esistente per generare una nuova password casuale.","password_generate_menu_title":"Cambia password","password_generate_notice":"La password è stata modificata. Registrare la nuova password prima di uscire da questa pagina.","phase_container_detect_timeout":"Controllo di fase scaduto","phase_container_detection_attempt":"Tentativo numero {num}","phase_container_grid_code_validating_modal_title":"Verifica codice di rete","phase_container_grid_compliant_description":"Rete conforme {checkmark}","phase_container_grid_modal_description":"La rete sarà confome in {time} secondi","phase_container_grid_modal_title":"In attesa di conformità di rete","phase_container_modal_description":"Il controllo delle fasi può richeidere fino a 2 minuti per Powerwall","phase_container_modal_title":"Controllo fasi in corso","phase_container_saving_phases_modal_title":"Salvataggio fasi","phase_container_subtitle":"Controlla su quale fase è installato ogni Powerwall e aggiorna lo stato della linea","phase_container_supported_error":"Nessun Powerwall rilevato. Il rilevamento della fase non è supportato.","phase_container_title":"Fase","phase_container_voltage_caution_body":"Tensione non attesa: {voltage}V sono misurati sulla fase {lineNumber}. Controlla che {lineStatus} sia la configurazione esatta per questa fase.","phase_container_warning_body":"Nessuna fase è stata selezionata come backup. In questo modo il sistema non potrà supportare i carichi in caso di blackout","phase_container_warning_modal_header":"Backup disabilitato","phase_line_id":"Fase - {id}","phase_line_item_view_line":"Fase","phase_line_item_view_line_status_backup":"Backup","phase_line_item_view_line_status_configured":"Non Backup","phase_line_item_view_line_status_not_configured":"Non configurato","phase_line_status_backup":"Backup","phase_line_status_configured":"Non Backup","phase_line_status_not_configured":"Non configurato","phase_view_detect":"Controlla le fasi","phase_view_split_phase":"Bifase","power_flow_view_go_off_grid":"DISCONNETTI DALLA RETE","power_flow_view_go_on_grid":"CONNETTI ALLA RETE","power_flow_view_grid_button_disabled_reason":"Per potersi disconnettere dalla rete è necessario avviare il sistema.","power_flow_view_grid_spinner_alt_label":"Transizione del sistema","power_flow_view_start_system":"AVVIA SISTEMA","power_flow_view_stop_system":"ARRESTA SISTEMA","powerwall_container_industrial_no_additional_title":"Nessun gruppo batterie aggiuntive trovato","powerwall_container_industrial_subtitle":"Sono elencati tutti i gruppi batterie autorilevati dal controller del sito. Se il gruppo batterie non è presente, eseguire nuovamente la scansione.","powerwall_container_industrial_subtitle_auto_detection":"Sono elencati tutti i gruppi batterie autorilevati dal controller del sito. Se un Gruppo batterie non è presente nell\'elenco, controllare le apparecchiature di collegamento, compresi i cablaggi, e verificare che i controller bus siano accesi.","powerwall_container_industrial_title":"Gruppo batterie","powerwall_container_industrial_updating":"Verifica gruppi batterie","powerwall_container_no_additional_powerwalls_description":"Si prega di leggere il manuale di installazione per suggerimenti su come risolvere problemi di cablaggio.","powerwall_container_no_additional_powerwalls_title":"Non ho trovato altri Powerwall","powerwall_container_scan_again":"RIPETI SCANSIONE","powerwall_container_scanning":"Scansione in corso","powerwall_container_scanning_for_more":"Scansione ulteriore","powerwall_container_subtitle":"Lista di tutti i Powerwall connessi al gateway. Ripeti scansione se un Powerwall non è incluso nella lista.","powerwall_container_subtitle_component_auto_detection":"Sono elencati tutti i componenti rilevati automaticamente dal Gateway. Se un componente non è presente nell\'elenco, controllare il cablaggio.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Sto controllando I Powerwall","powerwall_container_updating_note":"Nota: Questa operazione può durare fino a 60 secondi per Powerwall.","powerwall_item_view_blank_numbers":"In attesa di verifica…","powerwall_item_view_numbers":"Codice Prodotto:{partNumber} Numero di Serie:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"Annulla","powerwall_pairing_connect":"Collegamento","powerwall_pairing_done":"Fatto","powerwall_pairing_error_already_paired":"Abbinamento non riuscito: il dispositivo è già associato","powerwall_pairing_error_bad_pairing_response":"Abbinamento non riuscito: il dispositivo ha rifiutato l\'abbinamento Assicurarsi che il dispositivo secondario sia stato arrestato","powerwall_pairing_error_bad_qr_code":"Non è un codice QR Wi-Fi","powerwall_pairing_error_internal":"Abbinamento non riuscito: errore interno","powerwall_pairing_error_no_qr_code":"Nessun codice QR trovato","powerwall_pairing_error_no_response":"Abbinamento non riuscito: il dispositivo non ha risposto","powerwall_pairing_error_not_leader":"Abbinamento non riuscito: questo è un dispositivo secondario. Riconnettersi al dispositivo principale.","powerwall_pairing_error_prohibited_uncommissioned":"Abbinamento non riuscito: questa unità Powerwall non è stata ancora messa in servizio","powerwall_pairing_error_too_many_devices":"Abbinamento non riuscito: è già stato abbinato il numero massimo di dispositivi","powerwall_pairing_error_unknown":"Abbinamento non riuscito: Errore sconosciuto","powerwall_pairing_error_wifi_connection_failed":"Abbinamento non riuscito: Impossibile connettersi alla rete Wi-Fi. Controllare la password.","powerwall_pairing_error_wifi_not_found":"Abbinamento non riuscito: Rete Wi-Fi non trovata","powerwall_pairing_exception":"Abbinamento non riuscito: Eccezione","powerwall_pairing_instructions_2":"Per abbinare l\'unità Powerwall, inserire o scansionare l\'SSID e la password della rete Wi-Fi. Cercare il codice QR sul dispositivo.","powerwall_pairing_password_label":"Password:","powerwall_pairing_scan_qr_code":"Scansiona codice QR","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"Abbinamento completato. Il nuovo dispositivo potrebbe iniziare a non rispondere per un minuto o più (più a lungo se è in corso un aggiornamento). Fare clic su Fine per terminare.","powerwall_pairing_state_monitoring":"Abbinamento del nuovo dispositivo. L\'operazione potrebbe richiedere fino a un minuto.","powerwall_starting":"Powerwall si sta avviando","powerwall_view_detected_backup":"Trovato unità utilizzabile come Riserva","powerwall_view_detected_synchrometers":"Rilevata capacità del contatore","powerwall_view_failed":"PROBLEMA","powerwall_view_no_backup":"Non ho trovato unità utilizzabile come Riserva","powerwall_view_no_sync":"Non ho trovato Sincronizzatore","powerwall_view_scan":"INIZIA SCANSIONE","powerwall_view_success":"SUCCESSO","powerwall_view_synchrometer_detected":"Synchrometers trovati","powerwall_view_synchronizer_detected":"Trovato Sincronizzatore","powerwall_view_update":"VERIFICA DEI POWERWALL","privacy_policy_view_accept_warranty_title":"Accetta la Garanzia Limitata per Tesla Powerwall","privacy_policy_view_contact_bullet_one":"via e-mail su {privacyEmail};","privacy_policy_view_contact_bullet_two":"via posta ordinaria a Tesla, Inc., Attn: Legal, 45500 Fremont Boulevard, Fremont, California 94538, Stati Uniti.","privacy_policy_view_contact_header":"Come contattarci","privacy_policy_view_contact_paragraph_one":"Se ha domande o commenti o per annullare la sottoscrizione a certi servizi, si prega di contattarci:","privacy_policy_view_contact_paragraph_three":"Se l’utente si trova nello Spazio economico europeo o in Svizzera, la società controllata Tesla locale potrebbe essere l’entità responsabile del trattamento dei dati personali.","privacy_policy_view_contact_paragraph_two":"Si prega di notare che le comunicazioni via e-mail non sono sempre sicure, di conseguenza si prega di non includere informazioni sulla carta di credito o informazioni sensibili nell\'e-mail.","privacy_policy_view_cross_border_transfers_header":"Trasferimenti transfrontalieri","privacy_policy_view_cross_border_transfers_paragraph_one":"I Servizi sono controllati e gestiti dagli Stati Uniti. Le informazioni da o sull\'utente o sull\'utilizzo da parte dell’utente dei prodotti o dei Servizi possono essere conservate ed trattate in qualsiasi paese in cui abbiamo delle strutture o in cui ci avvaliamo di fornitori di servizio. Tali paesi possono non disporre di leggi sulla protezione dei dati personali analoghe a quelle del paese in cui i dati sono stati originariamente raccolti. Quando trasferiamo le informazioni da o sull\'utente o sull\'utilizzo dei nostri prodotti o dei Servizi in altri paesi, le proteggeremo così come descritto nella presente Informativa sulla Privacy. Utilizzando i nostri prodotti, i Servizi o altrimenti fornendoci informazioni, si acconsente al trasferimento di informazioni da o sull\'utente o sull\'utilizzo dei nostri prodotti o dei Servizi in paesi al di fuori del paese di residenza, inclusi gli Stati Uniti.","privacy_policy_view_cross_border_transfers_paragraph_two":"Se l\'utente si trova nello Spazio economico europeo o in Svizzera, rispettiamo i requisiti previsti dalla normativa applicabile, fornendo un\'adeguata protezione per il trasferimento di informazioni personali in paesi al di fuori dello Spazio economico europeo o della Svizzera. Tesla ha certificato la sua osservanza ai sensi del Privacy Shield UE-USA come specificato dal Dipartimento del Commercio e della Commissione Europea in riguardo al trattamento di alcuni dati personali trasferiti dallo Spazio Economico Europeo a Tesla e alle sue controllate negli Stati Uniti. La Privacy Policy Conforme al {privacyShield} si trova qui.","privacy_policy_view_devices":"Da o sull\'utente o i suoi dispositivi","privacy_policy_view_energy_products":"Da o su i prodotti energetici Tesla dell\'utente","privacy_policy_view_eu_policy_warning":"Bisogna accettare l\'Informativa sulla Privacy per registrare il Suo Powerwall e monitorarlo tramite l\'app mobile Tesla.","privacy_policy_view_eu_warranty_warning":"Se non da il suo consenso all\'Informativa sulla Privacy, potremmo non essere in grado di onorare nella sua completezza la Garanzia di dieci anni. Tesla onorerà la Garanzia per almeno quattro anni dalla data della prima installazione del suo Powerwall, in corcondanza con le esclusioni e limitazioni descritte nella Garanzia {warrantyLink}.","privacy_policy_view_grid_services":"Powerwall è in grado di aumentare l\'affidabilità della rete elettrica offrendo servizi aggiuntivi nell\'ambito di programmi opzionali forniti dalle società di servizi energetici o da terzi. Generalmente questi servizi comprendono lo scaricamento parziale del Powerwall in orari adeguati in cambio di benefit di natura economica. Inoltre ci viene richiesto di condividere le informazioni relative al tuo consumo di energia e al tuo Powerwall con le società di servizi energetici o terzi. Prima di inserirti in uno di questi programmi ti forniremo tutte le informazioni necessarie e ti daremo l\'opportunità di rinunciare. Se in quel momento decidi di non rinunciare, verrai iscritto al programma.","privacy_policy_view_grid_services_title":"Servizi Di Rete","privacy_policy_view_grid_warning":"Il consenso non è obbligatorio. Se non dai il tuo consenso, potremo darti l\'opportunità di iscriverti al programma in futuro.","privacy_policy_view_here":"qui","privacy_policy_view_homeowner_na":"Proprietario non disponibile","privacy_policy_view_homeowner_required":"Deve essere completata dal proprietario dell\'abitazione o sito commerciale.","privacy_policy_view_information_collection_devices_bullet_five":"Attraverso il browser o dispositivo: Alcune informazioni vengono raccolte dalla maggior parte dei browser o automaticamente attraverso il dispositivo dell’utente, quale l\'indirizzo Media Access Control (MAC), tipo di computer (Windows o Macintosh), risoluzione dello schermo, nome e versione del sistema operativo, produttore e modello del dispositivo, lingua, tipo e versione dell\'internet browser e nome e versione dei Servizi (quale l\'app Tesla) che l’utente utilizza. Utilizziamo queste informazioni per assicurare che i Servizi funzionino correttamente.","privacy_policy_view_information_collection_devices_bullet_four":"Offline: Possiamo raccogliere informazioni da o sull\'utente in modalità offline, ad esempio quando si visita un negozio Tesla o una struttura per riparazioni, quando si partecipa a uno dei nostri eventi, si firma per un test drive, si effettua un ordine per telefono o si contatta il nostro servizio cliente o il dipartimento vendite.","privacy_policy_view_information_collection_devices_bullet_one":"Attraverso i Servizi: Possiamo raccogliere informazioni da o sull\'utente attraverso i nostri siti web, applicazioni software, social media, messaggi e-mail o altri servizi digitali (i “Servizi”), ad esempio quando l\'utente si iscrive a una newsletter, effettua un acquisto o registra il suo prodotto con noi.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla: I clienti che acquistano alcuni prodotti Tesla riceveranno un account My Tesla, il quale viene ospitato sul nostro sito web. Possiamo raccogliere e trattare i seguenti tipi di dati per l\'account My Tesla dell’utente che l’utente sceglie di fornirci: le informazioni sulla registrazione come cliente; lo stato dell\'ordine; garanzia e altra documentazione dei prodotti Tesla e informazioni generali sui prodotti Tesla dell’utente (incluso, ad esempio, il numero identificativo del veicolo o numero di serie di un altro prodotto, informazioni sul piano di assistenza o pacchetto connettività) moduli assicurativi, patenti, accordi finanziari e informazioni simili. In qualunque momento, l\'utente può accedere all\'account My Tesla per aggiornare le informazioni da o sull\'utente, presenti su quell\'account.","privacy_policy_view_information_collection_devices_bullet_two":"Da altre fonti: Possiamo anche ricevere informazioni sull\'utente da altre fonti, quali database pubblici, partner di marketing congiunto, installatori certificati, centri di riparazione o assistenza per veicoli di terza parte e piattaforme di social.","privacy_policy_view_information_collection_energy_products_bullet_one":"Possiamo raccogliere informazioni sul prodotto quali la data di installazione, il numero dei prodotti installati e il/i numero/i di serie.","privacy_policy_view_information_collection_energy_products_bullet_two":"Per potere fornire e migliorare i nostri prodotti energetici e i nostri servizi, possiamo raccogliere dati riguardanti il luogo in cui il prodotto è stato installato e il modo in cui è stato configurato, dati riguardanti l\'utilizzo e le prestazioni del prodotto, dati riguardanti il consumo complessivo dell\'energia dell\'abitazione dell\'utente e altri dati concernenti problemi di diagnosi.","privacy_policy_view_information_collection_header":"Informazioni che possiamo raccogliere","privacy_policy_view_information_collection_paragraph_five":"Se non si desidera più che vengano raccolti i dati sulle prestazioni o altri dati sul veicolo Tesla dell’utente, si invita a contattarci secondo quanto indicato nella sezione “Come contattarci” riportata di seguito. Si prega di notare che, se si rinuncia alla raccolta dei dati sulle prestazioni del prodotto energetico Tesla, non saremo in grado di avvisare l\'utente in tempo reale in caso di eventuali problemi sul prodotto energetico, e ciò potrebbe comportare funzionalità ridotta, grave danno o mancato funzionamento del prodotto energetico e potrebbe altresì comportare la disattivazione di diverse funzioni del prodotto energetico inclusi i periodici aggiornamenti di software e firmware.","privacy_policy_view_information_collection_paragraph_four":"Possiamo raccogliere dall’utente una varietà di informazioni da o sui prodotti energetici Tesla dell\'utente, attraverso un installatore certificato o dai prodotti installati (direttamente o attraverso una pari attrezzatura quale un inverter), incluso:","privacy_policy_view_information_collection_paragraph_one":"Raccogliamo tre tipi principali di informazioni concernenti l\'utente o il suo utilizzo dei nostri prodotti e servizi: (1) informazioni da o sull\'utente o i suoi dispositivi; (2) informazioni da o sul suo veicolo Tesla; e (3) informazioni da o sui suoi prodotti energetici Tesla. A seconda dei prodotti e servizi Tesla che l\'utente ha richiesto, posseduto o utilizzato, non tutte le seguenti informazioni potrebbero essere rilevanti nel suo caso.","privacy_policy_view_information_collection_paragraph_three":"Quando si visita il nostro sito web o si utilizzano in altro modo i nostri Servizi, possiamo utilizzare cookie, pixel tag, strumenti analitici e altre tecnologie simili per contribuire a fornire e migliorare i nostri Servizi e nel modo di seguito esposto:","privacy_policy_view_information_collection_paragraph_two":"Possiamo raccogliere informazioni da o sull\'utente (quali nome, indirizzo, numero di telefono, indirizzo e-mail, metodo di pagamento, ecc.) o sui suoi dispositivi in una varietà di modi, incluso:","privacy_policy_view_information_collection_services_bullet_five":"Si possono conoscere le prassi seguite da Google nella raccolta di informazioni e come rifiutarle scaricando il plug-in per la disattivazione di Google Analytics disponibile su {website}.","privacy_policy_view_information_collection_services_bullet_four":"Strumenti analitici: Utilizziamo servizi di analytics del sito web e delle applicazioni forniti da soggetti terzi che utilizzano i cookie e altre tecnologie simili per raccogliere informazioni sul sito web o sull\'utilizzo delle applicazioni e per segnalare i trend, senza identificare i singoli visitatori. I soggetti terzi che ci forniscono questi servizi potrebbero raccogliere informazioni sull\'utilizzo dei siti web di soggetti terzi.","privacy_policy_view_information_collection_services_bullet_one":"Cookie: I cookie sono informazioni conservate direttamente sul computer che si sta utilizzando. I cookie ci consentono di raccogliere informazioni quali il tipo di browser, il tempo trascorso sui Servizi, le pagine visitate, le preferenze sulla lingua e altri dati sul traffico web. Utilizziamo le informazioni, come anche i nostri fornitori di servizi, per fini di sicurezza, per agevolare la navigazione online, visualizzare le informazioni in modo più efficiente, per personalizzare l\'esperienza dell\'utente mentre utilizza i Servizi e analizzare in altro modo l’ attività dell’utente. Possiamo riconoscere il computer dell\'utente in modo da assisterlo nell\'utilizzo dei Servizi. Raccogliamo altresì delle informazioni a fini statistici sull\'utilizzo dei Servizi per migliorare di continuo la progettazione e la funzionalità, capire il modo in cui vengono utilizzati i servizi e assisterci nella risoluzione dei problemi inerenti ai Servizi. I cookie ci consentono inoltre di selezionare le nostre pubblicità o offerte che rispondono maggiormente ai desideri dell\'utente e che verranno visualizzate. Possiamo anche utilizzare i cookie nella pubblicità online per vedere il modo in cui l’utente interagisce con la nostra pubblicità e possiamo utilizzare i cookie o altri file per capire come l’utente utilizza altri siti.","privacy_policy_view_information_collection_services_bullet_three":"Pixel tag e altre tecnologie simili: I pixel tag (anche noti come web beacon e clear GIF) potrebbero essere utilizzati in relazione ad alcuni Servizi per, tra le altre cose, rintracciare le azioni degli utenti dei Servizi (inclusi i destinatari delle e-mail), misurare il successo delle nostre campagne pubblicitarie e compilare la statistica sull\'utilizzo dei nostri Servizi e sul tasso di risposta.","privacy_policy_view_information_collection_services_bullet_two":"Se l’utente non desidera che i propri dati vengano raccolti attraverso i cookie quando si utilizza l\'account My Tesla o il nostro sito web, esiste una semplice procedura presente sulla maggior parte dei browser che consente di rifiutare automaticamente i cookie o di rifiutare o accettare il trasferimento sul computer di determinati cookie da un sito determinato. Si può altresì fare riferimento all\'indirizzo {website}. Tuttavia, qualora non si accettino questi cookie, si potrebbero riscontrare alcuni problemi nell\'utilizzo dei nostri Servizi. Ad esempio, potremmo non essere in grado di riconoscere il computer dell\'utente e si potrebbe dovere effettuare il login ogni volta che si vuole accedere ai relativi Servizi.","privacy_policy_view_information_rights_choices_agree_eu":"Bisogna accettare l\'Informativa sulla Privacy per registrare il Suo Powerwall e monitorarlo tramite l\'app mobile di Tesla.","privacy_policy_view_information_rights_choices_agree_one":"Bisogna accettare l\'Informativa sulla Privacy per registrare il Suo Powerwall e monitorarlo tramite l\'app mobile Tesla. Non è necessaria alcuna azione aggiuntiva se non si desidera accedere alle informazioni Powerwall tramite l\'app mobile Tesla.","privacy_policy_view_information_rights_choices_bullet_one":"L\'utente può accedere al suo account My Tesla per aggiornare le informazioni da o sull\'utente, presenti su quell\'account in qualunque momento.","privacy_policy_view_information_rights_choices_bullet_two":"Se l\'utente desidera rivedere, correggere, aggiornare, sopprimere o eliminare le informazioni da o sull\'utente stesso che ci sono state fornite in precedenza, può contattarci all\'indirizzo riportato di seguito.","privacy_policy_view_information_rights_choices_header":"Diritti e opzioni","privacy_policy_view_information_rights_choices_paragraph_four":"Si prega di notare che potremmo avere necessità di conservare alcune informazioni per la tenuta dei registri o laddove ciò sia richiesto per rispettare la normativa applicabile e/o per completare qualunque transazione che è stata iniziata prima della richiesta di modifica o cancellazione (ad esempio, quando effettua un acquisto o partecipa a una promozione, l\'utente non potrà essere in grado di modificare o cancellare le informazioni fornite fino al completamento di tale acquisto o promozione). Potrebbero altresì esserci delle informazioni che resteranno nei nostri database e altri archivi che non verranno rimossi.","privacy_policy_view_information_rights_choices_paragraph_one":"Come esposto in dettaglio nelle sezioni precedenti, offriamo varie opzioni in merito alla raccolta, all’utilizzo e alla condivisione da noi effettuati delle informazioni da e sull\'utente o sull\'utilizzo dei nostri prodotti o dei Servizi. Se previsto dalla normativa applicabile, l’utente può avere il diritto di richiedere l’accesso e ricevere informazioni su alcune informazioni relative all’utente che conserviamo, fare aggiornare e correggere le informazioni inesatte e bloccare o cancellare tali informazioni, secondo necessità. Questi diritti possono essere limitati in alcune circostanze dalla normativa locale. Offriamo all\'utente diversi metodi per accedere, correggere, aggiornare o richiedere il blocco o l\'eliminazione delle informazioni da o sull\'utente inclusi:","privacy_policy_view_information_rights_choices_paragraph_three":"Daremo seguito alla richiesta dell\'utente di esercitare suddetti diritti e scelte appena ragionevolmente praticabile.","privacy_policy_view_information_rights_choices_paragraph_two":"Nell’effettuare la richiesta, si invita l’utente a evidenziare chiaramente quale informazione si desidera modificare, se si desidera eliminare dal database l\'informazione che ci è stata fornita o altrimenti farci sapere quali limitazioni si desiderano applicare al nostro utilizzo delle informazioni che ci sono state fornite. Per ragioni di protezione dell\'utente, possiamo solo dare seguito alle richieste inerenti alle informazioni associate al particolare indirizzo e-mail utilizzato per mandarci la richiesta e potremmo avere la necessità di verificare l\'identità dell\'utente prima di eseguire la richiesta.","privacy_policy_view_information_share_header":"In che modo condividiamo le informazioni che raccogliamo","privacy_policy_view_information_share_paragraph_eight":"In altre circostanze","privacy_policy_view_information_share_paragraph_eleven":"Se si desidera annullare la sottoscrizione al trattamento delle informazioni per cui è stato previamente fornito il consenso espresso, si può farlo contattandoci nel modo indicato nella sezione “Come contattarci” riportata di seguito.","privacy_policy_view_information_share_paragraph_five":"Possiamo condividere informazioni con altri soggetti terzi autorizzati dall\'utente, nelle seguenti circostanze:","privacy_policy_view_information_share_paragraph_five_point_four":"Con fornitori di account di social media, se l’utente collega l\'account dei Servizi e l\'account di un social media. Così facendo, l\'utente ci autorizza a condividere le informazioni con il fornitore dell\'account del social media e comprende che l\'utilizzo delle informazioni che condividiamo sarà disciplinato dall\'informativa sulla privacy del fornitore dell\'account del social media.","privacy_policy_view_information_share_paragraph_five_point_one":"Con i nostri installatori certificati per agevolare la fornitura dei prodotti energetici richiesti dall’utente.","privacy_policy_view_information_share_paragraph_five_point_three":"Con soggetti terzi che siano sponsor di concorsi e promozioni simili, se l’utente sceglie di parteciparvi.","privacy_policy_view_information_share_paragraph_five_point_two":"Con centri assistenza e fornitori terzi, se l’utente decide di utilizzarli. Si noti che alcune informazioni sull\'utente sono archiviate su certi prodotti Tesla e possono essere accessibili direttamente dai centri assistenza o fornitori terzi che l’utente sceglie di utilizzare per attuare la diagnosi o l\'assistenza sul prodotto Tesla.","privacy_policy_view_information_share_paragraph_four":"Con altri soggetti terzi autorizzati dall\'utente","privacy_policy_view_information_share_paragraph_nine":"Possiamo condividere le informazioni in altre circostanze, quali:","privacy_policy_view_information_share_paragraph_nine_point_one":"Con il datore di lavoro dell’utente o altro gestore delle flotte o il proprietario del prodotto Tesla, se non posseduto direttamente dall\'utente e secondo quanto consentito dalla normativa applicabile.","privacy_policy_view_information_share_paragraph_nine_point_two":"Con un soggetto terzo in relazione a una riorganizzazione, fusione, vendita, joint venture, cessione, trasferimento o altra disposizione di tutta o parte della nostra attività, beni o azioni (incluso quanto in relazione a bancarotta o simile procedura).","privacy_policy_view_information_share_paragraph_one":"Possiamo condividere le informazioni che raccogliamo con i nostri fornitori di servizi e partner commerciali, con altri soggetti terzi autorizzati dall\'utente, con altri soggetti terzi laddove richiesto dalla legge e in altre circostanze. Di seguito si riportano esempi di come e in quali circostanze condividiamo le informazioni con questi soggetti.","privacy_policy_view_information_share_paragraph_seven":"Tesla può trasferire e divulgare le informazioni, incluse le informazioni che possono o non possono identificare singolarmente l\'utente, a soggetti terzi che sono tenuti a rispettare un obbligo legale (inclusi, in via non limitativa, i casi di citazione in giudizio); quando crediamo in buona fede che la legge lo richieda; in risposta ad una legittima richiesta da parte di una pubblica autorità che conduce un\'indagine, incluso il rispetto dei requisiti di applicazione della legge; per rispondere a un\'emergenza; per prevenire o fermare un\'attività che riteniamo sia, o corra il rischio di essere, illegale, non etica o legalmente perseguibile; o per proteggere i diritti, la proprietà o la sicurezza dei Servizi, di Tesla, di soggetti terzi, dei visitatori dei nostri Servizi, o del pubblico, secondo quanto stabilito a nostra sola discrezione.","privacy_policy_view_information_share_paragraph_six":"Con altri soggetti terzi quando richiesto dalla legge","privacy_policy_view_information_share_paragraph_ten":"Non condividiamo le informazioni che identificano singolarmente l\'utente con un soggetto terzo non affiliato per scopi pubblicitari salvo che l’utente abbia acconsentito a tale condivisione.","privacy_policy_view_information_share_paragraph_three":"Possiamo condividere informazioni con i nostri fornitori di servizi e partner commerciali laddove necessario per prestare i servizi per nostro conto o per conto dell\'utente, come nelle seguenti circostanze:","privacy_policy_view_information_share_paragraph_three_point_one":"Con le controllate di Tesla ai fini descritti nella presente Informativa sulla Privacy. Le controllate di Tesla sono società possedute o controllate da Tesla, Inc. e società in cui Tesla, Inc. detiene delle sostanziali partecipazioni.","privacy_policy_view_information_share_paragraph_three_point_three":"Con altri partner commerciali di soggetti terzi nella misura in cui essi siano coinvolti nell\'acquisto o nell\'assistenza ai prodotti Tesla dell’utente. Condividiamo informazioni limitate da e su l\'utente per consentire di trarre vantaggio da quei servizi che si sceglie di utilizzare, con partner tali società finanziarie, di leasing, di registrazione e di titolo.","privacy_policy_view_information_share_paragraph_three_point_two":"Con i nostri fornitori di servizi terzi e partner di canale per la fornitura di servizi quali di website hosting, analisi e archiviazione dati, elaborazione dei pagamenti, evasione dell\'ordine e installazione del prodotto, connessione wireless ai prodotti Tesla, assistenza clienti, manutenzione prodotto o relativi servizi, consegna e-mail, elaborazione carta di credito, revisione, pubblicità, elaborazione comando vocale e altri servizi simili.","privacy_policy_view_information_share_paragraph_two":"Con i nostri fornitori di servizi e partner commerciali","privacy_policy_view_information_use_commuicate":"Per comunicare con l\'utente","privacy_policy_view_information_use_header":"In che modo utilizziamo le informazioni che raccogliamo","privacy_policy_view_information_use_other_purposes":"Per altri fini","privacy_policy_view_information_use_paragraph_five":"Possiamo anche utilizzare le informazioni che raccogliamo per altri fini, come:","privacy_policy_view_information_use_paragraph_five_point_one":"Per finalità inerenti alla gestione del nostro business, quali: analisi dei dati, verifiche, monitoraggio e prevenzione su eventuali frodi; identificare i trend di utilizzo; determinare l\'efficacia delle nostre campagne pubblicitarie e gestire ed espandere le nostre attività aziendali.","privacy_policy_view_information_use_paragraph_five_point_two":"Fatto salvo quanto descritto in precedenza e in seguito, Tesla può utilizzare o condividere le informazioni che non possono identificare singolarmente l\'utente per qualunque fine, quali scopi operativi o di ricerca, per analisi di settore, per migliorare o modificare i nostri prodotti o servizi, per meglio personalizzare i nostri prodotti e servizi alle necessità dell\'utente, e laddove legalmente richiesto.","privacy_policy_view_information_use_paragraph_four":"Possiamo utilizzare le informazioni che raccogliamo per fornire e migliorare i nostri prodotti e servizi, come:","privacy_policy_view_information_use_paragraph_four_point_five":"Analizzare e migliorare la sicurezza dei nostri prodotti e servizi.","privacy_policy_view_information_use_paragraph_four_point_four":"Sviluppare e promuovere nuovi prodotti e servizi e migliorare o modificare i nostri prodotti e servizi esistenti.","privacy_policy_view_information_use_paragraph_four_point_one":"Completare ed esaudire l\'acquisto, ad esempio, elaborare i pagamenti, fare arrivare l\'ordine, comunicare con l\'utente in merito all\'acquisto e fornire il relativo servizio clienti.","privacy_policy_view_information_use_paragraph_four_point_six":"Fornire qualunque altro servizio richiesto.","privacy_policy_view_information_use_paragraph_four_point_three":"Monitorare le prestazioni del prodotto e fornire i servizi concernenti il prodotto dell’utente.","privacy_policy_view_information_use_paragraph_four_point_two":"Fornire assistenza al prodotto Tesla dell’utente, come contattare l’utente per fornire raccomandazioni sull\'assistenza e aggiornamenti wireless per il prodotto.","privacy_policy_view_information_use_paragraph_one":"Possiamo utilizzare le informazioni che raccogliamo per comunicare con l\'utente, per fornire e migliorare i nostri prodotti e servizi e per altri fini. Di seguito vengono riportati alcuni esempi delle finalità per cui utilizziamo le informazioni.","privacy_policy_view_information_use_paragraph_three":"Le scelte dell\'utente sulle comunicazioni:","privacy_policy_view_information_use_paragraph_three_point_one":"Ricevere comunicazioni elettroniche da parte nostra o delle nostre controllate: Se non si desidera più ricevere e-mail pubblicitarie da parte nostra o delle nostre controllate, si può annullare la sottoscrizione seguendo le istruzioni contenute in qualunque e-mail ricevuta da noi o contattandoci all\'indirizzo di seguito. Si prega di notare che potremo ancora inviare importanti messaggi amministrativi o sulla sicurezza anche se si annulla la sottoscrizione per la ricezione di e-mail pubblicitarie.","privacy_policy_view_information_use_paragraph_three_point_two":"Ricevere chiamate pubblicitarie da parte nostra: se si ricevono chiamate pubblicitarie da parte nostra e non si vogliono ricevere chiamate simili in futuro, si deve semplicemente chiedere di essere inclusi nella nostra lista “da non chiamare”. Si prega di notare che possiamo ancora chiamare per richieste amministrative, sulla sicurezza o problemi concernenti il servizio del prodotto anche se si annulla la sottoscrizione per la ricezione di chiamate pubblicitarie.","privacy_policy_view_information_use_paragraph_two":"Possiamo utilizzare le informazioni che raccogliamo per comunicare con l\'utente, come:","privacy_policy_view_information_use_paragraph_two_point_five":"Presentare i prodotti e le offerte personalizzati sulle esigenze dell\'utente e migliorare le nostre liste con informazioni provenienti da altre fonti.","privacy_policy_view_information_use_paragraph_two_point_four":"Inviare informazioni amministrative, per esempio, informazioni riguardanti i Servizi e le modifiche ai nostri termini, alle nostre condizioni e linee guida.","privacy_policy_view_information_use_paragraph_two_point_one":"Rispondere alle domande ed esaudire le richieste dell’utente, quale l\'invio di newsletter o informazioni sul prodotto, avvisi o opuscoli.","privacy_policy_view_information_use_paragraph_two_point_seven":"Facilitare il social sharing e la funzionalità delle comunicazioni.","privacy_policy_view_information_use_paragraph_two_point_six":"Consentire la partecipazione a concorsi o promozioni simili e gestire queste attività.","privacy_policy_view_information_use_paragraph_two_point_three":"Avvisare l\'utente in merito a informazioni concernenti la sicurezza o avvisare il primo intervento in caso di incidente che coinvolga il veicolo.","privacy_policy_view_information_use_paragraph_two_point_two":"Impostare, valutare e fornire dei commenti in merito al test drive Tesla dell\'utente.","privacy_policy_view_information_use_provide":"Fornire e migliorare i nostri prodotti e servizi","privacy_policy_view_links_header":"Collegamenti","privacy_policy_view_links_paragraph_one":"La presente Informativa sulla Privacy non regola, e non ne saremo pertanto responsabili, la privacy, le informazioni o le altre pratiche di qualunque soggetto terzo, incluso qualunque soggetto terzo che gestisca un sito o un servizio a cui si collegano i Servizi. L\'inclusione di un collegamento all\'interno dei Servizi non implica l\'avallo dei siti o servizi collegati da noi o dalle nostre controllate e non implica un\'affiliazione con il soggetto terzo.","privacy_policy_view_links_paragraph_two":"Si prega di notare che non siamo responsabili per la raccolta, l\'utilizzo e la divulgazione delle linee guida e delle procedure (incluse le procedure sulla sicurezza dei dati) di altre organizzazioni, quali qualunque sviluppatore o fornitore di app, fornitori di piattaforme di social o fornitore di servizio wireless, ivi inclusa qualunque informazione che l\'utente divulga ad altre organizzazioni attraverso o in relazione alle applicazioni del nostro software o alle nostre pagine dei social.","privacy_policy_view_minors_header":"Minori","privacy_policy_view_minors_paragraph":"I Servizi non sono destinati alle persone con un\'età inferiore agli anni sedici (16) e chiediamo che queste persone non forniscano nessuna informazione a Tesla.","privacy_policy_view_offers_eu":"Sì, desidero ricevere comunicazioni di marketing via e-mail, comprese indagini, promozioni e offerte, da parte di Tesla e dei suoi affiliati, riguardo ai prodotti e servizi Tesla. Il cliente ha il diritto di revocare il consenso in qualunque momento. Maggiori informazioni su {legalLink}.","privacy_policy_view_offers_title":"Consenso Al Marketing","privacy_policy_view_offers_usa":"Accetto di poter essere contattato da Tesla al numero telefonico specificato, tramite tecnologie automatiche e/o messaggi pre-registrati","privacy_policy_view_powerwall_warranty":"Garanzia Tesla Powerwall","privacy_policy_view_privacy_policy":"Informativa Sulla Privacy","privacy_policy_view_privacy_policy_agreement_eu":"Io, proprietario dell’ abitazione, ho letto interamente il documento “Informativa sulla Privacy del cliente Tesla” e acconsento al trattamento delle mie Informazioni personali da parte di Tesla come descritto nella “Informativa sulla Privacy del cliente Tesla”. Ha il diritto di revocare il suo consenso in qualsiasi momento, come descritto nella Informativa sulla Privacy del cliente Tesla.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Io, proprietario dell\'abitazione, ho letto integralmente l\'Informativa sulla Privacy del Cliente Tesla e acconsento al trattamento dei miei Dati Personali da parte di Tesla, come descritto nell\'Informativa sulla Privacy del Cliente Tesla.","privacy_policy_view_privacy_shield":"Informativa sulla protezione della Privacy","privacy_policy_view_retention_period_header":"Periodo di conservazione","privacy_policy_view_retention_period_paragraph":"Conserveremo le informazioni che raccogliamo da o su i nostri clienti, i nostri prodotti e i Servizi per il periodo necessario a rispettare le finalità esposte nella presente Informativa sulla Privacy salvo il caso in cui un periodo di conservazione maggiore sia richiesto o consentito dalla legge.","privacy_policy_view_security_header":"Sicurezza","privacy_policy_view_security_paragraph_one":"Ci adoperiamo per utilizzare misure organizzative, tecniche e amministrative ragionevoli per proteggere le informazioni all\'interno della nostra organizzazione. Purtroppo, nessun sistema di trasmissione o di conservazione dei dati può garantire una sicurezza sicura al 100%. Se l\'utente ha motivo di credere che le sue interazioni con noi non siano più sicure (ad esempio, se ha l’impressione che la sicurezza di qualsiasi account con noi sia stata compromessa), è pregato di informarci immediatamente del problema contattandoci in conformità alla sezione “Come contattarci” riportata di seguito.","privacy_policy_view_security_paragraph_two":"Se l\'utente vende o trasferisce il suo prodotto Tesla a un\'altra persona, è pregato di informarci in modo che possiamo stabilire se siano necessarie delle azioni supplementari per salvaguardare le informazioni da o sull\'utente dalla divulgazione all\'acquirente o al cessionario del prodotto Tesla.","privacy_policy_view_title":"Visualizza l\'intera informativa sulla Privacy","privacy_policy_view_updates_header":"Aggiornamenti alla presente informativa","privacy_policy_view_updates_paragraph":"Possiamo modificare la presente Informativa sulla Privacy. Si prega di guardare la voce “Ultimo aggiornamento” in fondo alla pagina per vedere quando la presente Informativa sulla Privacy è stata aggiornata l\'ultima volta. Qualunque modifica alla presente Informativa sulla Privacy diventerà effettiva quando l\'Informativa sulla Privacy aggiornata sarà resa pubblicata sui Servizi. Utilizzando i nostri prodotti, i Servizi o fornendoci altrimenti informazioni dopo tali modifiche, l\'utente accetta l\'Informativa sulla Privacy aggiornata.","privacy_policy_view_us_warranty_warning":"Bisogna accettare l\'Informativa sulla Privacy per registrare il Suo Powerwall e monitorarlo tramite l\'app mobile Tesla","privacy_policy_view_warranty_information":"Io, in qualità di proprietario, accetto i termini della Garanzia Tesla Powerwall disponibile {warrantyLink}. Questi termini includono una clausola di arbitrato con la quale rinuncio al diritto di intraprendere azioni legali o processi con giuria. È possibile recedere da tale clausola entro 30 giorni seguendo la procedura descritta nella stessa.","prompt_factory_reset_confirmation":"Confermare il ripristino delle impostazioni predefinite dell\'unità?","pvac-state-active":"Attivo","pvac-state-faulted":"Guasto","pvac-state-init":"Inizializzazione...","pvac-state-standby":"In attesa di fotovoltaico","pvac_alert_ac_fault":"Guasto CA dell\'inverter","pvac_alert_check_ac_note":"Controllare i cavi CA e la connessione alla rete. Riavviare l\'inverter e riprovare.","pvac_alert_check_dc_string1_note":"Controllare il cavo CC della stringa 1 e i pannelli. Riavviare l\'inverter e riprovare.","pvac_alert_check_dc_string2_note":"Controllare il cavo CC della stringa 2 e i pannelli. Riavviare l\'inverter e riprovare.","pvac_alert_check_dc_string3_note":"Controllare il cavo CC della stringa 3 e i pannelli. Riavviare l\'inverter e riprovare.","pvac_alert_check_dc_string4_note":"Controllare il cavo CC della stringa 4 e i pannelli. Riavviare l\'inverter e riprovare.","pvac_alert_confirm_grid_code_note":"Controllare i cavi CA e la connessione alla rete. Confermare il codice rete selezionato.","pvac_alert_dc_fault_string1":"Guasto CA dell\'inverter - Stringa 1","pvac_alert_dc_fault_string2":"Guasto CA dell\'inverter - Stringa 2","pvac_alert_dc_fault_string3":"Guasto CA dell\'inverter - Stringa 3","pvac_alert_dc_fault_string4":"Guasto CA dell\'inverter - Stringa 4","pvac_alert_freq_change":"Rete non conforme - Cambio frequenza","pvac_alert_internal_comms":"Problema di comunicazione interna","pvac_alert_over_freq":"Rete non conforme - Sovrafrequenza","pvac_alert_over_temp":"Sovratemperatura inverter","pvac_alert_over_voltage":"Rete non conforme - Sovratensione","pvac_alert_production_limited_note":"La produzione potrebbe essere limitata. Assicurare che le terminazioni dei cavi siano corrette, un\'areazione sufficiente e un ambiente di installazione adeguato.","pvac_alert_reboot_note":"Riavviare l\'inverter, verificare che il sistema sia aggiornato e messo in funzione.","pvac_alert_under_freq":"Rete non conforme - Sottofrequenza","pvac_alert_under_voltage":"Rete non conforme - Sottotensione","pvi-power-status-dc-only":"Solo CC","pvi-power-status-disabled":"Disattivato","pvi-power-status-enabled":"Attivato","pvi-reset-button-label":"Riavviare l\'inverter e azzerare gli avvisi","pvs-self-test-1":"Autodiagnosi (1/6): Problema di massa.","pvs-self-test-2":"Autodiagnosi (2/6): Guasto d\'arco","pvs-self-test-3":"Autodiagnosi (3/6): MCI","pvs-self-test-4":"Autodiagnosi (4/6): Isolamento","pvs-self-test-5":"Autodiagnosi (5/6): Relè saldato","pvs-self-test-6":"Autodiagnosi (6/6): Impedenza","pvs_alert_check_arc_fault_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino guasti d\'arco.","pvs_alert_check_dc_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di massa.","pvs_alert_check_dc_string1_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di isolamento, soprattutto sulla Stringa 1.","pvs_alert_check_dc_string2_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di isolamento, soprattutto sulla Stringa 2.","pvs_alert_check_dc_string3_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di isolamento, soprattutto sulla Stringa 3.","pvs_alert_check_dc_string4_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di isolamento, soprattutto sulla Stringa 4.","pvs_alert_check_dc_strings_note":"Controllare i cavi CC, i collegamenti, i pannelli e le configurazioni delle stringhe.","pvs_alert_dc_arc_fault_detected":"Guasto d\'arco CC - Rilevato","pvs_alert_dc_arc_fault_lockout":"Guasto d\'arco CC - Blocco","pvs_alert_dc_ground_fault":"Problema di massa CC","pvs_alert_dc_isolation_string1":"Problema di isolamento CC - Stringa 1","pvs_alert_dc_isolation_string2":"Problema di isolamento CC - Stringa 2","pvs_alert_dc_isolation_string3":"Problema di isolamento CC - Stringa 3","pvs_alert_dc_isolation_string4":"Problema di isolamento CC - Stringa 4","pvs_alert_dc_over_voltage":"Sovratensione CC","pvs_alert_rapid_shutdown":"Avviato arresto rapido","pvs_alert_rapid_shutdown_note":"Controllare l\'interruttore CA e il circuito di arresto rapido per bassa tensione.","registration_container_continue_header":"Email del cliente inserita: {email}","registration_container_continue_modal_description":"Il cliente non sarà in grado di accedere all\'applicazione Tesla se l\'email non è corretta. Controlla che l\'indirizzo email sia corretto","registration_container_customer_email_required":"L\'indirizzo email è necessario per attivare l\'applicazione Tesla","registration_container_customer_information_title":"Informazioni dell\'utente","registration_container_fill_required_fields":"L\'installatore o il cliente devono compilare tutti i campi necessari","registration_container_loading_modal_registering":"Registrazione in corso","registration_container_reset_form_modal_description":"Conferma che vuoi procedere al reset del modulo","registration_container_reset_form_modal_header":"Le informazioni precedentemente inserite saranno perse","security_container_settings_title_customer":"Modifica o reimposta la password (Cliente)","security_container_settings_title_installer":"Modifica o reimposta la password (Installatore)","security_view_copied_to_clipboard":"Copiato!","security_view_not_wifi_qr_code_error":"Non è un codice QR Wi-Fi.","security_view_scan_qr_code_not_found_error":"Nessun codice QR trovato.","security_view_settings_change_password_error":"Le nuove password non corrispondono","security_view_settings_change_password_label":"MODIFICA PASSWORD","security_view_settings_completed":"COMPLETAMENTO","security_view_settings_new_password_label":"NUOVA PASSWORD","security_view_settings_old_password":"PASSWORD CORRENTE","security_view_settings_password_change_info":"Per modificare la password, immettere la password corrente e quella nuova","security_view_settings_password_customer":"PASSWORD","security_view_settings_password_customer_placeholder":"Ultimi cinque caratteri della password sull\'etichetta del Gateway","security_view_settings_password_installer_label":"Gateway password","security_view_settings_password_reset_info":"Per reimpostare la password, attivare/disattivare l\'unità Powerwall tramite l\'interruttore, quindi immettere gli ultimi 5 caratteri del numero di serie del gateway.","security_view_settings_password_reset_info_serial":"Per reimpostare la password, attivare/disattivare l\'unità Powerwall tramite l\'interruttore, quindi immettere gli ultimi 5 caratteri del numero di serie del gateway.","security_view_settings_password_reset_installer_info":"Per reimpostare la password, attivare/disattivare l\'interruttore sull\'unità Powerwall, quindi immettere il numero di serie del gateway.","security_view_settings_password_reset_installer_info_serial":"Per reimpostare la password, attivare/disattivare l\'interruttore sull\'unità Powerwall, quindi immettere il numero di serie del gateway.","security_view_settings_re_enter_password_label":"CONFERMARE LA NUOVA PASSWORD","security_view_settings_reset_password_label":"REIMPOSTA PASSWORD","security_view_settings_serial_customer":"NUMERO DI SERIE","security_view_settings_serial_customer_placeholder":"Ultimi 5 caratteri del numero di serie del gateway","security_view_settings_serial_installer_label":"Numero di serie del gateway","security_view_settings_success":"Password aggiornata correttamente","security_view_settings_success_new_password":"La nuova password è:","security_view_settings_toggled_password":"Password dimenticata?","self_test_result_viewer_resi_only":"Il visualizzatore del rapporto di autodiagnosi non è disponibile.","self_test_results_viewer_collapse_all":"Riduci tutto","self_test_results_viewer_column_name":"Nome","self_test_results_viewer_column_result":"Risultati","self_test_results_viewer_column_spec":"Specifiche","self_test_results_viewer_column_test_time":"Ora test","self_test_results_viewer_column_value":"Valore","self_test_results_viewer_expand_all":"Espandi tutti","self_test_results_viewer_failed":"Operazione non riuscita","self_test_results_viewer_in_progress":"In corso","self_test_results_viewer_inconclusive":"Inconcludente","self_test_results_viewer_not_started":"Non avviato","self_test_results_viewer_passed":"Superato","self_test_results_viewer_skipped":"Ignorato","self_test_results_viewer_warning":"Avvertenza","settings_container_confirm_reset_operation_mode":"Confermare modifica modalità su {operation}","settings_container_heco_modal_description":"Questa impostazione non può essere cambiata dopo la selezione. Confermare che il cliente sia attualmente iscritto al programma HECO Battery Bonus prima di inviare la selezione.","settings_container_heco_modal_title":"Conferma iscrizione","settings_container_heco_view_description":"L\'unità Powerwall si scaricherà una volta raggiunta la capacità giornaliera di messa in servizio per soddisfare i requisiti del programma. Questa impostazione non può essere cambiata dopo l\'attivazione.","settings_container_heco_view_scheduled_dispatch_start_time":"Ora di inizio","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"HECO Scheduled Dispatch","settings_container_heco_view_title":"Programma HECO Battery Bonus","settings_container_operation_modes_modal_content":"Utilizzare la schermata \\"Personalizza\\" dell\'app mobile Tesla per modificare le modalità operative.","settings_container_operation_modes_modal_reset":"RESETTA MODALITÀ","settings_container_operation_modes_modal_title":"Modalità operativa","settings_container_operation_modes_modal_warning":"Non sarà possibile annullare la modifica. Le modalità avanzate possono essere riattivate solo tramite l\'app mobile Tesla.","settings_container_operation_modes_reset_modal_title":"Resettare la modalità operativa?","settings_container_operation_settings_subtitle":"Imposta il nome del tuo sistema, il modo di operazione ed eventuali limiti sulla produzione energetica.","settings_container_operation_settings_title":"Configurazione Operativa","settings_container_save_instructions":"Seleziona CONTINUA per salvare.","settings_container_saving_site_info_modal":"Salvataggio impostazioni del sito","settings_container_site_import_description":"Il Limite importazione sito è un\'impostazione opzionale. Lasciare questo campo vuoto per disattivare la limitazione di importazione. Quando è attivata, questa impostazione specifica la potenza massima consentita che è possibile importare dalla rete nel sito.","settings_container_site_limits_header":"Limiti sito","settings_view_custom_modes_label":"Modo Preselezionato - {mode}","settings_view_energy_reserve_heco_label":"Le modifiche alla riserva backup sono limitate a causa dell\'iscrizione al programma HECO Battery Bonus. Il cliente sarà in grado di impostare la riserva backup nell\'app.","settings_view_energy_reserve_label":"RISERVA DI ENERGIA (COME RISERVA DURANTE MODO AUTO-ALIMENTATO)","settings_view_instruction_site_name":"Si prega di completare il nome del sito","settings_view_net_meter_mode":"Modalità di esportazione","settings_view_operation_label":"MODALITÀ OPERATIVA","settings_view_operation_set_label":"MODALITÀ OPERATIVA DA IMPOSTARE","settings_view_set_net_meter_mode_never_label":"Permanente senza esportazione","settings_view_set_net_meter_mode_solar_label":"Esportazione energia fotovoltaica","settings_view_site_name":"NOME DEL SITO","settings_view_site_name_placeholder":"Esempio: La Mia Casa","settings_view_solar_export_limitation_slider":"Limiti nell\'esportare energia da sistemi fotovoltaici","settings_view_solar_feature":"Questa funzione deve essere attivata per sistemi fotovoltaici che non possono generare energia verso la rete elettrica. Tipicamente nelle regioni di Hawaii (CSS) e Australia.","settings_view_solar_limitation":"POWERWALL INSTALLATA INSIEME A UN IMPIANTO FOTOVOLTAICO DIVERSO DA POWERWALL+?","settings_view_solar_zero_export":"POWERWALL INSTALLATO A FIANCO DI UN SISTEMA FOTOVOLTAICO A ZERO ESPORTAZIONI?","site_info_container_submit":"INVIA","solar_item_view_baudrate_label":"Velocità trasferimento (Baud)","solar_item_view_brand_input_label":"MARCA","solar_item_view_brand_label":"Marca","solar_item_view_check_inverter":"COLLEGAMENTO INVERTER {id}","solar_item_view_connection_warning":"Impossibile stabilire la connessione","solar_item_view_inverter_brand":"Marca Inverter","solar_item_view_inverter_communication":"Comunicazione con Inverter","solar_item_view_inverter_model_label":"Modello di Inverter","solar_item_view_ip_label":"INDIRIZZO IP","solar_item_view_model_label":"MODELLO","solar_item_view_power_rating_explanation":"Questa è la potenza totale del sistema fotovoltaico riguardo ai moduli / pannelli. Anche detta potenza nominale dell\'array. Per esempio, se avete 10 pannelli a 300 W, inserite 3000 W anche se l\'inverter è a 2500 W o 3500 W.","solar_item_view_pv_array_dc_power_rating":"Potenza Nominale dell\' Array Fotovoltaico","solar_item_view_pv_array_dc_power_rating_label":"ALIMENTAZIONE ARRAY FOTOVOLTAICO","solar_item_view_revenue_grade":"Ricavi energetici","solar_item_view_revenue_grade_explanation":"Abilitare questa opzione solamente se l\'inverter ha un contatore ad alta qualità integrato. Se questa opzione è abilitata, i dati dell\'inverter verranno letti dallo strumento anziché dall\'inverter.","solar_item_view_revenue_grade_title":"Ricavi energetici","solar_item_view_solar":"SOLARE {id}","solar_item_view_success":"CONNESSO!","solar_item_view_unable":"IMPOSSIBILE LEGGERE L\'INVERTER!","solar_list_view_continue_add_solar":"AGGIUNGI SOLARE","solar_view_continue_add_solar":"AGGIUNGI SOLARE","status_update_urgency_none":"Aggiornato","status_update_urgency_optional":"Aggiornamento opzionale","status_update_urgency_required":"Aggiornamento necessario","status_update_urgency_unknown":"Sconosciuta","success_view_awesome":"PERFETTO!","success_view_copied_to_clipboard":"Copiato!","success_view_installation_complete":"Installazione completata","success_view_new_password_error_title":"Password wizard","success_view_new_password_title":"Nuova password wizard","success_view_password_set":"Password già impostata","success_view_record_password":"Registrare la password prima di continuare","success_view_retry_registration":"RIPROVA REGISTRAZIONE","success_view_set_customer_password":"IMPOSTA PASSWORD CLIENTE","success_view_syncing_configuration":"Sincronizzazione della configurazione in corso","summary_container_company":"Azienda","summary_container_connection_type":"Tipo di connessione","summary_container_email":"E-mail","summary_container_installer_information":"Informazioni per l\'installatore","summary_container_ip_address":"Indirizzo IP","summary_container_location":"Posizione","summary_container_meter":"Contatore #{index}","summary_container_meter_information":"Informazioni sul contatore","summary_container_phone":"Numero di telefono","summary_container_print":"Stampa","summary_container_serial_number":"Numero di serie","summary_container_site_info":"Informazioni sul sito","summary_container_site_name":"Nome del sito","summary_container_subtitle":"Informazioni sul prodotto e sull\'installazione","summary_site_information":"INFORMAZIONI SUL SITO","summary_view_autonomous":"Controllo per fasce orarie","summary_view_backup":"Solo energia di riserva","summary_view_backup_capable":"Energia di riserva presente","summary_view_backup_reserve":"ENERGIA DI RISERVA","summary_view_backup_switch":"BACKUP SWITCH","summary_view_conductor_export":"LIMITE ESPORTAZIONE CONDUTTORE","summary_view_conductor_import":"LIMITE IMPORTAZIONE CONDUTTORE","summary_view_control":"Controllo sito","summary_view_customer_version":"VERSIONE CLIENTE","summary_view_direct":"Diretto","summary_view_disabled":"DISABILITATA","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"LIMITE ESPORTAZIONE FOTOVOLTAICO","summary_view_extra_programs":"PROGRAMMI EXTRA","summary_view_followers":"SECONDARI","summary_view_gateway":"GATEWAY","summary_view_grid_code":"CODICE DI RETE","summary_view_gsm":"CELLULARE","summary_view_heco_battery_bonus":"HECO Battery Bonus","summary_view_ip_address":"INDIRIZZO IP","summary_view_leader":"PRINCIPALE","summary_view_mode":"MODALITÀ","summary_view_msg_cannot_read_solar_assembly":"Arrestare prima il sistema per leggere il codice articolo e il numero di serie del gruppo fotovoltaico Powerwall+.","summary_view_network":"RETE","summary_view_non_backup":"Energia di riserva assente","summary_view_panel_limit":"CORRENTE MASSIMA PANNELLO","summary_view_part_number":"Numero di parte","summary_view_partnum":"Parte {partNumber}","summary_view_powerwall":"UNITÀ POWERWALL","summary_view_scheduler":"Aggregazione","summary_view_self_consumption":"Autoconsumo","summary_view_serial":"Seriale","summary_view_serialnum":"Serie {serialNumber}","summary_view_site_export":"LIMITE ESPORTAZIONE SITO","summary_view_site_import":"LIMITE IMPORTAZIONE SITO","summary_view_site_name":"NOME DEL SITO","summary_view_solar_assembly":"GRUPPO FOTOVOLTAICO","summary_view_sync":"CAPACITÀ ENERGIA DI RISERVA","summary_view_time":"ORA DI COMPILAZIONE RIEPILOGO","summary_view_time_zone":"FUSO ORARIO","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"Il dispositivo abbinato alla rete Wi-Fi al momento non risponde","system-device-unknown-sitecontroller":"Il dispositivo non ha ancora rilevato i propri dispositivi secondari","system_acpw_vitals_charge":"Livello di carica: {charge}%","system_acpw_vitals_power":"Alimentazione CA: {power}","system_acpw_vitals_power_charging":"Alimentazione CA: {power} Caricamento","system_acpw_vitals_power_discharging":"Alimentazione CA: {power} Scaricamento","system_acpw_vitals_state":"Stato Powerwall: {state}","system_acpw_vitals_voltage":"Tensione CA: {voltage}","system_controller_din":"Controller: {din}","system_device_alert_disabled":"Dispositivo disattivato","system_device_gateway_not_islanding":"Questo non è il controller a isola.","system_device_name_backup_switch":"Backup Switch ({sn})","system_device_name_battery_assembly":"Gruppo batteria ({sn})","system_device_name_gateway":"Gateway ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus_leader":"UnitàPowerwall+ principale","system_device_name_powerwall_plus_solo":"Unità Powerwall+","system_device_name_powerwall_plus_wired":"Unità Powerwall+ (cablata)","system_device_name_powerwall_plus_wireless":"Unità Powerwall+ (wireless)","system_device_name_remote_meter":"Contatore remoto ({sn})","system_device_name_solar_assembly_1":"Gruppo fotovoltaico","system_device_name_sync":"Controller contattore/contatore gateway({sn})","system_firmware_update":"Aggiornamento: {percent}% ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"Stato backup: {backupState}","system_islanding_vitals_grid_line":"Linea rete {lineNumber}: {v} {f}","system_islanding_vitals_island_line":"Linea isola {lineNumber}: {v} {f}","system_overview_connected":"Connesso a Tesla","system_overview_disconnected":"Non connesso a Tesla","system_overview_follower":"Powerwall secondario","system_overview_login_required":"Per visualizzare il funzionamento del sistema è necessario accedere","system_overview_scanning":"Scansione dispositivi...","system_overview_site_controller":"Controller sito","system_overview_updating":"Aggiornamento dispositivi...","system_pvi_vitals_ac_solar_power":"Potenza fotovoltaico CA: {power}/{current}","system_pvi_vitals_ac_solar_power_only":"Potenza fotovoltaico CA: {power}","system_pvi_vitals_lifetime_energy_kwh":"Energia: {energy}","system_pvi_vitals_state":"Stato: {message}","system_pvi_vitals_string":"Stringa {number}: {voltage}/{current}","system_pvi_vitals_string_not_connected":"Stringa {number}: Non connessa","system_remote_meter_ct_line":"Trasformatore di corrente {n} ({location}): {value}","system_remote_meter_no_cts":"Nessun trasformatore di corrente configurato","system_rescan_button_text":"Riscansiona dispositivi","system_scanning_label_text":"Scansione dispositivi...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Test che il sistema sta funzionando correttamente.","test_container_system_test_title":"Test del Sistema","test_inverter_container_error_grid_uncompliant":"Il test non può iniziare perché la rete è fuori norma.","test_inverter_container_error_not_idle":"Il test non può iniziare perché il sistema è ancora attivo.","test_inverter_container_results_error_plural_subtitle":"{num} Test falliti","test_inverter_container_results_error_singular_subtitle":"{num} Test fallito","test_inverter_container_results_success_plural_subtitle":"{num} Test superati","test_inverter_container_results_success_singular_subtitle":"{num} Test superato","test_inverter_container_results_success_subtitle":"Tutti i test passati con successo","test_inverter_container_results_title":"Risultati autotest Inverter","test_inverter_container_title":"Autotest Inverter","test_meter_composite_view_auxiliary_meter_setup_instructions":"Almeno un TA deve essere configurato per ogni meter ausiliario","test_meter_composite_view_auxiliary_meters_title":"Contatore ausiliario","test_meter_composite_view_configure_meters":"DI CONFIGURARE CONTATORI","test_meter_composite_view_current_transformer_setup_instructions":"Usa almeno un TA impostato come \\"sito\\" o come \\"carico\\", ma non entrambi i modi","test_meter_composite_view_external_meter_setup_instructions":"Per ogni contatore esterno deve essere configurato almeno un trasformatore di corrente.","test_meter_composite_view_external_meters_title":"Contatori esterni","test_meter_composite_view_internal_meters_gateway_title":"Contatori interni (Gateway)","test_meter_composite_view_internal_meters_title":"Meter interno","test_meter_composite_view_no_configured_meters":"NESSUN CONTATORE CONFIGURATO. SI PREGA {configure} PER CONTINUARE","test_meter_composite_view_note":"NOTA","test_meter_item_view_acuvim_label":"Contatore {id}: Contatore Acuvim","test_meter_item_view_backup_switch_label":"Contatore {id}: Contatore Backup Switch","test_meter_item_view_configure_phases_note":"Configura le fasi per abilitare i TA su questo meter","test_meter_item_view_internal_meter_x_gateway_label":"Contatore {id}: Contatore interno principale X (Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"Contatore {id}: Contatore interno ausiliario Y (Gateway)","test_meter_item_view_remote_w1_wifi_label":"Contatore {id}: Wi-Fi remoto","test_meter_item_view_remote_w1_wired_label":"Contatore {id}: Cablato da remoto","test_meter_item_view_remote_w2_wifi_label":"Contatore {id}: Wi-Fi remoto","test_meter_item_view_remote_w2_wired_label":"Contatore {id}: Cablato da remoto","test_meter_item_view_reset":"RESETTARE","test_meter_item_view_site_meter_title":"Contatore (Sito) interno","test_meter_item_view_sync_id":"Sync Meter {id}","test_meter_item_view_toggle_advanced":"Avanzate","test_meter_item_view_toggle_power":"Potenza","test_meter_item_view_wifi_id":"Contatore {id}","test_meter_item_view_wired_id":"Meter cablato {id}","test_view_canceled_status":"Test ѐ stato Cancellato","test_view_failed_status":"Test non ѐ Riuscito","test_view_idle_status":"Inizio Test di Sistema","test_view_init_status":"Preparazione Test","test_view_inverter_test_warning_message":"Se hai un inverter configurato per non esportare energia nella rete, il test di sistema del Gateway non è in grado di validare il sistema. Si prega spegnere l\'inverter fino a quando il test di sistema è stato completato.","test_view_passed_status":"Test ѐ OK","test_view_prep_status":"Inizializzazione dei Controlli: potrebbe richiedere alcuni minuti!","test_view_running_status":"Esecuzione del Test di Carica","test_view_skip_start_system_test_text":"Conferma che vuoi ignorare il test di sistema","test_view_start_system_test_warning":"ATTENZIONE","test_view_system_test_completed_message":"Test di Sistema Completato!","time_minute":"minuto","time_minutes":"minuti","time_second":"secondo","time_seconds":"secondi","time_started_at":"Heure de début {time}","timezone_container_subtitle":"Basandosi sulla tua posizione e indirizzo IP, possiamo aiutarti a selezionare il fuso orario per la tua installazione.","timezone_container_title":"Fuso orario","timezone_view_label":"fuso orario","toast_view_standard_title":"Nota","toast_view_warning_title":"Avvertenza","update_container_industrial_updating_description":"Il Controller sito si riavvierà ora automaticamente per poter installare l\'aggiornamento. {lb1}{lb2} Attendere 2 minuti, riconnettersi alla rete del Controller sito, quindi {refresh}","update_container_preparing_title":"Preparando per l\'ultimo aggiornamento","update_container_refresh_browser":"aggiornare la pagine web.","update_container_residential_updating_description":"Il gateway ora verrà resettato per applicare il nuovo aggiornamento. {lb1}{lb2} Si prega di attendere 2 minuti, quindi riconnettere alla rete dai del gateway, e {refresh}","update_container_skip_title":"Ignora l\'Aggiornamento?","update_container_subtitle":"Si prega di aggiornare il software di sistema","update_container_subtitle_industrial":"Controllare la disponibilità di aggiornamenti. Nota: per distribuire gli aggiornamenti alle batterie, accedere alla pagina Batteria.","update_container_title":"Aggiorna","update_container_updating_title":"Aggiornamento in corso","update_step_item_view_resolution_title":"Correzione suggerita","update_view_check_again":"CLIC PER RI-CONTROLLARE","update_view_check_for_update":"CONTROLLA AGGIORNAMENTI","update_view_check_for_update_industrial":"CONTROLLA AGGIORNAMENTI DEL CONTROLLER SITO","update_view_checking_update":"Controllo aggiornamenti in corso","update_view_current_version":"Versione corrente: {version}","update_view_current_version_label":"VERSIONE ATTUALE:","update_view_downloading":"SCARICAMENTO IN CORSO","update_view_downloading_update":"Trasferimento di aggiornamenti in corso","update_view_no_power_cicle":"NON SPEGNERE O RESETTARE!","update_view_percent_complete":"{percent} completo","update_view_progress":"PROGRESSO DELL\'AGGIORNAMENTO","update_view_staged":"NUOVA VERSIONE È PRONTA PER L\'AGGIORNAMENTO","update_view_staged_update":"Pronto ad aggiornare","update_view_staging":"PREPARAZIONE","update_view_staging_update":"Sto preparando l\'aggiornamento","update_view_time_remaining":"rimanente","update_view_up_to_date":"QUESTA VERSIONE È AGGIORNATA","update_view_update_now":"AGGIORNA","update_view_update_urgency_label":"Stato aggiornamento: {status}","update_view_updated_industrial":"Il software del Controller sito è aggiornato.","update_view_updated_residential":"Hai il firmware più recente.","update_view_wait_minutes":"SI PREGA DI ATTENDERE ALCUNI MINUTI...","validation_phone":"Inserire un numero di telefono valido","vitals_header_subtitle_firmware_update":"Aggiornamento firmware in corso...","vitals_header_subtitle_firmware_update_failed":"Aggiornamento firmware non riuscito. Controllare gli switch attivati e il cablaggio.","vitals_header_title":"Sistema","vitals_powerwall_state_ac_fault":"Guasto fase CA","vitals_powerwall_state_dc_fault":"Guasto fase CC","vitals_powerwall_state_grid_following":"Connesso a rete","vitals_powerwall_state_grid_forming":"A isola","vitals_powerwall_state_init":"Inizializzazione","vitals_powerwall_state_off":"Off","vitals_powerwall_state_standby":"Standby","vitals_powerwall_state_support_dc":"Supporto CC","warning":"ATTENZIONE","warning_off_grid":"Se il sistema è disconnesso dalla rete elettrica, ogni carico sostenuto dal Powerwall verrà spento entro 5 minuti.","warning_on_grid":"Se il sistema è connesso alla rete elettrica, Powerwall smetterà di caricare/scaricare energia.","warning_sitemaster_container_not_running":"Il Sitemaster non è in funzione","wifi_pairing_link_message":"Aggiungere un\'unità Powerwall collegata alla rete Wi-Fi","wifi_view_find_network":"TROVA RETE CON NOME (SSID)","wifi_view_note":"Nota: Il gateway è compatibile solo con reti Wi-Fi a 2.4 GHz.","wifi_view_note_five_ghz":"Nota: il Gateway è compatibile con le reti wireless a 2.4 GHz e 5 GHz.","wifi_view_readonly":"Questa è un\'unità Powerwall secondaria, pertanto non è possibile modificare la configurazione della relativa rete wireless.","wifi_view_security_label":"SICUREZZA","wizard_container_commissioning_wizard":"Configurazione Guidata Tesla","wizard_container_login_required":"Accesso necessario","wizard_container_title":"Cominciamo!","wizard_container_verifying_login_title":"Verifica accesso"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Error","advanced_settings_submit":"Enviar","advanced_settings_submitted":"Enviado","advanced_settings_title":"Configuración avanzada","alert_container_ac_phase_1_over_voltage":"Sobretensión de CA","alert_container_ac_phase_1_under_voltage":"Baja tensión de CA","alert_container_ac_phase_2_over_voltage":"Sobretensión de CA","alert_container_ac_phase_2_under_voltage":"Baja tensión de CA","alert_container_ac_phase_3_over_voltage":"Sobretensión de CA","alert_container_ac_phase_3_under_voltage":"Baja tensión de CA","alert_container_over_frequency":"Sobrefrecuencia de CA","alert_container_rate_of_change_frequency":"Índice de cambio de frecuencia de CA","alert_container_under_frequency":"Baja frecuencia de CA","app_container_engineering_mode_banner_message":"El modo de servicio de Tesla no requiere autenticación Detenga el sistema si va a realizar cambios operativos. Antes de cerrar el navegador, deje el sistema en un estado aceptable. Cierre el navegador cuando haya terminado, puesto que este modo no requiere autenticación.","app_container_engineering_mode_title":"Modo de servicio de Tesla","app_container_firmware_update_banner_message":"Mantenga la instalación y el cableado sin realizar cambios y permanezca en esta página hasta que la actualización haya finalizado.","app_container_firmware_update_banner_title":"Actualización de firmware en curso","app_container_sitemaster_message_title":"El sistema está funcionando. Para ver el estado de los bloques de batería, se debe apagar el sistema. Puede detener el sistema desde la página de inicio.","app_container_sitemaster_power_supply_mode_banner_message":"Batería produciendo tensión de CA para alimentar dispositivos para emparejamiento y configuración. Botón para detener el sistema en la página de destino.","app_container_sitemaster_power_supply_mode_banner_title":"Modo de creación de red eléctrica","app_container_sitemaster_running_banner_title":"Sistema en funcionamiento","auto_config_check_network_button":"Compruebe la red y habilite Wi-Fi","auto_config_check_system_and_summary":"Compruebe las páginas Sistema y Resumen.","auto_config_done_button_text":"Listo","auto_config_instructions_cannot_determine_grid_connection":"Antes de poner en marcha el sistema, compruebe el cableado al Backup Switch o al Gateway.","auto_config_instructions_determining_on_grid":"Si este mensaje permanece durante más de 3 minutos, compruebe el cableado al Backup Switch o al Gateway.","auto_config_instructions_finding_contactor_controller":"Si este mensaje permanece durante más de 3 minutos, compruebe el cableado al Backup Switch o al Gateway.","auto_config_instructions_finding_powerwalls":"Si este mensaje permanece durante más de 3 minutos, compruebe el cableado al Powerwall.","auto_config_instructions_finding_solar_powerwall":"Si este mensaje permanece durante más de 3 minutos, compruebe el cableado al Solar Powerwall.","auto_config_instructions_lookup_failed_retry":"Escanee la pegatina con el número de serie en Bolt para activar la configuración automática de Powerwall y después {retryButton}","auto_config_instructions_lookup_failed_wizard":"O bien, {wizardButton} para la configuración manual de Powerwall.","auto_config_instructions_missing_info_1":"Falló la configuración automática de Powerwall porque faltaba la siguiente información:","auto_config_instructions_missing_info_2":"{wizardButton} para introducirla manualmente.","auto_config_instructions_missing_info_3":"{registrationButton} manualmente.","auto_config_instructions_no_grid_connection":"Compruebe el cableado al Backup Switch o al Gateway","auto_config_instructions_no_grid_detected":"Compruebe el cableado y los disyuntores antes de poner en marcha el sistema.","auto_config_instructions_no_network_retry":"{networkLink} para activar la configuración automática de Powerwall y después {retryButton}","auto_config_instructions_no_network_wizard":"O bien, {wizardButton} para la configuración manual de Powerwall.","auto_config_instructions_retry":"{networkLink} si el problema persiste","auto_config_instructions_retry_wizard":"O bien, {wizardButton} para la configuración manual de Powerwall.","auto_config_instructions_updating":"Es necesario actualizar el software para poder iniciar la configuración automática de Powerwall. La actualización se descargará y aplicará automáticamente. Es posible que después tenga que reconectarse a la red Wi-Fi de Powerwall.","auto_config_missing_grid":"Red eléctrica para el emplazamiento del cliente","auto_config_missing_gridcode":"Código de red eléctrica para el emplazamiento del cliente","auto_config_missing_registration":"Información del cliente para registro del producto","auto_config_missing_timezone":"Zona horaria en el emplazamiento del cliente","auto_config_network_button_text":"Configurar la red","auto_config_registration_button_text":"Introducir información del cliente","auto_config_retry_button_label":"Reintentar","auto_config_run_button_label":"Configurar Powerwall automáticamente","auto_config_run_wizard_button_text":"Ejecutar el asistente","auto_config_section_title":"Configuración automática de Powerwall","auto_config_status_cancelled":"Se ha cancelado la configuración automática. Puede volver a intentarlo:","auto_config_status_cannot_determine_grid_connection":"No se ha podido determinar la conexión a la red eléctrica.","auto_config_status_complete":"Completado correctamente","auto_config_status_determining_on_grid":"Determinando conexión a la red eléctrica...","auto_config_status_finding_contactor_controller":"Buscando controlador del contactor...","auto_config_status_finding_powerwalls":"Buscando Powerwalls...","auto_config_status_finding_solar_powerwall":"Buscando Solar Powerwall...","auto_config_status_in_progress":"En curso","auto_config_status_lookup_failed":"Falló la búsqueda del número de serie","auto_config_status_missing_information":"Información faltante","auto_config_status_no_grid_connection":"No hay conexión a la red eléctrica","auto_config_status_no_grid_detected":"No se ha detectado ninguna red eléctrica.","auto_config_status_no_network":"No conectado a Tesla","auto_config_status_not_applicable":"La configuración automática no es necesaria o ya se ha ejecutado. Puede volver a ejecutarla:","auto_config_status_retrying":"Reintentando solicitud de red fallida","auto_config_status_timeout":"El tiempo de configuración automática se ha agotado. Puede volver a intentarlo:","auto_config_status_updating":"Se requiere actualización del software","auto_config_stop_system_modal_message":"El proceso de configuración automática no puede ejecutarse mientras está funcionando el sistema. Detenga el sistema e inténtelo de nuevo.","auto_config_stop_system_modal_title":"No se puede iniciar la configuración automática","battery_container_add_all_batteries_button_label":"AÑADIR TODO","battery_container_available_batteries_subtitle":"Estas baterías no participarán en el funcionamiento del sistema a menos que se añadan a la \\"Configured\\" list.","battery_container_available_batteries_title":"Bloques de baterías disponibles","battery_container_cannot_communicate":"Error de comunicación con Powerwall. Compruebe el cableado y la terminación del bus CAN.","battery_container_cannot_communicate_with_device":"No se puede comunicar con el dispositivo. Compruebe el cableado y la terminación del bus CAN.","battery_container_chinv":"VFD para compresor y calentador (CHINV) {index}","battery_container_configured_batteries_label":"Bloques de baterías configurados","battery_container_configured_batteries_subtitle":"Estas baterías no participarán en el funcionamiento del sistema.","battery_container_confirm_update_firmware":"Este proceso puede tardar varios minutos. No interrumpa la actualización ni salga de esta página.","battery_container_dcbc":"Bloque de baterías {index}","battery_container_dcbc_comms_failure":"Error de comunicación. Compruebe la conexión de red con la unidad y escanee de nuevo.","battery_container_dcbc_dcdisconnect_opened":"La maneta del interruptor de CC está en posición de apagado.","battery_container_dcbc_door_switch_opened":"La línea de habilitación de la puerta del inversor está abierta. Compruebe el interruptor de la puerta.","battery_container_dcbc_enable_line_return_low_estop":"El circuito de apagado remoto del inversor está abierto. Compruebe el circuito de apagado remoto.","battery_container_dcbc_enable_line_return_low_inv":"La línea de habilitación del sistema inversor está abierta. Compruebe el estado del interruptor automático.","battery_container_dcbc_enable_line_return_low_str":"La línea de habilitación para una o más filas de powerpack está abierta. Compruebe el cableado y las puertas de las unidades Powerpack. Para hacer un diagnóstico, consulte la guía de resolución de problemas de la línea de habilitación.","battery_container_delete_button_title":"Borrar este dispositivo","battery_container_diagnosis_incomplete":"Diagnóstico incompleto. Para poder realizar más comprobaciones, es preciso actualizar previamente el firmware.","battery_container_faults":"Fallas","battery_container_firmware_update_needed":"Se necesita actualizar el firmware.","battery_container_gateway_contactor_meter_controller":"Contactor del Gateway/Controlador del contador","battery_container_industrial_confirm_update_firmware":"Esto actualizará el firmware de cada bloque de baterías y sus componentes secundarios.","battery_container_industrial_confirm_update_firmware_info":"Esto actualizará el firmware de cada bloque de baterías en la \\"Configured\\" list and its subcomponents.","battery_container_internal_communications_fault":"Fallo interno de comunicaciones. Compruebe el cableado y la terminación del bus CAN y realice una actualización del firmware.","battery_container_meter_socket_adapter":"Backup Switch","battery_container_mpbc":"Bloque de baterías {index}","battery_container_mpthc":"Controlador térmico (MPTHC) {index}","battery_container_no_msa_detected":"No se ha detectado ningún Backup Switch.","battery_container_no_sync_detected":"No se ha detectado ningún controlador de contactor. No se ha detectado ninguna capacidad de respaldo.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"Ref.: {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Poste (LCC) {index}","battery_container_post_missing":"Falta poste {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Powerstage {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"El Powerwall está apagado. Asegúrese de que el interruptor esté en la posición ON.","battery_container_qbms":"Panel de gestión de la batería (QBMS)","battery_container_qhvp":"Procesador de alta tensión (QHVP)","battery_container_residential_confirm_update_firmware":"Esto actualizará el firmware de cada Powerwall y el controlador de contactor (si está presente).","battery_container_resolve_connectivity":"Resuelva los problemas de conectividad antes de realizar una actualización del firmware.","battery_container_scan":"ESCANEAR","battery_container_scan_in_progress":"ESCANEANDO...","battery_container_scbc":"Bloque de cargadores {index}","battery_container_scthc":"Controlador térmico (SCTHC) {index}","battery_container_self_tests_failure":"No ha superado la autocomprobación.","battery_container_self_tests_inconclusive":"Los resultados de la autocomprobación no son concluyentes.","battery_container_self_tests_internal_error":"Error de las autocomprobaciones debido a un error interno del sistema.","battery_container_self_tests_stall":"Tiempo de espera agotado: las autocomprobaciones no han podido comenzar.","battery_container_self_tests_system_down":"No es posible realizar autocomprobaciones mientras el sistema está apagado. Inicie el sistema e inténtelo de nuevo.","battery_container_self_tests_updating":"No es posible realizar autocomprobaciones mientras se actualizan las baterías. Inténtelo de nuevo cuando la actualización se haya completado.","battery_container_serial_number":"N.º de serie: {sn}","battery_container_solar_powerwall":"{index} Solar Powerwall","battery_container_starc":"Convertidor CC-CC (STARC) {index}","battery_container_stitch":"Control de potencia CC-CC (STITCH)","battery_container_synchronizer":"Controlador de contactor","battery_container_unknown":"Controlador de bus desconocido {index}","battery_container_update_failed":"Error de actualización. Inténtelo de nuevo y asegúrese de que el cableado y los interruptores de activación no se interrumpen durante el proceso de actualización.","battery_container_update_firmware":"ACTUALIZAR FIRMWARE","battery_container_update_in_progress":"ACTUALIZACIÓN EN CURSO...","battery_container_waiting_to_report_firmware":"Esperando que la unidad indique la versión del firmware.","battery_container_warnings":"Advertencias","button_label_generate":"GENERAR","can_reboot_message_backup":"Modo de respaldo","can_reboot_message_block_update":"Actualización de bloque en curso","can_reboot_message_enumeration":"Enumeración en curso","can_reboot_message_initializing":"Inicialización del sistema","can_reboot_message_power_flow_is_too_high":"El flujo de energía es demasiado alto","can_reboot_message_updating":"En curso actualización de paquete para la ubicación","caution":"PRECAUCIÓN","charger_settings_cabinet":"Armario {sn} {state}","charger_settings_cabinet_posts_warning":"Estos controles solamente detienen la poshabilitación y el bus de AT interno del armario. De todos modos, cuando acceda a los armarios debe aislar la energía y seguir el procedimiento de seguridad completo.","charger_settings_common_bus":"Bus común {state}","charger_settings_common_bus_warning":"Solamente detiene el bus de AT común. De todos modos, cuando acceda a los armarios debe aislar la energía y seguir el procedimiento de seguridad completo.","charger_settings_disabled":"deshabilitado","charger_settings_enabled":"habilitado","charger_settings_post":"Post {id} {state}","charger_settings_saving":"guardando {spinner}","client_protocols_container_subtitle":"Active o desactive los protocolos de cliente.","client_protocols_container_title":"Protocolos de cliente","client_protocols_menu_title":"Protocolos de cliente","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"API REST","client_protocols_view_modbus_label":"TCP/IP de Modbus","compliance_container_label_fcc_id":"ID de FCC: {fccId}","compliance_container_label_ic_id":"IC: {icId}","compliance_container_label_manufacturer":"Fabricante: {manufacturer}","compliance_container_label_model":"Modelo: {model}","compliance_container_title":"Cumplimiento","component-menu-title":"Componentes","conductor_limit":"Las baterías se controlan para evitar exceder los límites de corriente configurados en cada fase de los CT de los conductores. Vea la nota sobre la aplicación del límite del conductor para ver más detalles de donde se utiliza y qué límites se deben configurar.","conductor_min_current":"Límite de exportación del conductor","control_container_add_on":"ACCESORIO","control_container_always_active":"SIEMPRE ACTIVO","control_container_battery_ok":"EXPORTACIÓN TOTAL DE BATERÍA PERMITIDA","control_container_charge_power_target":"OBJETIVO DE POTENCIA DE CARGA","control_container_conductor_max_current":"Límite de importación del conductor","control_container_conductor_min_current_max_bound":"{mode} tiene un valor máximo de 200 A","control_container_conductor_min_current_min_bound":"{mode} tiene un valor mínimo de 5 A","control_container_control_subtitle":"Subtítulo de control","control_container_control_title":"Título de control","control_container_direct":"DIRECTO","control_container_disable":"Desactivar","control_container_discharge_power_target":"OBJETIVO DE POTENCIA DE DESCARGA","control_container_enabled":"ACTIVADO","control_container_energy_target":"OBJETIVO DE ENERGÍA. Este valor debe coincidir con el tamaño del sistema según los documentos de diseño y el informe de los inspectores","control_container_error_message":"{mode} es obligatorio","control_container_explanation_bullet_five_max_site_meter_power_kw":"Cuando la carga neta es superior a dicho límite, las baterías se descargarán en un esfuerzo por evitar sobrepasar ese límite.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Cuando la generación neta es superior a dicho límite, las baterías se cargarán en un esfuerzo por evitar sobrepasar ese límite.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Cuando la carga neta es inferior a dicho límite, las baterías se limitarán en su potencia de carga permitida.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Cuando la generación neta es inferior a dicho límite, las baterías se limitarán en su potencia de descarga permitida.","control_container_explanation_bullet_one_max_site_meter_power_kw":"El límite de importación del emplazamiento es un parámetro opcional. Deje este campo vacío para desactivar la limitación.","control_container_explanation_bullet_one_min_site_meter_power_kw":"El límite de exportación para la ubicación es un parámetro opcional. Deje este campo vacío para desactivar la limitación.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Este es un límite agregado en todas las fases de los medidores de todos los emplazamientos. (Nota: Cuando se utilizan medidores de carga, el medidor del emplazamiento se calcula utilizando carga, energía solar y batería).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Este es un límite agregado en todas las fases de los medidores de todos los emplazamientos. (Nota: Cuando se utilizan medidores de carga, el medidor del emplazamiento se calcula utilizando carga, energía solar y batería).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Cuando está activado, el registro principal de la instalación controla la potencia máxima que se puede importar de la red al emplazamiento.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Cuando está activado, el registro principal de la instalación controla la potencia máxima que se puede exportar de la red al emplazamiento.","control_container_explanation_export_restrictions_locked":"Determina cómo el sistema puede exportar energía a la red. Una vez definido, la regulación exige que solamente se pueda cambiar poniéndose en contacto con Tesla.","control_container_explanation_export_restrictions_unlocked":"La regulación requiere que las características de exportación solo se pueden establecer durante la puesta en servicio inicial. Póngase en contacto con Tesla para modificarlas.","control_container_explanation_nominal_system":"Este valor debe coincidir con el tamaño del sistema según los documentos de diseño y el informe del inspector.","control_container_heat_for_energy":"CALOR PARA ENERGÍA","control_container_heat_mode":"MODO DE CALOR","control_container_heco_committed_capacity":"Capacidad comprometida","control_container_heco_committed_discharge_power_W_max_bound":"{mode} tiene un valor máximo de 100 000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode} tiene un valor mínimo de 100 W","control_container_loading":"Cargando","control_container_max_site_meter_power_W_max_bound":"{mode} tiene un valor máximo de 50 000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} tiene un valor mínimo de 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} debe ser mayor o igual que 0","control_container_max_site_meter_power_kw":"Límite de importación del emplazamiento","control_container_max_site_meter_power_w":"Límite de importación del emplazamiento","control_container_menu":"Menú","control_container_min_site_meter_power_kW_positive":"{mode} debe ser mayor o igual que 0","control_container_min_site_meter_power_kw":"Límite de exportación del emplazamiento","control_container_min_site_meter_power_w":"Límite de exportación del emplazamiento","control_container_minimum_charge_power":"POTENCIA MÍNIMA DE CARGA","control_container_minimum_discharge_power":"POTENCIA MÍNIMA DE DESCARGA","control_container_misc":"VARIOS","control_container_net_meter_mode":"Restricciones de exportación del emplazamiento","control_container_never":"SIN EXPORTACIÓN AL EMPLAZAMIENTO","control_container_nominal_system_energy_kW_positive":"{mode} debe ser mayor o igual que 0","control_container_nominal_system_energy_kWh_positive":"{mode} debe ser mayor o igual que 0","control_container_nominal_system_energy_kwh":"Energía nominal del sistema","control_container_nominal_system_energy_max_error":"Energía nominal del sistema excede el límite máximo de energía","control_container_nominal_system_power_kw":"Potencia nominal del sistema","control_container_nominal_system_power_max_error":"La potencia nominal del sistema excede el límite máximo de potencia","control_container_number_error_message":"{mode} debe ser una entrada numérica","control_container_power":"POTENCIA","control_container_pv_only":"EXPORTACIÓN CORRECTA HASTA LECTURA DE MEDIDOR FV","control_container_reactive_mode":"MODO REACTIVO","control_container_real_mode":"MODO REAL","control_container_reset":"Restablecer","control_container_site_control":"CONTROL DEL EMPLAZAMIENTO","control_container_site_limits":"LÍMITES DEL EMPLAZAMIENTO","control_container_site_max_power":"POTENCIA MÁXIMA DEL EMPLAZAMIENTO","control_container_site_min_power":"POTENCIA MÍNIMA DEL EMPLAZAMIENTO","control_container_submit":"Enviar","control_container_submitting_control":"Enviando control","control_start":"INICIAR","control_stop":"DETENER","current_password_placeholder_text":"Introduzca su contraseña actual","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Amp {id}","current_transformer_item_view_battery_ct":"Batería","current_transformer_item_view_calculated_reading":"Calculada:","current_transformer_item_view_conductor_ct":"Conductor","current_transformer_item_view_ct_voltage_pairing_1":"Fase L1","current_transformer_item_view_ct_voltage_pairing_2":"Fase L2","current_transformer_item_view_ct_voltage_pairing_3":"Fase L3","current_transformer_item_view_ct_voltage_pairing_default":"Fase predeterminada","current_transformer_item_view_doubled_solar_ct":"Solar (1CT x2)","current_transformer_item_view_flip":"Invertir","current_transformer_item_view_generator_ct":"Generador","current_transformer_item_view_load_ct":"Carga","current_transformer_item_view_measure_pw_plus_input":"Midiendo un inversor Powerwall+","current_transformer_item_view_measured_reading":"Por CT:","current_transformer_item_view_missing_ct":"Falta","current_transformer_item_view_no_reading":"Sin lectura","current_transformer_item_view_none_ct":"Ninguno","current_transformer_item_view_phase_sequence_dropdown_title":"Fase","current_transformer_item_view_site_ct":"Sitio","current_transformer_item_view_smart_ct":"Inteligente","current_transformer_item_view_solar_ct":"Solar","current_transformer_item_view_solar_rgm_ct":"Solo ingresos de energía solar","current_transformers_container_800a_ct_ensure":"Asegúrese de que la selección de CT de esta página coincide con lo que está instalado.","current_transformers_container_800a_ct_larger":"Los CT de 800 A tienen un tamaño físico mayor que los CT de 200/264 A.","current_transformers_container_800a_ct_use_case":"Para medir conductores o paneles grandes (como 400 A/800 A), utilice y configure el CT de 800 A.","current_transformers_container_amps_explanation":"Corriente que fluye a través del transformador de corriente","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Asegúrese de que el CT esté instalado en la fase correcta ({sequence}).","current_transformers_container_configure_subtitle":"Configure los transformadores de corriente del medidor.","current_transformers_container_ct_flipping_ensure_direction":"En primer lugar, asegúrese de que la etiqueta del CT esté mirando hacia el inversor solar (para CT solar) o mirando hacia la alimentación de la red (para el CT del emplazamiento). A continuación, compruebe el cableado de la fase y verifique las lecturas indicadas de corriente, potencia y factor de potencia.","current_transformers_container_ct_flipping_modal_title":"Invertir TC en el software","current_transformers_container_ct_flipping_software_incorrect_metering":"Si se utiliza el software para invertir un TC instalado en la fase incorrecta producirá una lectura incorrecta.","current_transformers_container_ct_flipping_wrong_phase":"Una lectura de potencia negativa puede indicar que el CT está instalado hacia atrás o en la fase incorrecta.","current_transformers_container_double_check_recommendation":"Antes de continuar, compruebe el cableado, las derivaciones de voltaje, los TC y la configuración del medidor.","current_transformers_container_doubled_solar_ct_explanation":"Se puede utilizar un TC individual para medir un inversor FV compensado","current_transformers_container_doubled_solar_ct_modal_title":"Medición de un inversor solar de fase dividida con un CT","current_transformers_container_grid_code_phase_modal_title":"Advertencia: El número de TC no coincide con la recomendación de fase del código de red","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Advertencia: El número de TC no coincide con la recomendación de fase del código de red para varios medidores","current_transformers_container_grid_code_phase_multiple_warnings_message":"Un número inesperado de TC está conectado a los siguientes medidores {numMeters}:","current_transformers_container_grid_code_phase_warning_message":"Un número de CT inesperado está agregado al siguiente medidor:","current_transformers_container_grid_code_single_phase_warning":"El código de rejilla aplicado es monofásico. Los sistemas monofásicos normalmente tienen un servicio ya sea monofásico o trifásico. {lb} Se recomienda un número impar de TC (1 o 3).","current_transformers_container_grid_code_split_phase_warning":"El código de retícula aplicado es de fases separadas. Los sistemas de fases-separadas comúnmente tienen un TC en cada \\"caliente\\" conductor. {lb} Se recomienda un número par de TC (2 o 4).","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"Se necesita un contador Neurio que mida los inversores solares Powerwall+ para habilitar la medición del grado de ingresos (Revenue Grade Metering, RGM).","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Seleccione Sí si este mide un inversor solar Powerwall+. Seleccione No si este mide un inversor solar que no forma parte de un conjunto Powerwall+.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"¿Está midiendo un inversor Powerwall+?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Asegúrese de que la etiqueta del CT mire hacia el inversor solar.","current_transformers_container_label_modal_title":"Explicación de las Etiquetas","current_transformers_container_load_ct_ensure":"Al configurar los CT de carga, asegúrese de que se miden todas las cargas del emplazamiento y que se miden por separado las cargas con respaldo y sin respaldo.","current_transformers_container_load_ct_modal_title":"CT de carga","current_transformers_container_load_ct_recommended":"Solo se recomienda configurar los CT de carga para usos específicos donde no es posible configurar el CT de un emplazamiento.","current_transformers_container_meter_id":"Medidor {id}","current_transformers_container_no_load_and_site_ct":"No puede haber a la vez un CT de carga y un CT del emplazamiento.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"No puede haber cargas detrás del CT.","current_transformers_container_no_site_or_load_warning":"NO HAY EMPLAZAMIENTOS O TRANSFORMADORES DE CORRIENTE DE CARGA CONFIGURADOS","current_transformers_container_no_solar_ct_warning":"NO HAY TRANSFORMADOR DE CORRIENTE SOLAR CONFIGURADO","current_transformers_container_no_solar_inverter_warning":"NO HAY UN INVERSOR SOLAR CONFIGURADO","current_transformers_container_phase_usages_modal_title":"Advertencia: La configuración del CT no coincide con la configuración de la fase","current_transformers_container_phase_usages_warning":"El número de fases configuradas no coincide con el número de CT configurados. Se recomienda(n) {lb} {num} de CT configurado(s).","current_transformers_container_phase_usages_warning_message":"Número inesperado de CT conectados al medidor o medidores siguiente(s):","current_transformers_container_power_amperage_configure_warning":"{type} El Transformador de Corriente requiere ambos, energía y amperaje positivos, para poder ser configurado correctamente.","current_transformers_container_power_factor_explanation":"Factor de potencia (Potencia_Real / Potencia_Aparente). Sólo se muestra para altos niveles de potencia. Para cargas resistivas comunes, el factor de potencia debe ser cercano a 1. Un factor de potencia bajo puede indicar que un transformador de corriente está instalado de manera incorrecta, o que hay cargas capacitivas/inductivas muy grandes.","current_transformers_container_power_factor_out_of_range_warning":"La medición del factor de potencia está fuera del rango esperado. {lb} Factor de potencia medido: {powerFactor} PF {lb} Puede que el medidor esté instalado de manera incorrecta o en una fase incorrecta, o que haya cargas capacitivas/inductivas demasiado grandes.","current_transformers_container_system_test_configured_incorrect":"Advertencia: El TC {id} podría estar configurado incorrectamente","current_transformers_container_title":"Transformadores de corriente","current_transformers_container_voltage_out_of_range_warning":"El voltaje está fuera del rango {lb} Voltaje medido: {volts} V {lb} El voltaje medido de este CT está fuera del rango normal de operación.","current_transformers_container_volts_explanation":"Voltaje de línea a neutro en la toma de tensión asociada con el transformador de corriente","current_transformers_container_watts_explanation":"Potencia como corriente que fluye a través del transformador de corriente multiplicada por el voltaje de la toma de tensión asociada","customer_installation_view_email_label":"CORREO ELECTRÓNICO DEL CLIENTE","customer_installation_view_email_placeholder":"Correo electrónico","customer_registration_view_address_label":"DIRECCIÓN","customer_registration_view_address_placeholder":"Dirección","customer_registration_view_city_label":"CIUDAD","customer_registration_view_city_placeholder":"Ciudad","customer_registration_view_clear_form":"BORRAR FORMULARIO","customer_registration_view_country_label":"país","customer_registration_view_customer_information":"INFORMACIÓN DEL CLIENTE","customer_registration_view_email_address_label":"CORREO ELECTRÓNICO","customer_registration_view_email_address_label_confirmation":"REINTRODUCIR CORREO ELECTRÓNICO","customer_registration_view_email_placeholder":"Correo electrónico","customer_registration_view_family_name_label":"APELLIDOS","customer_registration_view_family_name_warning":"Introduzca los apellidos del cliente.","customer_registration_view_given_name_label":"NOMBRE DE PILA","customer_registration_view_given_name_warning":"Introduzca el nombre del cliente.","customer_registration_view_homeowner_family_name_placeholder":"Apellidos","customer_registration_view_homeowner_given_name_placeholder":"Nombre","customer_registration_view_installation_address":"DIRECCIÓN DE LA INSTALACIÓN","customer_registration_view_phone_number_label":"TELÉFONO","customer_registration_view_phone_placeholder":"Teléfono","customer_registration_view_skip_explanation":"Si se omite, para tener acceso al sistema, el propietario antes tendrá que realizar el registro por sí mismo a través de la app móvil de Tesla.","customer_registration_view_state_placeholder":"Estado","customer_registration_view_state_province_region_label":"ESTADO/PROVINCIA/REGIÓN","customer_registration_view_zip_label":"CÓDIGO POSTAL","customer_registration_view_zip_placeholder":"Código postal","diagnostic-alert-affected-children":"Componentes afectados ({count})","diagnostic-alerts-missing-alert-information":"Falta información sobre la alerta","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Artículo de Toolbox","diagnostic-alerts-toolbox-article-external-link":"Enlaces externos","diagnostic_alert_alert_name":"Nombre de alerta","diagnostic_alert_alert_type":"Tipo de alerta","diagnostic_alert_audience":"Destinatarios","diagnostic_alert_clear_condition":"Borrar condición","diagnostic_alert_description":"Descripción","diagnostic_alert_display_name":"Nombre mostrado","diagnostic_alert_id":"ID de alerta","diagnostic_alert_impact_category":"Categoría del impacto","diagnostic_alert_latching":"Enclavamiento","diagnostic_alert_max":"Máx.","diagnostic_alert_min":"Mín.","diagnostic_alert_name":"Nombre","diagnostic_alert_node":"Nodo","diagnostic_alert_offset":"Desviación","diagnostic_alert_payload_signals":"Señales de datos","diagnostic_alert_potential_impact":"Impacto potencial","diagnostic_alert_safety_reason":"Motivo de seguridad","diagnostic_alert_scale":"Escala","diagnostic_alert_set_condition":"Establecer condición","diagnostic_alert_signal_name":"Nombre de la señal","diagnostic_alert_signoff":"Cerrar sesión","diagnostic_alert_sna_value":"Valor de SNA","diagnostic_alert_supplier_dtc_name":"Proveedor de nombre de DTC","diagnostic_alert_uiID":"ID de UI","diagnostic_alert_units":"Unidades","diagnostic_alert_urgent":"Urgente","diagnostic_category_item_view_alerts_description":"Alertas de sitios, componentes y subcomponentes","diagnostic_category_item_view_download_results":"RESULTADOS DE LA DESCARGA","diagnostic_category_item_view_internal_comms_description":"Compruebe las comunicaciones de todos los dispositivos","diagnostic_category_item_view_internal_comms_title":"Comunicaciones del dispositivo","diagnostic_category_item_view_live_results":"RESULTADOS EN VIVO","diagnostic_category_item_view_metering_description":"Compruebe las conexiones del medidor","diagnostic_category_item_view_metering_title":"Medición","diagnostic_category_item_view_networking_description":"Compruebe la conexión de red","diagnostic_category_item_view_networking_title":"Redes","diagnostic_category_item_view_no_selected_tests":"NO HAY PRUEBAS SELECCIONADAS","diagnostic_category_item_view_rerun_selected":"VOLVER A EJECUTAR {num} PRUEBAS SELECCIONADAS","diagnostic_category_item_view_rerun_selected_test":"VOLVER A EJECUTAR LA PRUEBA SELECCIONADA","diagnostic_category_item_view_run_selected":"EJECUTAR {num} PRUEBAS SELECCIONADAS","diagnostic_category_item_view_run_selected_test":"EJECUTAR LA PRUEBA SELECCIONADA","diagnostic_category_item_view_select_all_tests":"Seleccionar todo","diagnostic_category_item_view_self_tests_description":"Inicie las pruebas de carga y descarga en el sistema","diagnostic_category_item_view_self_tests_title":"Autocomprobaciones","diagnostic_category_item_view_toggle_all_tests":"Activar/Desactivar todo","diagnostic_input_view_blocks_label":"BLOQUES","diagnostic_input_view_individual_test_name_label":"NOMBRE DE PRUEBA INDIVIDUAL","diagnostic_input_view_max_allowed_charge_power_label":"POTENCIA DE CARGA MÁXIMA PERMITIDA","diagnostic_input_view_max_allowed_discharge_power_label":"POTENCIA DE DESCARGA MÁXIMA PERMITIDA","diagnostic_test_enable_line":"Línea de habilitación","diagnostic_test_item_view_ac_self_test_description":"Autocomprobación de corriente alterna","diagnostic_test_item_view_ac_self_test_description_2":"Ejecuta una secuencia de pruebas de pérdida de potencia en el sistema de CA. Los sistemas Powerpack utilizarán la configuración “MAX_ALLOWED_POWER”. Ajústelos a 0 para los sistemas Megapack y Supercharger.","diagnostic_test_item_view_dc_self_test_description":"Autocomprobación de corriente continua","diagnostic_test_item_view_dc_self_test_description_2":"Ejecuta una secuencia de pruebas en el sistema de CC, que incluyen comprobaciones térmicas.","diagnostic_test_item_view_enable_line_description":"Pruebe si hay tensión en la línea de habilitación para todos los Powerwall","diagnostic_test_item_view_enable_line_resolution":"Accione la línea de habilitación y vuelva a intentarlo","diagnostic_test_item_view_individual_self_test_description":"Seleccione en la lista de autocomprobaciones disponibles en los controladores de bus configurados.","diagnostic_test_item_view_meter_comms_description":"Use el comando ping para comprobar las comunicaciones del medidor","diagnostic_test_item_view_network_connection_description":"Pruebe la conexión a Internet y a los servidores de Tesla","diagnostic_test_item_view_network_connection_resolution":"Reconfigure las conexiones de las redes","diagnostic_test_item_view_resolution_generic_text":"Reconfigure {name} e inténtelo de nuevo","diagnostic_test_item_view_step_canceled":"La prueba ha sido cancelada por el usuario","diagnostic_test_item_view_step_config_update_status":"Compruebe el estado del servidor de configuración de Tesla","diagnostic_test_item_view_step_google_http":"Hacer ping a HTTP de Google","diagnostic_test_item_view_step_google_https":"Hacer ping a HTTPS de Google","diagnostic_test_item_view_step_hermes_status":"Compruebe el estado del servidor de registro de Tesla","diagnostic_test_item_view_step_results_ip_address":"Dirección IP","diagnostic_test_item_view_step_results_subnet_mask":"Subred","diagnostic_test_item_view_table_header_key":"Identificador","diagnostic_test_item_view_table_header_name":"Paso","diagnostic_test_item_view_table_header_value":"Valor","diagnostic_test_meter_comms":"Comunicaciones del medidor","diagnostic_test_network_connection":"Conexión de red","diagnostics_composite_view_no_tests_found":"NO SE ENCUENTRAN PRUEBAS DISPONIBLES","diagnostics_composite_view_run_all_selected_tests":"REALIZAR TODAS LAS PRUEBAS SELECCIONADAS","diagnostics_container_industrial_disruptive_tests_description":"Las pruebas siguientes activaran el funcionamiento del ventilador y los sistemas térmicos, que generarán ruido. Se debe esperar un consumo aproximado de 30 kW por inversor Además, las pruebas siguientes pueden alterar el funcionamiento normal del sistema:","diagnostics_container_required_inputs_description":"Las siguientes pruebas requieren entradas adicionales:","diagnostics_container_residential_disruptive_tests_description":"Las pruebas siguientes pueden alterar el funcionamiento normal tanto del Gateway como del Powerwall:","diagnostics_container_stop_test_title":"¿Detener la prueba {name}?","diagnostics_container_subtitle":"Herramientas para diagnosticar problemas en la instalación del sistema.","diagnostics_container_tests_running":"Pruebas diagnóstico ejecutándose","diagnostics_container_title":"Diagnósticos","disabled_reason_battery_breaker_open":"El interruptor de batería está abierto","disabled_reason_checking_firmware_update":"Comprobando si hay actualizaciones de firmware","disabled_reason_config":"Desactivado por archivo de configuración","disabled_reason_excessive_voltage_drop":"Caída de tensión excesiva","disabled_reason_firmware_update_failed":"Error en la actualización del firmware","disabled_reason_firmware_update_in_progress":"Actualización de firmware en curso","disabled_reason_gridcode_write_failed":"Falló la configuración del código de red eléctrica","disabled_reason_user_requested":"Desactivado a petición del usuario","dropdown_default_placeholder":"Escriba...","dropdown_list_view_not_listed_label":"No está en la lista: \\"{searchText}\\"","dropdown_list_view_select_all":"Seleccionar todo","dropdown_list_view_select_field":"Seleccione un campo.","dropdown_list_view_show_complete":"CAMBIAR A LISTA COMPLETA","dropdown_list_view_show_searchable":"CAMBIAR A LISTA DE BÚSQUEDA","enumeration_warning_details_miswired_12v":"Cuando se conectan dos Powerwall+, solo la unidad conectada al Gateway/Backup Switch debe tener 12 V aplicados. Para que desaparezca esta advertencia, desconecte la alimentación de 12 V de todos los Powerwall+ subsiguientes en la cadena y, después, pulse Volver a buscar dispositivos (en la parte inferior de esta página).","enumeration_warning_details_multiple_controllers_gateway":"Desenchufe el arnés de alimentación de todos los controladores del emplazamiento Powerwall+ situado en la parte superior derecha del Conjunto solar.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Desenchufe el arnés de alimentación del controlador del emplazamiento Expansion Powerwall+ (no conectado al Backup Switch), ubicado en la parte superior derecha del Conjunto solar.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Desenchufe el arnés de alimentación de todos los controladores del emplazamiento Powerwall+ situado en la parte superior derecha del Conjunto solar. Ponga en servicio el sistema conectándose al Backup Gateway.","enumeration_warning_details_multiple_controllers_unknown":"En una configuración multi-Powerwall+ con cableado CAN solo debe tener alimentación un controlador del emplazamiento.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Únicamente debe estar activo un controlador de emplazamiento. Cuando utilice Backup Gateway, desconecte todos los controladores Powerwall+. Cuando utilice un Backup Switch, desconecte todos controladores Powerwall+ excepto uno. Ejecutar wizard está deshabilitado hasta que solo haya un controlador de emplazamiento activo.","enumeration_warning_title_miswired_12v":"Error de cableado de 12 V","enumeration_warning_title_multiple_controllers":"Hay varios controladores del emplazamiento activos","error_details":"Detalles de error","error_item_view_check_network":"Compruebe la conexión de red.","error_item_view_disconnected":"Desconectado del Gateway. Compruebe la conexión de red y {refresh}","error_item_view_forgot_password":"Haga clic para restablecer la contraseña.","error_item_view_refresh_browser":"Actualice el navegador.","error_item_view_try_logging_in_again":"Intente iniciar sesión de nuevo.","ethernet_view_backup_dns_label":"SERVIDOR DNS DE RESPALDO","ethernet_view_backup_dns_warning":"Servidor DNS de respaldo válido","ethernet_view_configuration_label":"CONFIGURACIÓN","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY","ethernet_view_gateway_warning":"IP de Gateway (router) válida","ethernet_view_ip_address_label":"DIRECCIÓN IP","ethernet_view_ip_address_warning":"Dirección IP válida","ethernet_view_not_available":"No disponible","ethernet_view_primary_dns_label":"SERVIDOR DNS PRIMARIO","ethernet_view_primary_dns_warning":"Servidor DNS primario válido","ethernet_view_static_label":"Estática","ethernet_view_subnet_mask_label":"MÁSCARA DE SUBRED (OPC)","ethernet_view_subnet_mask_warning":"Máscara de subred válida","factory_reset_message":"Esto hará que la unidad se restablezca al estado por defecto que establece Tesla. Esta acción no se puede deshacer. Para que pueda funcionar, un instalador profesional deberá poner en servicio la unidad de nuevo. Es posible que tenga que volver a conectarse a la red Wi-Fi de la unidad.","field_false":"Falso","field_true":"Verdadero","follower_powerwall_message":"Este Powerwall está controlado por {leader}","follower_powerwall_title":"Powerwall seguidor","form_legend_text":"indica un campo obligatorio","generation_container_connecting_status":"Conectando","generation_container_connection":"Conexión de inversor {id}","generation_container_connection_summary":"Durante este proceso de conexión, es posible que se le desconecte temporalmente de la red. {lb} Compruebe que vuelve a conectarse a la red correcta. Puede tardar hasta 3 minutos.","generation_container_subtitle":"Añadir tanto la información del inversor solar como la del generador a continuación.","generation_container_title":"Generación","generator_item_view_disconnect_type_label":"TIPO DE DESCONEXIÓN","generator_item_view_generator":"GENERADOR {id}","generator_item_view_manufacturer_label":"FABRICANTE (OPC)","generator_item_view_model_label":"MODELO","generator_item_view_serial_label":"N.º DE SERIE","generator_item_view_sustained_power_label":"POTENCIA MANTENIDA","generator_view_add_generator":"AÑADIR GENERADOR","grid_code_container_off_grid_confirmation":"¿El sistema esta desconectado de la red?","grid_code_container_off_grid_detected":"Se ha detectado que el sistema está fuera de red. Asegúrese de que esta sea la configuración correcta.","grid_code_container_off_grid_warning":"{warning}: No se pudo detectar el estado de la red del sistema. Configurar el estado incorrecto de fuera de red puede resultar en fallo del sistema.","grid_code_container_results":"Resultados de la detección de red.","grid_code_container_retrieving":"Recuperando códigos de red","grid_code_container_saving":"Guardando código de red eléctrica","grid_code_container_subtitle":"Basándose en la ubicación y en las lecturas de los contadores, encuentre la mejor configuración para su instalación.","grid_services_view_grid_services":"Servicios de red eléctrica","heading_change_password":"Cambiar la contraseña","help_view_how_password":"Cómo encontrar la contraseña en un Gateway","help_view_how_password_description":"Abra la puerta del Gateway La contraseña se encuentra en la etiqueta después de \\"Password:\\"","help_view_how_serial_number":"Cómo encontrar el número de serie en un Gateway que no es de respaldo","help_view_how_serial_number_backup":"Cómo encontrar el número de serie en un Gateway de respaldo","help_view_how_serial_number_backup_description":"Abra la puerta del Gateway de respaldo El número de serie comienza con \\"(S):\\"","help_view_how_serial_number_description":"Abra la puerta del Gateway El número de serie comienza con \\"(S):\\"","help_view_how_to_enable_line":"Enlazar un Powerwall para activarlo o desactivarlo","help_view_how_to_enable_line_description":"Apague el interruptor del Powerwall y vuelva a encenderlo. En sistemas con varios Powerwall, solo necesita accionar un interruptor","hierarchy_charger":"Bloque de cargadores {name}","hierarchy_chinv":"VFD para compresor y calentador (CHINV)","hierarchy_converter":"Convertidor CC-CC (STARC)","hierarchy_inverter":"Bloque de baterías {name}","hierarchy_mega_thermal_controller":"Controlador térmico (MPTHC)","hierarchy_missing_post":"Falta poste","hierarchy_mpbc":"Bloque de baterías {name}","hierarchy_part_number":"Número de pieza","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Informe de pods","hierarchy_post":"Poste (LCC)","hierarchy_posts":"Postes","hierarchy_power_stage":"Etapa de potencia","hierarchy_power_stages":"Etapas de potencia","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Panel de gestión de la batería (QBMS)","hierarchy_qhvp":"Procesador de alta tensión (QHVP)","hierarchy_scthcs":"Controladores térmicos","hierarchy_serial_number":"Número de serie","hierarchy_sitemaster":"Registro principal de la instalación {name}","hierarchy_starcs":"Convertidores CC-CC","hierarchy_stitch":"Control de potencia CC-CC (STITCH)","hierarchy_thermal_controller":"Controlador térmico (SCTHC)","higher_order_login_login_required":"Es necesario iniciar sesión","higher_order_login_title":"Comencemos.","home_container_caution":"⚠️ Precaución","home_container_caution_deenergize":"Para desenergizar el sistema de forma segura, apague todos los interruptores del Powerwall.","home_container_caution_energized":"El sistema podría seguir energizado si las cadenas solares están conectadas.","home_container_inactive_meter":"Datos de medidor antiguos","home_container_inactive_meter_description":"Compruebe la conexión del medidor {type}.","home_container_inactive_meter_timestamp":"Última lectura del medidor: {timestamp}","home_container_login_required":"Es necesario iniciar sesión","home_container_missing_meter":"Falta un medidor","home_container_positive_meter":"Advertencia: Es posible que el medidor {type} esté configurado incorrectamente","home_container_positive_meter_description":"El medidor {type} requiere que tanto la potencia positiva como el amperaje estén correctamente configurados.","home_container_powerwall_error":"Error del sistema Powerwall","home_container_powerwall_start_error":"incapaz de iniciar el sistema: {reason}","home_container_site_controller_error":"Error del sistema del controlador del emplazamiento","home_container_sitemaster_alternative":"Nota: Normalmente el sistema debería desactivarse al apagar el interruptor de activación de todos los Powerwall y abriendo sus disyuntores.","home_container_sitemaster_confirm":"Haga clic en Sí a continuación solo si está seguro de que el sistema debería detenerse.","home_container_sitemaster_confirm_industrial":"¿Confirma que desea detener el sistema?","home_container_sitemaster_confirm_wizard":"Para ejecutar el Asistente es preciso que el sistema esté detenido. ¿Proceder y detener el sistema?","home_container_sitemaster_header_warning":"{warning} Se detendrá el funcionamiento del Powerwall y del sistema.","home_container_sitemaster_header_warning_industrial":"{warning} Este sistema se encuentra en un estado en el que Tesla no recomienda detenerlo. Motivo: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} Este sistema se encuentra en un estado en el que Tesla no recomienda detenerlo. Motivo: \\"{reason}\\"","home_container_sitemaster_logging":"Mientras el sistema esté desconectado, el registro se detendrá","home_container_sitemaster_reset":"Para iniciar el sistema después de haber sido apagado, haga clic en el botón de la página de inicio.","home_container_sitemaster_update":"Si hay alguna actualización en curso, se finalizará","home_container_start_powerwall":"Iniciar sistema","home_container_start_system_button":"INICIAR SISTEMA","home_container_stop_powerwall":"Detener sistema","home_container_stop_system_button":"DETENER SISTEMA","home_view_compliance":"CUMPLIMIENTO","home_view_download_all_logs":"Descargar todos los registros","home_view_download_logs":"DESCARGAR REGISTROS","home_view_download_logs_description_one":"Esto descarga un juego comprimido de registros del sistema que pueden ser útiles para diagnosticar problemas del sistema operativo, del software y de las redes.","home_view_download_logs_description_three":"Los registros están firmados y cifrados y se deben enviar al Servicio de Tesla Energy para su análisis.","home_view_download_logs_description_two":"Esto es especialmente útil cuando el Gateway no se puede conectar a la red y se necesita una solución de problemas avanzada.","home_view_login":"INICIAR SESIÓN","home_view_logout":"CERRAR SESIÓN","home_view_run_wizard":"EJECUTAR ASISTENTE","input_accept":"Acepto","input_confirm":"Acuso recibo de todas las advertencias del sistema.","input_consent":"Doy mi consentimiento","input_decline":"No acepto","input_no_consent":"No doy mi consentimiento","input_title_email":"Introduzca una dirección de correo electrónico válida: nombre@nombre.dominio","installation_container_relay_section_modal_title":"Relé de baja tensión del Gateway","installation_container_residual_current_device_modal_title":"Requisito de instalación para los interruptores diferenciales del emplazamiento","installation_container_subtitle":"Información sobre el instalador y el sitio","installation_container_sync_relay_usage_open_off_grid":"Relé abierto en estado desconectado de la red eléctrica","installation_container_title":"Información de instalación","installation_problem_detail_site_shutdown_0":"Para volver a habilitar el sistema:","installation_problem_detail_site_shutdown_1":"Encienda todos los interruptores ON/OFF del Powerwall","installation_problem_detail_site_shutdown_2":"Cierre las paradas de emergencia","installation_problem_detail_site_shutdown_3":"Asegúrese de que los puentes de apagado rápido están correctamente instalados","installation_problem_detail_site_shutdown_4":"Compruebe el cableado del circuito de apagado.","installation_problem_detail_title_site_shutdown":"Circuito de apagado del emplazamiento activado","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Circuito de apagado del emplazamiento activado por un apagado rápido de Powerwall+.","installation_problem_details_pvacs_with_no_solar_rgm":"Los medidores solares solo son necesarios cuando se miden inversores solares que no forman parte de un conjunto Powerwall+. Los medidores que miden un inversor Powerwall+ deben estar marcados como tales en la página de transformadores de corriente.","installation_problem_details_too_few_solar_rgm":"El número de TC que miden un inversor solar Powerwall+ debe coincidir con el número de inversores solares Powerwall+. Ejecute el wizard, empareje el medidor Neurio si fuera necesario y ajuste la configuración del TC en la página de transformadores de corriente.","installation_problem_details_too_many_solar_rgm":"El número de TC que miden un inversor solar Powerwall+ debe coincidir con el número de inversores solares Powerwall+. Ejecute el wizard y ajuste la configuración del TC en la página de transformadores de corriente.","installation_problem_title_pvacs_with_no_solar_rgm":"Medidor solar que no mide un inversor Powerwall+. ¿Es esto correcto?","installation_problem_title_site_shutdown":"Activado circuito de apagado del emplazamiento. Todos los inversores solares Powerwall y Powerwall+ están deshabilitados.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Circuito de apagado del emplazamiento activado por un apagado rápido de Powerwall+. Todos los inversores solares Powerwall y Powerwall+ están deshabilitados.","installation_problem_title_too_few_solar_rgm":"Hay muy pocos medidores solares midiendo el inversor Powerwall+","installation_problem_title_too_many_solar_rgm":"Hay demasiados medidores solares midiendo el inversor Powerwall+","installation_view_add_on_solar":"Agregar-en","installation_view_additional_connections_label":"CONEXIONES ADICIONALES","installation_view_back_wiring":"Anterior","installation_view_backup_configuration_label":"CONFIGURACIÓN DE RESPALDO","installation_view_basement_location":"Sótano","installation_view_company_label":"NOMBRE DE LA EMPRESA","installation_view_company_placeholder":"Nombre de la empresa","installation_view_conditioned_space_location":"Espacio condicionado","installation_view_existing_solar":"Existente","installation_view_floor_mounting":"Piso","installation_view_garage_location":"Cochera","installation_view_home_label":"CABLEADO DOMÉSTICO","installation_view_location_label":"LUGAR DE INSTALACIÓN POWERWALL","installation_view_modem_ethernet":"¿Hay conexión de módem celular a ethernet?","installation_view_modem_wifi":"¿Hay conexión de módem celular a wifi?","installation_view_mounting_label":"MONTAJE DE POWERWALL","installation_view_na_backup_configuration":"No aplicable","installation_view_new_solar":"Nuevo","installation_view_none_solar":"Ninguno","installation_view_outdoor_location":"Exterior","installation_view_pad_mounting":"Base","installation_view_partial_home_backup_configuration":"Parte de la casa","installation_view_phone_label":"TELÉFONO","installation_view_phone_placeholder":"Número de teléfono del instalador","installation_view_powerline_ethernet":"¿Hay conexión de línea de potencia a ethernet?","installation_view_pv_panel":"Panel FV","installation_view_relay_enabled":"Relé abierto en estado desconectado de la red eléctrica","installation_view_relay_label":"RELÉ DE BAJA TENSIÓN DEL GATEWAY","installation_view_relay_options_modal_content":"Cuando está conectado a la red o a otra fuente de alimentación de CA, este relé estará cerrado. {lb1} Cuando está desconectado de la red, este relé estará abierto. {lb1} Como ejemplo, se puede usar para que el aire acondicionado funcione con conexión a la red eléctrica y no funcione cuando está desconectado de la red eléctrica para impedir que la alta corriente de irrupción asociada sobrecargue los Powerwalls.","installation_view_relay_section_modal_content":"El Gateway tiene un relé integrado que se controla para activarse o desactivarse en función del estado del sistema. {lb1} Se puede usar para controlar un dispositivo externo, como una carga o una fuente de energía secundaria. {lb1} En el Gateway de respaldo 1, utilice los terminales 1 y 2 del conector auxiliar (conector Phoenix grande de color verde de 9 terminales). {lb1} En el Gateway de respaldo 2, utilice los terminales 3 y 4 (GSO/GSI) del conector auxiliar (conector Phoenix de color verde de 5 terminales). {lb1} Este relé es de 60 voltios/2 amperios nominales y se suele utilizar con circuitos de 12 V o 24 V. {lb1} Para obtener más información, consulte las notas de aplicación sobre eliminación de cargas y temas relacionados.","installation_view_residual_current_device":"¿Tiene un interruptor diferencial instalado corriente arriba del Gateway?","installation_view_residual_current_device_modal_content":"Determinadas instalaciones, como las redes eléctricas con configuración de puesta a tierra de tipo TT, pueden requerir interruptores diferenciales (RCD). {lb1}{lb2} Para reducir el riesgo de disparo por interferencia durante el funcionamiento desconectado de la red, Tesla recomienda que todos los interruptores diferenciales corriente arriba tengan retardo (tipo S) o bien se reubiquen los interruptores diferenciales del emplazamiento después del contactor del Gateway si fuera posible. {lb1}{lb2} Para obtener información adicional, consulte la nota de aplicación sobre interruptores diferenciales y protección contra fallos.","installation_view_satellite_ethernet":"¿Hay conexión de satélite a Ethernet?","installation_view_satellite_wifi":"¿Hay conexión de satélite a Wi-Fi?","installation_view_side_wiring":"Lateral","installation_view_solar_label":"INSTALACIÓN SOLAR","installation_view_solar_panels":"Paneles solares","installation_view_solar_roof":"Techo solar","installation_view_solar_type_label":"TIPO INSTALACIÓN SOLAR","installation_view_solarglass":"Vidrio solar","installation_view_stack_kit":"¿Hay juego de Stack Kit?","installation_view_type_commercial":"Comercial","installation_view_type_label":"INFORMACIÓN DE INSTALACIÓN","installation_view_type_perm_off_grid":"Desconectada permanentemente de la red eléctrica","installation_view_type_residential":"Residencial","installation_view_wall_mounting":"Muro","installation_view_whole_home_backup_configuration":"Toda la casa","installation_view_wifi_extender":"¿Hay extensión de Wi-Fi?","installation_view_wiring_label":"CABLEADO DEL POWERWALL","inverter_test_view_accuracy_magnitude":"Precisión de magnitud","inverter_test_view_accuracy_time":"Precisión de hora","inverter_test_view_complete":"Completado","inverter_test_view_current_magnitude":"Magnitud de corriente","inverter_test_view_fail":"Falló","inverter_test_view_na":"No aplicable","inverter_test_view_not_run":"No ejecutado","inverter_test_view_pass":"Pasó","inverter_test_view_running":"En marcha","inverter_test_view_set_magnitude":"Establecer magnitud","inverter_test_view_set_time":"Establecer hora","inverter_test_view_test_description":"Llevando a cabo autocomprobación del inversor","inverter_test_view_test_name_all":"Todas las pruebas","inverter_test_view_test_name_over_freq_stage_one":"Sobrefrecuencia nivel 1","inverter_test_view_test_name_over_freq_stage_two":"Sobrefrecuencia nivel 2","inverter_test_view_test_name_over_volt_one":"Sobretensión nivel 1","inverter_test_view_test_name_over_volt_two":"Sobretensión nivel 2","inverter_test_view_test_name_under_freq_stage_one":"Baja frecuencia nivel 1","inverter_test_view_test_name_under_freq_stage_two":"Baja frecuencia nivel 2","inverter_test_view_test_name_under_volt_one":"Baja tensión nivel 1","inverter_test_view_test_name_under_volt_two":"Baja tensión nivel 2","inverter_test_view_timestamp":"Registro de la hora","inverter_test_view_trip_magnitude":"Magnitud de disparo","inverter_test_view_trip_time":"Hora de disparo","inverter_test_view_warning":"Nota: La prueba del inversor puede tardar de 20 a 30 minutos por inversor.","label_fail":"Falló","label_inconclusive":"No concluyente","label_pass":"Pasó","legal_container_customer_policy_subtitle":"Debe ser completado por el propietario de la vivienda.","legal_container_customer_policy_title":"Política sobre el Escudo de Privacidad del cliente y garantía limitada de Tesla","legal_container_no_meters_warning":"NO SE HAN CONFIGURADO MEDIDORES","legal_container_no_powerwalls_warning":"NO SE HAN DETECTADO POWERWALLS","login_type_customer":"Cliente","login_type_engineer":"Técnico","login_type_installer":"Instalador","login_view_cancel_login_auth":"Cancelar inicio de sesión","login_view_change_forgot_password":"CAMBIAR LA CONTRASEÑA O CONTRASEÑA OLVIDADA","login_view_compliance":"CUMPLIMIENTO","login_view_customer_email_placeholder":"Correo electrónico del cliente","login_view_email":"CORREO ELECTRÓNICO","login_view_email_placeholder":"Correo electrónico del instalador principal","login_view_forgot_password":"CONTRASEÑA OLVIDADA","login_view_forgot_password_login_type":"Seleccione el tipo de inicio de sesión","login_view_language_label":"IDIOMA","login_view_login_type_label":"TIPO DE INICIO DE SESIÓN","login_view_password_placeholder":"Ingrese su contraseña","login_view_start_login_auth":"COMENZAR PROCESO DE INICIO DE SESIÓN","login_view_start_login_auth_how_to_enable_line_description":"Para iniciar sesión, apague el interruptor de encendido del Powerwall y vuelva a encenderlo. En sistemas con varios Powerwall, solo necesita accionar un interruptor","login_view_username":"NOMBRE DE USUARIO","login_view_username_placeholder":"Nombre de usuario","login_warning_view_expand":"Si el Asistente no se ejecuta, {click}.","login_warning_view_firmware_update":"Si hay una actualización de firmware en curso","login_warning_view_heading":"{warning} Al iniciar el Asistente se detiene el funcionamiento de la batería.","login_warning_view_protect_system":"Para proteger al sistema, el Asistente no se ejecutará:","login_warning_view_stop_operation":"Forzar ejecución del Asistente (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Actualmente solo se admiten los navegadores web Chrome y Safari.","login_warning_view_system_force_launch":"Si desea ejecutar el Asistente y detener el funcionamiento del sistema, seleccione Forzar ejecución del Asistente.","login_warning_view_system_off_grid":"Si el sistema eléctrico no está conectado a la red","login_warning_view_warning_click":"haga clic para obtener más información","mater_item_view_bad_barcode":"Escaneado código de barras incorrecto","mater_item_view_barcode_scan_failed":"Fallo en el escaneo del código de barras","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Batería","meter_aggregate_type_load":"Carga","meter_aggregate_type_site":"Emplazamiento","meter_aggregate_type_solar":"Solar","meter_container_add_meter_error":"Comprobando medidor","meter_container_add_meter_status":"Añadiendo medidor","meter_container_authorizing_status":"Autorizando","meter_container_decode":"No ha sido posible descodificar el número de serie a partir de la imagen.","meter_container_detecting_status":"Detectando medidores cableados","meter_container_failed_status":"No se ha podido añadir el medidor","meter_container_reconnecting_status":"Reconectando","meter_container_skip_title":"No se ha puesto en servicio ningún medidor. ¿Confirma que desea continuar?","meter_container_starting_status":"Iniciando","meter_container_subtitle":"Para conectarlo, introduzca el ID breve y el número de serie del medidor de energía. Compruebe los medidores después de ponerlos en servicio.","meter_container_subtitle_industrial":"Introduzca las direcciones IP del medidor de energía y las ubicaciones para conectarse. Compruebe los medidores después de ponerlos en servicio.","meter_container_success_status":"Medidor añadido correctamente","meter_container_title":"Medidores","meter_container_unknown_status":"Desconocido","meter_container_updating_status":"Actualizando medidor","meter_container_verification":"Comprobación del {id} de medidor","meter_container_verification_gw1":"Durante este proceso de emparejamiento Wi-Fi, es posible que se le desconecte temporalmente de la red Wi-Fi del Gateway. {lb} Compruebe que vuelve a conectarse a la red correcta. Puede tardar hasta 3 minutos.","meter_container_verification_gw2":"El proceso de emparejamiento Wi-Fi puede tardar hasta 3 minutos.","meter_container_verify_meter_error":"Comprobando medidor","meter_container_verifying_status":"Comprobando medidor","meter_item_view_add_failed":"No se ha podido añadir el medidor","meter_item_view_add_failed_help":"Compruebe la identificación corta y el número de serie. Encienda y apague el medidor y conéctelo cuando suene el tono. Si el problema persiste, elimine el medidor y vuelva a intentarlo.","meter_item_view_advanced_settings":"CONFIGURACIÓN AVANZADA (OPCIONAL)","meter_item_view_battery_ct":"Batería","meter_item_view_battery_location":"Batería","meter_item_view_check_meter":"COMPROBAR CONEXIÓN DEL MEDIDOR {id}","meter_item_view_conductor_location":"Conductor","meter_item_view_cts":"{count} TC detectados","meter_item_view_doubled_solar_location":"Solar doble","meter_item_view_generator_location":"Generador","meter_item_view_ip_address":"DIRECCIÓN IP","meter_item_view_load_location":"Carga","meter_item_view_mac_address":"DIRECCIÓN MAC","meter_item_view_meter_location":"UBICACIÓN DEL MEDIDOR","meter_item_view_none_location":"Ninguna","meter_item_view_remote_ip_address_placeholder":"p. ej. 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"p. ej. 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"p. ej. OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"p. ej. 01234","meter_item_view_serial":"N.º DE SERIE","meter_item_view_short_id":"ID ABREVIADA","meter_item_view_site_ct":"Emplazamiento","meter_item_view_site_location":"Emplazamiento","meter_item_view_solar_ct":"Solar","meter_item_view_solar_location":"Solar","meter_item_view_solar_rgm_location":"Solo ingresos de energía solar","meter_item_view_success":"¡CONECTADO!","meter_item_view_unable":"NO HA SIDO POSIBLE LEER EL MEDIDOR","meter_item_view_upgrading":"EL MEDIDOR SE ESTÁ ACTUALIZANDO","meter_list_view_add":"AÑADIR MEDIDOR WI-FI","meter_list_view_add_ip":"AÑADIR MEDIDOR IP","meter_list_view_detect":"DETECTAR MEDIDORES CABLEADOS","meter_list_view_enable_inverter_readings":"Habilitar lecturas del inversor de batería","meter_list_view_inverter_meter":"MEDIDORES DE INVERSOR","meter_list_view_inverter_meter_desc":"Cuando está activado y no hay medidores de batería configurados, el controlador de la instalación utilizará las lecturas de los inversores de batería como medidor de batería.","meter_msa_id":"BACKUP SWITCH {id}","meter_sync_id":"SINCRONIZAR MEDIDOR {id}","meter_sync_x_id":"MEDIDOR PRIMARIO INTERNO X (GATEWAY) {id}","meter_sync_y_id":"MEDIDOR AUXILIAR INTERNO Y (GATEWAY) {id}","meter_update_modal_fetch_status_error":"Error: No se puede obtener el estado de actualización del medidor","meter_update_modal_footer":"La actualización del medidor puede tardar hasta 2 minutos","meter_update_modal_remaining_time":"Tiempo restante: {seconds} segundos","meter_update_modal_timeout_error":"Error: Tiempo de espera agotado mientras se actualizaba el medidor","meter_update_modal_title":"La actualización del medidor está en curso","meter_validation_container_error":"La validación del medidor no está disponible mientras el controlador del emplazamiento está ejecutándose.","meter_validation_container_error_placeholder":"Validación del medidor no disponible: {error}.","meter_validation_container_power_command":"Comando de potencia","meter_validation_container_power_start":"Iniciar","meter_validation_container_power_stop":"Detener","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Comando de potencia reactiva","meter_validation_container_real_power_command":"Comando de potencia real","meter_validation_container_show_per_phase":"Mostrar valores por fase","meter_validation_container_title":"Validación del medidor","meter_validation_container_usage":"Envíe un comando de potencia y valide los datos del medidor. Debe permanecer en esta página para mantener la continuidad del comando de potencia. Los valores negativos harán que el sistema cargue. Los valores positivos harán que el sistema descargue.","meter_validation_control_subtitle":"Control","meter_validation_control_title":"Título de control","meter_validation_disable":"Desactivar","meter_validation_loading":"Cargando","meter_validation_menu":"Menú","meter_validation_reset":"Restablecer","meter_validation_submit":"Enviar","meter_validation_submitting_control":"Enviando control","meter_validation_title":"Validación del medidor","meter_validation_view_apparent_power":"Potencia aparente (kVA)","meter_validation_view_battery_location":"Batería","meter_validation_view_conductor_location":"Conductor","meter_validation_view_current":"Corriente (A)","meter_validation_view_doubled_solar_location":"Solar doble","meter_validation_view_generator_location":"Generador","meter_validation_view_hz":"Hz","meter_validation_view_inverters":"Inversores ({length})","meter_validation_view_ka":"kA","meter_validation_view_kv":"kV","meter_validation_view_kvar":"kVAr","meter_validation_view_kw":"kW","meter_validation_view_kwh":"kWh","meter_validation_view_load_location":"Carga","meter_validation_view_meter":"Medidores ({length})","meter_validation_view_none_location":"Ninguna","meter_validation_view_pf":"Factor de potencia","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Promedio","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Total","meter_validation_view_reactive_power":"Potencia reactiva (kVAr)","meter_validation_view_real_power":"Potencia real (kW)","meter_validation_view_site_location":"Emplazamiento","meter_validation_view_solar_location":"Solar","meter_validation_view_solar_rgm_location":"Solo ingresos de energía solar","meter_validation_view_voltage":"Tensión (V)","meter_w1_wifi_id":"MEDIDOR {id}","meter_w1_wired_id":"MEDIDOR CABLEADO {id}","meter_w2_wifi_id":"MEDIDOR {id}","meter_w2_wired_id":"MEDIDOR CABLEADO {id}","meter_wifi_id":"Contador {id}","meter_wired_id":"MEDIDOR CABLEADO {id}","metrics_aggregate":"Sistema","metrics_apparent_power":"Potencia aparente ({unit})","metrics_battery":"Batería","metrics_current":"Corriente ({unit})","metrics_meter":"Medidor","metrics_no_metrics":"No hay métricas para mostrar.","metrics_power_factor":"Factor de potencia","metrics_reactive_power":"Potencia reactiva ({unit})","metrics_real_power":"Potencia real ({unit})","metrics_subtitle":"Métricas","metrics_voltage_l_n":"Tensión L-N ({unit})","modal_acknowledge":"CONFIRMAR","modal_confirm":"CONFIRMAR","modal_exit":"SALIR","modal_no":"NO","modal_note":"Nota","modal_ok":"Correcto","modal_reconfigure":"RECONFIGURAR","modal_yes":"SÍ","modbus_container_title":"Interfaz Modbus","modbus_table_register_address":"Dirección","modbus_table_register_name":"Nombre","modbus_table_register_type":"Tipo","modbus_table_register_value":"Valor","modbus_table_register_value_decimal":"Valor (decimal)","modbus_table_register_value_hex":"Valor (hex)","msa-off-grid":"Desconectado de la red eléctrica","msa-on-grid":"Conectado a la red eléctrica","navigation_email":"CORREO ELECTRÓNICO","network-switch-menu-item":"Conmutadores de red","network_cellular_configured":"Configurada, pero no conectada. Asegúrese de que haya red de telefonía móvil disponible y no haya obstrucciones alrededor de la antena.","network_connected":"Conectado","network_container_connect_ethernet":"Conectando a ethernet","network_container_connect_to_internet":"Espere hasta que el sistema intente conectarse a Internet.","network_container_connect_wifi":"Conectándose a {ssid}","network_container_connect_wifi_description":"Es posible que durante este proceso tenga que reconectarse a la red del Gateway para continuar la instalación.","network_container_connman":"El administrador de conexiones de red se conecta de manera dinámica a la red mejor.","network_container_connman_body":"Para garantizar la conexión, configure todos los tipos de conexión disponibles:","network_container_delete_network":"¿Borrar red configurada?","network_container_ethernet_and_wifi_warning":"Configure las redes Ethernet y Wi-Fi disponibles para garantizar la conexión.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configure las redes ethernet disponibles para garantizar la conectividad.","network_container_network_description":"Conéctese a Internet con todos los tipos de red disponibles.","network_container_network_subtitle":"Red","network_container_no_internet_bullet_four":"Powerwall puede enviar datos de rendimiento a Tesla para que la Asistencia técnica pueda identificar posibles problemas","network_container_no_internet_bullet_four_industrial":"Los dispositivos pueden enviar datos de rendimiento a Tesla para que la Asistencia técnica pueda identificar posibles problemas","network_container_no_internet_bullet_one":"La información de registro del Powerwall se envía a Tesla y se activa la garantía completa de 10 años","network_container_no_internet_bullet_three":"El cliente puede utilizar la aplicación móvil de Tesla para supervisar el uso de energía y controlar Powerwall","network_container_no_internet_bullet_two":"Powerwall puede recibir actualizaciones remotas de firmware, lo que permite mejoras de rendimiento y nuevas funciones","network_container_no_internet_bullet_two_industrial":"Los dispositivos pueden recibir actualizaciones remotas del firmware, lo que permite mejoras de rendimiento y nuevas funciones","network_container_no_internet_bullet_zero":"Antes de la puesta en marcha, se puede determinar si es necesario actualizar el firmware","network_container_no_internet_no_cell_title":"Si el emplazamiento de la instalación tiene una conexión a Internet disponible, no omita este paso. Conéctese al servicio de Internet del cliente a través de Ethernet (preferiblemente) o Wi-Fi.","network_container_no_internet_title":"Si el sitio de instalación tiene una conexión a Internet disponible, no omita este paso. Conecta Powerwall al servicio de Internet del cliente a través de Ethernet (preferido) o Wi-Fi, o establezca un enlace celular.","network_container_no_internet_warning":"Es importante establecer una conexión a internet fiable para:","network_container_scan_networks":"Escanear redes Wi-Fi","network_container_scan_wifi_disconnect_warning":"Advertencia: El escaneo de nuevas redes desconectará temporalmente la conexión inalámbrica.","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"Configure las redes Wi-Fi disponibles para garantizar la conectividad.","network_disabled":"Desactivado","network_disconnected":"No conectado","network_ethernet_configured":"Configurada, pero no conectada. Compruebe la conexión del cable Ethernet.","network_switches_container_discover_failure":"Último fallo de detección: {error}","network_switches_container_discover_switches":"Detectar conmutadores de red","network_switches_container_discovered_label":"Conmutadores de red detectados","network_switches_container_discovering_stop_button":"Detener detección","network_switches_container_discovery_switches_running_label":"Actualmente se está ejecutando la detección de conmutadores de red. Puede detener la detección a continuación.","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"Los conmutadores de red solo se admiten en sistemas industriales.","network_switches_container_password_not_set":"No se ha establecido contraseña","network_switches_container_password_set":"Se ha establecido contraseña","network_switches_container_passwords_error":"Estado de configuración de contraseña: {status}","network_switches_container_set_password_label":"Establezca una contraseña en los conmutadores de red que aún utilizan la contraseña predeterminada de fábrica.\\n A todas las contraseñas se asignará el mismo valor.","network_switches_container_set_passwords":"Establecer contraseñas","network_switches_container_set_passwords_button":"Establecer contraseña","network_switches_container_setting_passwords_button":"Configurando contraseña...","network_switches_container_start_discovering_button":"Iniciar detección","network_switches_container_start_discovery_help":"La detección de conmutadores de red se ejecuta de forma automática y periódica, pero puede activarse con el botón Iniciar búsqueda.","network_switches_container_subtitle":"Ver conmutadores de red","network_switches_container_title":"Conmutadores de red","network_view_check_connection":"COMPROBAR LA CONEXIÓN A INTERNET","network_view_connection_failed":"¡NO CONECTADO!","network_view_connection_success":"¡CONEXIÓN CORRECTA!","network_view_continue_no_internet":"CONTINUAR SIN INTERNET","network_view_default_error":"Error de conexión","network_view_local_network_connected":"Red local conectada","network_view_local_network_disconnected":"Error de red local","network_view_tesla_internet_connected":"Servicios de Tesla e Internet conectados","network_view_tesla_internet_disconnected":"Error de conexión de Servicios de Tesla e Internet","network_warning":"Advertencia","network_wifi_configured":"Configurada, pero no conectada. Compruebe su configuración Wi-Fi.","open_meter_validatiion_container_title":"Abrir validación del medidor","operation_mode_autonomous":"Modo autónomo","operation_mode_backup":"Carga de respaldo solamente","operation_mode_self_consumption":"Modo de autoconsumo","operation_mode_site_control":"Control del emplazamiento","overview_menu_control_title":"Control","overview_menu_diagnostics_title":"Diagnósticos","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Conectado","overview_menu_network_no_connection":"Sin conexión","overview_menu_registration_complete":"Completado","overview_menu_registration_incomplete":"Incompleto","overview_menu_registration_pending":"Conexión a internet pendiente","overview_menu_security_title":"Cambie o restablezca la contraseña","overview_menu_settings_title":"Configuración","overview_menu_summary_title":"Resumen","overview_menu_system_title":"Sistema","overview_menu_update_title":"Actualización de software","overview_menu_view_alerts_event":"Evento","overview_menu_view_alerts_events":"Eventos","overview_menu_view_inverter_title":"Prueba del inversor","overview_menu_view_network_title":"Red","overview_menu_view_registration_title":"Registro","overview_menu_view_test_title":"Prueba automática","overview_meter_validation_title":"Validación del medidor","password_generate_error":"Se ha producido un error al generar una nueva contraseña. Verifique la conectividad y la contraseña actual e inténtelo de nuevo.","password_generate_help_text":"Introduzca la contraseña existente para generar una nueva contraseña aleatoria.","password_generate_menu_title":"Cambiar contraseña","password_generate_notice":"Se ha cambiado la contraseña. Registre la nueva contraseña antes de salir de esta página.","phase_container_detect_timeout":"Tiempo agotado al detectar fase","phase_container_detection_attempt":"Intento n.º {num}","phase_container_grid_code_validating_modal_title":"Validando código de red","phase_container_grid_compliant_description":"Red conforme {checkmark}","phase_container_grid_modal_description":"La red será conforme en {time} segundos.","phase_container_grid_modal_title":"Esperando a la conformidad de la red","phase_container_modal_description":"La detección de fase puede tardar hasta 2 minutos por Powerwall.","phase_container_modal_title":"Realizando detección de fase","phase_container_saving_phases_modal_title":"Guardando fases","phase_container_subtitle":"Ver qué línea está activada en cada Powerwall y actualizar el estado de línea","phase_container_supported_error":"No se ha detectado ninguna Powerwall. No es posible la detección de fases.","phase_container_title":"Fase","phase_container_voltage_caution_body":"Tensión inesperada de {voltage} V detectada en {lineNumber}. Vuelva a comprobar si {lineStatus} es la configuración adecuada para esta fase.","phase_container_warning_body":"No se han seleccionado fases de respaldo. Por consiguiente, el sistema no admitirá ninguna carga cuando se pierda la conexión a la red.","phase_container_warning_modal_header":"La unidad de respaldo está desactivada","phase_line_id":"Línea {id}","phase_line_item_view_line":"Línea","phase_line_item_view_line_status_backup":"De respaldo","phase_line_item_view_line_status_configured":"Sin respaldo","phase_line_item_view_line_status_not_configured":"No configurado","phase_line_status_backup":"De respaldo","phase_line_status_configured":"Sin respaldo","phase_line_status_not_configured":"No configurada","phase_view_detect":"DETECTAR FASES","phase_view_split_phase":"Fase dividida","power_flow_view_go_off_grid":"DESCONECTARSE DE LA RED","power_flow_view_go_on_grid":"CONECTARSE A LA RED","power_flow_view_grid_button_disabled_reason":"Para desconectarse de la red, debe encenderse el sistema.","power_flow_view_grid_spinner_alt_label":"Sistema en transición","power_flow_view_start_system":"INICIAR SISTEMA","power_flow_view_stop_system":"DETENER SISTEMA","powerwall_container_industrial_no_additional_title":"No se encuentran bloques de baterías adicionales","powerwall_container_industrial_subtitle":"Se enumeran los bloques de baterías detectados automáticamente por el controlador del emplazamiento. Escanee de nuevo si el bloque de baterías no aparece en la lista.","powerwall_container_industrial_subtitle_auto_detection":"Se enumeran todos los bloques de baterías detectados automáticamente por el controlador del emplazamiento. Si un bloque de baterías no aparece en la lista, compruebe el equipo de red (incluyendo el cableado) y asegúrese de que los controladores del bus están encendidos.","powerwall_container_industrial_title":"Bloque de baterías","powerwall_container_industrial_updating":"Verificando bloques de baterías","powerwall_container_no_additional_powerwalls_description":"Consulte el Manual de instalación del Powerwall para obtener consejos sobre cómo resolver posibles problemas de cableado.","powerwall_container_no_additional_powerwalls_title":"No se ha encontrado ningún otro Powerwall","powerwall_container_scan_again":"ESCANEAR DE NUEVO","powerwall_container_scanning":"Escaneando","powerwall_container_scanning_for_more":"Buscando más","powerwall_container_subtitle":"En la lista aparecen todos los Powerwall detectados automáticamente por el Gateway. Escanee de nuevo si un Powerwall no está en la lista.","powerwall_container_subtitle_component_auto_detection":"Se enumeran todos los componentes detectados automáticamente por el Gateway. Si un componente no está en la lista, compruebe el cableado.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Verificando Powerwalls","powerwall_container_updating_note":"Nota: Puede tardar hasta 60 segundos por Powerwall.","powerwall_item_view_blank_numbers":"Esperando verificación...","powerwall_item_view_numbers":"Número de pieza: {partNumber} Número de serie: {serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"Cancelar","powerwall_pairing_connect":"Conectar","powerwall_pairing_done":"Listo","powerwall_pairing_error_already_paired":"Error de emparejamiento: el dispositivo ya está emparejado","powerwall_pairing_error_bad_pairing_response":"Error de emparejamiento: el dispositivo se ha negado a emparejarse. Asegúrese de que se haya detenido el seguidor","powerwall_pairing_error_bad_qr_code":"No es un código QR de Wi-Fi","powerwall_pairing_error_changes_prohibited":"Error de emparejamiento: Prohibido","powerwall_pairing_error_internal":"Error de emparejamiento: error interno","powerwall_pairing_error_no_qr_code":"No se ha encontrado ningún código QR","powerwall_pairing_error_no_response":"Error de emparejamiento: el dispositivo no ha respondido.","powerwall_pairing_error_not_leader":"Error de emparejamiento: este es un dispositivo seguidor. Reconectarse al dispositivo líder.","powerwall_pairing_error_prohibited_uncommissioned":"Fallo de emparejamiento: este Powerwall aún no se ha puesto en servicio","powerwall_pairing_error_too_many_devices":"Error de emparejamiento: ya está emparejado el número máximo de dispositivos","powerwall_pairing_error_unknown":"Error de emparejamiento: Error desconocido","powerwall_pairing_error_wifi_connection_failed":"Error de emparejamiento: No ha sido posible conectarse a Wi-Fi. Compruebe la contraseña.","powerwall_pairing_error_wifi_not_found":"Error de emparejamiento: No se encuentra la red Wi-Fi","powerwall_pairing_exception":"Error de emparejamiento: Excepción","powerwall_pairing_instructions_2":"Introduzca o escanee el SSID y la contraseña de la red Wi-Fi para el Powerwall que se va a emparejar. Busque un código QR en el dispositivo.","powerwall_pairing_password_label":"Contraseña:","powerwall_pairing_scan_qr_code":"Escanear código QR","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"Emparejamiento completado. Durante un minuto (o más tiempo si hay una actualización en curso) es posible que el nuevo dispositivo no empiece a responder. Para descartar, haga clic en Listo.","powerwall_pairing_state_monitoring":"Emparejamiento de un nuevo dispositivo. Puede tardar hasta un minuto.","powerwall_starting":"Iniciando Powerwall","powerwall_view_detected_backup":"Se ha detectado capacidad de reserva","powerwall_view_detected_synchrometers":"Capacidad de medidor detectada","powerwall_view_failed":"FALLÓ","powerwall_view_no_backup":"No se ha detectado ninguna capacidad de respaldo","powerwall_view_no_sync":"No se ha detectado ningún sincronizador","powerwall_view_scan":"ESCANEAR","powerwall_view_success":"ACTUALIZADO","powerwall_view_synchrometer_detected":"Sincromedidores detectados","powerwall_view_synchronizer_detected":"Sincronizador detectado","powerwall_view_update":"VERIFICAR POWERWALLS","privacy_policy_view_accept_warranty_title":"Aceptar garantía limitada de Powerwall de Tesla","privacy_policy_view_contact_bullet_one":"a través del correo electrónico a la dirección {privacyEmail};","privacy_policy_view_contact_bullet_two":"Por correo postal a Tesla, Inc., Dirigido a: Legal, 45500 Fremont Boulevard, Fremont, California 94538, Estados Unidos.","privacy_policy_view_contact_header":"Cómo ponerse en contacto con nosotros","privacy_policy_view_contact_paragraph_one":"Si tiene alguna pregunta o comentario, o para excluirse de ciertos servicios, póngase en contacto con nosotros:","privacy_policy_view_contact_paragraph_three":"Si se encuentra en el AEE o en Suiza, su filial de Tesla local puede ser la entidad responsable de procesar su información personal.","privacy_policy_view_contact_paragraph_two":"Tenga en cuenta que la comunicación por correo electrónico no siempre es segura, así que no incluya información de su tarjeta de crédito ni información confidencial en los mensajes de correo electrónico que nos envíe.","privacy_policy_view_cross_border_transfers_header":"Transferencias interfronterizas","privacy_policy_view_cross_border_transfers_paragraph_one":"Los Servicios se controlan y gestionan desde Estados Unidos. La información procedente de o acerca de usted o de su uso de nuestros productos o los Servicios podría almacenarse y procesarse en cualquier país en los que dispongamos de instalaciones o en el que trabajemos con proveedores de servicios. Estos países podrían no tener las mismas leyes de protección de datos que el país en el que inicialmente nos proporcionó esa información. Cuando transfiramos información procedente de o acerca de usted o de su uso de nuestros productos o los Servicios a otros países, la protegeremos tal y como se describe en la presente Política de privacidad. Al usar nuestros productos, los Servicios, o proporcionarnos información de algún otro modo, nos estará autorizando a transferir la información procedente de o acerca de usted o de su uso de nuestros productos o los Servicios a países fuera de su país de residencia, incluyendo los Estados Unidos.","privacy_policy_view_cross_border_transfers_paragraph_two":"Si se encuentra en el AEE o en Suiza, cumplimos los requisitos legales aplicables protegiendo adecuadamente la transferencia de información personal a países fuera del AEE o Suiza. Tesla ha certificado su unión al Marco del Escudo de Privacidad entre la UE y los EE. UU tal y como lo han redactado el Departamento de Comercio estadounidense y la Comisión Europea con respecto al procesamiento de cierta información personal transferida del AEE a Tesla y a sus subsidiarias de propiedad absoluta en EE. UU. {privacyShield} de Tesla está disponible aquí.","privacy_policy_view_devices":"Procedente de o acerca de usted o sus dispositivos","privacy_policy_view_energy_products":"Información de o acerca de sus productos de energía Tesla","privacy_policy_view_eu_policy_warning":"Debe aceptar la Política de privacidad para registrar su Powerwall y controlarlo desde la aplicación móvil de Tesla.","privacy_policy_view_eu_warranty_warning":"Si no acepta la Política de privacidad del cliente de Tesla, puede que no podamos proporcionarle la garantía completa de diez años. Tesla ofrecerá la garantía durante al menos cuatro años tras la fecha en que se instaló su Powerwall por primera vez, lo cual está sujeto a las exclusiones y limitaciones descritas en la garantía {warrantyLink}.","privacy_policy_view_grid_services":"Su Powerwall puede respaldar la fiabilidad de la red eléctrica prestando servicios en programas opcionales ofrecidos por las compañías eléctricas o por terceros. Estos servicios suelen implicar una descarga parcial de su Powerwall en momentos determinados a cambio de algún beneficio económico para usted, y requieren que compartamos sus datos de uso de electricidad e información de su Powerwall con empresas eléctricas o terceros. Antes de incluirle en alguno de estos programas, le ofreceremos detalles del programa y le daremos la opción de renunciar a él. Si no renuncia en ese momento, se le incluirá en el programa.","privacy_policy_view_grid_services_title":"Servicios de red eléctrica","privacy_policy_view_grid_warning":"No tiene por qué aceptar. Si no da su consentimiento, todavía podemos darle la oportunidad de inscribirse en estos programas más adelante.","privacy_policy_view_here":"aquí","privacy_policy_view_homeowner_na":"PROPIETARIO DE LA VIVIENDA NO DISPONIBLE","privacy_policy_view_homeowner_required":"Debe rellenarla el propietario de la vivienda","privacy_policy_view_information_collection_devices_bullet_five":"A través de su navegador o dispositivo móvil: La mayoría de navegadores o dispositivos móviles recopilan algunos datos automáticamente, como la dirección Media Access Control (MAC), el tipo de computadora (Windows o Macintosh), la resolución de la pantalla, el nombre y la versión del sistema operativo, el fabricante y el modelo del dispositivo, el idioma, el tipo y la versión del navegador de Internet, y el nombre y la versión de los Servicios (como la aplicación de Tesla) que está usando. Usamos esta información para asegurarnos de que los Servicios funcionan correctamente.","privacy_policy_view_information_collection_devices_bullet_four":"Sin conexión: Podemos recopilar información procedente de o acerca de usted sin conexión, p. ej. si visita una tienda o una instalación de reparación Tesla, asiste a uno de nuestros eventos, se registra para una prueba de conducción, realiza un pedido por teléfono o se pone en contacto con nuestro servicio al cliente o departamento de ventas.","privacy_policy_view_information_collection_devices_bullet_one":"A través de los servicios: Podemos recopilar información sobre usted a través de nuestros sitios web, aplicaciones de software, páginas de redes sociales, correos electrónicos u otros servicios digitales (los “Servicios”), por ejemplo, cuando usted se suscribe a un boletín de noticias, realice alguna compra o registre su producto en Tesla.","privacy_policy_view_information_collection_devices_bullet_three":"Mi Tesla: Los clientes que adquieren ciertos productos de Tesla reciben una cuenta de Mi Tesla, disponible en nuestra página web. Dependiendo de la información que usted desee facilitarnos, existirá la posibilidad de que recopilemos y tratemos los siguientes tipos de datos de su cuenta My Tesla: la información de su registro como cliente, el estado de su pedido, la garantía y otro tipo de documentación de sus productos Tesla (incluyendo, por ejemplo, el número de identificación del vehículo u otros números de serie del producto, información sobre el plan de servicio o paquete de conectividad), la documentación del seguro, permiso de conducción, contratos de financiación e información similar. Puede acceder a su cuenta de Mi Tesla para actualizar su información en la cuenta en cualquier momento.","privacy_policy_view_information_collection_devices_bullet_two":"De otras fuentes: También podemos recibir información acerca de usted de otras fuentes, como bases de datos públicas, socios de marketing conjuntos, instaladores certificados, centros de servicio o de reparación de vehículos de terceros, y plataformas de redes sociales.","privacy_policy_view_information_collection_energy_products_bullet_one":"Podemos recopilar información acerca de su producto, como su fecha de instalación, el número de productos instalados y el número o números de serie.","privacy_policy_view_information_collection_energy_products_bullet_two":"Con el fin de proporcionar y mejorar nuestros productos y servicios de energía, podemos recopilar datos con respecto a dónde está instalado el producto y cómo está configurado, los datos relacionados con el uso y el rendimiento del producto, los datos relativos a su consumo total de energía en el hogar, así como otros datos necesarios para diagnosticar problemas.","privacy_policy_view_information_collection_header":"Información que podríamos recopilar","privacy_policy_view_information_collection_paragraph_five":"Si ya no desea que recopilemos datos de rendimiento o cualquier otro dato de su producto de energía Tesla, por favor póngase en contacto con nosotros como se indica en la sección “Cómo ponerse en contacto con nosotros” que se incluye a continuación. Tenga en cuenta que si decide excluirse de la recopilación de datos de rendimiento de su producto eléctrico Tesla, no podremos notificarle acerca de problemas aplicables a su producto eléctrico en tiempo real, lo cual podría provocar que su producto eléctrico sufra funcionalidad reducida, daños graves o inutilización, y también pueden anularse muchas características de su producto eléctrico, incluidas las actualizaciones periódicas de software y firmware.","privacy_policy_view_information_collection_paragraph_four":"Podemos recopilar información de o relacionada con usted (tales como su nombre, dirección, número telefónico, correo electrónico, información de pago, etc.) o de sus dispositivos, de varias maneras, incluyendo:","privacy_policy_view_information_collection_paragraph_one":"Recopilamos tres tipos principales de información acerca de usted y su uso de nuestros productos y servicios: (1) Información procedente de o acerca de usted o sus dispositivos; (2) información procedente de o acerca de su vehículo Tesla; e (3) información procedente de o acerca de sus productos eléctricos de Tesla. Dependiendo de los productos y servicios de Tesla que solicite, haya adquirido o use, puede que no todos estos tipos de información sean aplicables a su caso.","privacy_policy_view_information_collection_paragraph_three":"Cuando visite nuestra página web o use nuestros servicios de algún otro modo, podríamos usar cookies, etiquetas de píxeles, herramientas de análisis y otras tecnologías similares para ayudar a prestar y mejorar nuestros Servicios, tal y como se indica a continuación:","privacy_policy_view_information_collection_paragraph_two":"Podemos recopilar información procedente de o acerca de usted (como su nombre, dirección, número de teléfono, dirección de correo electrónico, información de pago, etc.) o sus dispositivos de varios modos, incluyendo:","privacy_policy_view_information_collection_services_bullet_five":"Puede informarse acerca de cómo procede Google para recopilar esta información y cómo puede hacer para excluirse descargando para su navegador el complemento para no ser incluido en Google Analytics, disponible en {website}.","privacy_policy_view_information_collection_services_bullet_four":"Herramientas de análisis: Utilizamos servicios de análisis de páginas web y de aplicaciones prestados por terceros que emplean cookies y otras tecnologías similares para recopilar información acerca del uso de nuestra página web o aplicación, y para crear informes de tendencias, todo ello sin identificar a cada visitante. Los proveedores terceros que nos prestan estos servicios también podrían recopilar información acerca de su uso de páginas web de terceros.","privacy_policy_view_information_collection_services_bullet_one":"Cookies: Las cookies son piezas de información almacenadas directamente en el ordenador que utiliza. Las cookies nos permiten recopilar información como el tipo de navegador, el tiempo invertido en los Servicios, las páginas visitadas, las preferencias de idioma y los datos de tráfico web. Tanto nosotros como nuestros proveedores de servicios utilizamos la información con fines de seguridad, para facilitar la navegación en línea, para mostrar información de un modo más eficaz, para personalizar su experiencia durante el uso de los Servicios y para analizar de otro modo la actividad del usuario. Podemos reconocer su computadora para ayudarle a utilizar los Servicios. También recopilamos información estadística acerca del uso de los Servicios para mejorar continuamente su diseño y funcionalidad, para entender cómo se usan los Servicios y para ayudarnos a resolver problemas con los propios Servicios. Las cookies nos permiten seleccionar cuáles de nuestros anuncios u ofertas podrían atraerle más para después mostrárselos. También podemos usar cookies en publicidad en línea para ver cómo interactúa con nuestros anuncios, y podríamos utilizar cookies u otros archivos para entender cómo usa otras páginas web.","privacy_policy_view_information_collection_services_bullet_three":"Etiquetas de píxeles y otras tecnologías similares: Uso de pixel tags y otras tecnologías similares: Las pixel tags (también conocidas como web beacons (balizas web) y clear GIFs) pueden utilizarse en relación con algunos Servicios, para realizar, entre otras cosas, un seguimiento de las acciones de los usuarios de los Servicios (incluidos los receptores de correo electrónico), medir el éxito de nuestras campañas de publicidad y recopilar estadísticas sobre el uso de los Servicios y las tasas de respuesta.","privacy_policy_view_information_collection_services_bullet_two":"Si no desea que se recopile información mediante el uso de cookies al utilizar su cuenta Mi Tesla o nuestra página web, la mayoría de los navegadores permiten rechazar automáticamente las cookies con facilidad o le dan la opción de rechazar o aceptar la transferencia a su ordenador de una cookie (o cookies) en particular de una página determinada. Quizá también desee consultar {website}. No obstante, si no acepta estas cookies, puede sufrir ciertos inconvenientes al usar los Servicios. Por ejemplo, quizá no podamos reconocer su computadora, y tendrá que iniciar sesión cada vez que visite los Servicios aplicables.","privacy_policy_view_information_rights_choices_agree_eu":"Debe aceptar la Política de privacidad para registrar su Powerwall y controlarlo desde la aplicación móvil de Tesla.","privacy_policy_view_information_rights_choices_agree_one":"Debe aceptar la Política de privacidad para registrar su Powerwall y controlarlo desde la aplicación móvil de Tesla. No es necesario que tome ninguna otra medida si no desea acceder a la información de su Powerwall a través de la aplicación móvil de Tesla.","privacy_policy_view_information_rights_choices_bullet_one":"Puede acceder a su cuenta de Mi Tesla para actualizar su información en la cuenta en cualquier momento.","privacy_policy_view_information_rights_choices_bullet_two":"Si desea revisar, corregir, actualizar, suprimir o borrar información procedente de o acerca de usted que usted mismo nos haya facilitado previamente, puede ponerse en contacto con nosotros en las direcciones indicadas a continuación.","privacy_policy_view_information_rights_choices_header":"Derechos y opciones","privacy_policy_view_information_rights_choices_paragraph_four":"Tenga en cuenta que podríamos retener cierta información para nuestros archivos o para cumplir requisitos legales o completar alguna transacción que haya iniciado antes de solicitar dicho cambio o borrado (p. ej. cuando efectúa una compra o participa en una promoción podría no poder cambiar o borrar la información indicada hasta haber finalizado esa compra o promoción). También podría quedar información residual que permanecería en nuestras bases de datos y otros registros, y que no se eliminará.","privacy_policy_view_information_rights_choices_paragraph_one":"Como ha quedado detallado en las secciones anteriores, le damos muchas opciones respecto a la recolección, tratamiento y cesión por nuestra parte de la información sobre Usted o sobre el uso de los productos o los Servicios. Sujeto a las disposiciones legales aplicables en su jurisdicción, Usted también podrá tener derecho a solicitar acceso a la información personal que conservamos sobre Usted y a recibir información sobre la misma, actualizarla y rectificar cualquier error que pudiere haber en la misma, así como bloquearla o eliminarla según corresponda. En algunas circunstancias, estos derechos podrían estar limitados por la legislación local. Le proporcionamos varios métodos para acceder, corregir, actualizar o solicitar el bloqueo o la eliminación de su información personal, incluyendo:","privacy_policy_view_information_rights_choices_paragraph_three":"Nosotros cumpliremos con su solicitud o solicitudes para el ejercicio de estos derechos tan pronto como sea razonablemente posible.","privacy_policy_view_information_rights_choices_paragraph_two":"En su solicitud, explique claramente qué información desea que cambiemos, si desea que suprimamos de nuestra base de datos la información que nos ha facilitado o las limitaciones que desea imponer en nuestro uso de dicha información. Para su protección, puede que solo atendamos a las solicitudes con respecto a la información asociada a la dirección de correo electrónico particular que use para enviarnos dicha solicitud, y tendríamos que verificar su identidad antes de implementar la solicitud.","privacy_policy_view_information_share_header":"Cómo podríamos compartir la información que recopilamos","privacy_policy_view_information_share_paragraph_eight":"En otras circunstancias","privacy_policy_view_information_share_paragraph_eleven":"Si usted decide excluirse de algún tratamiento de información que previamente usted hubiere consentido expresamente, podrá hacerlo poniéndose en contacto con nosotros, como se indica en la sección “Cómo ponerse en contacto con nosotros” incluida más adelante.","privacy_policy_view_information_share_paragraph_five":"Podemos compartir información con otros terceros que usted autorice, por ejemplo en los casos siguientes:","privacy_policy_view_information_share_paragraph_five_point_four":"Con su proveedor de cuentas de redes sociales, si conecta su cuenta de Servicios y su cuenta de redes sociales. En tal caso, usted nos autoriza a compartir información con el proveedor de su cuenta de redes sociales y entiende que el uso de la información que compartamos se regirá por la política de privacidad del proveedor de su cuenta de redes sociales.","privacy_policy_view_information_share_paragraph_five_point_one":"Con nuestros instaladores certificados, para facilitar el suministro de productos eléctricos que usted haya solicitado.","privacy_policy_view_information_share_paragraph_five_point_three":"Con promotores terceros para concursos y promociones similares, si desea participar.","privacy_policy_view_information_share_paragraph_five_point_two":"Con proveedores o centros de servicio terceros, si escoge trabajar con ellos. Tenga en cuenta que en ciertos productos Tesla se habrá almacenado cierta información acerca de usted, y podría estar accesible directamente para los proveedores o centros de servicio terceros con los que desee trabajar para diagnosticar o realizar el servicio a su producto Tesla.","privacy_policy_view_information_share_paragraph_four":"Con otros terceros autorizados por Usted","privacy_policy_view_information_share_paragraph_nine":"Podemos compartir información en otras circunstancias, como por ejemplo:","privacy_policy_view_information_share_paragraph_nine_point_one":"Con su superior o con otro operador de flota o el propietario del producto Tesla, si usted no es directamente el propietario y conforme a lo autorizado en la legislación aplicable.","privacy_policy_view_information_share_paragraph_nine_point_two":"Con un tercero en relación con cualquier reorganización, fusión, venta, empresa conjunta, cesión, transferencia u otra disposición de toda la empresa o una parte de ella, sus activos o sus acciones (incluyendo en relación con una bancarrota o procedimiento similar).","privacy_policy_view_information_share_paragraph_one":"Podemos compartir la información que recopilamos con nuestros proveedores de servicios y socios empresariales, con otras terceras partes que usted autorice, con terceras partes cuando la ley lo exija, y en otras circunstancias. A continuación encontrará algunos ejemplos de cómo compartimos información con estas partes y en qué circunstancias.","privacy_policy_view_information_share_paragraph_seven":"Tesla puede entregar y revelar información, incluida información que pudiese o no identificarle personalmente, a terceros para cumplir una obligación legal (incluyendo, pero sin limitarse a citaciones); cuando creemos de buena fe que la ley lo requiere; en respuesta a una solicitud legal por parte de autoridades gubernamentales que estén llevado a cabo una investigación, incluyendo el cumplimiento de requisitos de imposición legal; para comprobar u obligar el cumplimiento de nuestras políticas y procedimientos; para responder a una emergencia; para evitar o detener actividades que consideremos que son o están en riesgo de ser ilegales, no éticas o enjuiciables; o para proteger los derechos, propiedad o seguridad de los Servicios, de Tesla, de terceros, de visitantes de nuestros Servicios, o del público, lo cual determinaremos a nuestra discreción.","privacy_policy_view_information_share_paragraph_six":"Con otros terceros cuando la ley lo requiera","privacy_policy_view_information_share_paragraph_ten":"No compartimos información que le identifique personalmente con terceros no afiliados para sus actividades de marketing a menos que usted autorice que se comparta dicha información.","privacy_policy_view_information_share_paragraph_three":"Podremos compartir información con nuestros proveedores de servicios y partners comerciales cuando fuere necesario para prestar servicios por nuestra cuenta o por cuenta de Usted, por ejemplo, en los siguientes casos:","privacy_policy_view_information_share_paragraph_three_point_one":"Con afiliados de Tesla para los fines descritos en la presente Política de privacidad. Los afiliados de Tesla son empresas propiedad de o controladas por Tesla, Inc. y empresas en las que Tesla, Inc. tiene un interés de propiedad sustancial.","privacy_policy_view_information_share_paragraph_three_point_three":"Con otros socios empresariales terceros en la medida en que estén implicados en su compra o en el servicio a sus productos Tesla. Compartimos información limitada procedente de o acerca de usted para que pueda disfrutar de estos servicios si desea utilizarlos, con socios dedicados a servicios financieros, arrendamiento, registro y empresas de título.","privacy_policy_view_information_share_paragraph_three_point_two":"Con nuestros proveedores de servicios y socios de canal terceros, para prestar servicios como alojamiento web, análisis y almacenamiento de datos, procesamiento de pagos, ejecución de pedidos e instalación de productos, conectividad inalámbrica a productos Tesla, tecnología informática y la correspondiente infraestructura, servicio al cliente, mantenimiento del producto o servicios relacionados, entrega de correos electrónicos, procesamiento de tarjetas de crédito, auditoría, marketing, procesamiento de comandos por voz y otros servicios similares.","privacy_policy_view_information_share_paragraph_two":"Con nuestros proveedores de servicios y socios empresariales","privacy_policy_view_information_use_commuicate":"Para comunicarnos con usted","privacy_policy_view_information_use_header":"Cómo podríamos utilizar la información que recopilamos","privacy_policy_view_information_use_other_purposes":"Para otras finalidades","privacy_policy_view_information_use_paragraph_five":"También podemos utilizar la información que recopilamos con otros fines, por ejemplo:","privacy_policy_view_information_use_paragraph_five_point_one":"Para nuestros fines empresariales, como: análisis de datos, auditorías, control y prevención del fraude, identificación de tendencias de uso, análisis de la efectividad de nuestras campañas promocionales y ejecución y expansión de nuestras actividades empresariales.","privacy_policy_view_information_use_paragraph_five_point_two":"Excepto según lo descrito en los párrafos anteriores y siguientes, Tesla puede utilizar o compartir información que no le identifique personalmente con cualquier fin, como para fines operativos o de investigación, para el análisis del sector, para mejorar o modificar nuestros productos y servicios, para adaptar mejor nuestros productos y servicios a sus necesidades, y cuando sea legalmente necesario.","privacy_policy_view_information_use_paragraph_four":"Podremos utilizar la información que recabemos para proporcionar y mejorar nuestros productos y servicios, por ejemplo:","privacy_policy_view_information_use_paragraph_four_point_five":"Para analizar y mejorar la protección y seguridad de nuestros productos y servicios.","privacy_policy_view_information_use_paragraph_four_point_four":"Para desarrollar y promover nuevos productos y servicios, y para mejorar o modificar sus productos y servicios existentes.","privacy_policy_view_information_use_paragraph_four_point_one":"Para completar y finalizar su compra, por ejemplo, para procesar sus pagos, hacer que le entreguen el pedido, ponernos en contacto con Usted con respecto a su compra y proporcionarle servicios relacionados al cliente.","privacy_policy_view_information_use_paragraph_four_point_six":"Para proporcionar otros servicios que Usted solicite.","privacy_policy_view_information_use_paragraph_four_point_three":"Para supervisar el rendimiento de su producto Tesla y proporcionarle servicios relacionados con su producto.","privacy_policy_view_information_use_paragraph_four_point_two":"Para proporcionarle el servicio a su producto Tesla, por ejemplo, para ponernos en contacto con Usted para hacerle recomendaciones sobre el servicio técnico y proporcionarle actualizaciones inalámbricas para su producto.","privacy_policy_view_information_use_paragraph_one":"Podemos utilizar la información que recopilamos para comunicarnos con usted, para prestar y mejorar nuestros servicios y productos, y para otros fines. A continuación encontrará algunos ejemplos de cómo utilizamos la información con estos objetivos.","privacy_policy_view_information_use_paragraph_three":"Sus opciones de comunicación :","privacy_policy_view_information_use_paragraph_three_point_one":"Recibir comunicaciones electrónicas de Tesla o de parte de nuestras filiales: Si ya no desea recibir correos electrónicos publicitarios de la empresa matriz de Tesla o de parte de sus filiales, puede inhabilitar esta función siguiendo las instrucciones correspondientes que aparecen en cualquier correo nuestro, o poniéndose en contacto con nosotros en la dirección que aparece abajo. Tenga en cuenta que existe la posibilidad de que sigamos enviándole mensajes importantes sobre temas de administración o seguridad, incluso si inhabilita la opción de recibir correos electrónicos publicitarios.","privacy_policy_view_information_use_paragraph_three_point_two":"Recibir llamadas de marketing nuestras: Si recibe llamadas publicitarias nuestras y no desea volver a recibirlas, simplemente tiene que solicitarnos que lo inscribamos en nuestra lista de clientes a los que no debemos llamar. Tenga en cuenta que de todos modos podríamos llamarle en caso de incidencias administrativas, de seguridad o de servicio del producto, aunque se haya decidido no recibir llamadas de marketing.","privacy_policy_view_information_use_paragraph_two":"Podemos utilizar información que recabemos para comunicarnos con usted, por ejemplo:","privacy_policy_view_information_use_paragraph_two_point_five":"Para presentarle productos y ofertas adaptados a sus necesidades y para mejorar nuestras bases de datos con información de otras fuentes.","privacy_policy_view_information_use_paragraph_two_point_four":"Para enviarle información administrativa, por ejemplo información acerca de los Servicios y cambios en nuestros términos, condiciones y políticas.","privacy_policy_view_information_use_paragraph_two_point_one":"Para responder a sus consultas y atender a sus solicitudes, por ejemplo enviarle boletines o información acerca del producto, alertas informativas o folletos.","privacy_policy_view_information_use_paragraph_two_point_seven":"Para facilitar la interacción social y la funcionalidad de las comunicaciones.","privacy_policy_view_information_use_paragraph_two_point_six":"Para permitirle que participe en concursos y promociones similares, así como para administrar estas actividades.","privacy_policy_view_information_use_paragraph_two_point_three":"Para proporcionarle información de seguridad importante o notificar a las personas de contacto en caso de un accidente de su vehículo.","privacy_policy_view_information_use_paragraph_two_point_two":"Para configurar, evaluar e informarle acerca de su prueba de conducción de Tesla.","privacy_policy_view_information_use_provide":"Proporcionar y mejorar nuestros productos y servicios.","privacy_policy_view_links_header":"Enlaces","privacy_policy_view_links_paragraph_one":"La presente Política de privacidad no aborda, y nosotros no seremos responsables de, la privacidad, información u otras prácticas de terceros, incluyendo cualquier tercero que trabaje en cualquier emplazamiento o servicio vinculado a los Servicios. La inclusión de un enlace a los Servicios no implica el apoyo a la página web o servicio enlazado por nosotros o nuestros afiliados, ni implica una afiliación con el tercero.","privacy_policy_view_links_paragraph_two":"Tenga en cuenta que no somos responsables de las políticas y prácticas de recopilación, uso o divulgación (incluyendo las prácticas de seguridad respecto a los datos) de otras organizaciones, como cualquier otro desarrollador de aplicaciones, proveedor de aplicaciones, proveedor de plataformas de redes sociales, proveedor de sistemas operativos o proveedor de servicios inalámbricos, incluyendo cualquier información que revele a otras organizaciones a través de o en relación con nuestras aplicaciones de software o páginas en redes sociales.","privacy_policy_view_minors_header":"Menores","privacy_policy_view_minors_paragraph":"Los Servicios no están dirigidos a personas menores de dieciséis (16) años, y solicitamos a estos menores que no proporcionen información a Tesla.","privacy_policy_view_offers_eu":"Sí, deseo recibir comunicaciones de marketing por correo electrónico, incluidas encuestas, promociones y ofertas de Tesla y sus afiliados sobre productos y servicios de Tesla. Tiene derecho a retirar su consentimiento en cualquier momento. Más información {legalLink}.","privacy_policy_view_offers_title":"Anuncios de productos y nuevas ofertas","privacy_policy_view_offers_usa":"Acepto que se pongan en contacto conmigo en el número indicado con más información u ofertas acerca de productos Tesla. Entiendo que estas llamadas o mensajes de texto pueden utilizar marcación asistida por ordenador o mensajes pregrabados. Este consentimiento no es una condición para la compra.","privacy_policy_view_powerwall_warranty":"Garantía limitada del Powerwall de Tesla","privacy_policy_view_privacy_policy":"Notificación acerca de la privacidad","privacy_policy_view_privacy_policy_agreement_eu":"Yo, el propietario de la vivienda, he leído íntegramente la Política de privacidad del cliente de Tesla y doy mi consentimiento a Tesla para que procese mis datos personales tal y como se describe en la Política de privacidad del cliente de Tesla. Tendrá derecho a retirar el consentimiento en cualquier momento, tal y como se describe en la Política de privacidad del cliente de Tesla.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Yo, el propietario de la vivienda, he leído íntegramente la Política de privacidad del cliente de Tesla y doy mi consentimiento a Tesla para que procese mis datos personales tal y como se describe en la Política de privacidad del cliente de Tesla.","privacy_policy_view_privacy_shield":"Política de Escudo de privacidad","privacy_policy_view_retention_period_header":"Período de retención","privacy_policy_view_retention_period_paragraph":"Retendremos la información que recopilemos procedente de o acerca de nuestros clientes, nuestros productos y los Servicios durante el período necesario para cumplir los objetivos descritos en la presente Política de privacidad, a menos que la ley requiera o permita un período de retención mayor.","privacy_policy_view_security_header":"Seguridad","privacy_policy_view_security_paragraph_one":"Tratamos de imponer medidas organizativas, técnicas y administrativas razonables para proteger la información dentro de nuestra organización. Desafortunadamente, no existe ningún sistema de almacenamiento ni de transmisión de datos que pueda considerarse 100 % seguro. Si tiene algún motivo para pensar que su interacción con nosotros ya no es segura (por ejemplo, si le parece que la seguridad de cualquiera de sus cuentas en Tesla se ha puesto en riesgo), infórmenos inmediatamente del problema poniéndose en contacto con nosotros según se especifica en la sección “Cómo ponerse en contacto con nosotros” que aparece más adelante.","privacy_policy_view_security_paragraph_two":"Si vende o transfiere su producto Tesla a otra persona, por favor, notifíquenos para que podamos decidir si es necesario tomar alguna medida adicional para ayudar a proteger la información procedente de o acerca de usted para que no se divulgue al comprador o receptor del producto Tesla.","privacy_policy_view_title":"Ver Política de privacidad completa","privacy_policy_view_updates_header":"Actualizaciones a esta Política","privacy_policy_view_updates_paragraph":"Podremos hacer cambios a esta Política de Privacidad. Consulte la fecha de la \\"Última Actualización\\" que aparece al final de este documento para ver cuándo se revisó esta política por última vez. Los cambios a esta Política de Privacidad entrarán en vigor cuando publiquemos la Política modificada en los Servicios. El uso de nuestros productos, de los Servicios o el proporcionarnos su información personal de cualquier otra forma después de que se hagan estos cambios, se entenderá como una aceptación por su parte de la Política de Privacidad modificada.","privacy_policy_view_us_warranty_warning":"Debe aceptar la Garantía limitada de Tesla para registrar su Powerwall y controlarlo desde la aplicación móvil de Tesla.","privacy_policy_view_warranty_information":"Yo, el propietario de la vivienda, acepto los términos de la Garantía limitada del Powerwall de Tesla, disponible en {warrantyLink}. Estos términos incluyen una cláusula de arbitraje que anula mi derecho a iniciar o participar en demandas colectivas y juicios con jurado. Puedo excluirme de esta disposición dentro de los 30 días siguiendo el proceso descrito en la disposición.","prompt_factory_reset_confirmation":"¿Confirma que realmente desea restablecer los ajustes de fábrica de la unidad?","pvac-state-active":"Activo","pvac-state-faulted":"Averiado","pvac-state-init":"Inicializando...","pvac-state-standby":"Esperar a energía solar","pvac_alert_ac_fault":"Fallo de CA del inversor","pvac_alert_check_ac_note":"Compruebe el cableado de CA y la conexión a la red eléctrica. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_check_dc_string1_note":"Compruebe el cableado y los paneles de CC del Tramo 1. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_check_dc_string2_note":"Compruebe el cableado y los paneles de CC del Tramo 2. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_check_dc_string3_note":"Compruebe el cableado y los paneles de CC del Tramo 3. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_check_dc_string4_note":"Compruebe el cableado y los paneles de CC del Tramo 4. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_confirm_grid_code_note":"Compruebe el cableado de CA y la conexión a la red eléctrica. Confirmar código de red eléctrica seleccionado.","pvac_alert_dc_fault_string1":"Fallo de CC del inversor - Tramo 1","pvac_alert_dc_fault_string2":"Fallo de CC del inversor - Tramo 2","pvac_alert_dc_fault_string3":"Fallo de CC del inversor - Tramo 3","pvac_alert_dc_fault_string4":"Fallo de CC del inversor - Tramo 4","pvac_alert_freq_change":"Red no conforme - Cambio de frecuencia","pvac_alert_internal_comms":"Problema de comunicación interna","pvac_alert_over_freq":"Red no conforme - Sobrefrecuencia","pvac_alert_over_temp":"Sobretemperatura del inversor","pvac_alert_over_voltage":"Red no conforme - Sobretensión","pvac_alert_production_limited_note":"La producción podría estar limitada. Asegúrese de que las terminaciones de los cables sean las adecuadas, que haya suficiente flujo de aire y que el entorno de la instalación sea idóneo.","pvac_alert_reboot_note":"Reinicie el inversor, asegúrese de que el sistema está actualizado y que se ha completado la puesta en marcha.","pvac_alert_under_freq":"Red no conforme - Subfrecuencia","pvac_alert_under_voltage":"Red no conforme - Subtensión","pvi-power-status-dc-only":"Solo CC","pvi-power-status-disabled":"Desactivada","pvi-power-status-enabled":"Activada","pvi-reset-button-label":"Reinicie el inversor y borre las alertas","pvs-self-test-1":"Autocomprobación (1/6): Fallo de conexión a tierra","pvs-self-test-2":"Autocomprobación (2/6): Fallo de arco","pvs-self-test-3":"Autocomprobación (3/6): MCI","pvs-self-test-4":"Autocomprobación (4/6): Aislamiento","pvs-self-test-5":"Autocomprobación (5/6): Soldadura de relé","pvs-self-test-6":"Autocomprobación (6/6): Impedancia","pvs_alert_check_arc_fault_note":"Si hay problemas de fallo del arco eléctrico, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida.","pvs_alert_check_dc_note":"Si hay problemas de fallos de conexión a tierra, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida.","pvs_alert_check_dc_string1_note":"Si hay problemas de aislamiento, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida, centrándose en el Tramo 1.","pvs_alert_check_dc_string2_note":"Si hay problemas de aislamiento, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida, centrándose en el Tramo 2.","pvs_alert_check_dc_string3_note":"Si hay problemas de aislamiento, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida, centrándose en el Tramo 3.","pvs_alert_check_dc_string4_note":"Si hay problemas de aislamiento, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida, centrándose en el Tramo 4.","pvs_alert_check_dc_strings_note":"Compruebe el cableado de CC, las conexiones, los paneles y las configuraciones de los tramos.","pvs_alert_dc_arc_fault_detected":"Fallo de arco de CC - Detectado","pvs_alert_dc_arc_fault_lockout":"Fallo de arco de CC - Bloqueo","pvs_alert_dc_ground_fault":"Fallo de conexión a tierra de CC","pvs_alert_dc_isolation_string1":"Problema de aislamiento de CC - Tramo 1","pvs_alert_dc_isolation_string2":"Problema de aislamiento de CC - Tramo 2","pvs_alert_dc_isolation_string3":"Problema de aislamiento de CC - Tramo 3","pvs_alert_dc_isolation_string4":"Problema de aislamiento de CC - Tramo 4","pvs_alert_dc_over_voltage":"Sobretensión de CC","pvs_alert_rapid_shutdown":"Desconexión rápida iniciada","pvs_alert_rapid_shutdown_note":"Compruebe el disyuntor de CA y el circuito de desconexión rápida de baja tensión.","registration_container_continue_header":"Correo electrónico del cliente introducido: {email}","registration_container_continue_modal_description":"El cliente no podrá acceder a la aplicación móvil de Tesla si el correo electrónico es incorrecto. Confirme que el correo electrónico del cliente es válido.","registration_container_customer_email_required":"El correo electrónico del cliente es necesario para activar la aplicación móvil de Tesla.","registration_container_customer_information_title":"Información del emplazamiento","registration_container_fill_required_fields":"El instalador o el cliente deben completar todos los campos requeridos.","registration_container_loading_modal_registering":"Registrando","registration_container_reset_form_modal_description":"Confirme que le gustaría llevar a cabo la reinicialización del formulario.","registration_container_reset_form_modal_header":"Se perderá toda la información introducida anteriormente.","security_container_settings_title_customer":"Cambiar o restablecer contraseña (Cliente)","security_container_settings_title_installer":"Cambiar o restablecer contraseña (Instalador)","security_view_copied_to_clipboard":"¡Copiado!","security_view_not_wifi_qr_code_error":"No es un código QR de Wi-Fi.","security_view_scan_qr_code_not_found_error":"No se ha encontrado ningún código QR.","security_view_settings_change_password_error":"Las nuevas contraseñas no coinciden","security_view_settings_change_password_label":"CAMBIAR CONTRASEÑA","security_view_settings_completed":"COMPLETADO","security_view_settings_new_password_label":"NUEVA CONTRASEÑA","security_view_settings_old_password":"CONTRASEÑA ACTUAL","security_view_settings_password_change_info":"Para cambiar la contraseña, ingrese la contraseña actual y una nueva contraseña.","security_view_settings_password_customer":"CONTRASEÑA","security_view_settings_password_customer_placeholder":"Últimos 5 caracteres de la contraseña que figuran en la pegatina del Gateway","security_view_settings_password_installer_label":"Contraseña del Gateway","security_view_settings_password_reset_info":"Para restablecer la contraseña, encienda el interruptor de un Powerwall y luego introduzca los 5 últimos caracteres de la contraseña de la etiqueta del Gateway.","security_view_settings_password_reset_info_serial":"Para restablecer la contraseña, encienda el interruptor de un Powerwall y luego introduzca los 5 últimos caracteres del número de serie del Gateway.","security_view_settings_password_reset_installer_info":"Para restablecer la contraseña, encienda el interruptor de un Powerwall y luego introduzca la contraseña de la etiqueta del Gateway.","security_view_settings_password_reset_installer_info_serial":"Para restablecer la contraseña, encienda el interruptor de un Powerwall y luego introduzca el número de serie del Gateway.","security_view_settings_re_enter_password_label":"VUELVA A INGRESAR LA NUEVA CONTRASEÑA","security_view_settings_reset_password_label":"RESTABLECER CONTRASEÑA","security_view_settings_serial_customer":"NÚMERO DE SERIE","security_view_settings_serial_customer_placeholder":"5 últimos caracteres del número de serie del Gateway","security_view_settings_serial_installer_label":"Número de serie del Gateway","security_view_settings_success":"La contraseña se actualizó con éxito","security_view_settings_success_new_password":"La nueva contraseña es:","security_view_settings_toggled_password":"¿Olvidó su contraseña?","self_test_result_viewer_resi_only":"El visor de registros de autocomprobación no está disponible.","self_test_results_viewer_collapse_all":"Contraer todo","self_test_results_viewer_column_name":"Nombre","self_test_results_viewer_column_result":"Resultado","self_test_results_viewer_column_spec":"Especificaciones","self_test_results_viewer_column_test_time":"Hora de prueba","self_test_results_viewer_column_value":"Valor","self_test_results_viewer_expand_all":"Ampliar todo","self_test_results_viewer_failed":"Incorrecto","self_test_results_viewer_in_progress":"En curso","self_test_results_viewer_inconclusive":"No concluyente","self_test_results_viewer_not_started":"No iniciada","self_test_results_viewer_passed":"Pasa","self_test_results_viewer_skipped":"Omitida","self_test_results_viewer_warning":"Advertencia","settings_container_confirm_reset_operation_mode":"Confirme el cambio de modo a {operation}","settings_container_heco_modal_description":"Este ajuste no puede modificarse después de seleccionarlo. Antes de enviar su selección, confirme que el cliente está realmente inscrito en el programa de bonificación de batería HECO.","settings_container_heco_modal_title":"Confirmar inscripción","settings_container_heco_view_description":"Powerwall se descargará, a la capacidad comprometida diariamente, para cumplir los requisitos del programa. Este ajuste no puede modificarse después de la activación.","settings_container_heco_view_scheduled_dispatch_start_time":"Hora de inicio","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"Envío programado de HECO","settings_container_heco_view_title":"Programa de bonificación de batería HECO","settings_container_operation_modes_modal_content":"Utilice la pantalla “Personalizar” de la aplicación móvil de Tesla para cambiar los modos de funcionamiento.","settings_container_operation_modes_modal_reset":"MODO DE RESTABLECIMIENTO","settings_container_operation_modes_modal_title":"Modo de funcionamiento","settings_container_operation_modes_modal_warning":"Este es un cambio unidireccional. Los modos avanzados solo se pueden reactivar a través de la aplicación móvil de Tesla.","settings_container_operation_modes_reset_modal_title":"¿Restablecer modo de funcionamiento?","settings_container_operation_settings_subtitle":"Indique el nombre de su sistema, el modo de funcionamiento y las limitaciones de exportación, si existe alguna.","settings_container_operation_settings_title":"Configuración de funcionamiento","settings_container_save_instructions":"Haga clic en CONTINUAR para guardar.","settings_container_saving_site_info_modal":"Guardando la configuración del emplazamiento","settings_container_site_import_description":"El límite de importación del emplazamiento es un parámetro opcional. Deje este campo vacío para deshabilitar la limitación de las importaciones. Cuando este ajuste está habilitado, especifica la potencia máxima que se puede importar de la red al emplazamiento.","settings_container_site_limits_header":"Límites del emplazamiento","settings_view_custom_modes_label":"MODO PRECONFIGURADO","settings_view_energy_reserve_heco_label":"Los cambios en la reserva de seguridad están restringidos debido a la inscripción en el programa de bonificación de batería HECO. El cliente podrá establecer una reserva de seguridad en su app.","settings_view_energy_reserve_label":"RESERVA DE RESPALDO DE EMERGENCIA","settings_view_instruction_site_name":"Introduzca un nombre para el sitio","settings_view_net_meter_mode":"Modo exportar","settings_view_operation_label":"MODO DE FUNCIONAMIENTO","settings_view_operation_set_label":"MODO DE FUNCIONAMIENTO QUE SE ESTABLECERÁ","settings_view_set_net_meter_mode_never_label":"No exportar permanente","settings_view_set_net_meter_mode_solar_label":"Exportar solar","settings_view_site_name":"NOMBRE DEL EMPLAZAMIENTO","settings_view_site_name_placeholder":"Ej. Mi casa","settings_view_solar_export_limitation_slider":"Limitación de exportación solar","settings_view_solar_feature":"Esta característica solo debe activarse cuando la interconexión requiere que el sistema solar no exporte energía a la red eléctrica. Típico en las regiones de Hawaii (CSS) y Australia.","settings_view_solar_limitation":"¿POWERWALL ESTÁ INSTALADO JUNTO A UN SISTEMA SOLAR QUE NO ES UN POWERWALL+?","settings_view_solar_zero_export":"¿POWERWALL INSTALADO JUNTO A UN SISTEMA SOLAR DE EXPORTACIÓN CERO?","site_info_container_submit":"ENVIAR","solar_item_view_baudrate_label":"Velocidad en baudios","solar_item_view_brand_input_label":"MARCA","solar_item_view_brand_label":"Marca","solar_item_view_check_inverter":"COMPROBAR CONEXIÓN DEL INVERSOR {id}","solar_item_view_connection_warning":"No se ha podido establecer la conexión","solar_item_view_inverter_brand":"Marca del inversor","solar_item_view_inverter_communication":"Configurar la comunicación directa del inversor","solar_item_view_inverter_model_label":"Modelo del inversor","solar_item_view_ip_label":"DIRECCIÓN IP","solar_item_view_model_label":"MODELO","solar_item_view_power_rating_explanation":"Se trata de la clasificación de potencia total del sistema fotovoltaico con respecto a los módulos/paneles. Esta es la potencia nominal de la matriz. Si por ejemplo tiene 10 paneles solares de 300 W, indique 3000 W, incluso si el inversor FV es de 2500 W o 3500 W.","solar_item_view_pv_array_dc_power_rating":"POTENCIA PICO DE CAMPO FV","solar_item_view_pv_array_dc_power_rating_label":"POTENCIA PICO DE CAMPO FV","solar_item_view_revenue_grade":"Nivel de ingresos","solar_item_view_revenue_grade_explanation":"Marque esta opción solo si el inversor tiene un medidor de nivel de ingresos integrado. Si esta opción está activada, los datos del inversor se leerán del medidor en lugar del inversor.","solar_item_view_revenue_grade_title":"Nivel de ingresos","solar_item_view_solar":"SOLAR {id}","solar_item_view_success":"¡CONEXIÓN CORRECTA!","solar_item_view_unable":"¡NO SE PUEDE LEER EL INVERSOR!","solar_list_view_continue_add_solar":"AÑADIR SOLAR","solar_view_continue_add_solar":"AÑADIR SOLAR","status_update_urgency_none":"Actualizado","status_update_urgency_optional":"Actualización opcional","status_update_urgency_required":"Actualización obligatoria","status_update_urgency_unknown":"Desconocido","success_view_awesome":"¡EXCELENTE!","success_view_copied_to_clipboard":"¡Copiado!","success_view_installation_complete":"Instalación finalizada","success_view_new_password_error_title":"Contraseña del Asistente","success_view_new_password_title":"Nueva contraseña de asistente","success_view_password_set":"La contraseña ya ha sido asignada","success_view_record_password":"Registre esta contraseña antes de continuar","success_view_retry_registration":"REINTENTAR REGISTRO","success_view_set_customer_password":"ASIGNAR LA CONTRASEÑA DEL CLIENTE","success_view_syncing_configuration":"Sincronizando configuración","summary_container_company":"Empresa","summary_container_connection_type":"Tipo de conexión","summary_container_email":"Correo electrónico","summary_container_installer_information":"Información del instalador","summary_container_ip_address":"Dirección IP","summary_container_location":"Ubicación","summary_container_meter":"Medidor n.º {index}","summary_container_meter_information":"Información del medidor","summary_container_phone":"Número de teléfono","summary_container_print":"Imprimir","summary_container_serial_number":"Número de serie","summary_container_site_info":"Información del emplazamiento","summary_container_site_name":"Nombre del emplazamiento","summary_container_subtitle":"Información del producto e instalación","summary_site_information":"INFORMACIÓN DEL EMPLAZAMIENTO","summary_view_autonomous":"Control programable","summary_view_backup":"Solo reserva","summary_view_backup_capable":"Con capacidad de respaldo","summary_view_backup_reserve":"RESERVA DE RESPALDO","summary_view_backup_switch":"BACKUP SWITCH","summary_view_conductor_export":"LÍMITE DE EXPORTACIÓN DEL CONDUCTOR","summary_view_conductor_import":"LÍMITE DE IMPORTACIÓN DEL CONDUCTOR","summary_view_control":"Control del emplazamiento","summary_view_customer_version":"VERSIÓN DEL CLIENTE","summary_view_direct":"Directo","summary_view_disabled":"DESHABILITADO","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"LÍMITE DE EXPORTACIÓN DEL FV","summary_view_extra_programs":"PROGRAMAS EXTRA","summary_view_followers":"SEGUIDORES","summary_view_gateway":"GATEWAY","summary_view_grid_code":"CÓDIGO DE RED","summary_view_gsm":"Teléfono móvil","summary_view_heco_battery_bonus":"Bonificación de batería HECO","summary_view_ip_address":"DIRECCIÓN IP","summary_view_leader":"LÍDER","summary_view_mode":"MODO","summary_view_msg_cannot_read_solar_assembly":"Primero detenga el sistema para ver el número de pieza y de serie del conjunto solar Powerwall+.","summary_view_network":"RED","summary_view_non_backup":"No es de respaldo","summary_view_panel_limit":"CORRIENTE MÁXIMA DEL PANEL","summary_view_part_number":"Número de pieza","summary_view_partnum":"Pieza {partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Conjunto","summary_view_self_consumption":"Autoconsumo","summary_view_serial":"Número de serie","summary_view_serialnum":"Número de serie {serialNumber}","summary_view_site_export":"LÍMITE DE EXPORTACIÓN DEL EMPLAZAMIENTO","summary_view_site_import":"LÍMITE DE IMPORTACIÓN DEL EMPLAZAMIENTO","summary_view_site_name":"NOMBRE DEL EMPLAZAMIENTO","summary_view_solar_assembly":"CONJUNTO SOLAR","summary_view_sync":"CAPACIDAD DE RESERVA DE RESPALDO DE EMERGENCIA","summary_view_time":"RESUMEN DE TIEMPO DE COMPILACIÓN","summary_view_time_zone":"ZONA HORARIA","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"El dispositivo con emparejamiento Wi-Fi no está respondiendo","system-device-unknown-sitecontroller":"El dispositivo aún no ha detectado a sus secundarios","system_acpw_vitals_charge":"Nivel de carga: {charge}%","system_acpw_vitals_power":"Alimentación de CA: {power}","system_acpw_vitals_power_charging":"Alimentación de CA: {Power} Cargando","system_acpw_vitals_power_discharging":"Alimentación de CA: {power} Descargando","system_acpw_vitals_state":"Estado de Powerwall: {state}","system_acpw_vitals_voltage":"Tensión de CA: {voltage}","system_controller_din":"Controlador: {din}","system_device_alert_disabled":"Dispositivo desactivado","system_device_alert_updating":"Actualizando firmware...","system_device_gateway_not_islanding":"Este no es el controlador de aislamiento.","system_device_leader":"Líder","system_device_name_backup_switch":"Backup Switch ({sn})","system_device_name_battery_assembly":"Conjunto de baterías ({sn})","system_device_name_gateway":"Pasarela ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus":"{role} Powerwall+","system_device_name_powerwall_plus_leader":"Powerwall+ líder","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+ (cableado)","system_device_name_powerwall_plus_wireless":"Powerwall+ (inalámbrico)","system_device_name_remote_meter":"Medidor remoto ({sn})","system_device_name_solar_assembly":"Conjunto solar ({sn})","system_device_name_solar_assembly_1":"Conjunto solar","system_device_name_sync":"Contactor de Gateway/Controlador de medidor ({sn})","system_firmware_update":"Actualizando: {percent} % ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"Estado de respaldo: {backupState}","system_islanding_vitals_grid_line":"Línea de red eléctrica {lineNumber}: {v} {f}","system_islanding_vitals_island_line":"Línea de isla {lineNumber}: {v} {f}","system_overview_connected":"Conectado a Tesla","system_overview_disconnected":"No conectado a Tesla","system_overview_follower":"Powerwall seguidor","system_overview_login_required":"Para ver el funcionamiento del sistema, es necesario iniciar sesión","system_overview_scanning":"Buscando dispositivos...","system_overview_site_controller":"Controlador del emplazamiento","system_overview_updating":"Actualizando dispositivos...","system_pvi_vitals_ac_solar_power":"Energía solar CA: {power} / {current}","system_pvi_vitals_ac_solar_power_only":"Energía solar CA: {power}","system_pvi_vitals_lifetime_energy_kwh":"Energía de por vida: {energy}","system_pvi_vitals_state":"Estado: {message}","system_pvi_vitals_string":"Tramo {number}: {voltage} / {current}","system_pvi_vitals_string_not_connected":"Tramo {number}: No conectada","system_remote_meter_ct_line":"CT {n} ({location}): {value}","system_remote_meter_no_cts":"No hay CT configurados","system_rescan_button_text":"Volver a buscar dispositivos","system_scanning_label_text":"Buscando dispositivos...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Compruebe que el sistema funciona según lo previsto.","test_container_system_test_title":"Prueba del sistema","test_inverter_container_error_grid_uncompliant":"La prueba no puede ejecutarse porque la red no cumple los requisitos.","test_inverter_container_error_not_idle":"El Powerwall debe estar en espera para realizar la prueba.","test_inverter_container_results_error_plural_subtitle":"{num} Pruebas fallaron","test_inverter_container_results_error_singular_subtitle":"{num} Prueba falló","test_inverter_container_results_success_plural_subtitle":"{num} Pruebas pasaron","test_inverter_container_results_success_singular_subtitle":"{num} Prueba pasó","test_inverter_container_results_success_subtitle":"Todas las pruebas pasaron","test_inverter_container_results_title":"Resultados de la prueba automática del inversor","test_inverter_container_title":"Autocomprobación del inversor","test_meter_composite_view_auxiliary_meter_setup_instructions":"Se debe configurar como mínimo un transformador de corriente para cada medidor auxiliar.","test_meter_composite_view_auxiliary_meters_title":"Medidores auxiliares","test_meter_composite_view_configure_meters":"CONFIGURAR MEDIDORES","test_meter_composite_view_current_transformer_setup_instructions":"Utilice como mínimo un CT de emplazamiento o un CT de carga, pero no ambos.","test_meter_composite_view_external_meter_setup_instructions":"Debe establecerse al menos un transformador de corriente para cada medidor externo.","test_meter_composite_view_external_meters_title":"Medidores externos","test_meter_composite_view_internal_meters_gateway_title":"Medidores internos (Gateway)","test_meter_composite_view_internal_meters_title":"Medidores internos","test_meter_composite_view_no_configured_meters":"NO HAY NINGÚN MEDIDOR CONFIGURADO. POR FAVOR {configure} PARA CONTINUAR.","test_meter_composite_view_note":"NOTA","test_meter_item_view_acuvim_label":"Medidor {id}: Medidor Acuvim","test_meter_item_view_backup_switch_label":"Medidor {id}: Medidor de Backup Switch","test_meter_item_view_configure_phases_note":"Configure las fases para activar los CT para este medidor","test_meter_item_view_internal_meter_x_gateway_label":"Medidor {id}: Medidor primario interno X (Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"Medidor {id}: Medidor auxiliar interno Y (Gateway)","test_meter_item_view_remote_w1_wifi_label":"Medidor {id}: Wi-Fi remota","test_meter_item_view_remote_w1_wired_label":"Medidor {id}: Conexión remota por cable","test_meter_item_view_remote_w2_wifi_label":"Medidor {id}: Wi-Fi remota","test_meter_item_view_remote_w2_wired_label":"Medidor {id}: Conexión remota por cable","test_meter_item_view_reset":"RESTABLECER TODO","test_meter_item_view_site_meter_title":"Medidor interno del emplazamiento","test_meter_item_view_sync_id":"Sincronizar medidor {id}","test_meter_item_view_toggle_advanced":"Avanzado","test_meter_item_view_toggle_power":"Potencia","test_meter_item_view_wifi_id":"Medidor {id}","test_meter_item_view_wired_id":"Medidor cableado {id}","test_view_canceled_status":"Prueba cancelada","test_view_failed_status":"La Prueba Ha Fallado","test_view_idle_status":"Comenzando la Prueba del Sistema","test_view_init_status":"Preparándose para el inicio de la prueba","test_view_inverter_test_warning_message":"Si dispone de un inversor FV de exportación 0, el procedimiento de autocomprobación del Gateway no puede calificar correctamente el sistema. Desconecte el inversor FV hasta que la autocomprobación se haya completado.","test_view_passed_status":"La Prueba Ha Pasado","test_view_prep_status":"Inicializando controles: ¡Puede tardar unos minutos!","test_view_running_status":"prueba de carga en ejecución","test_view_skip_start_system_test_text":"Confirmar para omitir la prueba del sistema","test_view_start_system_test_warning":"ADVERTENCIA","test_view_system_test_completed_message":"¡Prueba del sistema completada!","time_minute":"minuto","time_minutes":"minutos","time_second":"segundo","time_seconds":"segundos","time_started_at":"Iniciado a las: {time}","timezone_container_subtitle":"Según el sitio y la dirección IP, podemos ayudarle a encontrar la zona horaria de su instalación.","timezone_container_title":"Zona horaria","timezone_view_label":"zona horaria","toast_view_standard_title":"Nota","toast_view_warning_title":"Advertencia","update_container_industrial_updating_description":"El controlador del emplazamiento se reiniciará automáticamente ahora para instalar la actualización. {lb1}{lb2} Espere 2 minutos, conéctese de nuevo a la red del controlador del emplazamiento y a continuación {refresh}","update_container_preparing_title":"Preparando la actualización más reciente","update_container_refresh_browser":"Actualice su navegador.","update_container_residential_updating_description":"El Gateway se reiniciará ahora automáticamente para instalar la actualización. {lb1}{lb2} Por favor, espere 2 minutos, vuelva a conectarse a la red del Gateway y, a continuación, {refresh}","update_container_skip_title":"¿Omitir actualización?","update_container_subtitle":"Compruebe si hay actualizaciones. Nota: La orden de actualización del firmware a los Powerwalls se produce en la página del Powerwall.","update_container_subtitle_industrial":"Compruebe si hay actualizaciones. Nota: La orden de actualización del firmware a las baterías se produce en la página de baterías.","update_container_title":"Actualizar","update_container_updating_title":"Instalando actualización","update_step_item_view_resolution_title":"Solución recomendada","update_view_check_again":"HAGA CLIC PARA COMPROBAR DE NUEVO","update_view_check_for_update":"COMPROBAR ACTUALIZACIÓN DEL GATEWAY","update_view_check_for_update_industrial":"COMPROBAR SI HAY UN CONTROLADOR DEL EMPLAZAMIENTO ACTUALIZADO","update_view_checking_update":"Buscando actualizaciones","update_view_current_version":"Versión actual: {version}","update_view_current_version_label":"VERSIÓN ACTUAL:","update_view_downloading":"DESCARGANDO","update_view_downloading_update":"Descargando actualización","update_view_no_power_cicle":"¡NO APAGUE Y ENCIENDA!","update_view_percent_complete":"{percent} completo","update_view_progress":"PROGRESO DE ACTUALIZACIÓN","update_view_staged":"VERSIÓN NUEVA PREPARADA","update_view_staged_update":"Listo para actualizar","update_view_staging":"PREPARANDO","update_view_staging_update":"Preparando actualización","update_view_time_remaining":"restante","update_view_up_to_date":"VERSIÓN ACTUALIZADA","update_view_update_now":"ACTUALIZAR AHORA","update_view_update_urgency_label":"Estado de actualización: {status}","update_view_updated_industrial":"El software del controlador del emplazamiento está actualizado.","update_view_updated_residential":"El software del Gateway está actualizado.","update_view_wait_minutes":"POR FAVOR ESPERE UNOS MINUTOS","validation_phone":"Ingrese un número telefónico válido","vitals_header_subtitle_firmware_update":"Actualización de firmware en curso...","vitals_header_subtitle_firmware_update_failed":"Error en la actualización del firmware. Compruebe los interruptores de encendido y el cableado.","vitals_header_title":"Sistema","vitals_powerwall_state_ac_fault":"Fallo de etapa de CA","vitals_powerwall_state_dc_fault":"Fallo de etapa de CC","vitals_powerwall_state_grid_following":"Seguimiento de red eléctrica","vitals_powerwall_state_grid_forming":"Formación de red eléctrica","vitals_powerwall_state_init":"Inicializando","vitals_powerwall_state_off":"Apagado","vitals_powerwall_state_standby":"En espera","vitals_powerwall_state_support_dc":"Soporte de CC","warning":"ADVERTENCIA","warning_off_grid":"Si el sistema eléctrico está fuera de red, cualquier carga en reserva se anulará en 5 minutos.","warning_on_grid":"Si el sistema eléctrico está conectado a la red, Powerwall dejará de cargar/descargar.","warning_sitemaster_container_not_running":"El registro principal de la instalación no se está ejecutando","wifi_pairing_link_message":"Añada un Powerwall conectado por Wi-Fi","wifi_view_find_network":"ENCONTRAR RED POR SSID","wifi_view_note":"Nota: El Gateway solo es compatible con redes inalámbricas de 2,4 GHz.","wifi_view_note_five_ghz":"Nota: El Gateway es compatible con redes inalámbricas de 2,4 GHz y de 5 GHz.","wifi_view_readonly":"Este es un Powerwall seguidor, por lo que su configuración de red inalámbrica no se puede editar.","wifi_view_security_label":"SEGURIDAD","wizard_container_commissioning_wizard":"Asistente de Servicio de Tesla","wizard_container_login_required":"Es necesario iniciar sesión","wizard_container_title":"Comencemos.","wizard_container_verifying_login_title":"Verificando Inicio de sesión"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Fout","advanced_settings_submit":"Indienen","advanced_settings_submitted":"Ingediend","advanced_settings_title":"Geavanceerde instellingen","alert_container_ac_phase_1_over_voltage":"AC-overspanning","alert_container_ac_phase_1_under_voltage":"AC-onderspanning","alert_container_ac_phase_2_over_voltage":"AC-overspanning","alert_container_ac_phase_2_under_voltage":"AC-onderspanning","alert_container_ac_phase_3_over_voltage":"AC-overspanning","alert_container_ac_phase_3_under_voltage":"AC-onderspanning","alert_container_over_frequency":"AC-overfrequentie","alert_container_rate_of_change_frequency":"Snelheid van verandering AC-frequentie","alert_container_under_frequency":"AC-onderfrequentie","app_container_engineering_mode_banner_message":"Tesla-servicemodus vereist geen authenticatie. \'Stop systeem\' als u operationele wijzigingen aanbrengt. Laat het systeem in een acceptabele staat voordat u de browser sluit. Sluit de browser als u klaar bent, aangezien deze modus geen authenticatie vereist.","app_container_engineering_mode_title":"Tesla-servicemodus","app_container_firmware_update_banner_message":"Laat de installatie en bedrading ongemoeid en blijf op deze pagina totdat de update is voltooid.","app_container_firmware_update_banner_title":"Firmware-update wordt uitgevoerd","app_container_sitemaster_message_title":"Het systeem is momenteel actief. Om de status van de batterijblokken te kunnen zien, moet het systeem worden uitgeschakeld. U kunt het systeem stoppen vanaf de beginpagina.","app_container_sitemaster_power_supply_mode_banner_message":"Batterij die wisselspanning produceert om apparaten van stroom te voorzien voor koppeling en configuratie. Knop om het systeem op de beginpagina te stoppen.","app_container_sitemaster_power_supply_mode_banner_title":"Netvormingsmodus","app_container_sitemaster_running_banner_title":"Systeem actief","battery_container_cannot_communicate":"Kan niet communiceren met Powerwall Controleer bedrading en afsluiting van CAN-bus.","battery_container_chinv":"VFD voor compressor en verwarming (CHINV) {index}","battery_container_confirm_update_firmware":"Dit proces kan enkele minuten duren. Onderbreek de update niet en verlaat deze pagina niet.","battery_container_dcbc":"Batterijblok {index}","battery_container_dcbc_comms_failure":"Communicatiefout. Controleer netwerkverbinding met de unit en scan opnieuw.","battery_container_dcbc_dcdisconnect_opened":"DC-onderbrekingshendel staat in de uit-stand.","battery_container_dcbc_door_switch_opened":"Inschakelkabel omvormerdeur open. Onderzoek deurschakelaar.","battery_container_dcbc_enable_line_return_low_estop":"Uitschakelcontact op afstand van omvormer open. Onderzoek circuit van uitschakelcontact op afstand","battery_container_dcbc_enable_line_return_low_inv":"Inschakelkabel omvormersysteem open. Onderzoek feedback van stroomonderbreker.","battery_container_dcbc_enable_line_return_low_str":"Inschakelkabel voor een of meer Powerpack-rijen is open. Onderzoek bedrading en Powerpack-deuren. Zie de Enable Line Troubleshooting Guide voor diagnose.","battery_container_diagnosis_incomplete":"Diagnose onvolledig. Een firmware-update is vereist voordat verdere controles kunnen worden uitgevoerd.","battery_container_faults":"Storingen","battery_container_firmware_update_needed":"Firmware-update nodig.","battery_container_industrial_confirm_update_firmware":"Hiermee wordt de firmware van elk batterijblok en de subcomponenten bijgewerkt.","battery_container_internal_communications_fault":"Interne communicatiestoring. Controleer bedrading en afsluiting van CAN-bus en voer een firmware-update uit.","battery_container_mpbc":"Batterijblok {index}","battery_container_mpthc":"Temperatuurregeling (MPTHC) {index}","battery_container_no_sync_detected":"Geen schakelaarcontroller gedetecteerd. Geen back-upmogelijkheid gedetecteerd.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Paal (LCC) {index}","battery_container_post_missing":"Ontbrekende paal {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Vermogensfase {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"De Powerwall is uitgeschakeld. Zorg dat de schakelaar in de stand ON is.","battery_container_qbms":"Batterijmanagementsysteem (QBMS)","battery_container_qhvp":"Hoogspanningsprocessor (QHVP)","battery_container_residential_confirm_update_firmware":"Hiermee wordt de firmware van elke Powerwall en de schakelaarcontroller (indien aanwezig) bijgewerkt.","battery_container_resolve_connectivity":"Los connectiviteitsproblemen op voordat u een firmware-update uitvoert.","battery_container_scan":"SCANNEN","battery_container_scan_in_progress":"SCANNEN...","battery_container_scbc":"Laderblok {index}","battery_container_scthc":"Temperatuurregeling (SCTHC) {index}","battery_container_self_tests_failure":"Niet geslaagd voor zelftest.","battery_container_self_tests_inconclusive":"Resultaten zelftest niet doorslaggevend.","battery_container_self_tests_internal_error":"Zelftest mislukt vanwege interne systeemfout.","battery_container_self_tests_stall":"Time-out: zelftests kunnen niet starten.","battery_container_self_tests_system_down":"Kan geen zelftests uitvoeren terwijl het systeem is uitgeschakeld. Start het systeem en probeer het opnieuw.","battery_container_serial_number":"SERIENUMMER: {sn}","battery_container_starc":"DC-DC-omvormer (STARC) {index}","battery_container_stitch":"Controlevermogen DC-DC (STITCH)","battery_container_synchronizer":"Schakelaarcontroller","battery_container_unknown":"Onbekende buscontroller {index}","battery_container_update_failed":"Update mislukt. Probeer het opnieuw en zorg ervoor dat bedrading en activeringsschakelaars niet worden onderbroken tijdens het updateproces.","battery_container_update_firmware":"FIRMWARE BIJWERKEN","battery_container_update_in_progress":"UPDATE WORDT UITGEVOERD...","battery_container_waiting_to_report_firmware":"Wachten tot unit de firmwareversie meldt.","battery_container_warnings":"Waarschuwingen","caution":"ATTENTIE","client_protocols_container_subtitle":"Clientprotocollen inschakelen of uitschakelen.","client_protocols_container_title":"Clientprotocollen","client_protocols_menu_title":"Clientprotocollen","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"Modbus TCP/IP","conductor_limit":"Batterijen worden gecontroleerd om te voorkomen dat de geconfigureerde stroomlimieten voor elke fase van de stroomtrafo\'s van de geleider worden overschreden. Controleer het toepassingsvoorbeeld van de geleiderlimiet voor meer informatie over waar deze wordt gebruikt en welke limieten moeten worden geconfigureerd.","conductor_min_current":"Exportlimiet voor geleider","control_container_add_on":"TOEVOEGING","control_container_always_active":"ALTIJD ACTIEF","control_container_battery_ok":"VOLLEDIGE BATTERIJ-EXPORT TOEGESTAAN","control_container_charge_power_target":"DOEL LAADVERMOGEN","control_container_conductor_max_current":"Importlimiet voor geleider","control_container_conductor_min_current_max_bound":"{mode} heeft maximumwaarde van 200 A","control_container_conductor_min_current_min_bound":"{mode} heeft minimumwaarde van 5 A","control_container_control_subtitle":"Ondertitel controle","control_container_control_title":"Titel controle","control_container_direct":"DIRECT","control_container_disable":"Uitschakelen","control_container_discharge_power_target":"DOEL ONTLAADVERMOGEN","control_container_enabled":"INGESCHAKELD","control_container_energy_target":"ENERGIEDOEL Deze waarde moet overeenkomen met de systeemgrootte volgens de ontwerpdocumenten en het controleursrapport","control_container_error_message":"{mode} is vereist","control_container_explanation_bullet_five_max_site_meter_power_kw":"Wanneer het nettoverbruik groter is dan deze limiet, worden de batterijen zo goed mogelijk ontladen om te voorkomen dat deze limiet wordt overschreden.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Wanneer de netto-opwekking groter is dan deze limiet, worden de batterijen zo goed mogelijk opgeladen om te voorkomen dat deze limiet wordt overschreden.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Wanneer het nettoverbruik kleiner is dan deze limiet, worden de batterijen beperkt in hun toegestane laadvermogen.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Wanneer de netto-opwekking kleiner is dan deze limiet, worden de batterijen beperkt in hun toegestane ontlaadvermogen.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Importlimiet voor locatie is een optionele instelling. Laat dit veld leeg om beperking uit te schakelen.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Exportlimiet voor locatie is een optionele instelling. Laat dit veld leeg om beperking uit te schakelen.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Dit is een totale limiet voor alle fasen op alle locatiemeters. (Opmerking: wanneer verbruiksmeters worden gebruikt, wordt de locatiemeter berekend met behulp van verbruik, zonne-energie en batterij).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Dit is een totale limiet voor alle fasen op alle locatiemeters. (Opmerking: wanneer verbruiksmeters worden gebruikt, wordt de locatiemeter berekend met behulp van verbruik, zonne-energie en batterij).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Indien ingeschakeld, regelt de sitemaster de maximale energie die van het net naar de locatie mag worden geïmporteerd.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Indien ingeschakeld, regelt de sitemaster de maximale energie die van de locatie naar het net mag worden geëxporteerd.","control_container_explanation_export_restrictions_locked":"Bepaalt hoe het systeem energie naar het net kan exporteren. Eenmaal ingesteld, vereist de regelgeving dat deze alleen kan worden gewijzigd door contact op te nemen met Tesla.","control_container_explanation_export_restrictions_unlocked":"Regelgeving vereist dat exportkenmerken alleen kunnen worden ingesteld tijdens de eerste inbedrijfstelling. Neem contact op met Tesla voor wijziging.","control_container_explanation_nominal_system":"Deze waarde moet overeenkomen met de systeemgrootte volgens de ontwerpdocumenten en het controleursrapport.","control_container_heat_for_energy":"WARMTE VOOR ENERGIE","control_container_heat_mode":"WARMTEMODUS","control_container_loading":"Laden","control_container_max_site_meter_power_W_max_bound":"{mode} heeft maximumwaarde van 50000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} heeft minimumwaarde van 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} moet groter zijn dan of gelijk zijn aan 0","control_container_max_site_meter_power_kw":"Importlimiet voor locatie","control_container_max_site_meter_power_w":"Importlimiet voor locatie","control_container_menu":"Menu","control_container_min_site_meter_power_kW_positive":"{mode} moet groter zijn dan of gelijk zijn aan 0","control_container_min_site_meter_power_kw":"Exportlimiet voor locatie","control_container_min_site_meter_power_w":"Exportlimiet voor locatie","control_container_minimum_charge_power":"MINIMAAL LAADVERMOGEN","control_container_minimum_discharge_power":"MINIMAAL ONTLAADVERMOGEN","control_container_misc":"DIVERS","control_container_net_meter_mode":"Exportbeperkingen voor locatie","control_container_never":"GEEN LOCATIE-EXPORT","control_container_nominal_system_energy_kW_positive":"{mode} moet groter zijn dan of gelijk zijn aan 0","control_container_nominal_system_energy_kWh_positive":"{mode} moet groter zijn dan of gelijk zijn aan 0","control_container_nominal_system_energy_kwh":"Nominale systeemenergie","control_container_nominal_system_energy_max_error":"Nominale systeemenergie overschrijdt de maximale energielimiet","control_container_nominal_system_power_kw":"Nominaal systeemvermogen","control_container_nominal_system_power_max_error":"Nominaal systeemvermogen overschrijdt de maximale vermogenslimiet","control_container_number_error_message":"{mode} moet een numerieke invoer zijn","control_container_power":"VERMOGEN","control_container_pv_only":"EXPORT TOT PV-METERSTAND OK","control_container_reactive_mode":"REACTIEVE MODUS","control_container_real_mode":"REAL-MODUS","control_container_reset":"Herstellen","control_container_site_control":"LOCATIEREGELING","control_container_site_limits":"LOCATIELIMIETEN","control_container_site_max_power":"MAX. VERMOGEN LOCATIE","control_container_site_min_power":"MIN. VERMOGEN LOCATIE","control_container_submit":"Indienen","control_container_submitting_control":"Indieningscontrole","control_start":"START","control_stop":"STOP","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Versterker {id}","current_transformer_item_view_battery_ct":"Batterij","current_transformer_item_view_calculated_reading":"Berekend:","current_transformer_item_view_conductor_ct":"Geleider","current_transformer_item_view_ct_voltage_pairing_1":"Fase L1","current_transformer_item_view_ct_voltage_pairing_2":"Fase L2","current_transformer_item_view_ct_voltage_pairing_3":"Fase L3","current_transformer_item_view_ct_voltage_pairing_default":"Standaardfase","current_transformer_item_view_doubled_solar_ct":"Zonne-energie (1 stroomtrafo x2)","current_transformer_item_view_flip":"Spiegelen","current_transformer_item_view_generator_ct":"Generator","current_transformer_item_view_load_ct":"Verbruikers","current_transformer_item_view_measured_reading":"Per stroomtrafo:","current_transformer_item_view_no_reading":"Geen meting","current_transformer_item_view_none_ct":"Geen","current_transformer_item_view_phase_sequence_dropdown_title":"Fase","current_transformer_item_view_site_ct":"Locatie","current_transformer_item_view_solar_ct":"Zonne-energie","current_transformers_container_800a_ct_ensure":"Zorg ervoor dat de selectie van stroomtrafo\'s op deze pagina overeenkomt met wat is geïnstalleerd.","current_transformers_container_800a_ct_larger":"Stroomtrafo\'s van 800 A zijn fysiek groter dan de stroomtrafo\'s van 200/264 A.","current_transformers_container_800a_ct_use_case":"Gebruik en configureer de stroomtrafo van 800 A bij het meten van grote geleiders of panelen (zoals 400 A/800 A).","current_transformers_container_amps_explanation":"Stroom die door de stroomtransformator vloeit","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Zorg ervoor dat de stroomtrafo is geïnstalleerd voor de juiste fase ({sequence}).","current_transformers_container_configure_subtitle":"Configureer de meetstroomtransformatoren.","current_transformers_container_ct_flipping_ensure_direction":"Zorg er eerst voor dat het label van stroomtrafo naar de omvormer voor zonne-energie (voor stroomtrafo van zonne-energie) of naar de netvoeding (voor stroomtrafo van locatie) is gericht. Controleer vervolgens de fasebedrading en verifieer de gerapporteerde meetwaarden voor stroom, vermogen en vermogensfactor.","current_transformers_container_ct_flipping_modal_title":"Stroomtrafo omzetten in software","current_transformers_container_ct_flipping_software_incorrect_metering":"Het gebruik van software om een stroomtrafo die voor de verkeerde fase is geïnstalleerd om te zetten, resulteert in een onjuiste meting.","current_transformers_container_ct_flipping_wrong_phase":"Een negatieve vermogenswaarde kan erop duiden dat de stroomtrafo achterstevoren of voor de verkeerde fase is geïnstalleerd.","current_transformers_container_double_check_recommendation":"Controleer bedrading, spanningsaftakkingen, CT\'s en meterconfiguratie voordat u doorgaat.","current_transformers_container_doubled_solar_ct_explanation":"Eén stroomtrafo kan worden gebruikt om een gebalanceerde PV-omvormer te meten.","current_transformers_container_doubled_solar_ct_modal_title":"Meting van een gesplitste-fase zonne-omvormer met één stroomtrafo","current_transformers_container_grid_code_phase_modal_title":"Waarschuwing: Aantal CT\'s komt niet overeen met aanbeveling fase netcode","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Waarschuwing: Aantal CT\'s komt niet overeen met aanbeveling voor meerdere meters","current_transformers_container_grid_code_phase_multiple_warnings_message":"Onverwacht aantal CT\'s verbonden met de volgende {numMeters} meters:","current_transformers_container_grid_code_phase_warning_message":"Onverwacht aantal CT\'s verbonden met de volgende meter:","current_transformers_container_grid_code_single_phase_warning":"De toegepaste netcode is eenfase. Eenfasesystemen hebben normaal ofwel 1- ofwel 3-fasig aansluiting. {lb} Een oneven aantal CT\'s (1 of 3) wordt aanbevolen.","current_transformers_container_grid_code_split_phase_warning":"De toegepaste netcode is tweefase. Tweefasesystemen hebben normaal één CT voor iedere \\"spanningvoerende\\" geleider. {lb} Een even aantal CT\'s (2 of 4) wordt aanbevolen. ","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Zorg ervoor dat het label van de stroomtrafo naar de zonne-energieomvormer is gericht.","current_transformers_container_label_modal_title":"Uitleg bij labels","current_transformers_container_load_ct_ensure":"Zorg er bij het configureren van verbruiksstroomtrafo\'s voor dat alle verbruik van de huisinstallatie wordt gemeten en dat back-up- en niet-backverbruik afzonderlijk worden gemeten.","current_transformers_container_load_ct_modal_title":"Verbruiksstroomtrafo ","current_transformers_container_load_ct_recommended":"Het configureren van verbruiksstroomtrafo\'s wordt alleen aanbevolen voor specifiek gebruik waarbij het niet mogelijk is om een huisinstallatie-stroomtrafo te configureren.","current_transformers_container_meter_id":"Meter {id}","current_transformers_container_no_load_and_site_ct":"Er kan niet zowel een verbruiks- als een huisinstallatiestroomtrafo zijn.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"Er kan geen verbruik achter de stroomtrafo zijn.","current_transformers_container_no_site_or_load_warning":"GEEN TRAFO GECONFIGUREERD","current_transformers_container_no_solar_ct_warning":"GEEN STROOMTRAFO VOOR ZONNEPANELEN GECONFIGUREERD","current_transformers_container_no_solar_inverter_warning":"GEEN PV-OMVORMER GECONFIGUREERD","current_transformers_container_phase_usages_modal_title":"Waarschuwing: Stroomtrafoconfiguratie komt niet overeen met faseconfiguratie","current_transformers_container_phase_usages_warning":"Het aantal geconfigureerde fasen komt niet overeen met het aantal geconfigureerde stroomtrafo\'s. {lb} {num} geconfigureerde stroomtrafo\'s worden aanbevolen.","current_transformers_container_phase_usages_warning_message":"Onverwacht aantal stroomtrafo\'s verbonden met de volgende meter(s):","current_transformers_container_power_amperage_configure_warning":"Stroomtransformator {type} vereist dat zowel het positieve vermogen als het ampèrage correct worden geconfigureerd.","current_transformers_container_power_factor_explanation":"Vermogensfactor (Power_Real / Power_Apparent). Alleen weergegeven voor hoge vermogensniveaus. Voor algemene resistieve belastingen zou de vermogensfactor dicht bij 1 moeten liggen. Een lage vermogensfactor kan erop wijzen dat een stroomtransformator onjuist is geïnstalleerd of dat er sprake is van zeer grote capacitieve/inductieve belastingen.","current_transformers_container_power_factor_out_of_range_warning":"Meting vermogensfactor is buiten verwacht bereik. {lb} Gemeten vermogensfactor: {powerFactor} PF {lb} De meter is mogelijk onjuist geïnstalleerd of op een onjuiste fase, of er zijn zeer grote capacitieve/inductieve lasten.","current_transformers_container_system_test_configured_incorrect":"Waarschuwing: CT {id} is mogelijk onjuist geconfigureerd","current_transformers_container_title":"Stroomtransformatoren","current_transformers_container_voltage_out_of_range_warning":"Spanning is buiten bereik. {lb} Gemeten spanning: {volts} V {lb} Gemeten spanning van deze CT is buiten het normale bedrijfsbereik.","current_transformers_container_volts_explanation":"Spanning van lijn naar neutraal op de spanningsaftakking die bij de stroomtransformator hoort","current_transformers_container_watts_explanation":"Voeding als stroom die door de stroomtransformator vloeit, vermenigvuldigd met de spanning op de bijbehorende spanningsaftakking","customer_installation_view_email_label":"E-MAIL KLANT","customer_installation_view_email_placeholder":"E-mail","customer_registration_view_address_label":"ADRES","customer_registration_view_address_placeholder":"Adres","customer_registration_view_city_label":"PLAATS","customer_registration_view_city_placeholder":"Plaats","customer_registration_view_clear_form":"FORMULIER WISSEN","customer_registration_view_country_label":"Land","customer_registration_view_customer_information":"KLANTINFORMATIE","customer_registration_view_email_address_label":"E-MAIL","customer_registration_view_email_placeholder":"E-mail","customer_registration_view_family_name_label":"ACHTERNAAM","customer_registration_view_family_name_warning":"Voer de achternaam van de klant in.","customer_registration_view_given_name_label":"VOORNAAM","customer_registration_view_given_name_warning":"Voer de voornaam van de klant in.","customer_registration_view_homeowner_family_name_placeholder":"Achternaam","customer_registration_view_homeowner_given_name_placeholder":"Voornaam","customer_registration_view_installation_address":"Installatie adres","customer_registration_view_phone_number_label":"TELEFOON","customer_registration_view_phone_placeholder":"Telefoon","customer_registration_view_state_placeholder":"Provincie","customer_registration_view_state_province_region_label":"STAAT/PROVINCIE/REGIO","customer_registration_view_zip_label":"POSTCODE","customer_registration_view_zip_placeholder":"Postcode","diagnostic_category_item_view_download_results":"RESULTATEN DOWNLOADEN","diagnostic_category_item_view_internal_comms_description":"Controleer alle communicatie tussen apparaten","diagnostic_category_item_view_internal_comms_title":"Communicatie tussen apparaten","diagnostic_category_item_view_metering_description":"Controleer meterverbindingen","diagnostic_category_item_view_metering_title":"Bemetering","diagnostic_category_item_view_networking_description":"Controleer netwerkverbinding","diagnostic_category_item_view_networking_title":"Netwerk","diagnostic_category_item_view_no_selected_tests":"GEEN GESELECTEERDE TESTS","diagnostic_category_item_view_rerun_selected":"{num} GESELECTEERDE TESTS OPNIEUW UITVOEREN","diagnostic_category_item_view_rerun_selected_test":"GESELECTEERDE TEST OPNIEUW UITVOEREN","diagnostic_category_item_view_run_selected":"{num} GESELECTEERDE TESTS UITVOEREN","diagnostic_category_item_view_run_selected_test":"GESELECTEERDE TEST UITVOEREN","diagnostic_category_item_view_self_tests_description":"Laad- en ontlaadtests op het systeem starten","diagnostic_category_item_view_self_tests_title":"Zelftests","diagnostic_category_item_view_toggle_all_tests":"Alle wisselen","diagnostic_input_view_blocks_label":"BLOKKEN","diagnostic_input_view_max_allowed_charge_power_label":"MAX. TOEGESTAAN LAADVERMOGEN","diagnostic_input_view_max_allowed_discharge_power_label":"MAX. TOEGESTAAN ONTLAADVERMOGEN","diagnostic_test_enable_line":"Inschakelkabel","diagnostic_test_item_view_ac_self_test_description":"Zelftest wisselspanning","diagnostic_test_item_view_dc_self_test_description":"Zelftest gelijkspanning","diagnostic_test_item_view_enable_line_description":"Test inschakelkabel hoog voor alle Powerwalls","diagnostic_test_item_view_enable_line_resolution":"Zet inschakelkabel uit en weer aan en probeer het opnieuw","diagnostic_test_item_view_meter_comms_description":"Ping metercommunicatie","diagnostic_test_item_view_network_connection_description":"Test verbinding met internet en Tesla-servers","diagnostic_test_item_view_network_connection_resolution":"Herconfigureer netwerk","diagnostic_test_item_view_resolution_generic_text":"Herconfigureer {name} en probeer het opnieuw","diagnostic_test_item_view_step_canceled":"Test is geannuleerd door gebruiker","diagnostic_test_item_view_step_config_update_status":"Controleer status Tesla-configuratieserver","diagnostic_test_item_view_step_google_http":"Ping Google-HTTP","diagnostic_test_item_view_step_google_https":"Ping Google-HTTPS","diagnostic_test_item_view_step_hermes_status":"Controleer status Tesla-aanmeldserver","diagnostic_test_item_view_step_results_ip_address":"IP-adres","diagnostic_test_item_view_step_results_subnet_mask":"Subnet","diagnostic_test_item_view_table_header_key":"Identificatie","diagnostic_test_item_view_table_header_name":"Stap","diagnostic_test_item_view_table_header_value":"Waarde","diagnostic_test_meter_comms":"Metercommunicatie","diagnostic_test_network_connection":"Netwerkverbinding","diagnostics_composite_view_no_tests_found":"GEEN BESCHIKBARE TESTS GEVONDEN","diagnostics_composite_view_run_all_selected_tests":"ALLE GESELECTEERDE TESTS UITVOEREN","diagnostics_container_industrial_disruptive_tests_description":"De volgende tests laten de ventilator en thermische systemen werken, wat geluid genereert. Er kan ongeveer 30 kW per omvormerafname worden verwacht. Bovendien kunnen de volgende tests de normale werking van het systeem verstoren:","diagnostics_container_required_inputs_description":"De volgende tests vereisen extra invoer:","diagnostics_container_residential_disruptive_tests_description":"De volgende tests kunnen de normale werking van zowel de gateway als de Powerwall verstoren:","diagnostics_container_stop_test_title":"Test {name} stoppen?","diagnostics_container_subtitle":"Tools om problemen met de systeeminstallatie te diagnosticeren.","diagnostics_container_tests_running":"Diagnostische tests worden uitgevoerd","diagnostics_container_title":"Diagnose","dropdown_default_placeholder":"Typ...","dropdown_list_view_select_all":"Alles selecteren","dropdown_list_view_select_field":"Selecteer een veld.","dropdown_list_view_show_complete":"OVERSCHAKELEN NAAR COMPLETE LIJST","dropdown_list_view_show_searchable":"OVERSCHAKELEN NAAR DOORZOEKBARE LIJST","error_details":"Foutdetails","error_item_view_check_network":"Controleer netwerkverbinding.","error_item_view_disconnected":"Verbinding met gateway verbroken. Controleer netwerkverbinding en {refresh}","error_item_view_forgot_password":"Klik om wachtwoord te resetten.","error_item_view_refresh_browser":"Vernieuw browser.","error_item_view_try_logging_in_again":"Probeer opnieuw aan te melden.","ethernet_view_backup_dns_label":"BACK-UP DNS-SERVER","ethernet_view_backup_dns_warning":"Geldige back-up DNS-server","ethernet_view_configuration_label":"CONFIGURATIE","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY (OPT)","ethernet_view_gateway_warning":"Geldige gateway (router)-IP","ethernet_view_ip_address_label":"IP-ADRES","ethernet_view_ip_address_warning":"Geldig IP-adres","ethernet_view_not_available":"Niet beschikbaar","ethernet_view_primary_dns_label":"PRIMAIRE DNS-SERVER","ethernet_view_primary_dns_warning":"Geldige primaire DNS-server","ethernet_view_static_label":"Statisch","ethernet_view_subnet_mask_label":"SUBNETMASKER (OPT)","ethernet_view_subnet_mask_warning":"Geldig subnetmasker","field_false":"Niet waar","field_true":"Waar","form_legend_text":"duidt een vereist veld aan","generation_container_connecting_status":"Beginnend","generation_container_connection":"Omvormer {id} Verbinding","generation_container_connection_summary":"Tijdens dit verbindingsproces kunt u tijdelijk de verbinding met het netwerk verbreken. {lb} Zorg ervoor dat u opnieuw verbinding maakt met het juiste netwerk. Dit kan tot 3 minuten duren.","generation_container_subtitle":"Voeg hieronder informatie over de PV-omvormer en generator toe.","generation_container_title":"Genereren","generator_item_view_disconnect_type_label":"TYPE WERKSCHAKELAAR","generator_item_view_generator":"GENERATOR {id}","generator_item_view_manufacturer_label":"FABRIKANT (OPT)","generator_item_view_model_label":"MODEL","generator_item_view_serial_label":"SERIENUMMER","generator_item_view_sustained_power_label":"DUURZAAM VERMOGEN","generator_view_add_generator":"GENERATOR TOEVOEGEN","grid_code_container_off_grid_confirmation":"Is het systeem losgekoppeld van het elektriciteitsnet?","grid_code_container_off_grid_detected":"Van het net losgekoppeld systeem gedetecteerd. Controleer of dit de juiste instelling is.","grid_code_container_off_grid_warning":"{warning} Kan de netstatus van het systeem niet detecteren. Het instellen van de verkeerde netstatus kan leiden tot een systeemstoring.","grid_code_container_results":"Resultaten van detectie van elektriciteitsnet","grid_code_container_retrieving":"Netcodes ophalen","grid_code_container_saving":"Netcode opslaan","grid_code_container_subtitle":"Zoek op basis van locatie en meterstanden de beste instellingen voor uw installatie.","grid_services_view_grid_services":"Elektriciteitsnetservice","help_view_how_password":"Wachtwoord voor gateway zoeken","help_view_how_password_description":"Open de deur van de gateway. Het wachtwoord staat op de sticker achter \\"Password:\\"","help_view_how_serial_number":"Het serienummer vinden op een niet-back-upgateway","help_view_how_serial_number_backup":"Het serienummer vinden op een back-upgateway","help_view_how_serial_number_backup_description":"Open de deur van de back-upgateway. Het serienummer begint met een \\"(S):\\"","help_view_how_serial_number_description":"Open de deur van de gateway. Het serienummer begint met een \\"(S):\\"","help_view_how_to_enable_line":"Een Powerwall in-/uitschakelen","help_view_how_to_enable_line_description":"Zet de schakelaar van de Powerwall in de uit-stand en vervolgens weer in de aan-stand. Bij systemen met meerdere Powerwalls hoeft u slechts één schakelaar te bedienen","hierarchy_charger":"Laderblok {index}","hierarchy_chinv":"VFD voor compressor en verwarming (CHINV)","hierarchy_converter":"DC-DC-omvormer (STARC)","hierarchy_inverter":"Batterijblok {name}","hierarchy_mega_thermal_controller":"Temperatuurregeling (MPTHC)","hierarchy_missing_post":"Ontbrekende paal","hierarchy_mpbc":"Batterijblok {name}","hierarchy_part_number":"Onderdeelnummer","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Rapportage pods","hierarchy_post":"Paal (LCC)","hierarchy_posts":"Palen","hierarchy_power_stage":"Vermogensfase","hierarchy_power_stages":"Vermogensfasen","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Batterijmanagementsysteem (QBMS)","hierarchy_qhvp":"Hoogspanningsprocessor (QHVP)","hierarchy_scthcs":"Temperatuurregelaars","hierarchy_serial_number":"Serienummer","hierarchy_sitemaster":"Sitemaster {name}","hierarchy_starcs":"DC-DC-omvormers","hierarchy_stitch":"Controlevermogen DC-DC (STITCH)","hierarchy_thermal_controller":"Temperatuurregeling (SCTHC)","higher_order_login_login_required":"Inloggen vereist","higher_order_login_title":"Laten we aan de slag gaan.","home_container_inactive_meter":"Verouderde metergegevens","home_container_inactive_meter_description":"Controleer {type} meterverbinding.","home_container_inactive_meter_timestamp":"Laatste meterstand op {timestamp}","home_container_login_required":"Inloggen vereist","home_container_missing_meter":"Meter ontbreekt","home_container_positive_meter":"Waarschuwing: Meter {type} is onjuist geconfigureerd","home_container_positive_meter_description":"Meter {type} vereist dat zowel het positieve vermogen als de stroomsterkte correct worden geconfigureerd.","home_container_powerwall_error":"Fout in Powerwall-systeem","home_container_site_controller_error":"Systeemfout sitecontroller","home_container_sitemaster_alternative":"Let op Normaal gesproken moet het systeem worden uitgeschakeld door de aan-uitschakelaar op alle Powerwalls uit te zetten en de stroomonderbrekers te openen.","home_container_sitemaster_confirm":"Klik hieronder alleen op Ja als u ervan overtuigd bent dat het systeem moet worden gestopt.","home_container_sitemaster_header_warning":"{warning} Dit stopt de Powerwall en de werking van het systeem.","home_container_sitemaster_logging":"Als het systeem uit is, wordt de logboekregistratie gestopt","home_container_sitemaster_reset":"Klik na het stoppen van het systeem nogmaals op de Start-knop op de landingspagina om het systeem weer te starten.","home_container_sitemaster_update":"Als een update wordt uitgevoerd, wordt deze beëindigd.","home_container_start_powerwall":"Powerwall-systeem starten","home_container_stop_powerwall":"Powerwall-systeem stoppen","home_view_download_all_logs":"Alle logs downloaden","home_view_download_logs":"LOGS DOWNLOADEN","home_view_download_logs_description_one":"Hiermee wordt een gecomprimeerde set systeemlogs gedownload die nuttig kunnen zijn bij het diagnosticeren van problemen met het besturingssysteem, de software en netwerken.","home_view_download_logs_description_three":"Logs zijn ondertekend en gecodeerd en moeten voor onderzoek naar Tesla Energy Service worden gestuurd.","home_view_download_logs_description_two":"Dit is vooral handig als de gateway niet met het netwerk kan worden verbonden en geavanceerde probleemoplossing nodig is.","home_view_login":"INLOGGEN","home_view_logout":"UITLOGGEN","home_view_run_wizard":"WIZARD STARTEN","input_accept":"Ik ga akkoord","input_consent":"Ik geef toestemming","input_decline":"Ik ga niet akkoord","input_no_consent":"Ik geef geen toestemming","input_title_email":"Voer een geldig e-mailadres in naam@naam.domein","installation_container_relay_section_modal_title":"Relais lage spanning gateway","installation_container_residual_current_device_modal_title":"Installatievereiste voor aardlekautomaten op locatie","installation_container_subtitle":"Informatie over installateur en locatie","installation_container_sync_relay_usage_open_off_grid":"Open relais bij loskoppeling van elektriciteitsnet","installation_container_title":"Informatie over installatie","installation_view_add_on_solar":"Add-on","installation_view_additional_connections_label":"AANVULLENDE VERBINDINGEN","installation_view_back_wiring":"Achterzijde","installation_view_backup_configuration_label":"NOODSTROOMCONFIGURATIE","installation_view_basement_location":"Kelder","installation_view_company_label":"BEDRIJFSNAAM","installation_view_company_placeholder":"Bedrijfsnaam","installation_view_conditioned_space_location":"Geconditioneerde ruimte","installation_view_existing_solar":"Bestaand","installation_view_floor_mounting":"Vloer","installation_view_garage_location":"Garage","installation_view_home_label":"HUISBEDRADING","installation_view_location_label":"POWERWALL INSTALLATIEPLAATS","installation_view_modem_ethernet":"Mobiele modem met Ethernet?","installation_view_modem_wifi":"Mobiele modem met wifi?","installation_view_mounting_label":"POWERWALL-MONTAGE","installation_view_na_backup_configuration":"Niet toepasbaar","installation_view_new_solar":"Nieuw","installation_view_none_solar":"Geen","installation_view_outdoor_location":"Buiten","installation_view_pad_mounting":"Blok","installation_view_partial_home_backup_configuration":"Deel van woning","installation_view_phone_label":"TELEFOON","installation_view_phone_placeholder":"Telefoonnummer installateur","installation_view_powerline_ethernet":"Voedingsaansluiting met Ethernet?","installation_view_pv_panel":"PV-paneel","installation_view_relay_enabled":"Open relais bij loskoppeling van elektriciteitsnet","installation_view_relay_label":"RELAIS LAGE SPANNING GATEWAY","installation_view_relay_options_modal_content":"Bij aansluiting op het elektriciteitsnet of op een andere wisselspanningsbron wordt dit relais gesloten. {lb1} Bij loskoppeling van elektriciteitsnet is dit relais open. {lb1} Dit kan bijvoorbeeld worden gebruikt om airconditioning te laten werken wanneer deze op het elektriciteitsnet is aangesloten en vervolgens niet wanneer deze niet op het elektriciteitsnet is aangesloten om te voorkomen dat de bijbehorende hoge inschakelstroom de Powerwalls overbelast.","installation_view_relay_section_modal_content":"De gateway heeft een ingebouwd relais dat wordt bediend om in en uit te schakelen aan de hand van de systeemstatus. {lb1} Dit kan worden gebruikt om een extern apparaat aan te sturen, zoals een verbruiker of een secundaire energiebron. {lb1} Gebruik op back-upgateway 1 de pennen 1 en 2 op de hulpconnector (9-pens grote groene Phoenix-connector). {lb1} Gebruik op back-upgateway 2 de pennen 3 en 4 op de hulpconnector (5-pens grote groene Phoenix-connector). {lb1} Dit relais heeft een vermogen van 60 volt / 2 ampère en wordt gewoonlijk gebruikt met circuits van 12 V of 24 V. {lb1} Bekijk verlaging van het verbruik en gerelateerde toepassingsvoorbeelden voor meer details.","installation_view_residual_current_device":"Is er een aardlekautomaat stroomopwaarts van gateway geïnstalleerd?","installation_view_residual_current_device_modal_content":"Voor bepaalde installaties kunnen aardlekautomaten op locatieniveau vereist zijn, zoals netwerken met TT-aardingsconfiguratie. {lb1}{lb2} Om het risico van hinderlijke uitschakeling bij gebruik zonder aansluiting op het elektriciteitsnet te verminderen, raadt Tesla aan ervoor te zorgen dat alle stroomopwaartse aardlekautomaten tijdvertraagd zijn (type S), of indien mogelijk de aardlekautomaat van de locatie na de contactgever van de gateway te plaatsen. {lb1}{lb2} Raadpleeg voor aanvullende informatie het toepassingsvoorbeeld over de aardlekautomaat en aardlekbeveiliging.","installation_view_satellite_ethernet":"Satellietverbinding met Ethernet?","installation_view_satellite_wifi":"Satellietverbinding met wifi?","installation_view_side_wiring":"Zijkant","installation_view_solar_label":"INSTALLATIE VAN ZONNEPANELEN","installation_view_solar_type_label":"TYPE ZONNE-INSTALLATIE","installation_view_solarglass":"Zonneglas","installation_view_stack_kit":"Heeft Stack Kit?","installation_view_type_commercial":"Bedrijf","installation_view_type_label":"INFORMATIE OVER INSTALLATIE","installation_view_type_perm_off_grid":"Permanent buiten elektriciteitsnetwerk","installation_view_type_residential":"Woonwijk","installation_view_wall_mounting":"Wand","installation_view_whole_home_backup_configuration":"Hele woning","installation_view_wifi_extender":"Wifi-verlenger?","installation_view_wiring_label":"BEDRADING POWERWALL","inverter_test_view_accuracy_magnitude":"Nauwkeurigheid grootte","inverter_test_view_accuracy_time":"Nauwkeurigheid tijd","inverter_test_view_complete":"Voltooid","inverter_test_view_current_magnitude":"Grootte stroom","inverter_test_view_fail":"Mislukt","inverter_test_view_na":"N.v.t.","inverter_test_view_not_run":"Niet uitgevoerd","inverter_test_view_pass":"Geslaagd","inverter_test_view_running":"Wordt uitgevoerd","inverter_test_view_set_magnitude":"Grootte instellen","inverter_test_view_set_time":"Tijd instellen","inverter_test_view_test_description":"Zelftest van de omvormer wordt uitgevoerd","inverter_test_view_test_name_all":"Alle tests","inverter_test_view_test_name_over_freq_stage_one":"Overfrequentie fase 1","inverter_test_view_test_name_over_freq_stage_two":"Overfrequentie fase 2","inverter_test_view_test_name_over_volt_one":"Overspanning fase 1","inverter_test_view_test_name_over_volt_two":"Overspanning fase 2","inverter_test_view_test_name_under_freq_stage_one":"Onderfrequentie fase 1","inverter_test_view_test_name_under_freq_stage_two":"Onderfrequentie fase 2","inverter_test_view_test_name_under_volt_one":"Onderspanning fase 1","inverter_test_view_test_name_under_volt_two":"Onderspanning fase 2","inverter_test_view_timestamp":"Tijdstempel","inverter_test_view_trip_magnitude":"Grootte uitschakelen","inverter_test_view_trip_time":"Tijd uitschakelen","inverter_test_view_warning":"Let op De omvormertest kan 20 tot 30 minuten per omvormer duren.","label_fail":"Mislukt","label_inconclusive":"Onduidelijk","label_pass":"Geslaagd","legal_container_customer_policy_subtitle":"Dient te worden ingevuld door de huiseigenaar.","legal_container_customer_policy_title":"Privacybeleid en beperkte garantie voor Tesla-klanten","legal_container_no_meters_warning":"GEEN METERS GECONFIGUREERD","legal_container_no_powerwalls_warning":"GEEN POWERWALLS GEDETECTEERD","login_type_customer":"Klant","login_type_engineer":"Technicus","login_type_installer":"Installateur","login_view_cancel_login_auth":"Aanmelding annuleren","login_view_change_forgot_password":"PASWOORD WIJZIGEN OF VERGETEN","login_view_customer_email_placeholder":"E-mail klant","login_view_email":"E-MAIL","login_view_email_placeholder":"e-mail hoofdinstallateur","login_view_forgot_password":"PASWOORD VERGETEN","login_view_forgot_password_login_type":"Selecteer inlogwijze","login_view_language_label":"TAAL","login_view_login_type_label":"INLOGWIJZE","login_view_password_placeholder":"Voer uw passwoord in","login_view_start_login_auth":"AANMELDINGSPROCES STARTEN","login_view_start_login_auth_how_to_enable_line_description":"Zet de schakelaar van de Powerwall in de uit-stand en vervolgens weer in de aan-stand om u aan te melden. Bij systemen met meerdere Powerwalls hoeft u slechts één schakelaar te bedienen","login_view_username":"GEBRUIKERSNAAM","login_view_username_placeholder":"Gebruikersnaam","login_warning_view_expand":"Als de wizard niet start {click}.","login_warning_view_firmware_update":"Wanneer een firmware-update wordt uitgevoerd","login_warning_view_heading":"{warning} Door het starten van de wizard wordt de werking van de batterij onderbroken.","login_warning_view_protect_system":"Om het systeem te beschermen, wordt de wizard niet gestart","login_warning_view_stop_operation":"wizard geforceerd starten (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Momenteel worden alleen Chrome en Safari als webbrowser ondersteund.","login_warning_view_system_force_launch":"Als u de wizard wilt starten en de werking van het systeem wilt stoppen, selecteer dan wizard geforceerd starten.","login_warning_view_system_off_grid":"Wanneer het elektrische systeem niet op het elektriciteitsnet is aangesloten","login_warning_view_warning_click":"klik voor meer","meter_aggregate_type_battery":"Batterij","meter_aggregate_type_load":"Laden","meter_aggregate_type_site":"Locatie","meter_aggregate_type_solar":"Zonne-energie","meter_container_add_meter_error":"Meter verifiëren","meter_container_add_meter_status":"Meter toevoegen","meter_container_authorizing_status":"Autoriseren","meter_container_decode":"Kon serienummer niet vanaf afbeelding decoderen.","meter_container_detecting_status":"Bekabelde meters detecteren","meter_container_failed_status":"Toevoegen van meter is mislukt","meter_container_reconnecting_status":"Opnieuw verbinding maken","meter_container_skip_title":"Er zijn geen meters in gebruik genomen, weet u zeker dat u door wilt gaan?","meter_container_starting_status":"Starten","meter_container_subtitle":"Voer de verkorte ID(\'s) en serienummer(s) van de energiemeter in om verbinding te maken. Test elke meter nadat deze in gebruik is genomen.","meter_container_subtitle_industrial":"Voer IP-adres(sen) en locatie(s) van de energiemeter in om verbinding te maken. Test elke meter nadat deze in gebruik is genomen.","meter_container_success_status":"Meter is toegevoegd","meter_container_title":"Meters","meter_container_unknown_status":"Onbekend","meter_container_updating_status":"Meter updaten","meter_container_verification":"Verificatie van meter {id}","meter_container_verification_gw1":"Tijdens dit wifi-koppelingsproces is het mogelijk dat u tijdelijk geen verbinding hebt met het wifi-netwerk van de gateway. {lb} Zorg dat u opnieuw verbinding maakt met het juiste netwerk. Dit kan 3 minuten duren.","meter_container_verification_gw2":"Het wifi-koppelingsproces kan tot wel 3 minuten duren.","meter_container_verify_meter_error":"Meter verifiëren","meter_container_verifying_status":"Meter verifiëren","meter_item_view_advanced_settings":"GEAVANCEERDE INSTELLINGEN (OPTIONEEL)","meter_item_view_battery_ct":"Batterij","meter_item_view_battery_location":"Batterij","meter_item_view_check_meter":"VERBINDING METER {id} CONTROLEREN","meter_item_view_conductor_location":"Geleider","meter_item_view_cts":"{count} stroomtrafo\'s gedetecteerd","meter_item_view_doubled_solar_location":"Verdubbelde zonne-energie","meter_item_view_generator_location":"Generator","meter_item_view_ip_address":"IP-ADRES","meter_item_view_load_location":"Laden","meter_item_view_mac_address":"MAC-ADRES","meter_item_view_meter_location":"METERLOCATIE","meter_item_view_none_location":"Geen","meter_item_view_serial":"SERIENUMMER","meter_item_view_short_id":"VERKORTE ID","meter_item_view_site_ct":"Locatie","meter_item_view_site_location":"Locatie","meter_item_view_solar_ct":"Zonne-energie","meter_item_view_solar_location":"Zonne-energie","meter_item_view_success":"VERBINDING IS GEMAAKT!","meter_item_view_unable":"KAN METER NIET DETECTEREN!","meter_item_view_upgrading":"METER IS BIJGEWERKT!","meter_list_view_add":"WIFI METER TOEVOEGEN","meter_list_view_add_ip":"IP-METER TOEVOEGEN","meter_list_view_detect":"BEKABELDE METERS DETECTEREN","meter_list_view_enable_inverter_readings":"Aflezingen batterijomvormers inschakelen","meter_list_view_inverter_meter":"OMVORMERMETERS","meter_list_view_inverter_meter_desc":"Wanneer dit is ingeschakeld en er geen batterijmeters zijn geconfigureerd, gebruikt de sitecontroller aflezingen van de batterijomvormers als batterijmeter.","meter_sync_id":"SYNC METER {id}","meter_update_modal_fetch_status_error":"Kan de update-status van de meter niet ophalen","meter_update_modal_footer":"Meter-update kan tot 2 minuten duren","meter_update_modal_remaining_time":"Resterende tijd: {seconds} seconden","meter_update_modal_timeout_error":"Er is een time-out opgetreden tijdens het bijwerken van de meter","meter_update_modal_title":"Meter-update is onderweg","meter_validation_container_error":"Metervalidatie niet beschikbaar terwijl sitecontroller actief is.","meter_validation_container_error_placeholder":"Metervalidatie niet beschikbaar: {error}.","meter_validation_container_power_command":"Vermogensopdracht","meter_validation_container_power_start":"Starten","meter_validation_container_power_stop":"Stop","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Reactief-vermogensopdracht","meter_validation_container_real_power_command":"Werkelijk-vermogensopdracht","meter_validation_container_title":"Metervalidatie","meter_validation_container_usage":"Stuur een vermogensopdracht en valideer de metergegevens. U moet op deze pagina blijven om de vermogensopdracht continu te houden. Bij negatieve waarden wordt het systeem opgeladen. Bij positieve waarden wordt het systeem ontladen.","meter_validation_control_subtitle":"Regel","meter_validation_control_title":"Titel controle","meter_validation_disable":"Uitschakelen","meter_validation_loading":"Laden","meter_validation_menu":"Menu","meter_validation_reset":"Herstellen","meter_validation_submit":"Indienen","meter_validation_submitting_control":"Indieningscontrole","meter_validation_title":"Metervalidatie","meter_validation_view_apparent_power":"Schijnbaar vermogen (kVA)","meter_validation_view_battery_location":"Batterij","meter_validation_view_conductor_location":"Geleider","meter_validation_view_current":"Stroom (A)","meter_validation_view_doubled_solar_location":"Verdubbelde zonne-energie","meter_validation_view_generator_location":"Generator","meter_validation_view_hz":"Hz","meter_validation_view_inverters":"Omvormers ({length})","meter_validation_view_ka":"kA","meter_validation_view_kv":"kV","meter_validation_view_kvar":"kVAr","meter_validation_view_kw":"kW","meter_validation_view_kwh":"kWh","meter_validation_view_load_location":"Laden","meter_validation_view_meter":"Meters ({length})","meter_validation_view_none_location":"Geen","meter_validation_view_pf":"Vermogensfactor","meter_validation_view_phase_a":"A","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Totaal","meter_validation_view_reactive_power":"Reactief vermogen (kVAr)","meter_validation_view_real_power":"Werkelijk vermogen (kW)","meter_validation_view_site_location":"Locatie","meter_validation_view_solar_location":"Zonne-energie","meter_validation_view_voltage":"Spanning (U)","meter_wifi_id":"METER {id}","meter_wired_id":"BEDRADE METER {id}","metrics_aggregate":"Systeem","metrics_apparent_power":"Schijnbaar vermogen ({unit})","metrics_battery":"Batterij","metrics_current":"Stroom ({unit})","metrics_meter":"Meter","metrics_no_metrics":"Geen gegevens om weer te geven","metrics_power_factor":"Vermogensfactor","metrics_reactive_power":"Reactief vermogen ({unit})","metrics_real_power":"Werkelijk vermogen ({unit})","metrics_subtitle":"Gegevens","metrics_voltage_l_n":"Spanning L-N ({unit})","modal_acknowledge":"ERKENNEN","modal_confirm":"BEVESTIGEN","modal_exit":"AFSLUITEN","modal_no":"NEE","modal_note":"Let op","modal_ok":"OK","modal_reconfigure":"HERCONFIGUREREN","modal_yes":"JA","modbus_container_title":"Modbus-interface","modbus_table_register_address":"Adres","modbus_table_register_name":"Naam","modbus_table_register_type":"Type","modbus_table_register_value":"Waarde","modbus_table_register_value_decimal":"Waarde (decimaal)","modbus_table_register_value_hex":"Waarde (hex)","navigation_email":"E-MAIL","network_cellular_configured":"Geconfigureerd maar niet verbonden. Zorg ervoor dat het mobiele netwerk beschikbaar is en dat er geen obstakels rond de antenne zijn.","network_connected":"Verbonden","network_container_connect_ethernet":"Verbinden met Ethernet","network_container_connect_to_internet":"Wacht tot het systeem verbinding probeert te maken met internet.","network_container_connect_wifi":"Verbinding maken met {ssid}","network_container_connect_wifi_description":"Tijdens dit proces moet u mogelijk opnieuw verbinding maken met het Gateway-netwerk om de installatie voort tezetten.","network_container_connman":"Powerwall Connectie Beheerder verbindt automatisch met het beste netwerk.","network_container_connman_body":"Om een verbinding te garanderen, configureer alle beschikbare verbindingstypen:","network_container_delete_network":"Geconfigureerd netwerk verwijderen?","network_container_ethernet_and_wifi_warning":"Configureer beschikbare Ethernet en Wifi netwerken om een verbinding te garanderen.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configureer beschikbare Ethernet netwerken om een verbinding te garanderen.","network_container_network_description":"Om een verbinding te garanderen, configureer alle beschikbare verbindingstypen","network_container_network_subtitle":"Netwerk","network_container_no_internet_bullet_four":"De Powerwall prestatiegegevens naar Tesla kan verzenden zodat de technische ondersteuning problemen kan identificeren","network_container_no_internet_bullet_four_industrial":"Apparaten kunnen prestatiegegevens naar Tesla verzenden zodat de technische ondersteuning problemen kan identificeren","network_container_no_internet_bullet_one":"De Powerwall-registratiegegevens naar Tesla worden verzonden om de volledige 10 jaar garantie te activeren","network_container_no_internet_bullet_three":"De klant de mobiele app van Tesla kan gebruiken om het energieverbruik in de gaten te houden en de Powerwall te bedienen.","network_container_no_internet_bullet_two":"De Powerwall externe firmware-updates kan ontvangen die prestatieverbeteringen en nieuwe functies mogelijk maken","network_container_no_internet_bullet_two_industrial":"Apparaten kunnen externe firmware-updates ontvangen die prestatieverbeteringen en nieuwe functies mogelijk maken","network_container_no_internet_title":"Als de installatielocatie een beschikbare internetverbinding heeft, mag u deze stap niet overslaan. Verbind de Powerwall via Ethernet (voorkeur) of Wifi met internet van de klant of maak verbinding met een mobiel netwerk.","network_container_no_internet_warning":"Het is belangrijk een betrouwbare internetverbinding tot stand te brengen, zodat","network_container_scan_networks":"Scan Wifi Netwerken","network_container_scan_wifi_disconnect_warning":"Waarschuwing: Scannen voor nieuwe netwerken verbreekt tijdelijk de draadloze verbinding.","network_container_wifi_subtitle":"Wifi","network_container_wifi_warning":"Configureer beschikbare Wifi netwerken om een verbinding te garanderen.","network_disabled":"Uitgeschakeld","network_disconnected":"Niet verbonden","network_ethernet_configured":"Geconfigureerd maar niet verbonden. Controleer de ethernetkabelverbinding.","network_view_check_connection":"INTERNETVERBINDING CONTROLEREN","network_view_connection_failed":"NIET VERBONDEN!","network_view_connection_success":"VERBINDING IS GEMAAKT!","network_view_continue_no_internet":"DOORGAAN ZONDER INTERNET","network_view_default_error":"Verbindingsfout","network_view_local_network_connected":"Lokaal netwerk verbonden","network_view_local_network_disconnected":"Fout in lokaal netwerk","network_view_tesla_internet_connected":"Tesla Services en internet verbonden","network_view_tesla_internet_disconnected":"Verbindingsfout Tesla Services en internet","network_warning":"Waarschuwing","network_wifi_configured":"Geconfigureerd maar niet verbonden. Controleer uw wifi-instellingen.","open_meter_validatiion_container_title":"Metervalidatie openen","operation_mode_autonomous":"Autonome modus","operation_mode_backup":"Alleen back-up laden","operation_mode_self_consumption":"Modus eigen gebruik","operation_mode_site_control":"Locatieregeling","overview_menu_control_title":"Regel","overview_menu_diagnostics_title":"Diagnose","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Verbonden","overview_menu_network_no_connection":"Geen verbinding","overview_menu_registration_complete":"Voltooid","overview_menu_registration_incomplete":"Niet voltooid","overview_menu_registration_pending":"In afwachting van internetverbinding","overview_menu_security_title":"Paswoord wijzigen of resetten","overview_menu_summary_title":"Overzicht","overview_menu_update_title":"Software-update","overview_menu_view_alerts_event":"Gebeurtenis","overview_menu_view_alerts_events":"Gebeurtenissen","overview_menu_view_inverter_title":"Omvormertest","overview_menu_view_network_title":"Netwerk","overview_menu_view_registration_title":"Registratie","overview_menu_view_test_title":"Zelftest","overview_meter_validation_title":"Metervalidatie","phase_container_detect_timeout":"Time-out fasedetectie","phase_container_detection_attempt":"Poging #{num}","phase_container_grid_code_validating_modal_title":"Netcode valideren","phase_container_grid_compliant_description":"Netconform {checkmark}","phase_container_grid_modal_description":"Net is conform over {time} seconden.","phase_container_grid_modal_title":"Wachten op netconformiteit ","phase_container_modal_description":"Fasedetectie kan tot wel 2 minuten per Powerwall duren.","phase_container_modal_title":"Fasedetectie wordt uitgevoerd","phase_container_saving_phases_modal_title":"Fasen opslaan","phase_container_subtitle":"Bekijk op welke lijn elke Powerwall is en werk de lijnstatus bij","phase_container_supported_error":"Geen Powerwalls gedetecteerd. Fasedetectie wordt niet ondersteund.","phase_container_title":"Fase","phase_container_voltage_caution_body":"Onverwachte spanning {voltage}V gedetecteerd op {lineNumber}. Controleer nogmaals of {lineStatus} de juiste instelling is voor deze fase.","phase_container_warning_body":"Er zijn geen back-upfasen geselecteerd. Daarom ondersteunt het systeem geen verbruik wanneer de verbinding met het net is verbroken.","phase_container_warning_modal_header":"Back-up is uitgeschakeld","phase_line_id":"Lijn-{id}","phase_line_item_view_line":"Lijn","phase_line_item_view_line_status_backup":"Back-up","phase_line_item_view_line_status_configured":"Geen back-up","phase_line_item_view_line_status_not_configured":"Niet geconfigureerd","phase_line_status_backup":"Back-up","phase_line_status_configured":"Geen back-up","phase_line_status_not_configured":"Niet geconfigureerd","phase_view_detect":"FASEN DETECTEREN","phase_view_split_phase":"Fasesplitsing","power_flow_view_start_system":"SYSTEEM STARTEN","power_flow_view_stop_system":"SYSTEEM STOPPEN","powerwall_container_industrial_no_additional_title":"Geen extra batterijblokken gevonden","powerwall_container_industrial_subtitle":"In de lijst staan alle batterijblokken die automatisch zijn gedetecteerd door de sitecontroller. Scan opnieuw als het batterijblok niet in de lijst staat.","powerwall_container_industrial_title":"Batterijblok","powerwall_container_industrial_updating":"Batterijblokken verifiëren","powerwall_container_no_additional_powerwalls_description":"Raadpleeg de Powerwall-installatiehandleiding voor tips over het oplossen van eventuele problemen met de bekabeling.","powerwall_container_no_additional_powerwalls_title":"Geen extra Powerwalls gevonden","powerwall_container_scan_again":"OPNIEUW SCANNEN","powerwall_container_scanning":"Scannen","powerwall_container_scanning_for_more":"Scannen voor meer","powerwall_container_subtitle":"Vermeld worden alle Powerwalls die automatisch door de Gateway worden gedetecteerd. Scan opnieuw als een Powerwall niet in de lijst staat.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Powerwalls verifiëren","powerwall_container_updating_note":"Let op Dit kan 60 seconden per Powerwall duren.","powerwall_item_view_blank_numbers":"In afwachting van verificatie…","powerwall_item_view_numbers":"OnderdeelNummer {partNumber} Serienummer {serialNumber}","powerwall_item_view_powerwall":"POWERWALL {id}","powerwall_starting":"Powerwall starten","powerwall_view_detected_backup":"Gedetecteerde back-upmogelijkheden","powerwall_view_detected_synchrometers":"Gedetecteerde metermogelijkheid","powerwall_view_failed":"MISLUKT","powerwall_view_no_backup":"Geen back-upmogelijkheden gedetecteerd","powerwall_view_no_sync":"Geen synchronisatieroutine gedetecteerd","powerwall_view_scan":"SCANNEN","powerwall_view_success":"GELUKT","powerwall_view_synchrometer_detected":"Synchrometers gedetecteerd","powerwall_view_synchronizer_detected":"Synchronisatieroutine gedetecteerd","powerwall_view_update":"POWERWALLS VERIFIËREN","privacy_policy_view_accept_warranty_title":"Akkoord gaan met de beperkte garantie van Tesla Powerwall","privacy_policy_view_contact_bullet_one":"via e-mail naar {privacyEmail};","privacy_policy_view_contact_bullet_two":"via post naar Tesla Inc. t.a.v. Legal 45500 Fremont Boulevard Fremont California 94538, Verenigde Staten.","privacy_policy_view_contact_header":"Contact","privacy_policy_view_contact_paragraph_one":"Om contact met ons op te nemen voor een vraag of opmerking of om u af te melden voor bepaalde diensten, neemt u contact met ons op","privacy_policy_view_contact_paragraph_three":"Als u zich bevindt in de Europese Economische Ruimte of Zwitserland, kan uw plaatselijke bij Tesla aangesloten bedrijf de entiteit zijn die verantwoordelijk is voor het verwerken van uw persoonsgegevens.","privacy_policy_view_contact_paragraph_two":"Let op dat e-mailcommunicatie niet altijd beveiligd is, dus neem geen creditcardgegevens of gevoelige informatie op in uw e-mails naar ons.","privacy_policy_view_cross_border_transfers_header":"Internationale overdrachten","privacy_policy_view_cross_border_transfers_paragraph_one":"De Diensten worden geregeld en geëxploiteerd vanuit de Verenigde Staten. Informatie van of over u of uw gebruik van onze producten of de Diensten kan worden opgeslagen en verwerkt in elk land waar wij faciliteiten hebben of waar wij serviceproviders inschakelen. In deze landen geldt mogelijk niet dezelfde wetgeving ten aanzien van gegevensbescherming als in het land waarin u die gegevens in eerste instantie hebt verstrekt. Wanneer wij informatie van of over u of uw gebruik van onze producten of de Diensten overdragen naar andere landen zullen wij deze beschermen zoals beschreven in dit privacybeleid. Door gebruik te maken van onze producten, de Diensten of het anderszins verstrekken van informatie aan ons stemt u in met de overdracht van informatie van of over u of uw gebruik van onze producten of de Diensten naar landen buiten het land waar u verblijft, inclusief de Verenigde Staten.","privacy_policy_view_cross_border_transfers_paragraph_two":"Als u zich in de EER of Zwitserland bevindt, voldoen wij aan de van toepassing zijnde wettelijke vereisten die een adequate bescherming bieden voor de overdracht van persoonsgegevens naar landen buiten de EER of Zwitserland. Tesla heeft verklaard zich te houden aan het EU-VS Privacy Shield Framework, zoals uiteengezet door het Department of Commerce (Amerikaans ministerie van Handel) en de Europese Commissie, met betrekking tot de verwerking van bepaalde persoonsgegevens die van de EER naar Tesla en haar 100%-dochterondernemingen in de VS worden overgedragen. Tesla\'s {privacyShield} is hier beschikbaar.","privacy_policy_view_devices":"Van of over u of uw apparaten","privacy_policy_view_energy_products":"Van en over uw Tesla Energy-producten","privacy_policy_view_eu_policy_warning":"U dient akkoord te gaan met het privacybeleid om uw Powerwall te registreren en gegevens bij te houden in de mobiele Tesla-app.","privacy_policy_view_eu_warranty_warning":"Als u niet instemt met het Privacybeleid voor klanten van Tesla kunnen wij de volledige tienjarige garantie mogelijk niet honoreren. Tesla zal uw garantie honoreren gedurende ten minste vier jaar na de datum waarop uw Powerwall voor het eerst is geïnstalleerd, behoudens de uitsluitingen en beperkingen die in de garantie{warrantyLink} worden vermeld.","privacy_policy_view_grid_services":"Uw Powerwall kan de betrouwbaarheid van het elektriciteitsnet ondersteunen door services te leveren via optionele programma\'s van nutsbedrijven of derden. Deze services omvatten doorgaans een gedeeltelijke ontlading van uw Powerwall op gunstige tijdstippen in ruil voor financiële voordelen. Hiervoor dienen wij uw energieverbruik en Powerwall-gegevens te delen met nutsbedrijven of derden. Voordat we u aanmelden voor zo\'n programma, informeren we u over de details van het programma en geven we u de optie om niet deel te nemen. Als u zich op dat moment niet terugtrekt, wordt u aangemeld voor het programma.","privacy_policy_view_grid_services_title":"Elektriciteitsnetservice","privacy_policy_view_grid_warning":"U hoeft geen toestemming te geven. Als u geen toestemming geeft, kunnen we u later alsnog de kans geven deel te nemen aan deze programma\'s.","privacy_policy_view_here":"hier","privacy_policy_view_homeowner_na":"HUISEIGENAAR NIET BESCHIKBAAR","privacy_policy_view_homeowner_required":"Dient te worden ingevuld door de huiseigenaar","privacy_policy_view_information_collection_devices_bullet_five":"Via uw browser of apparaat: Bepaalde informatie wordt verzameld door de meeste browsers of automatisch via uw apparaat, zoals uw Media Access Control (MAC) adres, computertype (Windows of Macintosh), schermresolutie, besturingssysteem en versie, producent en model van uw apparaat, taal, browsertype en -versie en de naam en versie van de Diensten (zoals de Tesla App) die u gebruikt. Wij gebruiken deze informatie om te verzekeren dat de Diensten naar behoren werken.","privacy_policy_view_information_collection_devices_bullet_four":"Offline: Wij kunnen informatie van of over u offline verzamelen, zoals wanneer u een bezoek brengt aan een Tesla-winkel of reparatiefaciliteit, een van onze evenementen bijwoont, wanneer u zich aanmeldt voor een testrit, telefonisch een bestelling plaatst of contact opneemt met onze klantenservice of verkoopafdeling.","privacy_policy_view_information_collection_devices_bullet_one":"Via de Diensten: Wij kunnen informatie verzamelen van of over u via onze websites, software-applicaties, socialmediasites, e-mailberichten of andere digitale diensten (de \\"Diensten\\"), bijvoorbeeld wanneer u zich aanmeldt voor een nieuwsbrief, wanneer u een aankoop doet of wanneer u uw product registreert bij ons.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla Klanten die bepaalde Tesla-producten aanschaffen, ontvangen een My Tesla-account, dat gehost wordt op onze website. Wij kunnen de volgende soorten gegevens verzamelen en verwerken voor uw My Tesla-account; u kunt aangeven welke gegevens u aan ons verstrekt; uw klantregistratiegegevens; de status van uw bestelling; garantie en andere documentatie voor uw Tesla-producten; algemene informatie over uw Tesla-producten (bijvoorbeeld het voertuigidentificatienummer of ander productserienummer, informatie over het serviceprogramma of het connectiviteitspakket), verzekeringsformulieren, rijbewijzen, financieringsovereenkomsten en soortgelijke informatie. U kunt toegang krijgen tot uw Tesla-account om de informatie van of over u in dat account te allen tijde bij te werken.","privacy_policy_view_information_collection_devices_bullet_two":"Vanuit andere bronnen: Wij kunnen ook informatie over u ontvangen uit andere bronnen, zoals openbare gegevensbestanden, gezamenlijke marketingpartners, erkende installateurs, externe voertuigreparateurs of dienstencentra en socialmediaplatforms.","privacy_policy_view_information_collection_energy_products_bullet_one":"Wij kunnen informatie verzamelen over uw product, zoals uw installatiedatum, aantal geïnstalleerde producten enserienummer(s).","privacy_policy_view_information_collection_energy_products_bullet_two":"Om onze producten en diensten aan te bieden en te verbeteren, kunnen wij informatie verzamelen over waar uw product is geïnstalleerd en hoe het is geconfigureerd, gegevens met betrekking tot het gebruik en de prestaties van het product, gegevens met betrekking tot uw totale energieverbruik thuis en andere relevante gegevens om problemen te identificeren.","privacy_policy_view_information_collection_header":"Informatie die wij verzamelen","privacy_policy_view_information_collection_paragraph_five":"Als u niet langer wilt dat wij prestatiegegevens of andere gegevens van uw Tesla Energy-product verzamelen, neem dan contact met ons op zoals uiteengezet in de paragraaf \\"Contact\\" hieronder. Houd er rekening mee dat als u zich afmeldt voor het verzamelen van prestatiegegevens van uw Tesla Energy-product, wij u niet in real-time op de hoogte kunnen stellen van problemen met betrekking tot uw energieproduct en dat dit kan leiden tot beperking van de functionaliteit, ernstige schade of onbruikbaarheid van uw energieproduct. Daarnaast kunnen vele functies van uw energieproduct worden uitgeschakeld, waaronder periodieke software- en firmware-updates.","privacy_policy_view_information_collection_paragraph_four":"Wij kunnen een verscheidenheid aan informatie verzamelen van en over uw Tesla Energy-producten van u, via een erkende installateur of van de geïnstalleerde producten (direct of via gekoppelde apparatuur, zoals eenomvormer), waaronder","privacy_policy_view_information_collection_paragraph_one":"Wij verzamelen drie soorten informatie met betrekking tot u of uw gebruik van onze producten en diensten (1) informatie van of over uzelf of uw apparaten; (2) informatie van of over uw Tesla-auto; en (3) informatie van of over uw Tesla Energy-producten. Afhankelijk van de producten en diensten van Tesla die u aanvraagt, bezit of gebruikt, kan het zijn dat niet al deze informatie op u van toepassing is.","privacy_policy_view_information_collection_paragraph_three":"Wanneer u onze website bezoekt of anderszins onze Diensten gebruikt, kunnen wij gebruik maken van cookies, pixel tags, analytics tools en andere gelijksoortige technologieën om ons te helpen bij het leveren en verbeteren vanonze Diensten, zoals hieronder uiteengezet","privacy_policy_view_information_collection_paragraph_two":"Wij kunnen op verschillende manieren informatie verzamelen van of over u (zoals uw naam, adres, telefoonnummer, e-mail, betaalinformatie, etc.) of uw apparaten, waaronder:","privacy_policy_view_information_collection_services_bullet_five":"U kunt meer te weten komen over de praktijken van Google in verband met deze informatieverzameling en hoe u zich hiervoor kunt afmelden door de opt-out browser add-on van Google Analytics te downloaden die beschikbaar is op{website}.","privacy_policy_view_information_collection_services_bullet_four":"Analytics tools: Wij maken gebruik van diensten voor website- en toepassingsanalyses van derden die cookies en soortgelijke technologieën gebruiken om informatie over het gebruik van websites of toepassingen te verzamelen en trends te rapporteren zonder individuele bezoekers te identificeren. Derden die ons van deze diensten voorzien, kunnen ook informatie verzamelen over uw gebruik van websites van derden.","privacy_policy_view_information_collection_services_bullet_one":"Cookies zijn stukjes informatie die direct worden opgeslagen op de computer die u gebruikt. Cookies stellen ons in staat om informatie te verzamelen zoals het browsertype, de tijd die wordt besteed op de bezochte pagina\'s van de Diensten, taalvoorkeuren en andere internetverkeersgegevens. Onze serviceproviders en wijzelf gebruiken deze informatie voor veiligheidsdoeleinden om de onlinenavigatie te vergemakkelijken, zodat informatie effectiever kan worden weergegeven om uw ervaring te personaliseren tijdens het gebruik van de Diensten en om gebruikersactiviteiten te analyseren. We kunnen uw computer herkennen zodat wij u kunnen helpen bij het gebruik van de Diensten. We verzamelen ook statistische informatie over het gebruik van de Diensten om het ontwerp en de functionaliteit ervan voortdurend te verbeteren, te begrijpen hoe de Diensten worden gebruikt en ons te helpen bij het oplossen van vragen met betrekking tot de Diensten. Met cookies kunnen wij selecteren welke van onze advertenties of aanbiedingen u het meest aan zullen spreken en welke wij dus aan u willen tonen. We kunnen ook cookies gebruiken in onlinereclame om te zien hoe u met onze advertenties omgaat en we kunnen cookies of andere bestanden gebruiken om inzicht te krijgen in uw gebruik van andere websites.","privacy_policy_view_information_collection_services_bullet_three":"Pixel tags en andere soortgelijke technologieën Pixel tags (ook bekend als web beacons en clear GIFS) kunnen worden gebruikt in verband met sommige Diensten om, onder andere, de handelingen van gebruikers van de Diensten te volgen (inclusief e-mailontvangers), het succes van onze marketingcampagnes te meten en statistieken samen te stellen over het gebruik van de Diensten en responspercentages.","privacy_policy_view_information_collection_services_bullet_two":"Als u niet wilt dat informatie wordt verzameld door middel van cookies wanneer u uw My Tesla-account of onze website gebruikt, bieden de meeste browsers een eenvoudige procedure om cookies automatisch te weigeren of u krijgt de keuze om de overdracht naar uw computer van een bepaalde cookie (of cookies) van een bepaalde website te weigeren of te accepteren. U kunt ook {website} raadplegen. Als u deze cookies echter niet accepteert, kunt u ongemak ondervinden bij het gebruik van de Diensten. Zo kunnen we uw computer bijvoorbeeld niet herkennen en kan het zijn dat u moet inloggen telkens wanneer u de betreffende Diensten bezoekt.","privacy_policy_view_information_rights_choices_agree_eu":"U dient akkoord te gaan met het privacybeleid om uw Powerwall te registreren en gegevens bij te houden in de mobiele Tesla-app.","privacy_policy_view_information_rights_choices_agree_one":"U dient akkoord te gaan met het privacybeleid om uw Powerwall te registreren en gegevens bij te houden in de mobiele Tesla-app. Er is geen verdere actie nodig als u geen toegang wilt hebben tot uw Powerwall-gegevens via de mobiele Tesla-app.","privacy_policy_view_information_rights_choices_bullet_one":"U kunt toegang krijgen tot uw Tesla-account om de informatie van of over u in dat account te allen tijde bij tewerken.","privacy_policy_view_information_rights_choices_bullet_two":"Indien u informatie van of over u, welke eerder door u aan ons is verstrekt, wilt nakijken, corrigeren, bijwerken, schrappen of verwijderen, kunt u contact met ons opnemen op het onderstaande adres.","privacy_policy_view_information_rights_choices_header":"Rechten en keuzes","privacy_policy_view_information_rights_choices_paragraph_four":"Let op dat wij bepaalde informatie dienen te behouden voor onze administratie of wettelijke vereisten en/of om transacties te voltooien die u begon voordat u een dergelijke wijziging of verwijdering heeft aangevraagd (wanneer u bijvoorbeeld een aankoop doet of deelneemt aan een promotie, bent u mogelijk niet in staat om de informatie die u hebt opgegeven te veranderen of te verwijderen tot na de voltooiing van een dergelijke aankoop of promotie). Er kan ook resterende informatie zijn die in ons databases en andere administratie achterblijft die niet worden verwijderd.","privacy_policy_view_information_rights_choices_paragraph_one":"Zoals beschreven in de bovenstaande paragrafen geven wij u vele keuzes met betrekking tot het verzamelen, gebruiken en delen van informatie van of over u of uw gebruik van onze producten of de Diensten. Afhankelijk van de toepasselijke wetgeving in bepaalde rechtsgebieden kunt u ook het recht hebben om toegang te vragen tot en informatie te ontvangen over bepaalde informatie die wij over u bijhouden, onnauwkeurigheden in die informatie bij te werken en te corrigeren en de informatie te laten blokkeren of verwijderen. Deze rechten kunnen in bepaalde gevallen door de lokale wetgeving worden beperkt. Wij geven u verschillende methoden om toegang te verkrijgen tot correcte updates of verzoeken om blokkering of verwijdering van informatie van of over u, waaronder","privacy_policy_view_information_rights_choices_paragraph_three":"Wij zullen uw verzoek(en) om deze rechten en keuzes uit te oefenen zo snel als redelijkerwijs mogelijk is inwilligen.","privacy_policy_view_information_rights_choices_paragraph_two":"Geef in uw verzoek duidelijk aan welke informatie u zou willen wijzigen, of u de informatie die u ons heeft verstrekt uit onze database wilt laten verwijderen of laat ons op een andere manier weten welke beperkingen u ons wilt opleggen aan het gebruik van de informatie die u aan ons heeft verstrekt. Voor uw bescherming mogen wij alleen verzoeken uitvoeren met betrekking tot de informatie die verband houdt met het specifieke e-mailadres dat u gebruikt om ons uw verzoek te sturen en wij moeten mogelijk uw identiteit controleren voordat wij uw verzoekuitvoeren.","privacy_policy_view_information_share_header":"Hoe delen wij de informatie die wij verzamelen","privacy_policy_view_information_share_paragraph_eight":"In andere gevallen","privacy_policy_view_information_share_paragraph_eleven":"Als u zich wilt afmelden voor de verwerking van informatie waarvoor u uw uitdrukkelijke, voorafgaande toestemming hebt gegeven, kunt u dit doen door contact met ons op te nemen zoals uiteengezet in de paragraaf\\"Contact\\" hieronder.","privacy_policy_view_information_share_paragraph_five":"Wij kunnen informatie delen met andere derden die u goedkeurt, zoals in de volgende gevallen","privacy_policy_view_information_share_paragraph_five_point_four":"Met de aanbieder van uw socialmedia-account als u uw Diensten-account en uw socialmedia-account koppelt. Als u dit doet, machtigt u ons om informatie te delen met de aanbieder van uw socialmedia-account en bevestigt u dat het gebruik van de informatie die wij delen, komt te vallen onder het privacybeleid van de aanbieder van uw socialmedia-account.","privacy_policy_view_information_share_paragraph_five_point_one":"Met onze erkende installateurs om de door u verzochte levering van energieproducten aan u te faciliteren.","privacy_policy_view_information_share_paragraph_five_point_three":"Met externe sponsors van wedstrijden en gelijksoortige promoties, indien u ervoor kiest om deel te nemen.","privacy_policy_view_information_share_paragraph_five_point_two":"Met externe servicecentra of providers, indien u ervoor kiest om hiervan gebruik te maken. Let op dat sommige informatie over u wordt bewaard op bepaalde Tesla-producten en direct toegankelijk kunnen zijn voor de externe servicecentra of providers die u wenst te gebruiken om uw Tesla-product te controleren of onderhouden.","privacy_policy_view_information_share_paragraph_four":"Met andere derden die u goedkeurt","privacy_policy_view_information_share_paragraph_nine":"Wij kunnen informatie delen in andere gevallen, zoals","privacy_policy_view_information_share_paragraph_nine_point_one":"Met uw werkgever of andere wagenparkbeheerder of de eigenaar van het Tesla-product, als u niet de directe eigenaar bent en zoals toegestaan uit hoofde van de van toepassing zijnde wet.","privacy_policy_view_information_share_paragraph_nine_point_two":"Met een derde partij in verband met een reorganisatie, fusie, verkoop, joint venture, toewijzing, overdracht of andere beschikking van alle of een deel van onze onderneming, activa of aandelen (waaronder in verband met een faillissement of gelijksoortige procedures).","privacy_policy_view_information_share_paragraph_one":"Wij kunnen informatie die wij verzamelen via onze serviceproviders en zakenpartners delen met derden die u hebt gemachtigd, met andere externe partijen wanneer dit wettelijk verplicht is en in andere gevallen. Hieronder vindt u voorbeelden van hoe wij informatie delen met deze partijen en in welke gevallen.","privacy_policy_view_information_share_paragraph_seven":"Tesla mag informatie overdragen en bekendmaken, inclusief informatie die u wel of niet persoonlijk identificeert, aan derden om te voldoen aan een wettelijke verplichting (inclusief, maar niet beperkt tot, dagvaardingen); wanneer we naar eigen goeddunken geloven dat het wettelijk vereist is; in reactie op een wettig verzoek door overheidsinstanties die een onderzoek uitvoeren, waaronder om te voldoen aan handhavingsvereisten; om ons beleid en procedures te verifiëren of af te dwingen; om te reageren op een noodgeval; om activiteiten te voorkomen of te stoppen die wij kunnen beschouwen als, of die mogelijk illegaal, onethisch of juridisch aanvechtbaar zijn; of om de rechten, het eigendom, de veiligheid of beveiliging van de Diensten, Tesla, derden, bezoekers aan onze Diensten, of het publiek, zoals door ons bepaald naar ons oordeel, te beschermen.","privacy_policy_view_information_share_paragraph_six":"Met andere derden indien wettelijk toegestaan","privacy_policy_view_information_share_paragraph_ten":"Wij delen geen informatie die u persoonlijk identificeert met niet-aangesloten derde partijen voor hun marketingdoeleinden tenzij u ervoor kiest de betreffende informatie te delen.","privacy_policy_view_information_share_paragraph_three":"Wij kunnen informatie delen met onze serviceproviders en zakenpartners wanneer dat nodig is om diensten te verlenen namens ons of u, zoals in de volgende gevallen","privacy_policy_view_information_share_paragraph_three_point_one":"Met Tesla-filialen voor de doeleinden die zijn beschreven in dit privacybeleid. Tesla-filialen zijn bedrijven die in eigendom zijn van en gecontroleerd worden door Tesla Inc. en bedrijven waarin Tesla Inc. een substantieel eigendomsbelang heeft.","privacy_policy_view_information_share_paragraph_three_point_three":"Met andere externe zakenpartners voor zover zij betrokken zijn bij uw aankoop of de service van uw Tesla-producten. We delen beperkte informatie van of over u om u in staat te stellen gebruik te maken van deze diensten als u ervoor kiest om ze te gebruiken bij dergelijke partners zoals leasemaatschappijen en bedrijven die voertuigen op naam zetten.","privacy_policy_view_information_share_paragraph_three_point_two":"Met onze externe serviceproviders en distributiepartners om diensten te leveren, zoals websitehosting, data-analyse en -opslag, betalingsverwerking, orderverwerking en productinstallatie, draadloze verbinding met Tesla-producten, informatietechnologie en gerelateerde infrastructuur, klantenservice, productonderhoud of gerelateerde diensten, e-maillevering, creditcardverwerking, auditing, marketing, spraakopdrachtverwerking en andere gelijksoortige diensten.","privacy_policy_view_information_share_paragraph_two":"Met onze serviceproviders en zakenpartners","privacy_policy_view_information_use_commuicate":"Om met u te communiceren","privacy_policy_view_information_use_header":"Hoe gebruiken wij de informatie die wij verzamelen","privacy_policy_view_information_use_other_purposes":"Voor andere doeleinden","privacy_policy_view_information_use_paragraph_five":"Wij kunnen informatie die wij verzamelen ook gebruiken voor andere doeleinden, zoals","privacy_policy_view_information_use_paragraph_five_point_one":"Voor onze zakelijke doeleinden, zoals data-analyse, audits, fraudecontrole en -preventie, identificeren van gebruikstrends, bepalen van de doeltreffendheid van onze reclamecampagnes en het exploiteren en uitbreiden van onze zakelijke activiteiten.","privacy_policy_view_information_use_paragraph_five_point_two":"Behalve zoals hieronder en hierboven uiteengezet, kan Tesla informatie die u niet persoonlijk identificeert voor elk doeleinde gebruiken en delen, zoals voor operationele of onderzoeksdoeleinden, voor brancheonderzoek, om onze producten en diensten te verbeteren of aan te passen, om onze producten en diensten beter af te stemmen op uw behoeften, en indien wettelijk vereist.","privacy_policy_view_information_use_paragraph_four":"Wij kunnen informatie die wij verzamelen gebruiken om onze producten en diensten aan te bieden en te verbeteren, zoals","privacy_policy_view_information_use_paragraph_four_point_five":"Om de veiligheid en beveiliging van onze producten en diensten te analyseren en verbeteren.","privacy_policy_view_information_use_paragraph_four_point_four":"Om nieuwe producten en diensten te ontwikkelen en te bevorderen en om onze bestaande producten en diensten te verbeteren of aan te passen.","privacy_policy_view_information_use_paragraph_four_point_one":"Om uw aankoop te voltooien en te realiseren, bijvoorbeeld om uw betalingen te verwerken, uw bestelling aan u te leveren, met u te communiceren over uw aankoop en u de gepaste klantenservice te bieden.","privacy_policy_view_information_use_paragraph_four_point_six":"Om enige andere diensten die u hebt aangevraagd te leveren.","privacy_policy_view_information_use_paragraph_four_point_three":"Om de prestaties van uw Tesla-product te volgen en om diensten te leveren die verband houden met uw product.","privacy_policy_view_information_use_paragraph_four_point_two":"Om onderhoud te bieden voor uw Tesla-product, zoals het doen van service-aanbevelingen en om updates voor uw product te leveren.","privacy_policy_view_information_use_paragraph_one":"Wij kunnen de informatie die we verzamelen gebruiken om met u te communiceren over het leveren en verbeteren van onze producten en diensten en voor andere doeleinden. Hieronder vindt u een aantal voorbeelden van hoe wij informatie voor deze doeleinden gebruiken.","privacy_policy_view_information_use_paragraph_three":"Uw communicatiekeuzes","privacy_policy_view_information_use_paragraph_three_point_one":"Elektronische communicatie van ons of onze filialen ontvangen Als u geen marketinggerelateerde e-mails van ons of onze filialen meer wilt ontvangen, kunt u zich afmelden voor ontvangst door de instructies voor uitschrijven te volgen in de e-mails die u van ons ontvangt of door contact met ons op te nemen op onderstaand adres. Houd er rekening mee dat we u nog steeds belangrijke administratieve berichten en veiligheidsmeldingen kunnen sturen, zelfs als u zich afmeldt voor het ontvangen van marketinggerelateerde e-mails.","privacy_policy_view_information_use_paragraph_three_point_two":"Marketinggerelateerde telefoontjes van ons ontvangen Als u een marketinggerelateerd telefoontje van ons ontvangt en in de toekomst geen soortgelijke telefoontjes wilt ontvangen, vraag dan gewoon of u op onze \\"bel-me-niet\\"-lijst kunt worden geplaatst. Houd er rekening mee dat we u nog steeds kunnen bellen met betrekking tot administratieve zaken, veiligheid of productdiensten, zelfs als u zich afmeldt voor het ontvangen van marketinggerelateerde telefoontjes.","privacy_policy_view_information_use_paragraph_two":"Wij kunnen informatie die wij verzamelen, gebruiken om met u te communiceren, zoals","privacy_policy_view_information_use_paragraph_two_point_five":"Om u producten en aanbiedingen aan te bieden die op u zijn afgestemd en om onze overzichten met informatie van andere diensten te verbeteren.","privacy_policy_view_information_use_paragraph_two_point_four":"Om administratieve gegevens naar u te sturen, bijvoorbeeld informatie over de Diensten en wijzigingen in onze bepalingen, voorwaarden en beleid.","privacy_policy_view_information_use_paragraph_two_point_one":"Om uw vragen te beantwoorden en uw verzoeken in te willigen, zoals het naar u versturen van nieuwsbrieven of productinformatie, informatiemeldingen of brochures.","privacy_policy_view_information_use_paragraph_two_point_seven":"Om sociaal delen en communicatiefunctionaliteit te faciliteren.","privacy_policy_view_information_use_paragraph_two_point_six":"Om u in staat te stellen om deel te nemen aan wedstrijden en gelijksoortige promoties en om deze activiteiten te beheren.","privacy_policy_view_information_use_paragraph_two_point_three":"Om u te adviseren over belangrijke veiligheidsgerelateerde informatie of om eerstehulpverleners in kennis testellen in het geval van een ongeval met uw auto.","privacy_policy_view_information_use_paragraph_two_point_two":"Om uw Tesla-testrit te plannen, te beoordelen en feedback erover te geven.","privacy_policy_view_information_use_provide":"Om onze producten en diensten aan te bieden en te verbeteren","privacy_policy_view_links_header":"Links","privacy_policy_view_links_paragraph_one":"Dit Privacybeleid heeft geen betrekking op en wij zijn niet verantwoordelijk voor de privacygegevens of andere praktijken van derden, waaronder begrepen derden die een site of dienst exploiteren waarnaar de Diensten via een link verwijzen. Het opnemen van een link onder de Diensten impliceert geen goedkeuring van de gelinkte site hofdienst door ons of door onze filialen, noch impliceert het enige verbondenheid met de externe partij.","privacy_policy_view_links_paragraph_two":"Let op: wij zijn niet verantwoordelijk voor het beleid en de werkwijzen (inclusief de werkwijzen op het gebied van gegevensbeveiliging) ten aanzien van verzameling, gebruik of bekendmaking van andere organisaties, bijvoorbeeld andere app-ontwikkelaars, app-aanbieders, aanbieders van socialmediaplatforms, aanbieders van besturingssystemen of aanbieders van draadloze diensten, waaronder begrepen informatie die u bekendmaakt aan andere organisaties via of in verband met onze software-applicaties of socialmediasites.","privacy_policy_view_minors_header":"Minderjarigen","privacy_policy_view_minors_paragraph":"De Diensten zijn niet bedoeld voor personen jonger dan zestien (16) jaar en wij verzoeken deze personen om geeninformatie te verstrekken aan Tesla.","privacy_policy_view_offers_eu":"Ja, ik wil graag per e-mail marketingberichten ontvangen, waaronder enquêtes, promoties en aanbiedingen van Tesla en zijn partners, met betrekking tot de producten en services van Tesla. U hebt het recht om op elk gewenst moment uw toestemming in te trekken. Meer informatie {legalLink}.","privacy_policy_view_offers_title":"Aankondigingen van producten en nieuwe aanbiedingen","privacy_policy_view_offers_usa":"Ik ga ermee akkoord dat er via het opgegeven nummer contact met mij kan worden opgenomen voor meer informatie of aanbiedingen van Tesla-producten. Ik begrijp dat er bij deze gesprekken of tekstberichten gebruik kan worden gemaakt van computergestuurde menu\'s of vooraf opgenomen berichten. Deze toestemming is geen aankoopvoorwaarde.","privacy_policy_view_powerwall_warranty":"Beperkte garantie van Tesla Powerwall","privacy_policy_view_privacy_policy":"Privacybeleid","privacy_policy_view_privacy_policy_agreement_eu":"Ik, de huiseigenaar, heb het Privacybeleid voor klanten van Tesla volledig gelezen en ga akkoord met de verwerking van mijn persoonlijke gegevens door Tesla zoals beschreven in het Privacybeleid voor klanten van Tesla. U hebt het recht om op elk gewenst moment uw toestemming in te trekken, zoals beschreven in het Privacybeleid voor klanten van Tesla.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Ik, de huiseigenaar, heb het Privacybeleid voor klanten van Tesla volledig gelezen en ga akkoord met de verwerking van mijn persoonlijke gegevens door Tesla zoals beschreven in het Privacybeleid voor klanten van Tesla.","privacy_policy_view_privacy_shield":"Privacyschildbeleid","privacy_policy_view_retention_period_header":"Bewaartermijn","privacy_policy_view_retention_period_paragraph":"Wij bewaren informatie die wij verzamelen van of over onze klanten, onze producten en de Diensten zolang als nodig is om de doelen uiteengezet in dit Privacybeleid te verwezenlijken, tenzij een langere bewaarperiode wettelijk is vereist of toegestaan.","privacy_policy_view_security_header":"Beveiliging","privacy_policy_view_security_paragraph_one":"Wij streven ernaar redelijke organisatorische, technische en administratieve maatregelen te nemen om informatie binnen onze organisatie te beschermen. Helaas kan geen enkel systeem voor gegevensoverdracht of opslag gegarandeerd 100% veilig zijn. Als u reden hebt om aan te nemen dat uw interactie met ons niet langer veilig is (bijvoorbeeld als u van mening bent dat de veiligheid van een account bij ons in het gedrang is gekomen), dient u ons onmiddellijk op de hoogte te stellen van het probleem door contact met ons op te nemen zoals uiteengezet inde paragraaf \\"Contact\\" hieronder.","privacy_policy_view_security_paragraph_two":"Indien u uw Tesla-product verkoopt of overdraagt aan een andere persoon, laat het ons dan weten zodat we kunnen bepalen of aanvullende maatregelen vereist zijn om te helpen bij het beschermen van de informatie van of over u tegen bekendmaking aan de koper of verkrijger van het Tesla-product.","privacy_policy_view_title":"Het volledige privacybeleid lezen","privacy_policy_view_updates_header":"Wijzigingen in dit beleid","privacy_policy_view_updates_paragraph":"Wij kunnen dit Privacybeleid wijzigen. Neem een kijkje bij \\"Laatste update\\" onderaan deze pagina om te zien wanneer dit Privacybeleid voor het laatst is herzien. Alle wijzigingen in dit Privacybeleid worden van kracht wanneer we het herziene Privacybeleid onder de Diensten plaatsen. Door gebruik te maken van onze producten, de Diensten of door op andere wijze informatie aan ons te verstrekken na deze wijzigingen, accepteert u het herziene Privacybeleid.","privacy_policy_view_us_warranty_warning":"U dient akkoord te gaan met de beperkte garantie van Tesla om uw Powerwall te registreren en gegevens bij te houden in de mobiele Tesla-app.","privacy_policy_view_warranty_information":"Ik, de huiseigenaar, ga akkoord met de voorwaarden van de beperkte garantie van Tesla Powerwall {warrantyLink}. Deze voorwaarden omvatten een arbitragebepaling die afstand neemt van mijn recht om collectieve claims en juryrechtszaken in te leiden of daaraan deel te nemen. Ik kan mij binnen 30 dagen uit deze bepaling terugtrekken door het in de bepaling beschreven proces te volgen.","registration_container_continue_header":"E-mail klant ingevoerd: {email}","registration_container_continue_modal_description":"De klant heeft geen toegang tot de mobiele Tesla-app als de e-mail onjuist is. Bevestig dat de e-mail van de klant geldig is.","registration_container_customer_email_required":"E-mail klant is nodig om de mobiele Tesla-app in te schakelen.","registration_container_customer_information_title":"Klantinformatie","registration_container_fill_required_fields":"Installateur of klant moet alle vereiste velden invullen.","registration_container_loading_modal_registering":"Registreren","registration_container_reset_form_modal_description":"Bevestig dat u wilt doorgaan met het resetten van het formulier.","registration_container_reset_form_modal_header":"Alle eerder ingevoerde informatie gaat verloren.","security_container_settings_title_customer":"Wachtwoord wijzigen of resetten (klant)","security_container_settings_title_installer":"Wachtwoord wijzigen of resetten (installateur)","security_view_copied_to_clipboard":"Gekopieerd!","security_view_settings_change_password_error":"Nieuwe paswoorden komen niet overeen.","security_view_settings_change_password_label":"PASWOORD WIJZIGEN","security_view_settings_completed":"VOLTOOIEN","security_view_settings_new_password_label":"NIEUW PASWOORD","security_view_settings_old_password":"HUIDIG PASWOORD","security_view_settings_password_change_info":"Voer het huidige en het nieuwe paswoord in om het paswoord te wijzigen.","security_view_settings_password_customer":"PASSWORD","security_view_settings_password_customer_placeholder":"Laatste 5 tekens van het wachtwoord op de gateway-sticker","security_view_settings_password_installer_label":"Gateway-wachtwoord","security_view_settings_password_reset_info":"Om het paswoord te resetten, bedient u de schakelaar op een Powerwall en voert u vervolgens de laatste 5 tekens van het serienummer van de gateway in.","security_view_settings_password_reset_info_serial":"Om het wachtwoord te resetten, bedient u de schakelaar op een Powerwall en voert u vervolgens de laatste 5 tekens van het serienummer van de gateway in.","security_view_settings_password_reset_installer_info":"Om het paswoord te resetten, bedient u de schakelaar op een Powerwall en voert u vervolgens het serienummer van de gateway in.","security_view_settings_password_reset_installer_info_serial":"Om het wachtwoord te resetten, bedient u de schakelaar op een Powerwall en voert u vervolgens het serienummer van de gateway in.","security_view_settings_re_enter_password_label":"VOER NIEUW PASWOORD OPNIEUW IN","security_view_settings_reset_password_label":"PASWOORD RESETTEN","security_view_settings_serial_customer":"SERIENUMMER","security_view_settings_serial_customer_placeholder":"Laatste 5 tekens van het serienummer van de gateway","security_view_settings_serial_installer_label":"Serienummer van Gateway","security_view_settings_success":"Paswoord is gewijzigd","security_view_settings_success_new_password":"Het nieuwe paswoord is:","security_view_settings_toggled_password":"Paswoord vergeten?","settings_container_confirm_reset_operation_mode":"Moduswijziging in {operation} bevestigen","settings_container_operation_modes_modal_content":"Gebruik het scherm \'Aanpassen\' van de mobiele Tesla-app om bedieningsmodi te wijzigen.","settings_container_operation_modes_modal_reset":"RESETMODUS","settings_container_operation_modes_modal_title":"Bedieningsmodus","settings_container_operation_modes_modal_warning":"Dit is een wijziging in één richting. Geavanceerde modi kunnen alleen opnieuw worden ingeschakeld via de mobiele Tesla-app.","settings_container_operation_modes_reset_modal_title":"Bedieningsmodus resetten?","settings_container_operation_settings_subtitle":"Stel de naam in van uw systeembedieningsmodus en eventuele exportbeperkingen.","settings_container_operation_settings_title":"Bedieningsinstellingen","settings_container_saving_site_info_modal":"Locatie-instellingen opslaan","settings_view_custom_modes_label":"Voorgeconfigureerde modus - {mode}","settings_view_energy_reserve_label":"ENERGIERESERVE (VOOR BACK-UP TIJDENS EIGEN VERBRUIK)","settings_view_instruction_site_name":"Voer een locatienaam in","settings_view_operation_label":"BEDIENINGSMODUS","settings_view_operation_set_label":"IN TE STELLEN BEDIENINGSMODUS","settings_view_site_name":"NAAM LOCATIE","settings_view_site_name_placeholder":"Bijv.: Mijn huis","settings_view_solar_export_limitation_slider":"Beperking van de uitvoer van zonne-energie","settings_view_solar_feature":"Deze functie moet alleen geactiveerd worden wanneer de interconnectie vereist dat het zonne-energie systeem geen energie exporteert naar het elektriciteitsnet. Typisch in Hawaii (VS) en Australië.","settings_view_solar_zero_export":"POWERWALL GEÏNSTALLEERD LANGS EEN ZONNE-ENERGIESYSTEEM MET NULEXPORT?","site_info_container_submit":"VERZENDEN","solar_item_view_baudrate_label":"Baudrate","solar_item_view_brand_input_label":"MERK","solar_item_view_brand_label":"Merk","solar_item_view_check_inverter":"CONTROLEER INVERTER {id} VERBINDING","solar_item_view_connection_warning":"Kon geen verbinding tot stand brengen","solar_item_view_inverter_brand":"Merk omvormer","solar_item_view_inverter_communication":"Communicatie omvormer","solar_item_view_inverter_model_label":"Model omvormer","solar_item_view_ip_label":"IP ADRES","solar_item_view_model_label":"MODEL","solar_item_view_power_rating_explanation":"Dit is het totale nominale vermogen van het PV-systeem ten opzichte van de modules/panelen. Dit is het nominale vermogen van de zonnepanelen. Als u bijvoorbeeld 10x 300 W aan zonnepanelen hebt, vermeld dan 3000 W, zelfs als de PV-omvormer 2500 W of 3500 W is.","solar_item_view_pv_array_dc_power_rating":"NOMINAAL DC-VERMOGEN ZONNEPANELEN","solar_item_view_pv_array_dc_power_rating_label":"PV ARRAY DC-KRACHTGRAAD","solar_item_view_revenue_grade":"Rendement","solar_item_view_revenue_grade_explanation":"Controleer dit alleen als de omvormer een geïntegreerde meter voor opbrengstkwaliteit heeft. Gegevens van de omvormer worden van de meter gelezen in plaats van van de omvormer als deze optie is ingeschakeld.","solar_item_view_revenue_grade_title":"Rendement","solar_item_view_solar":"ZONNE-ENERGIE {id}","solar_item_view_success":"SUCCESVOL VERBONDEN!","solar_item_view_unable":"KAN DE INVERTER NIET LEZEN!","solar_list_view_continue_add_solar":"VOEG SOLAR TOE","solar_view_continue_add_solar":"ZONNE-ENERGIE TOEVOEGEN","success_view_awesome":"GEWELDIG!","success_view_copied_to_clipboard":"Gekopieerd!","success_view_installation_complete":"Installatie voltooid","success_view_new_password_error_title":"Paswoord wizard","success_view_new_password_title":"Nieuw paswoord wizard","success_view_password_set":"Paswoord is al ingesteld","success_view_record_password":"Noteer dit paswoord voordat u doorgaat","success_view_retry_registration":"PROBEER OPNIEUW TE REGISTREREN","success_view_set_customer_password":"KLANTPASWOORD INSTELLEN","success_view_syncing_configuration":"Configuratie synchroniseren","summary_container_company":"Bedrijf","summary_container_connection_type":"Type verbinding","summary_container_email":"E-mail","summary_container_installer_information":"Informatie over Installateur","summary_container_ip_address":"IP-ADRES","summary_container_location":"Locatie","summary_container_meter":"Meter #{index}","summary_container_meter_information":"Meterinformatie","summary_container_phone":"Telefoonnummer","summary_container_print":"Afdrukken","summary_container_serial_number":"Serienummer","summary_container_site_info":"Informatie over locatie","summary_container_site_name":"Naam van locatie","summary_container_subtitle":"Product- en installatie-informatie","summary_site_information":"INFORMATIE OVER LOCATIE","summary_view_autonomous":"Tijdgestuurde regeling","summary_view_backup":"Alleen noodstroom","summary_view_backup_capable":"Noodstroom mogelijk","summary_view_backup_reserve":"NOODSTROOMRESERVE","summary_view_conductor_export":"EXPORTLIMIET VOOR GELEIDER","summary_view_conductor_import":"IMPORTLIMIET VOOR GELEIDER","summary_view_control":"Locatieregeling","summary_view_customer_version":"KLANTVERSIE","summary_view_disabled":"UITGESCHAKELD","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"EXPORTEERLIMIET PV","summary_view_gateway":"GATEWAY","summary_view_grid_code":"NETCODE","summary_view_gsm":"MOBIEL","summary_view_ip_address":"IP-ADRES","summary_view_mode":"MODUS","summary_view_network":"NETWERK","summary_view_non_backup":"Geen noodstroom","summary_view_part_number":"OnderdeelNummer","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Aggregatie","summary_view_self_consumption":"Eigen verbruik","summary_view_serial":"Serienummer","summary_view_site_export":"EXPORTLIMIET VOOR LOCATIE","summary_view_site_import":"IMPORTLIMIET VOOR LOCATIE","summary_view_site_name":"NAAM LOCATIE","summary_view_sync":"NOODSTROOMFUNCTIE","summary_view_time":"COMPILEERTIJD OVERZICHT","summary_view_time_zone":"TIJDZONE","summary_view_wifi":"Wifi","system_overview_connected":"Verbonden met Tesla","system_overview_disconnected":"Niet verbonden met Tesla","system_overview_site_controller":"Sitecontroller","test_container_configure_subtitle":"Test of het systeem werkt zoals verwacht.","test_container_system_test_title":"Systeemtest","test_inverter_container_error_grid_uncompliant":"De test kan niet worden uitgevoerd omdat het net niet compatibel is.","test_inverter_container_error_not_idle":"De Powerwall moet in stand-by staan om de test uit te voeren.","test_inverter_container_results_error_plural_subtitle":"{num} tests mislukt","test_inverter_container_results_error_singular_subtitle":"{num} test mislukt","test_inverter_container_results_success_plural_subtitle":"{num} tests geslaagd","test_inverter_container_results_success_singular_subtitle":"{num} test geslaagd","test_inverter_container_results_success_subtitle":"Alle tests geslaagd","test_inverter_container_results_title":"Resultaten van zelftest omvormer","test_inverter_container_title":"Zelftest van omvormer","test_meter_composite_view_auxiliary_meter_setup_instructions":"Voor elke hulpmeter moet ten minste één stroomtrafo worden ingesteld.","test_meter_composite_view_auxiliary_meters_title":"Hulpmeters","test_meter_composite_view_configure_meters":"METERS CONFIGUREREN","test_meter_composite_view_current_transformer_setup_instructions":"Gebruik ten minste één huisinstallatie-stroomtrafo OF verbruiksstroomtrafo maar niet beide.","test_meter_composite_view_internal_meters_title":"Interne meters","test_meter_composite_view_no_configured_meters":"GEEN GECONFIGUREERDE METERS. {configure} OM DOOR TE GAAN.","test_meter_composite_view_note":"OPMERKING","test_meter_item_view_configure_phases_note":"Configureer fasen om stroomtrafo\'s voor deze meter in te schakelen","test_meter_item_view_reset":"RESET","test_meter_item_view_site_meter_title":"Interne locatiemeter","test_meter_item_view_sync_id":"Sync meter {id}","test_meter_item_view_toggle_advanced":"Geavanceerd","test_meter_item_view_toggle_power":"Voeding","test_meter_item_view_wifi_id":"Meter {id}","test_meter_item_view_wired_id":"Bedrade meter {id}","test_view_canceled_status":"Test geannuleerd","test_view_failed_status":"Test mislukt","test_view_idle_status":"Begin van systeemtest","test_view_init_status":"Start van test voorbereiden","test_view_inverter_test_warning_message":"Als u een 0 Export-PV-omvormer heeft, is de zelftestprocedure van de Gateway niet in staat het systeem adequaatte kwalificeren. Schakel de PV-omvormer uit totdat de zelftest is voltooid.","test_view_passed_status":"Test geslaagd","test_view_prep_status":"Bedieningselementen initialiseren Kan enkele minuten duren!","test_view_running_status":"Laadtests worden uitgevoerd","test_view_skip_start_system_test_text":"Bevestigen om de systeemtest over te slaan","test_view_start_system_test_warning":"WAARSCHUWING","test_view_system_test_completed_message":"Systeemtest voltooid!","time_minute":"minuut","time_minutes":"minuten","time_second":"seconde","time_seconds":"seconden","time_started_at":"Gestart om {time}","timezone_container_subtitle":"Op basis van locatie en IP-adres kunnen wij u helpen de tijdzone voor uw installatie te vinden.","timezone_container_title":"Tijdzone","timezone_view_label":"tijdzone","toast_view_standard_title":"Let op","toast_view_warning_title":"Waarschuwing","update_container_industrial_updating_description":"De sitecontroller start nu automatisch opnieuw om de update te installeren. {lb1}{lb2} Wacht 2 minuten, maak opnieuw verbinding met het Sitecontroller-netwerk en {refresh}","update_container_preparing_title":"Voorbereiden op meest recente update","update_container_refresh_browser":"Ververs uw browser.","update_container_residential_updating_description":"De Gateway start nu automatisch opnieuw om de volledige update toe te passen. {lb1}{lb2} Wacht 2 minuten, maak opnieuw verbinding met het Gateway-netwerk en dan {refresh}","update_container_skip_title":"Update overslaan?","update_container_subtitle":"Werk uw systeem bij om de nieuwste software en firmware-updates te ontvangen.","update_container_subtitle_industrial":"Controleer op updates. Opmerking: Het pushen van firmware-update naar batterijen vindt plaats op de batterijpagina.","update_container_title":"Bijwerken","update_container_updating_title":"Systeem wordt bijgewerkt","update_step_item_view_resolution_title":"Voorgestelde oplossing","update_view_check_again":"KLIK OM OPNIEUW TE CONTROLEREN","update_view_check_for_update":"CONTROLEREN OP UPDATE","update_view_check_for_update_industrial":"CONTROLEREN OP UPDATE SITECONTROLLER","update_view_checking_update":"Controleren op update","update_view_current_version_label":"HUIDIGE VERSIE","update_view_downloading":"DOWNLOADEN","update_view_downloading_update":"Update downloaden","update_view_no_power_cicle":"NIET UIT- EN AANZETTEN!","update_view_percent_complete":"{percent} voltooid","update_view_progress":"VOORTGANG VAN BIJWERKEN","update_view_staged":"NIEUWE VERSIE TIJDELIJK OPGESLAGEN","update_view_staged_update":"Klaar voor update","update_view_staging":"TIJDELIJK OPSLAAN","update_view_staging_update":"Tijdelijk opslaan update","update_view_time_remaining":"resterend","update_view_up_to_date":"VERSIE UP-TO-DATE","update_view_update_now":"NU BIJWERKEN","update_view_updated_industrial":"Software voor sitecontroller is up-to-date.","update_view_updated_residential":"Uw systeem heeft de nieuwste firmware.","update_view_wait_minutes":"WACHT ENKELE MINUTEN","validation_phone":"Voer geldig telefoonnummer in","warning":"WAARSCHUWING","warning_off_grid":"Als het elektrische systeem niet op het elektriciteitsnet is aangesloten, dalen de ondersteunende ladingenbinnen 5 minuten.","warning_on_grid":"Als het elektrische systeem op het elektriciteitsnet is aangesloten, stopt de Powerwall met opladen/ontladen.","warning_sitemaster_container_not_running":"De Sitemaster wordt niet uitgevoerd","wifi_view_find_network":"NETWERK ZOEKEN VIA SSID","wifi_view_note":"Let op De Gateway is alleen compatibel met 2,4 GHz draadloze netwerken.","wifi_view_note_five_ghz":"Opmerking: De gateway is compatibel met draadloze netwerken van zowel 2,4 GHz als 5 GHz.","wifi_view_security_label":"BEVEILIGING","wizard_container_commissioning_wizard":"Tesla inbedrijfstellingswizard","wizard_container_login_required":"Inloggen vereist","wizard_container_title":"Laten we aan de slag gaan.","wizard_container_verifying_login_title":"Inloggen controleren"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Erreur","advanced_settings_submit":"Envoyer","advanced_settings_submitted":"Envoyé","advanced_settings_title":"Paramètres avancés","alert_container_ac_phase_1_over_voltage":"Surtension CA","alert_container_ac_phase_1_under_voltage":"Sous-tension CA","alert_container_ac_phase_2_over_voltage":"Surtension CA","alert_container_ac_phase_2_under_voltage":"Sous-tension CA","alert_container_ac_phase_3_over_voltage":"Surtension CA","alert_container_ac_phase_3_under_voltage":"Sous-tension CA","alert_container_over_frequency":"Sur-fréquence CA","alert_container_rate_of_change_frequency":"Taux de variation CA de la fréquence","alert_container_under_frequency":"Sous-fréquence CA","app_container_engineering_mode_banner_message":"Le mode d\'entretien de Tesla ne requiert pas d\'authentification. Veuillez « Arrêter le système » si vous apportez des modifications opérationnelles. Avant de quitter le navigateur, laissez le système dans un état acceptable. Quand vous aurez terminé, veuillez fermer le navigateur, car ce mode ne requiert pas d\'authentification.","app_container_engineering_mode_title":"Mode d\'entretien de Tesla","app_container_firmware_update_banner_message":"Laissez l\'installation et le câblage tels qu\'ils sont et demeurez sur cette page jusqu\'à la fin de la mise à jour.","app_container_firmware_update_banner_title":"Mise à jour du microprogramme en cours","app_container_sitemaster_message_title":"Le système est actuellement en cours d\'exécution. Le système doit être arrêté pour qu\'il soit possible d\'afficher le statut des blocs de batterie. Vous devez arrêter le système à partir de la page d\'accueil.","app_container_sitemaster_power_supply_mode_banner_message":"Batterie produisant la tension CA pour alimenter les appareils pour le couplage et la configuration. Bouton permettant d\'arrêter le système sur la page d\'arrivée.","app_container_sitemaster_power_supply_mode_banner_title":"Mode Formation réseau","app_container_sitemaster_running_banner_title":"Système en cours d\'exécution","auto_config_check_network_button":"Vérifiez le réseau et activez le WiFi","auto_config_check_system_and_summary":"Vérifiez le Système et les pages de Synthèse","auto_config_done_button_text":"Effectué","auto_config_instructions_cannot_determine_grid_connection":"Vérifiez le câblage du commutateur de secours ou du dispositif Gateway avant de démarrer le système.","auto_config_instructions_determining_on_grid":"Si le message persiste pendant plus de 3 minutes, vérifiez le câblage du Commutateur ou de la Passerelle de Secours.","auto_config_instructions_finding_contactor_controller":"Si le message persiste pendant plus de 3 minutes, vérifiez le câblage du Commutateur ou de la Passerelle de Secours.","auto_config_instructions_finding_powerwalls":"Si ce message demeure affiché pendant plus de trois minutes, vérifiez le câblage du Powerwall.","auto_config_instructions_finding_solar_powerwall":"Si le message persiste pendant plus de 3 minutes, vérifiez le câblage du Powerwall Solaire.","auto_config_instructions_lookup_failed_retry":"Scannez l’étiquette du numéro de série dans Bolt pour activer le réglage automatique du Powerwall, puis la commande {retryButton}","auto_config_instructions_lookup_failed_wizard":"Ou {wizardButton} pour un réglage manuel du Powerwall.","auto_config_instructions_missing_info_1":"Le réglage automatique du Powerwall a échoué car il manquait les informations suivantes :","auto_config_instructions_missing_info_2":"{wizardButton} pour une saisie manuelle.","auto_config_instructions_missing_info_3":"{registrationButton} manuellement.","auto_config_instructions_no_grid_connection":"Vérifiez le câblage du Commutateur ou de la Passerelle de Secours.","auto_config_instructions_no_grid_detected":"Vérifiez le câblage et les disjoncteurs avant de démarrer le système.","auto_config_instructions_no_network_retry":"{networkLink} pour activer le réglage automatique du Powerwall puis {retryButton}","auto_config_instructions_no_network_wizard":"Ou {wizardButton} pour un réglage manuel du Powerwall.","auto_config_instructions_retry":"{networkLink} si le problème persiste","auto_config_instructions_retry_wizard":"Ou {wizardButton} pour un réglage manuel du Powerwall.","auto_config_instructions_updating":"Une mise à jour du logiciel est nécessaire avant d\'initier le réglage automatique du Powerwall. La mise à jour sera automatiquement téléchargée et appliquée. Il se peut que vous deviez reconnecter le réseau WiFi du Powerwall par la suite.","auto_config_missing_grid":"Réseau pour le site client","auto_config_missing_gridcode":"Code réseau pour le site client","auto_config_missing_registration":"Informations client pour l’enregistrement du produit","auto_config_missing_timezone":"Fuseau horaire sur le site du client","auto_config_network_button_text":"Régler le réseau","auto_config_registration_button_text":"Saisir les informations client","auto_config_retry_button_label":"Réessayer","auto_config_run_button_label":"Réglage automatique du Powerwall","auto_config_run_wizard_button_text":"Exécuter l’Assistant","auto_config_section_title":"Réglage automatique du Powerwall","auto_config_status_cancelled":"Le réglage automatique a été annulé. Essayer à nouveau :","auto_config_status_cannot_determine_grid_connection":"Impossible de déterminer la connexion au réseau.","auto_config_status_complete":"Cela a réussi","auto_config_status_determining_on_grid":"Détermination du raccordement au réseau en cours...","auto_config_status_finding_contactor_controller":"Recherche du Régulateur du contacteur en cours...","auto_config_status_finding_powerwalls":"Recherche des Powerwalls...","auto_config_status_finding_solar_powerwall":"Recherche du Powerwall Solaire en cours...","auto_config_status_in_progress":"En cours","auto_config_status_lookup_failed":"Échec de la recherche du numéro de série","auto_config_status_missing_information":"Informations manquantes","auto_config_status_no_grid_connection":"Pas de connexion au réseau","auto_config_status_no_grid_detected":"Aucun réseau détecté.","auto_config_status_no_network":"Non connecté à Tesla","auto_config_status_not_applicable":"Le réglage automatique n’est pas nécessaire ou a déjà été exécuté. Vous pouvez l’exécuter à nouveau :","auto_config_status_retrying":"Nouvel essai de demande de réseau","auto_config_status_timeout":"La configuration automatique a expiré. Essayer à nouveau :","auto_config_status_updating":"Mise à jour du logiciel nécessaire","auto_config_stop_system_modal_message":"Impossible d’exécuter le processus de réglage automatique pendant le fonctionnement du système. Arrêtez le système et essayez à nouveau.","auto_config_stop_system_modal_title":"Impossible de lancer le réglage automatique","battery_container_add_all_batteries_button_label":"TOUT AJOUTER","battery_container_available_batteries_subtitle":"Ces batteries ne participeront pas au fonctionnement du système à moins d’être ajoutées au \\"Configured\\" list.","battery_container_available_batteries_title":"Blocs de batterie disponibles","battery_container_cannot_communicate":"Communication avec le Powerwall impossible. Vérifiez le câblage et la terminaison du bus CAN.","battery_container_cannot_communicate_with_device":"Échec de communication avec le dispositif. Vérifiez le câblage et la terminaison du bus CAN.","battery_container_chinv":"VFD pour compresseur et chauffage (CHINV) {index}","battery_container_configured_batteries_label":"Blocs de batterie configurés","battery_container_configured_batteries_subtitle":"Ces batteries feront partie du fonctionnement du système.","battery_container_confirm_update_firmware":"Ce processus peut durer plusieurs minutes. N\'interrompez pas la mise à jour et ne quittez pas cette page.","battery_container_dcbc":"Bloc de batterie {index}","battery_container_dcbc_comms_failure":"Échec de la communication. Vérifiez la connexion entre le réseau et l\'unité et faites une nouvelle recherche.","battery_container_dcbc_dcdisconnect_opened":"La poignée de déconnexion CC est en position d\'arrêt.","battery_container_dcbc_door_switch_opened":"Ligne d\'activation de la porte de l\'onduleur. Vérifiez le commutateur de porte.","battery_container_dcbc_enable_line_return_low_estop":"Arrêt à distance de l\'onduleur ouvert. Vérifiez le circuit d\'arrêt à distance.","battery_container_dcbc_enable_line_return_low_inv":"Ligne d\'activation du système de l\'onduleur ouverte. Vérifiez le retour du disjoncteur.","battery_container_dcbc_enable_line_return_low_str":"La ligne d\'activation d\'une ou plusieurs rangées de Powerpacks est ouverte. Vérifiez le câblage et les portes du Powerpack. Pour établir un diagnostic, consultez le Guide de dépannage de la ligne d\'activation.","battery_container_delete_button_title":"Supprimer le dispositif","battery_container_diagnosis_incomplete":"Diagnostic incomplet. Il faut procéder à une mise à jour du microprogramme avant que d\'autres recherches puissent être effectuées.","battery_container_faults":"Défaillances","battery_container_firmware_update_needed":"Une mise à jour du microprogramme est requise.","battery_container_gateway_contactor_meter_controller":"Contacteur de la passerelle/Contrôleur de compteur","battery_container_industrial_confirm_update_firmware":"Cela entraînera la mise à jour du microprogramme de chaque bloc de batterie et de ses sous-composants.","battery_container_industrial_confirm_update_firmware_info":"Cela entraînera la mise à jour du microprogramme de chaque bloc de batterie dans le \\"Configured\\" list and its subcomponents.","battery_container_internal_communications_fault":"Défaillance des communications internes. Vérifiez le câblage et la terminaison du bus CAN et procédez à une mise à jour du microprogramme.","battery_container_meter_socket_adapter":"Commutateur de secours","battery_container_mpbc":"Bloc de batterie {index}","battery_container_mpthc":"Contrôleur thermique (MPTHC) {index}","battery_container_no_msa_detected":"Aucun commutateur de secours détecté.","battery_container_no_sync_detected":"Aucun régulateur de contacteur détecté. Aucune capacité de secours détectée.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN : {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Borne (LCC) {index}","battery_container_post_missing":"Borne manquante {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Powerstage {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"Le Powerwall est éteint. Assurez-vous que le commutateur est en position ON.","battery_container_qbms":"Qbert (QBMS)","battery_container_qhvp":"Processeur haute tension (QHVP)","battery_container_residential_confirm_update_firmware":"Cela entraînera la mise à jour du microprogramme de chaque Powerwall et du régulateur de contacteur (s\'il en existe un).","battery_container_resolve_connectivity":"Réglez les problèmes de connectivité avant d\'exécuter une mise à jour du microprogramme.","battery_container_scan":"RECHERCHER","battery_container_scan_in_progress":"RECHERCHE EN COURS...","battery_container_scbc":"Bloc chargeur {index}","battery_container_scthc":"Contrôleur thermique (SCTHC) {index}","battery_container_self_tests_failure":"A échoué à l\'auto-test.","battery_container_self_tests_inconclusive":"Les résultats de l\'auto-test ne sont pas concluants.","battery_container_self_tests_internal_error":"L\'auto-test a échoué en raison d\'une erreur interne du système.","battery_container_self_tests_stall":"Temps d\'attente dépassé : les auto-tests ne parviennent pas à démarrer.","battery_container_self_tests_system_down":"Impossible d\'exécuter les auto-tests pendant que le système est arrêté. Démarrez le système et essayez à nouveau.","battery_container_self_tests_updating":"Impossible d\'exécuter les auto-tests pendant la mise à jour des batteries. Essayez à nouveau une fois la mise à jour terminée.","battery_container_serial_number":"NS : {sn}","battery_container_solar_powerwall":"{index} Powerwall solaire","battery_container_starc":"Convertisseur CC-CC (STARC) {index}","battery_container_stitch":"Alimentation CC-CC (STITCH)","battery_container_synchronizer":"Régulateur du contacteur","battery_container_unknown":"Contrôleur de bus inconnu {index}","battery_container_update_failed":"Échec de la mise à jour. Essayez à nouveau et assurez-vous que le câblage et les commutateurs d\'activation ne sont pas interrompus pendant la procédure de mise à jour.","battery_container_update_firmware":"METTRE À JOUR LE MICROPROGRAMME","battery_container_update_in_progress":"MISE À JOUR EN COURS...","battery_container_waiting_to_report_firmware":"En attente de l\'envoi du rapport sur la version du microprogramme par l\'unité.","battery_container_warnings":"Avertissements","button_label_generate":"GÉNÉRER","can_reboot_message_backup":"Mode Secours","can_reboot_message_block_update":"Mise à jour du bloc en cours","can_reboot_message_enumeration":"Énumération en cours","can_reboot_message_initializing":"Système en cours d\'initialisation","can_reboot_message_power_flow_is_too_high":"La vitesse des pulsations est trop élevée","can_reboot_message_updating":"Mise à jour du Pack site en cours","caution":"ATTENTION","charger_settings_cabinet":"Armoire {sn} {state}","charger_settings_cabinet_posts_warning":"Ces contrôles arrêtent uniquement l’activation de la borne et le bus HT interne des armoires. Vous devez quand même isoler l’alimentation et suivre la procédure de sécurité complète lors de l’accès aux armoires.","charger_settings_common_bus":"Bus commun {state}","charger_settings_common_bus_warning":"Arrête le bus HT commun uniquement. Vous devez quand même isoler l’alimentation et suivre la procédure de sécurité complète lors de l’accès aux armoires.","charger_settings_disabled":"désactivé","charger_settings_enabled":"activé","charger_settings_post":"Borne {id} {state}","charger_settings_saving":"enregistrement {spinner}","client_protocols_container_subtitle":"Activez ou désactivez les protocoles clients.","client_protocols_container_title":"Protocoles clients","client_protocols_menu_title":"Protocoles clients","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"API REST","client_protocols_view_modbus_label":"Modbus TCP/IP ","compliance_container_label_fcc_id":"Numéro FCC : {fccId}","compliance_container_label_ic_id":"IC : {icId}","compliance_container_label_manufacturer":"Fabricant : {manufacturer}","compliance_container_label_model":"Modèle : {model}","compliance_container_title":"Conformité","component-menu-title":"Composants","conductor_limit":"Les batteries sont contrôlées pour éviter un dépassement des limites de courant configurées sur chaque phase des TC du conducteur. Revoyez la note d\'application sur la limite du conducteur pour obtenir plus de détails sur l\'endroit où cela est utilisé et savoir quelles limites devraient être configurées.","conductor_min_current":"Limite d\'exportation de conducteur","control_container_add_on":"MODULE COMPLÉMENTAIRE","control_container_always_active":"TOUJOURS ACTIF","control_container_battery_ok":"EXPORTATION COMPLÈTE DE LA BATTERIE AUTORISÉE","control_container_charge_power_target":"CIBLE DE PUISSANCE DE CHARGE","control_container_conductor_max_current":"Limite d\'importation de conducteur","control_container_conductor_min_current_max_bound":"{mode} a une valeur maximale de 200 A","control_container_conductor_min_current_min_bound":"{mode} a une valeur minimale de 5 A","control_container_control_subtitle":"Sous-titre du contrôle","control_container_control_title":"Titre de la commande","control_container_direct":"DIRECT","control_container_disable":"Désactiver","control_container_discharge_power_target":"CIBLE DE PUISSANCE DE DÉCHARGE","control_container_enabled":"ACTIVÉ","control_container_energy_target":"CIBLE D\'ÉNERGIE. Cette valeur doit correspondre à la taille du système telle qu\'elle est indiquée par les documents de conception et le rapport de l\'inspecteur.","control_container_error_message":"{mode} est requis","control_container_explanation_bullet_five_max_site_meter_power_kw":"Lorsque la charge nette est supérieure à cette limite, les batteries se déchargeront de la meilleure façon possible pour éviter de surpasser cette limite.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Lorsque la génération nette est supérieure à cette limite, les batteries se déchargeront de la meilleure façon possible pour éviter de surpasser cette limite.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Lorsque la charge nette est inférieure à cette limite, les batteries seront limitées à leur puissance de charge autorisée.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Lorsque la génération nette est inférieure à cette limite, les batteries seront limitées à leur puissance de décharge autorisée.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Limite d\'importation du site est un paramètre facultatif. Laissez ce champ vide pour désactiver les limites.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Limite d\'exportation du site est un paramètre facultatif. Laissez ce champ vide pour désactiver les limites.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Il s\'agit d\'une limite agrégée de toutes les phases sur tous les compteurs de site. (Remarque : lorsque des compteurs de charge sont utilisés, le compteur du site est calculé à l\'aide de Charge, Solaire et Batterie).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Il s\'agit d\'une limite agrégée de toutes les phases sur tous les compteurs de site. (Remarque : lorsque des compteurs de charge sont utilisés, le compteur du site est calculé à l\'aide de Charge, Solaire et Batterie).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Lorsque cette option est activée, le maître de site contrôle la puissance maximale qu\'il est permis d\'importer du réseau vers le site.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Lorsque cette option est activée, le maître de site contrôle la puissance maximale qu\'il est permis d\'exporter du site vers le réseau.","control_container_explanation_export_restrictions_locked":"Détermine comment le système peut exporter de l\'alimentation vers le réseau. Une fois définie, la réglementation impose qu\'elle ne puisse être modifiée qu\'en contactant Tesla.","control_container_explanation_export_restrictions_unlocked":"La réglementation impose que les caractéristiques d\'exportation ne puissent être définies que durant la mise en service initiale. Pour modifier, veuillez contacter Tesla.","control_container_explanation_nominal_system":"Cette valeur doit correspondre à la taille du système telle qu\'elle est indiquée par les documents de conception et le rapport de l\'inspecteur.","control_container_heat_for_energy":"CHALEUR POUR ÉNERGIE","control_container_heat_mode":"MODE CHALEUR","control_container_heco_committed_capacity":"Capacité affectée","control_container_heco_committed_discharge_power_W_max_bound":"{mode} a une valeur maximale de 100 000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode} a une valeur minimale de 100 W","control_container_loading":"Chargement","control_container_max_site_meter_power_W_max_bound":"{mode} a une valeur maximale de 50 000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} a une valeur minimale de 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} doit être supérieur ou égal à 0","control_container_max_site_meter_power_kw":"Limite d\'importation de site","control_container_max_site_meter_power_w":"Limite d\'importation de site","control_container_menu":"Menu","control_container_min_site_meter_power_kW_positive":"{mode} doit être supérieur ou égal à 0","control_container_min_site_meter_power_kw":"Limite d\'exportation de site","control_container_min_site_meter_power_w":"Limite d\'exportation de site","control_container_minimum_charge_power":"PUISSANCE DE CHARGE MINIMALE","control_container_minimum_discharge_power":"PUISSANCE DE DÉCHARGE MINIMALE","control_container_misc":"DIVERS","control_container_net_meter_mode":"Restrictions sur l\'exportation du site","control_container_never":"PAS D\'EXPORTATION DEPUIS LE SITE","control_container_nominal_system_energy_kW_positive":"{mode} doit être supérieur ou égal à 0","control_container_nominal_system_energy_kWh_positive":"{mode} doit être supérieur ou égal à 0","control_container_nominal_system_energy_kwh":"Énergie nominale du système","control_container_nominal_system_energy_max_error":"L\'énergie nominale du système excède la limite d\'énergie maximale","control_container_nominal_system_power_kw":"Puissance nominale du système","control_container_nominal_system_power_max_error":"La puissance nominale du système excède la limite d\'énergie maximale","control_container_number_error_message":"{mode} doit être une entrée numérique","control_container_power":"PUISSANCE","control_container_pv_only":"RELEVÉ D\'EXPORTATION JUSQU\'AU COMPTEUR PV OK","control_container_reactive_mode":"MODE RÉACTIF","control_container_real_mode":"MODE RÉEL","control_container_reset":"Réinitialiser","control_container_site_control":"CONTRÔLE DE SITE","control_container_site_limits":"LIMITES DE SITE","control_container_site_max_power":"PUISSANCE MAX. DU SITE","control_container_site_min_power":"PUISSANCE MIN. DU SITE","control_container_submit":"Envoyer","control_container_submitting_control":"Envoi de la commande","control_start":"DÉMARRER","control_stop":"FIN","current_password_placeholder_text":"Saisissez votre mot de passe actuel","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Ampère {id}","current_transformer_item_view_battery_ct":"Batterie","current_transformer_item_view_calculated_reading":"Calculé(e) :","current_transformer_item_view_conductor_ct":"Conducteur","current_transformer_item_view_ct_voltage_pairing_1":"Phase L1","current_transformer_item_view_ct_voltage_pairing_2":"Phase L2","current_transformer_item_view_ct_voltage_pairing_3":"Phase L3","current_transformer_item_view_ct_voltage_pairing_default":"Phase par défaut","current_transformer_item_view_doubled_solar_ct":"Solaire (1TC x2)","current_transformer_item_view_flip":"Inverser","current_transformer_item_view_generator_ct":"Générateur","current_transformer_item_view_load_ct":"Charger","current_transformer_item_view_measure_pw_plus_input":"Mesure d’un onduleur Powerwall+","current_transformer_item_view_measured_reading":"Par TC :","current_transformer_item_view_missing_ct":"Manquant","current_transformer_item_view_no_reading":"Aucune lecture","current_transformer_item_view_none_ct":"Absent","current_transformer_item_view_phase_sequence_dropdown_title":"Phase","current_transformer_item_view_site_ct":"Site","current_transformer_item_view_smart_ct":"Intelligent","current_transformer_item_view_solar_ct":"Solaire","current_transformer_item_view_solar_rgm_ct":"Revenu solaire uniquement","current_transformers_container_800a_ct_ensure":"Assurez-vous que le choix du TC sur cette page correspond à ce qui est installé.","current_transformers_container_800a_ct_larger":"Les TC de 800 A ont une taille physique supérieure à celle des TC de 200/264 A.","current_transformers_container_800a_ct_use_case":"Lors du comptage des grands conducteurs ou panneaux (comme ceux de 400 A/800 A), utilisez et configurez des TC de 800 A.","current_transformers_container_amps_explanation":"Intensité traversant le transformateur de courant","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Assurez-vous que le TC est installé sur la phase correcte ({sequence}).","current_transformers_container_configure_subtitle":"Configurez les transformateurs de courant du compteur.","current_transformers_container_ct_flipping_ensure_direction":"Assurez-vous d\'abord que l\'étiquette de TC est tournée vers l\'onduleur solaire (pour TC solaire) ou vers l\'alimentation réseau (pour TC de site). Vérifiez ensuite le câblage de la phase, puis vérifiez les relevés de courant, de puissance et de facteur de puissance rapportés.","current_transformers_container_ct_flipping_modal_title":"Inversion de TC dans le logiciel","current_transformers_container_ct_flipping_software_incorrect_metering":"Si vous utilisez le logiciel pour inverser un TC installé sur la mauvaise phase, vous obtiendrez un comptage incorrect.","current_transformers_container_ct_flipping_wrong_phase":"Un relevé de puissance négatif peut indiquer que le TC est installé à l\'envers ou sur la mauvaise phase.","current_transformers_container_double_check_recommendation":"Revérifiez le câblage, les prises de tension, les TC et la configuration du compteur avant de continuer.","current_transformers_container_doubled_solar_ct_explanation":"Un seul TC peut être utilisé pour compter un onduleur PV équilibré","current_transformers_container_doubled_solar_ct_modal_title":"Comptage d\'un onduleur solaire à phase auxiliaire avec un TC","current_transformers_container_grid_code_phase_modal_title":"Avertissement : le nombre de TC ne correspond pas à la phase du code de réseau recommandée","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Avertissement : le nombre de TC ne correspond pas à la phase du code de réseau recommandée pour plusieurs compteurs","current_transformers_container_grid_code_phase_multiple_warnings_message":"Un nombre de TC imprévu est relié aux {numMeters} compteurs suivants :","current_transformers_container_grid_code_phase_warning_message":"Un nombre de TC imprévu est relié au compteur suivant :","current_transformers_container_grid_code_single_phase_warning":"Le code de réseau appliqué est monophasé. Les systèmes monophasés ont généralement un service monophasé ou triphasé. {lb} Un nombre impair de TC (1 ou 3) est recommandé.","current_transformers_container_grid_code_split_phase_warning":"Le code de réseau appliqué est phase auxiliaire. Les systèmes à phase auxiliaire disposent généralement d\'un TC sur chaque conducteur \\"chaud\\". {lb} Un nombre pair de TC (2 ou 4) est recommandé.","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"Un compteur Neurio mesurant les onduleurs solaires Powerwall+ est nécessaire pour activer le compteur de niveau de revenus (RGM).","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Sélectionnez Oui si la mesure concerne un onduleur solaire Powerwall+. Sélectionnez Non si la mesure concerne un onduleur solaire ne faisant pas partie d’un ensemble Powerwall+.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"La mesure concerne-t-elle un onduleur Powerwall+ ?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Assurez-vous que l\'étiquette sur les côtés du TC est tournée vers l\'onduleur solaire.","current_transformers_container_label_modal_title":"Explication des étiquettes","current_transformers_container_load_ct_ensure":"Lors de la configuration des TC de charge, assurez-vous que toutes les charges sur site sont comptées et que les charges avec sauvegarde et celles sans sauvegarde sont comptées séparément.","current_transformers_container_load_ct_modal_title":"TC de charge","current_transformers_container_load_ct_recommended":"Il est recommandé de configurer des TC de charge uniquement pour des utilisations spécifiques pour lesquelles il n\'est pas possible de configurer un TC de site.","current_transformers_container_meter_id":"Compteur {id}","current_transformers_container_no_load_and_site_ct":"Il ne peut pas y avoir à la fois un TC de charge et un TC de site.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"Il ne peut pas y avoir de charges derrière le TC.","current_transformers_container_no_site_or_load_warning":"AUCUN TRANSFORMATEUR DE COURANT DE CHARGE OU DE SITE CONFIGURÉ","current_transformers_container_no_solar_ct_warning":"AUCUN TRANSFORMATEUR DE COURANT SOLAIRE CONFIGURÉ","current_transformers_container_no_solar_inverter_warning":"AUCUN ONDULEUR SOLAIRE CONFIGURÉ","current_transformers_container_phase_usages_modal_title":"Avertissement : la configuration du TC ne correspond pas à la configuration de la phase","current_transformers_container_phase_usages_warning":"Le nombre de phases configurées ne correspond pas au nombre de TC configurés. {lb} {num} TC configuré(s) est/sont recommandé(s).","current_transformers_container_phase_usages_warning_message":"Un nombre de TC imprévu est relié au(x) compteur(s) suivant(s) :","current_transformers_container_power_amperage_configure_warning":"Le TC {type} nécessite une alimentation et un ampérage positifs pour être configuré correctement.","current_transformers_container_power_factor_explanation":"Facteur de puissance (Puissance_réelle / Puissance_apparente). Ne s\'affiche que pour les niveaux de puissance élevés. Pour les charges résistives courantes, le facteur de puissance doit être proche de 1. Un facteur de puissance faible peut indiquer que le transformateur de courant n\'est pas installé correctement ou qu\'il existe des charges capacitives/inductives très importantes.","current_transformers_container_power_factor_out_of_range_warning":"La mesure de facteur de puissance relevée est en dehors de la plage prévue. {lb} Facteur de puissance mesuré : FP {powerFactor} {lb} Le compteur est peut être mal installé, ou son phasage est incorrect, ou les charges capacitives ou inductives sont très importantes.","current_transformers_container_system_test_configured_incorrect":"Avertissement : le TC {id} est peut-être configuré de manière incorrecte","current_transformers_container_title":"Transformateurs de courant","current_transformers_container_voltage_out_of_range_warning":"Tension hors plage. {lb} Tension mesurée : {volts} V {lb} La tension mesurée sur ce TC est en dehors de la plage de fonctionnement normale.","current_transformers_container_volts_explanation":"Tension d\'une ligne à neutre sur la prise de tension associée au transformateur de courant","current_transformers_container_watts_explanation":"Puissance, c\'est-à-dire l\'intensité passant par le transformateur de courant multipliée par la tension sur la prise de tension associée","customer_installation_view_email_label":"ADRESSE E-MAIL DU CLIENT","customer_installation_view_email_placeholder":"E-mail","customer_registration_view_address_label":"ADRESSE","customer_registration_view_address_placeholder":"Adresse","customer_registration_view_city_label":"VILLE","customer_registration_view_city_placeholder":"Ville","customer_registration_view_clear_form":"EFFACER LE FORMULAIRE","customer_registration_view_country_label":"Pays","customer_registration_view_customer_information":"INFORMATIONS SUR LE CLIENT","customer_registration_view_email_address_label":"ADRESSE E-MAIL","customer_registration_view_email_address_label_confirmation":"SAISISSEZ À NOUVEAU L\'ADRESSE E-MAIL","customer_registration_view_email_placeholder":"E-mail","customer_registration_view_family_name_label":"NOM DE FAMILLE (NOM)","customer_registration_view_family_name_warning":"Saisissez le nom du client.","customer_registration_view_given_name_label":"PRÉNOM","customer_registration_view_given_name_warning":"Saisissez le prénom du client.","customer_registration_view_homeowner_family_name_placeholder":"Nom","customer_registration_view_homeowner_given_name_placeholder":"Prénom","customer_registration_view_installation_address":"ADRESSE DE L’INSTALLATION","customer_registration_view_phone_number_label":"TÉLÉPHONE","customer_registration_view_phone_placeholder":"Téléphone","customer_registration_view_skip_explanation":"Si cette étape est ignorée, le propriétaire devra effectuer lui-même l’enregistrement par le biais de l’application mobile Tesla avant d’avoir accès au système.","customer_registration_view_state_placeholder":"État","customer_registration_view_state_province_region_label":"ÉTAT / PROVINCE / RÉGION","customer_registration_view_zip_label":"CODE POSTAL","customer_registration_view_zip_placeholder":"Code postal","diagnostic-alert-affected-children":"Composants concernés ({count})","diagnostic-alerts-missing-alert-information":"Informations sur l\'alerte manquante","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Article de la boîte à outils","diagnostic-alerts-toolbox-article-external-link":"Liens externes","diagnostic_alert_alert_name":"Nom de l\'alerte","diagnostic_alert_alert_type":"Type d\'alerte","diagnostic_alert_audience":"Public","diagnostic_alert_clear_condition":"Effacer la condition","diagnostic_alert_description":"Description","diagnostic_alert_display_name":"Nom d\'affichage","diagnostic_alert_id":"ID d\'alerte","diagnostic_alert_impact_category":"Catégorie d\'impact","diagnostic_alert_latching":"Verrouillage","diagnostic_alert_max":"Max","diagnostic_alert_min":"Min","diagnostic_alert_name":"Nom","diagnostic_alert_node":"Nœud","diagnostic_alert_offset":"Écart","diagnostic_alert_payload_signals":"Signaux de charge utile","diagnostic_alert_potential_impact":"Impact potentiel","diagnostic_alert_safety_reason":"Motif de sécurité","diagnostic_alert_scale":"Échelle","diagnostic_alert_set_condition":"Définir la condition","diagnostic_alert_signal_name":"Nom du signal","diagnostic_alert_signoff":"Signer pour valider","diagnostic_alert_sna_value":"Valeur SNA","diagnostic_alert_supplier_dtc_name":"Nom du code d\'anomalie du fournisseur","diagnostic_alert_uiID":"ID d\'IU","diagnostic_alert_units":"Unités","diagnostic_alert_urgent":"Urgent","diagnostic_category_item_view_alerts_description":"Alertes de site, composant et sous-composant","diagnostic_category_item_view_download_results":"TÉLÉCHARGER LES RÉSULTATS","diagnostic_category_item_view_internal_comms_description":"Vérifier toutes les communications de l\'appareil","diagnostic_category_item_view_internal_comms_title":"Communications de l\'appareil","diagnostic_category_item_view_live_results":"RÉSULTATS EN DIRECT","diagnostic_category_item_view_metering_description":"Vérifier les connexions du compteur","diagnostic_category_item_view_metering_title":"Comptage","diagnostic_category_item_view_networking_description":"Vérifier la connexion réseau","diagnostic_category_item_view_networking_title":"Mise en réseau","diagnostic_category_item_view_no_selected_tests":"PAS DE TESTS SÉLECTIONNÉS","diagnostic_category_item_view_rerun_selected":"RÉEXÉCUTER {num} TESTS SÉLECTIONNÉS","diagnostic_category_item_view_rerun_selected_test":"RÉEXÉCUTER LES TESTS SÉLECTIONNÉS","diagnostic_category_item_view_run_selected":"EXÉCUTER {num} TESTS SÉLECTIONNÉS","diagnostic_category_item_view_run_selected_test":"EXÉCUTER LES TESTS SÉLECTIONNÉS","diagnostic_category_item_view_select_all_tests":"Sélectionner tout","diagnostic_category_item_view_self_tests_description":"Lancer les tests de charge et de décharge sur le système","diagnostic_category_item_view_self_tests_title":"Auto-tests","diagnostic_category_item_view_toggle_all_tests":"Tout permuter","diagnostic_input_view_blocks_label":"BLOCS","diagnostic_input_view_individual_test_name_label":"NOM DU TEST INDIVIDUEL","diagnostic_input_view_max_allowed_charge_power_label":"PUISSANCE DE CHARGE MAX. AUTORISÉE","diagnostic_input_view_max_allowed_discharge_power_label":"PUISSANCE DE DÉCHARGE MAX. AUTORISÉE","diagnostic_test_enable_line":"Ligne d\'activation","diagnostic_test_item_view_ac_self_test_description":"Auto-test d\'alimentation CA","diagnostic_test_item_view_ac_self_test_description_2":"Exécute une séquence de tests de fluctuation de puissance sur le système CA. Les systèmes Powerpack utiliseront les paramètres « PUISSANCE_MAX_AUTORISÉE ». Définissez-les sur 0 pour les systèmes Megapack et Supercharger.","diagnostic_test_item_view_dc_self_test_description":"Auto-test d\'alimentation CC","diagnostic_test_item_view_dc_self_test_description_2":"Exécute une séquence de tests sur le système CC, y compris des vérifications thermiques.","diagnostic_test_item_view_enable_line_description":"Tester la ligne d\'activation haute pour tous les Powerwalls","diagnostic_test_item_view_enable_line_resolution":"Faire basculer la ligne d\'activation et réessayer","diagnostic_test_item_view_individual_self_test_description":"Sélectionnez une option parmi une liste d’auto-tests disponibles sur les contrôleurs de bus configurés.","diagnostic_test_item_view_meter_comms_description":"Envoyer une commande Ping aux communications du compteur","diagnostic_test_item_view_network_connection_description":"Tester la connexion à Internet et aux serveurs Tesla","diagnostic_test_item_view_network_connection_resolution":"Reconfigurer la mise en réseau","diagnostic_test_item_view_resolution_generic_text":"Reconfigurer {name} et réessayer","diagnostic_test_item_view_step_canceled":"Le test a été annulé par l\'utilisateur","diagnostic_test_item_view_step_config_update_status":"Vérifier le statut du serveur de configuration Tesla","diagnostic_test_item_view_step_google_http":"Envoyer une commande Ping au HTTP Google","diagnostic_test_item_view_step_google_https":"Envoyer une commande Ping au HTTPS Google","diagnostic_test_item_view_step_hermes_status":"Vérifier le statut du serveur de journalisation Tesla","diagnostic_test_item_view_step_results_ip_address":"Adresse IP","diagnostic_test_item_view_step_results_subnet_mask":"Sous-réseau","diagnostic_test_item_view_table_header_key":"Identifiant","diagnostic_test_item_view_table_header_name":"Étape","diagnostic_test_item_view_table_header_value":"Valeur","diagnostic_test_meter_comms":"Communications du compteur","diagnostic_test_network_connection":"Connexion au réseau","diagnostics_composite_view_no_tests_found":"PAS DE TESTS DISPONIBLES TROUVÉS","diagnostics_composite_view_run_all_selected_tests":"EXÉCUTER TOUS LES TESTS SÉLECTIONNÉS","diagnostics_container_industrial_disruptive_tests_description":"Les tests suivants déclencheront le fonctionnement des systèmes de ventilation et de chauffage, ce qui provoquera du bruit. Il faut s\'attendre à une consommation d\'environ 30 kW par onduleur. En outre, les tests suivants peuvent perturber le fonctionnement normal du système :","diagnostics_container_required_inputs_description":"Les tests suivants requièrent des entrées supplémentaires :","diagnostics_container_residential_disruptive_tests_description":"Les tests suivants peuvent perturber le fonctionnement normal de la passerelle et du Powerwall :","diagnostics_container_stop_test_title":"Arrêter le test {name} ?","diagnostics_container_subtitle":"Outils pour diagnostiquer les problèmes affectant l\'installation du système.","diagnostics_container_tests_running":"Tests diagnostiques en cours d\'exécution","diagnostics_container_title":"Diagnostics","disabled_reason_battery_breaker_open":"Le disjoncteur de batterie est ouvert","disabled_reason_checking_firmware_update":"Vérification de la mise à jour du microprogramme","disabled_reason_config":"Désactivé par le fichier de configuration","disabled_reason_excessive_voltage_drop":"Chute de tension excessive","disabled_reason_firmware_update_failed":"Échec de la mise à jour du microprogramme","disabled_reason_firmware_update_in_progress":"Mise à jour du microprogramme en cours","disabled_reason_gridcode_write_failed":"Échec de réglage du code de réseau","disabled_reason_user_requested":"Désactivé sur demande de l’utilisateur","dropdown_default_placeholder":"Tapez...","dropdown_list_view_not_listed_label":"Non répertorié : \\"{searchText}\\"","dropdown_list_view_select_all":"Sélectionner tout","dropdown_list_view_select_field":"Sélectionnez un champ.","dropdown_list_view_show_complete":"AFFICHER LA LISTE COMPLÈTE","dropdown_list_view_show_searchable":"AFFICHER LA LISTE CONSULTABLE","enumeration_warning_details_miswired_12v":"Lorsque vous connectez deux Powerwall+, seule l\'unité connectée au dispositif Gateway/commutateur de secours doit se voir appliquer une alimentation en 12 V. Supprimez l\'alimentation en 12 V de tous les Powerwall+ suivants dans la chaîne, puis relancez la recherche d\'appareils (au bas de cette page) pour effacer cet avertissement.","enumeration_warning_details_multiple_controllers_gateway":"Débranchez le faisceau d\'alimentation de tous les contrôleurs de site de Powerwall+ se trouvant dans le coin supérieur droit de l\'ensemble photovoltaïque.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Débranchez le faisceau d\'alimentation du contrôleur de site de Powerwall+ (non connecté au commutateur de secours) se trouvant dans le coin supérieur droit de l\'ensemble photovoltaïque.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Débranchez le faisceau d\'alimentation de tous les contrôleurs de site de Powerwall+ se trouvant dans le coin supérieur droit de l\'ensemble photovoltaïque. Mettez le système en service en le connectant au Backup Gateway.","enumeration_warning_details_multiple_controllers_unknown":"Dans une configuration à plusieurs Powerwall+ à connexion CAN câblée, il ne doit y avoir qu\'un contrôleur de site sous tension.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Un seul contrôleur de site doit être actif. Lorsque vous utilisez le dispositif Backup Gateway, débranchez tous les contrôleurs Powerwall+. Lorsque vous utilisez un commutateur de secours, débranchez tous les contrôleurs Powerwall+ sauf un. La fonctionnalité Exécuter l’Assistant est désactivée jusqu’à ce qu’un seul contrôleur de site soit actif.","enumeration_warning_title_miswired_12v":"Erreur de câblage 12 V","enumeration_warning_title_multiple_controllers":"Plusieurs contrôleurs de sites sont actifs","error_details":"Détails de l\'erreur","error_item_view_check_network":"Vérifier la connexion réseau","error_item_view_disconnected":"Déconnecté(e) de la passerelle. Vérifier la connexion réseau et {refresh}","error_item_view_forgot_password":"Cliquez pour réinitialiser le mot de passe.","error_item_view_refresh_browser":"Actualiser le navigateur.","error_item_view_try_logging_in_again":"Essayez de vous connecter à nouveau.","ethernet_view_backup_dns_label":"SERVEUR DNS DE SAUVEGARDE","ethernet_view_backup_dns_warning":"Serveur DNS de sauvegarde valide","ethernet_view_configuration_label":"CONFIGURATION","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY","ethernet_view_gateway_warning":"IP de passerelle (routeur) valide","ethernet_view_ip_address_label":"ADRESSE IP","ethernet_view_ip_address_warning":"Adresse IP valide","ethernet_view_not_available":"Non disponible","ethernet_view_primary_dns_label":"SERVEUR DNS PRINCIPAL","ethernet_view_primary_dns_warning":"Serveur DNS principal valide","ethernet_view_static_label":"Statique","ethernet_view_subnet_mask_label":"MASQUE DE SOUS-RÉSEAU","ethernet_view_subnet_mask_warning":"Masque de sous-réseau valide","factory_reset_message":"Cela provoquera la réinitialisation de l’unité à l’état par défaut fourni par Tesla. Cette action est irréversible. L\'unité devra être remise en service par un installateur professionnel avant de pouvoir fonctionner. Vous devrez peut-être rétablir la connexion au réseau Wi-Fi de l\'unité.","field_false":"Faux","field_true":"Vrai","follower_powerwall_message":"Ce Powerwall est contrôlé par {leader}","follower_powerwall_title":"Powerwall suiveur","form_legend_text":"signale un champ obligatoire","generation_container_connecting_status":"Connexion de","generation_container_connection":"Connexion de l\'onduleur {id}","generation_container_connection_summary":"Pendant ce processus de connexion, il se peut que vous soyez temporairement déconnecté du réseau. {lb} Assurez-vous de vous reconnecter au bon réseau. Ceci peut prendre jusqu\'à 3 minutes.","generation_container_subtitle":"Ajoutez les informations de l’onduleur solaire et du générateur ci-dessous.","generation_container_title":"Génération","generator_item_view_disconnect_type_label":"TYPE DE DISJONCTEUR","generator_item_view_generator":"GÉNÉRATEUR {id}","generator_item_view_manufacturer_label":"FABRICANT (OPT)","generator_item_view_model_label":"MODÈLE","generator_item_view_serial_label":"SÉRIE","generator_item_view_sustained_power_label":"ALIMENTATION CONSTANTE","generator_view_add_generator":"AJOUTER UN GÉNÉRATEUR","grid_code_container_off_grid_confirmation":"Le système est-il déconnecté du réseau électrique?","grid_code_container_off_grid_detected":"Système hors réseau détecté. Vérifiez qu’il s’agit du bon paramètre.","grid_code_container_off_grid_warning":"{warning} : Impossible de détecter l’état hors réseau du système. Un mauvais paramétrage de l\'état hors réseau peut entraîner la défaillance du système.","grid_code_container_results":"Résultats de détection de réseau","grid_code_container_retrieving":"Récupération des codes de réseau","grid_code_container_saving":"Enregistrement du code réseau","grid_code_container_subtitle":"Trouvez les meilleurs paramètres pour votre installation par géolocalisation et en fonction des relevés de compteurs.","grid_services_view_grid_services":"Services au réseau","heading_change_password":"Modifier le mot de passe","help_view_how_password":"Recherche du mot de passe sur une passerelle","help_view_how_password_description":"Ouvrez la porte sur la passerelle. Le mot de passe se trouve sur l\'autocollant après \\"Password:\\"","help_view_how_serial_number":"Trouver le numéro de série sur une passerelle (hors passerelle de secours)","help_view_how_serial_number_backup":"Trouver le numéro de série sur une passerelle de secours","help_view_how_serial_number_backup_description":"Ouvrez la porte sur la passerelle de secours. Le numéro de série commence par \\"(S):\\"","help_view_how_serial_number_description":"Ouvrez la porte sur la passerelle. Le numéro de série commence par \\"(S):\\"","help_view_how_to_enable_line":"Activation/désactivation d\'un Powerwall","help_view_how_to_enable_line_description":"Désactivez le Powerwall avec le commutateur puis remettez-le en marche. Pour les systèmes comprenant plusieurs Powerwall, vous ne devez basculer qu\'un seul commutateur","hierarchy_charger":"Bloc chargeur {name}","hierarchy_chinv":"VFD pour compresseur et chauffage (CHINV)","hierarchy_converter":"Convertisseur CC-CC (STARC)","hierarchy_inverter":"Bloc batterie {name}","hierarchy_mega_thermal_controller":"Contrôleur thermique (MPTHC)","hierarchy_missing_post":"Borne manquante","hierarchy_mpbc":"Bloc batterie {name}","hierarchy_part_number":"Référence","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Rapports des pods","hierarchy_post":"Borne (LCC)","hierarchy_posts":"Bornes","hierarchy_power_stage":"Étage de puissance","hierarchy_power_stages":"Étages de puissance","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Carte de gestion de la batterie (QBMS)","hierarchy_qhvp":"Processeur haute tension (QHVP)","hierarchy_scthcs":"Contrôleurs thermiques","hierarchy_serial_number":"Numéro de série","hierarchy_sitemaster":"Maître de site {name}","hierarchy_starcs":"Convertisseurs CC-CC","hierarchy_stitch":"Alimentation CC-CC (STITCH)","hierarchy_thermal_controller":"Contrôleur thermique (SCTHC)","higher_order_login_login_required":"Identifiant requis","higher_order_login_title":"Commençons.\\n","home_container_caution":"⚠️ Mise en garde","home_container_caution_deenergize":"Pour désactiver le système en toute sécurité, mettez tous les commutateurs du Powerwall hors tension.","home_container_caution_energized":"Le système peut demeurer sous tension si des guirlandes solaires sont connectées.","home_container_inactive_meter":"Données de compteur obsolètes","home_container_inactive_meter_description":"Vérifiez la connexion {type} au compteur.","home_container_inactive_meter_timestamp":"Dernier relevé de compteur à {timestamp}","home_container_login_required":"Identifiant requis","home_container_missing_meter":"Le compteur est absent","home_container_positive_meter":"Avertissement : le compteur {type} est peut-être mal configuré","home_container_positive_meter_description":"Le compteur {type} nécessite une alimentation et un ampérage positifs pour être configuré correctement.","home_container_powerwall_error":"Erreur système du Powerwall","home_container_powerwall_start_error":"Impossible de démarrer le système : {reason}","home_container_site_controller_error":"Erreur du système de contrôleur de site","home_container_sitemaster_alternative":"Note: Le système ne doit être désactivé que lorsque les interrupteurs et les disjoncteurs de chaque Powerwall sont ouverts.","home_container_sitemaster_confirm":"Cliquez sur Oui ci-dessous uniquement si vous êtes sûr de vouloir arrêter le système.","home_container_sitemaster_confirm_industrial":"Voulez-vous vraiment arrêter le système ?","home_container_sitemaster_confirm_wizard":"Arrêter le système pour exécuter l’assistant. Continuez et arrêtez le système ?","home_container_sitemaster_header_warning":"{warning} Cette action va interrompre le fonctionnement du Powerwall.","home_container_sitemaster_header_warning_industrial":"{warning} Vu l\'état dans lequel se trouve le système, Tesla ne recommande pas qu\'il soit arrêté. Raison: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} Vu l\'état dans lequel se trouve le système, Tesla ne recommande pas qu\'il soit arrêté. Raison: \\"{reason}\\"","home_container_sitemaster_logging":"La désactivation du système va interrompre le protocole d\'enregistrement.","home_container_sitemaster_reset":"Après un arrêt du système, pour redémarrer le système, cliquez sur le bouton Démarrer sur la page d’accueil.","home_container_sitemaster_update":"Si une mise à jour est en cours, elle va être abandonnée.","home_container_start_powerwall":"Démarrer le système","home_container_start_system_button":"DÉMARRER LE SYSTÈME","home_container_stop_powerwall":"Arrêter le système","home_container_stop_system_button":"ARRÊTER LE SYSTÈME","home_view_compliance":"CONFORMITÉ","home_view_download_all_logs":"Télécharger tous les journaux","home_view_download_logs":"TÉLÉCHARGER LES JOURNAUX","home_view_download_logs_description_one":"Cette opération lance le téléchargement d\'un ensemble compressé de journaux système pouvant être utiles pour effectuer un diagnostic des erreurs affectant le système d\'exploitation, le logiciel et la mise en réseau.","home_view_download_logs_description_three":"Les journaux sont signés et chiffrés ; ils doivent être envoyés au service Énergie de Tesla à des fins d\'enquête.","home_view_download_logs_description_two":"Cela est particulièrement utile lorsque la passerelle ne peut pas être connectée au réseau et qu\'un dépannage avancé est requis.","home_view_login":"CONNEXION","home_view_logout":"DÉCONNEXION","home_view_run_wizard":"EXÉCUTER L’ASSISTANT","input_accept":"J\'accepte","input_confirm":"J\'accuse réception de tous les avertissements du système.","input_consent":"J\'accepte","input_decline":"Je refuse","input_no_consent":"Je refuse","input_title_email":"Saisissez une adresse e-mail valide : name@name.domain","installation_container_relay_section_modal_title":"Relais de basse tension de la passerelle","installation_container_residual_current_device_modal_title":"Exigence d\'installation des RCD du site","installation_container_subtitle":"Informations relatives à l’installateur et au site","installation_container_sync_relay_usage_open_off_grid":"Ouvrir le relais en situation Hors réseau","installation_container_title":"Informations sur l\'installation","installation_problem_detail_site_shutdown_0":"Pour réactiver le système :","installation_problem_detail_site_shutdown_1":"Placez tous les interrupteurs du Powerwall+ en position Marche.","installation_problem_detail_site_shutdown_2":"Fermer les arrêts d’urgence","installation_problem_detail_site_shutdown_3":"S\'assurer que les cavaliers d’arrêt rapide sont correctement installés","installation_problem_detail_site_shutdown_4":"Vérifiez le câblage du circuit d’arrêt.","installation_problem_detail_title_site_shutdown":"Circuit d’arrêt du site déclenché","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Circuit d’arrêt du site déclenché par un arrêt rapide du Powerwall+.","installation_problem_details_pvacs_with_no_solar_rgm":"Les compteurs solaires ne sont nécessaires que pour mesurer les onduleurs solaires qui ne font pas partie d’un ensemble Powerwall+. Les compteurs qui mesurent un onduleur Powerwall+ doivent être marqués comme tels sur la page Transformateurs de courant.","installation_problem_details_too_few_solar_rgm":"Le nombre de TC mesurant un onduleur solaire Powerwall+ doit correspondre au nombre d’onduleurs solaires Powerwall+. Exécutez l’assistant, jumelez le compteur Neurio si nécessaire et ajustez la configuration du TC sur la page Transformateurs de courant.","installation_problem_details_too_many_solar_rgm":"Le nombre de TC mesurant un onduleur solaire Powerwall+ doit correspondre au nombre d’onduleurs solaires Powerwall+. Exécutez l’assistant et ajustez la configuration du TC sur la page Transformateurs de courant.","installation_problem_title_pvacs_with_no_solar_rgm":"Le compteur solaire ne mesure pas l’onduleur Powerwall+. Est-ce correct ?","installation_problem_title_site_shutdown":"Circuit d’arrêt du site déclenché. Tous les Powerwalls et onduleurs solaires Powerwall+ sont désactivés.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Circuit d’arrêt du site déclenché par un arrêt rapide du Powerwall+. Tous les Powerwalls et onduleurs solaires Powerwall+ sont désactivés.","installation_problem_title_too_few_solar_rgm":"Pas assez de compteurs solaires mesurant l’onduleur Powerwall+","installation_problem_title_too_many_solar_rgm":"Trop de compteurs solaires mesurant l’onduleur Powerwall+","installation_view_add_on_solar":"Ajouts","installation_view_additional_connections_label":"CONNEXIONS ADDITIONNELLES","installation_view_back_wiring":"Postérieure","installation_view_backup_configuration_label":"CONFIGURATION DE LA CAPACITÉ DE SECOURS","installation_view_basement_location":"Sous-Sol","installation_view_company_label":"NOM DE L\'ENTREPRISE","installation_view_company_placeholder":"Nom de l\'entreprise","installation_view_conditioned_space_location":"Espace Confiné","installation_view_existing_solar":"Existant","installation_view_floor_mounting":"Au Sol","installation_view_garage_location":"Garage","installation_view_home_label":"CÂBLAGE DU DOMICILE","installation_view_location_label":"EMPLACEMENT DE L\'INSTALLATION DU POWERWALL","installation_view_modem_ethernet":"Modem cellulaire via Ethernet?","installation_view_modem_wifi":"Modem cellulaire via Wi-Fi?","installation_view_mounting_label":"MONTAGE DU POWERWALL","installation_view_na_backup_configuration":"N/A","installation_view_new_solar":"Nouveau","installation_view_none_solar":"Absent","installation_view_outdoor_location":"En Extérieur","installation_view_pad_mounting":"Socle","installation_view_partial_home_backup_configuration":"Maison partielle","installation_view_phone_label":"TÉLÉPHONE","installation_view_phone_placeholder":"Numéro de téléphone de l\'installateur","installation_view_powerline_ethernet":"Utilisation d\'adaptateur CPL?","installation_view_pv_panel":"Panneau PV","installation_view_relay_enabled":"Ouvrir le relais en situation Hors réseau","installation_view_relay_label":"RELAIS DE BASSE TENSION DE LA PASSERELLE","installation_view_relay_options_modal_content":"En situation Sur réseau ou en cas de connexion à une autre source de tension CA, ce relais sera fermé. {lb1} En situation Hors réseau, ce relais sera ouvert. {lb1} À titre d\'exemple, ceci peut être utilisé pour permettre à une climatisation de fonctionner en situation Sur réseau, puis de ne pas fonctionner en situation Hors réseau afin d\'empêcher le courant d\'appel élevé associé de surcharger les Powerwalls.","installation_view_relay_section_modal_content":"La passerelle dispose d\'un relais intégré qui est contrôlé afin de s\'allumer et de s\'éteindre en fonction du statut du système. {lb1} Cela peut servir à contrôler un appareil externe, comme une source de charge ou d\'énergie secondaire. {lb1} Sur la Backup Gateway 1, utilisez les broches 1 et 2 du connecteur auxiliaire (grand connecteur Phoenix vert à 9 broches). {lb1} Sur la Backup Gateway 2, utilisez les broches 3 et 4 (GSO/GSI) du connecteur auxiliaire (connecteur Phoenix vert à 5 broches). {lb1} Ce relais est adapté à 60 Volts / 2 Ampères, et il est couramment utilisé avec des circuits de 12 V ou 24 V. {lb1} Revoyez le délestage de charge et les notes d\'applications s\'y rapportant pour obtenir plus de détails.","installation_view_residual_current_device":"Le RCD est-il installé en amont de la passerelle ?","installation_view_residual_current_device_modal_content":"Des dispositifs à courant résiduel (Residual Current Device, RCD) au niveau du site peuvent être requis pour certaines installations, comme des réseaux avec configuration de mise à la terre TT. {lb1}{lb2} Pour réduire le risque d\'arrêt intempestif pendant un fonctionnement Hors réseau, Tesla recommande de s\'assurer que tous les RCD en amont sont à actionnement retardé (Type S) ou de relocaliser le RCD du site après le contacteur de la passerelle, dans la mesure du possible. {lb1}{lb2} Pour un complément d\'information, consultez la Note d\'application sur le RCD et la protection contre les défaillances.","installation_view_satellite_ethernet":"Satellitaire via Ethernet?","installation_view_satellite_wifi":"Connexion Satellitaire via Wi-Fi?","installation_view_side_wiring":"Latéral","installation_view_solar_label":"INSTALLATION PHOTOVOLTAÏQUE","installation_view_solar_panels":"Panneaux solaires","installation_view_solar_roof":"Toit solaire","installation_view_solar_type_label":"TYPE D\'INSTALLATION SOLAIRE","installation_view_solarglass":"Solarglass","installation_view_stack_kit":"Utilisation du Stack Kit?","installation_view_type_commercial":"Commercial","installation_view_type_label":"INFORMATIONS SUR L\'INSTALLATION","installation_view_type_perm_off_grid":"Hors réseau de façon permanente","installation_view_type_residential":"Résidentiel","installation_view_wall_mounting":"Au Mur","installation_view_whole_home_backup_configuration":"Maison complète","installation_view_wifi_extender":"Extension Wi-Fi?","installation_view_wiring_label":"CÂBLAGE DU POWERWALL","inverter_test_view_accuracy_magnitude":"Précision Amplitude","inverter_test_view_accuracy_time":"Précision Temps","inverter_test_view_complete":"Terminé","inverter_test_view_current_magnitude":"Amplitude de courant","inverter_test_view_fail":"Échec","inverter_test_view_na":"N/A","inverter_test_view_not_run":"Non exécuté","inverter_test_view_pass":"Succès","inverter_test_view_running":"Exécution en cours","inverter_test_view_set_magnitude":"Régler l\'amplitude","inverter_test_view_set_time":"Régler l’heure","inverter_test_view_test_description":"Exécution de l’auto-test de l’onduleur","inverter_test_view_test_name_all":"Tous les tests","inverter_test_view_test_name_over_freq_stage_one":"Sur-fréquence Phase 1","inverter_test_view_test_name_over_freq_stage_two":"Sur-fréquence Phase 2","inverter_test_view_test_name_over_volt_one":"Surtension Phase 1","inverter_test_view_test_name_over_volt_two":"Surtension Phase 2","inverter_test_view_test_name_under_freq_stage_one":"Sous-fréquence Phase 1","inverter_test_view_test_name_under_freq_stage_two":"Sous-fréquence Phase 2","inverter_test_view_test_name_under_volt_one":"Sous-tension Phase 1","inverter_test_view_test_name_under_volt_two":"Sous-tension Phase 2","inverter_test_view_timestamp":"Horodatage","inverter_test_view_trip_magnitude":"Amplitude d’amorçage","inverter_test_view_trip_time":"Temps d\'amorçage","inverter_test_view_warning":"Remarque : Le test de l’onduleur peut prendre 20 à 30 minutes par onduleur.","label_fail":"Échec","label_inconclusive":"Incertain","label_pass":"Succès","legal_container_customer_policy_subtitle":"Cette partie doit obligatoirement être remplie par le propriétaire.","legal_container_customer_policy_title":"Politique de confidentialité client Tesla et Garantie limitée","legal_container_no_meters_warning":"AUCUN COMPTEUR CONFIGURÉ","legal_container_no_powerwalls_warning":"AUCUN POWERWALL DÉTECTÉ","login_type_customer":"Client","login_type_engineer":"Ingénieur","login_type_installer":"Installateur","login_view_cancel_login_auth":"Annuler la connexion","login_view_change_forgot_password":"MODIFIER LE MOT DE PASSE OU MOT DE PASSE OUBLIÉ","login_view_compliance":"CONFORMITÉ","login_view_customer_email_placeholder":"Adresse e-mail du client","login_view_email":"ADRESSE E-MAIL","login_view_email_placeholder":"E-mail du responsable de l\'installation","login_view_forgot_password":"MOT DE PASSE OUBLIÉ","login_view_forgot_password_login_type":"Veuillez sélectionner le type de connexion","login_view_language_label":"LANGUE","login_view_login_type_label":"TYPE D\'IDENTIFIANT","login_view_password_placeholder":"Saisissez votre mot de passe","login_view_start_login_auth":"DÉMARRER LE PROCESSUS DE CONNEXION","login_view_start_login_auth_how_to_enable_line_description":"Pour vous connecter, mettez le commutateur d\'activation du Powerwall en position d\'arrêt, puis remettez-le en position de marche. Pour les systèmes comprenant plusieurs Powerwall, vous ne devez basculer qu\'un seul commutateur","login_view_username":"NOM D\'UTILISATEUR","login_view_username_placeholder":"Nom d\'utilisateur","login_warning_view_expand":"Si l’Assistant ne démarre pas {click}.","login_warning_view_firmware_update":"Lorsqu\'une mise à jour du microprogramme est en cours","login_warning_view_heading":"{warning} Le lancement de l\'assistant arrête le fonctionnement de la batterie.","login_warning_view_protect_system":"Pour protéger le système, l’Assistant ne démarre pas","login_warning_view_stop_operation":"Démarrage forcé de l\'Assistant (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Les seuls navigateurs Web pris en charge actuellement sont Chrome et Safari.","login_warning_view_system_force_launch":"Si vous voulez démarrer l’Assistant et interrompre le fonctionnement du système, sélectionnez Démarrage forcé de l\'Assistant.","login_warning_view_system_off_grid":"Lorsque le système est déconnecté du réseau électrique","login_warning_view_warning_click":"cliquez ici pour en savoir plus","mater_item_view_bad_barcode":"Code-barres incorrect scanné","mater_item_view_barcode_scan_failed":"Échec de scan du code-barres","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Batterie","meter_aggregate_type_load":"Charger","meter_aggregate_type_site":"Site","meter_aggregate_type_solar":"Solaire","meter_container_add_meter_error":"Vérification du compteur","meter_container_add_meter_status":"Ajout d\'un compteur","meter_container_authorizing_status":"Autorisation en cours","meter_container_decode":"Impossible de déchiffrer le numéro de série à partir de l’image.","meter_container_detecting_status":"Détection des compteurs câblés","meter_container_failed_status":"Échec de l’ajout du compteur","meter_container_reconnecting_status":"Reconnexion","meter_container_skip_title":"Aucun compteur n\'a été mis en service. Voulez-vous vraiment continuer ?","meter_container_starting_status":"Démarrage","meter_container_subtitle":"Saisissez les identifiants courts et les numéros de série de chaque compteur d’énergie pour les connecter au Gateway. Testez chaque compteur après sa mise en service.","meter_container_subtitle_industrial":"Saisissez la ou les adresses IP et le ou les emplacements des compteurs d’énergie pour vous connecter. Testez chaque compteur après sa mise en service.","meter_container_success_status":"Compteur ajouté avec succès","meter_container_title":"Compteurs","meter_container_unknown_status":"Inconnu","meter_container_updating_status":"Mise à jour du compteur","meter_container_verification":"Vérification du compteur {id}","meter_container_verification_gw1":"Pendant le processus de couplage Wi-Fi, vous pouvez être temporairement déconnecté du réseau Wi-Fi de la passerelle. {lb} Assurez-vous de vous reconnecter au bon réseau. Ceci peut prendre jusqu\'à 3 minutes.","meter_container_verification_gw2":"Le processus de couplage Wi-Fi peut prendre jusqu\'à trois minutes.","meter_container_verify_meter_error":"Vérification du compteur","meter_container_verifying_status":"Vérification du compteur","meter_item_view_add_failed":"Échec de l’ajout du compteur","meter_item_view_add_failed_help":"Vérifiez le numéro d\'identification abrégé et le numéro de série. Démarrez le compteur et effectuez la connexion lorsque le compteur émet un son. Si le problème persiste, supprimez le compteur et réessayez.","meter_item_view_advanced_settings":"PARAMÈTRES AVANCÉS (FACULTATIF)","meter_item_view_battery_ct":"Batterie","meter_item_view_battery_location":"Batterie","meter_item_view_check_meter":"VÉRIFIER CONNEXION COMPTEUR {id}","meter_item_view_conductor_location":"Conducteur","meter_item_view_cts":"{count} TC détecté(s)","meter_item_view_doubled_solar_location":"Solaire doublé","meter_item_view_generator_location":"Générateur","meter_item_view_ip_address":"ADRESSE IP","meter_item_view_load_location":"Charger","meter_item_view_mac_address":"ADRESSE MAC","meter_item_view_meter_location":"EMPLACEMENT DU COMPTEUR","meter_item_view_none_location":"Absent","meter_item_view_remote_ip_address_placeholder":"p.ex., 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"p.ex., 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"p.ex., OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"p.ex., 01.234","meter_item_view_serial":"SÉRIE","meter_item_view_short_id":"ID COURT","meter_item_view_site_ct":"Site","meter_item_view_site_location":"Site","meter_item_view_solar_ct":"Solaire","meter_item_view_solar_location":"Solaire","meter_item_view_solar_rgm_location":"Revenu solaire uniquement","meter_item_view_success":"CONNEXION RÉUSSIE !","meter_item_view_unable":"LECTURE DU COMPTEUR IMPOSSIBLE !","meter_item_view_upgrading":"LE COMPTEUR EST EN COURS DE MISE À NIVEAU !","meter_list_view_add":"AJOUTER UN COMPTEUR WI-FI","meter_list_view_add_ip":"AJOUTER COMPTEUR IP","meter_list_view_detect":"DÉTECTER COMPTEURS CÂBLÉS","meter_list_view_enable_inverter_readings":"Activer les relevés de l\'onduleur de la batterie","meter_list_view_inverter_meter":"COMPTEURS DE L\'ONDULEUR","meter_list_view_inverter_meter_desc":"En cas d\'activation et d\'absence de compteurs de la batterie configurés, le contrôleur de site utilise les relevés provenant des onduleurs de la batterie en tant que compteur de la batterie.","meter_msa_id":"COMMUTATEUR DE SECOURS {id}","meter_sync_id":"COMPTEUR DE SYNCHRONISATION {id}","meter_sync_x_id":"Compteur principal interne (Passerelle) {id}","meter_sync_y_id":"Compteur auxiliaire interne (Passerelle) {id}","meter_update_modal_fetch_status_error":"Erreur : Récupération du statut de mise à jour du compteur impossible","meter_update_modal_footer":"La mise à jour du compteur peut prendre jusqu\'à 2 minutes","meter_update_modal_remaining_time":"Temps restant: {seconds} secondes","meter_update_modal_timeout_error":"Erreur : Le temps d\'attente a été dépassé lors de la mise à jour du compteur","meter_update_modal_title":"La mise à jour du compteur est en cours","meter_validation_container_error":"Validation du compteur non disponible pendant l\'exécution du contrôleur de site.","meter_validation_container_error_placeholder":"Validation du compteur non disponible : {error}.","meter_validation_container_power_command":"Commande de puissance","meter_validation_container_power_start":"Démarrer","meter_validation_container_power_stop":"Feu stop","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Commande de puissance réactive","meter_validation_container_real_power_command":"Commande de puissance réelle","meter_validation_container_show_per_phase":"Indiquer les valeurs par phase","meter_validation_container_title":"Validation du compteur","meter_validation_container_usage":"Envoyez une commande de puissance et validez les données du compteur. Vous devez demeurer sur cette page pour que la commande de puissance soit continue. Des valeurs négatives entraîneront le chargement du système. Des valeurs positives entraîneront le déchargement du système.","meter_validation_control_subtitle":"commande","meter_validation_control_title":"Titre de la commande","meter_validation_disable":"Désactiver","meter_validation_loading":"Chargement","meter_validation_menu":"Menu","meter_validation_reset":"Réinitialiser","meter_validation_submit":"Envoyer","meter_validation_submitting_control":"Envoi de la commande","meter_validation_title":"Validation du compteur","meter_validation_view_apparent_power":"Puissance apparente (kVA)","meter_validation_view_battery_location":"Batterie","meter_validation_view_conductor_location":"Conducteur","meter_validation_view_current":"Courant (A)","meter_validation_view_doubled_solar_location":"Solaire doublé","meter_validation_view_generator_location":"Générateur","meter_validation_view_hz":"Hz","meter_validation_view_inverters":"Onduleurs ({length})","meter_validation_view_ka":"kA","meter_validation_view_kv":"kV","meter_validation_view_kvar":"kVAr","meter_validation_view_kw":"kW","meter_validation_view_kwh":"kWh","meter_validation_view_load_location":"Charger","meter_validation_view_meter":"Compteurs ({length})","meter_validation_view_none_location":"Absent","meter_validation_view_pf":"Facteur de puissance","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Moyenne","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Total","meter_validation_view_reactive_power":"Puissance réactive (kVAr)","meter_validation_view_real_power":"Puissance réelle (kW)","meter_validation_view_site_location":"Site","meter_validation_view_solar_location":"Solaire","meter_validation_view_solar_rgm_location":"Revenu solaire uniquement","meter_validation_view_voltage":"Tension (V)","meter_w1_wifi_id":"COMPTEUR {id}","meter_w1_wired_id":"COMPTEUR CÂBLÉ {id}","meter_w2_wifi_id":"COMPTEUR {id}","meter_w2_wired_id":"COMPTEUR CÂBLÉ {id}","meter_wifi_id":"COMPTEUR {id}","meter_wired_id":"COMPTEUR CÂBLÉ {id}","metrics_aggregate":"Système","metrics_apparent_power":"Puissance apparente ({unit})","metrics_battery":"Batterie","metrics_current":"Courant ({unit})","metrics_meter":"Compteur","metrics_no_metrics":"Pas de mesure à afficher.","metrics_power_factor":"Facteur de puissance","metrics_reactive_power":"Puissance réactive ({unit})","metrics_real_power":"Puissance réelle ({unit})","metrics_subtitle":"Mesures","metrics_voltage_l_n":"Tension L-N ({unit})","modal_acknowledge":"VALIDER","modal_confirm":"CONFIRMER","modal_exit":"QUITTER","modal_no":"NON","modal_note":"Note","modal_ok":"OK","modal_reconfigure":"RECONFIGURER","modal_yes":"OUI","modbus_container_title":"Interface Modbus","modbus_table_register_address":"Adresse","modbus_table_register_name":"Nom","modbus_table_register_type":"Type","modbus_table_register_value":"Valeur","modbus_table_register_value_decimal":"Valeur (décimale)","modbus_table_register_value_hex":"Valeur (hex)","msa-off-grid":"Hors réseau","msa-on-grid":"Sur le réseau","navigation_email":"ADRESSE E-MAIL","network-switch-menu-item":"Commutateurs réseau","network_cellular_configured":"Configuré(e), mais pas connecté(e). Assurez-vous que le réseau cellulaire est disponible et qu\'il n\'y a aucun obstacle autour de l\'antenne.","network_connected":"Connecté","network_container_connect_ethernet":"Connexion à Ethernet","network_container_connect_to_internet":"Veuillez patienter pendant que le système tente de se connecter à Internet.","network_container_connect_wifi":"Connexion à {ssid}","network_container_connect_wifi_description":"Pendant ce processus, il se peut que vous deviez vous reconnecter au réseau Passerelle pour continuer l\'installation.","network_container_connman":"Le gestionnaire de connexion au réseau se connecte de manière dynamique au meilleur réseau.","network_container_connman_body":"Pour assurer la connectivité, configurez tous les types de connexions disponibles :","network_container_delete_network":"Supprimer le réseau configuré?","network_container_ethernet_and_wifi_warning":"Configurez les réseaux Ethernet et Wi-Fi disponibles pour assurer la connectivité.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configurez les réseaux Ethernet disponibles pour assurer la connectivité.","network_container_network_description":"Connectez-vous à Internet avec tous les types de réseaux disponibles.","network_container_network_subtitle":"Réseau","network_container_no_internet_bullet_four":"Le Powerwall peut transmettre des données de performances à Tesla pour permettre à l\'Assistance technique d\'identifier les problèmes","network_container_no_internet_bullet_four_industrial":"Les appareils peuvent transmettre des données de performances à Tesla pour permettre à l’Assistance technique d’identifier les problèmes","network_container_no_internet_bullet_one":"Les informations d\'enregistrement du Powerwall sont transmises à Tesla dans le but d\'activer la garantie totale de 10 ans","network_container_no_internet_bullet_three":"Le client peut utiliser l\'application mobile Tesla pour suivre sa consommation d\'énergie et contrôler le Powerwall","network_container_no_internet_bullet_two":"Le Powerwall peut recevoir les mises à jour à distance du microprogramme pour améliorer ses performances et bénéficier de nouvelles fonctionnalités","network_container_no_internet_bullet_two_industrial":"Les appareils peuvent recevoir les mises à jour à distance du microprogramme pour améliorer ses performances et bénéficier de nouvelles fonctionnalités","network_container_no_internet_bullet_zero":"Il est possible de déterminer si une mise à jour du microprogramme est nécessaire avant la mise en service","network_container_no_internet_no_cell_title":"Si une connexion Internet est disponible sur ce site, merci de compléter cette étape. Connectez le Powerwall au service Internet du client par Ethernet (de préférence) ou par Wi-Fi.","network_container_no_internet_title":"Si une connexion Internet est disponible sur ce site, merci de compléter cette étape. Connectez le Powerwall au service Internet du client par Ethernet (de préférence) ou par Wi-Fi, ou établissez une connexion cellulaire.","network_container_no_internet_warning":"Il est important d’établir une connexion Internet robuste afin que","network_container_scan_networks":"Lister les réseaux Wi-Fi","network_container_scan_wifi_disconnect_warning":"Attention: Lister les réseaux Wi-Fi déconnectera temporairement la connection Wi-Fi actuelle.","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"Configurez les réseaux Wi-Fi disponibles pour assurer la connectivité.","network_disabled":"Désactivé","network_disconnected":"Déconnecté","network_ethernet_configured":"Configuré(e), mais pas connecté(e). Vérifiez la connexion du câble Ethernet.","network_switches_container_discover_failure":"Dernier échec de recherche : {error}","network_switches_container_discover_switches":"Découvrez les commutateurs réseau","network_switches_container_discovered_label":"Commutateurs réseau découverts","network_switches_container_discovering_stop_button":"Cessez la recherche","network_switches_container_discovery_switches_running_label":"Exécution en cours de la découverte de commutateurs réseau. Vous pouvez cesser la recherche ci-dessous.","network_switches_container_ip":"IP : {ip}","network_switches_container_mac":"MAC : {mac}","network_switches_container_not_supported":"Les commutateurs réseau sont pris en charge seulement sur les systèmes industriels.","network_switches_container_password_not_set":"Le mot de passe n’est pas défini","network_switches_container_password_set":"Le mot de passe est défini","network_switches_container_passwords_error":"État de définition du mot de passe : {status}","network_switches_container_set_password_label":"Définir le mot de passe sur tous les Commutateurs réseau utilisant encore le mot de passe défini par l\'usine.\\n Tous les mots de passe seront définis sur une même valeur.","network_switches_container_set_passwords":"Définir les mots de passe","network_switches_container_set_passwords_button":"Définir le mot de passe","network_switches_container_setting_passwords_button":"Mot de passe en cours de définition...","network_switches_container_start_discovering_button":"Lancez la découverte","network_switches_container_start_discovery_help":"La découverte des commutateurs réseau s’effectue automatiquement et périodiquement mais elle peut être déclenchée par le bouton Start Discovery.","network_switches_container_subtitle":"Affichez les commutateurs réseau","network_switches_container_title":"Commutateurs réseau","network_view_check_connection":"VÉRIFIER LA CONNEXION INTERNET","network_view_connection_failed":"NON CONNECTÉ !","network_view_connection_success":"CONNEXION RÉUSSIE !","network_view_continue_no_internet":"CONTINUER SANS INTERNET","network_view_default_error":"Erreur de connexion","network_view_local_network_connected":"Réseau local connecté","network_view_local_network_disconnected":"Erreur du réseau local","network_view_tesla_internet_connected":"Connecté(e) aux services Tesla et à Internet","network_view_tesla_internet_disconnected":"Erreur de la connexion aux Services Tesla et à Internet","network_warning":"Avertissement","network_wifi_configured":"Configuré(e), mais pas connecté(e). Vérifiez vos paramètres Wi-Fi.","open_meter_validatiion_container_title":"Validation du compteur ouvert","operation_mode_autonomous":"Mode autonome","operation_mode_backup":"Charge de secours uniquement","operation_mode_self_consumption":"Mode d\'autoconsommation","operation_mode_site_control":"Contrôle de site","overview_menu_control_title":"commande","overview_menu_diagnostics_title":"Diagnostics","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Connecté","overview_menu_network_no_connection":"Aucune connexion","overview_menu_registration_complete":"Terminé","overview_menu_registration_incomplete":"Inachevé","overview_menu_registration_pending":"Connexion Internet en attente","overview_menu_security_title":"Modifier ou réinitialiser le mot de passe","overview_menu_settings_title":"Paramètres","overview_menu_summary_title":"Synthèse","overview_menu_system_title":"Système","overview_menu_update_title":"Mise à jour du logiciel","overview_menu_view_alerts_event":"Événement","overview_menu_view_alerts_events":"Événements","overview_menu_view_inverter_title":"Test de l’onduleur","overview_menu_view_network_title":"Réseau","overview_menu_view_registration_title":"Enregistrement","overview_menu_view_test_title":"Auto-test","overview_meter_validation_title":"Validation du compteur","password_generate_error":"Une erreur s’est produite lors de la création du nouveau mot de passe. Vérifiez la connectivité et le nouveau mot de passe, puis essayez à nouveau.","password_generate_help_text":"Saisir le mot de passe existant pour générer un nouveau mot de passe aléatoire.","password_generate_menu_title":"Modifier le mot de passe","password_generate_notice":"Le mot de passe a été changé. Enregistrez le nouveau mot de passe avant de quitter cette page.","phase_container_detect_timeout":"Délai d\'attente de la détection de phase dépassé","phase_container_detection_attempt":"Tentative n° {num}","phase_container_grid_code_validating_modal_title":"Validation du code réseau","phase_container_grid_compliant_description":"Conforme réseau {checkmark}","phase_container_grid_modal_description":"Le réseau sera conforme dans {time} secondes.","phase_container_grid_modal_title":"Attente de la conformité réseau","phase_container_modal_description":"La détection de phase peut prendre jusqu\'à deux minutes par Powerwall.","phase_container_modal_title":"Détection de phase en cours d\'exécution","phase_container_saving_phases_modal_title":"Enregistrement des phases","phase_container_subtitle":"Afficher la ligne sur laquelle chaque Powerwall est activé et mettre à jour le statut de la ligne","phase_container_supported_error":"Aucun Powerwall détecté. La détection de phase n\'est pas prise en charge.","phase_container_title":"Phase","phase_container_voltage_caution_body":"Tension {voltage}V inattendue détectée sur {lineNumber}. Vérifiez à nouveau que {lineStatus} est le paramètre approprié pour cette phase.","phase_container_warning_body":"Aucune phase de secours n\'a été sélectionnée. Le système ne peut donc prendre en charge aucune charge quand la connexion au réseau est perdue.","phase_container_warning_modal_header":"La sauvegarde est désactivée","phase_line_id":"Ligne-{id}","phase_line_item_view_line":"Ligne","phase_line_item_view_line_status_backup":"Fonction de secours","phase_line_item_view_line_status_configured":"Pas de sauvegarde","phase_line_item_view_line_status_not_configured":"Non configuré(e)","phase_line_status_backup":"Fonction de secours","phase_line_status_configured":"Pas de sauvegarde","phase_line_status_not_configured":"Non configuré(e)","phase_view_detect":"DÉTECTER LES PHASES","phase_view_split_phase":"Phase auxiliaire","power_flow_view_go_off_grid":"ALLER HORS RÉSEAU","power_flow_view_go_on_grid":"ALLER SUR LE RÉSEAU","power_flow_view_grid_button_disabled_reason":"Le système doit être lancé pour aller hors réseau.","power_flow_view_grid_spinner_alt_label":"Système en cours de transition","power_flow_view_start_system":"DÉMARRER LE SYSTÈME","power_flow_view_stop_system":"ARRÊTER LE SYSTÈME","powerwall_container_industrial_no_additional_title":"Pas de bloc de batterie supplémentaire trouvé","powerwall_container_industrial_subtitle":"La liste répertorie tous les blocs de batterie automatiquement détectés par le contrôleur de site. Effectuez une nouvelle recherche si le bloc de batterie n’est pas répertorié.","powerwall_container_industrial_subtitle_auto_detection":"La liste répertorie tous les blocs de batterie automatiquement détectés par le contrôleur de site. Si un bloc de batterie n’est pas répertorié, vérifiez l’équipement du réseau y compris le câblage, puis assurez-vous que les contrôleurs de bus sont activés.","powerwall_container_industrial_title":"Bloc de batterie","powerwall_container_industrial_updating":"Vérification des blocs de batterie","powerwall_container_no_additional_powerwalls_description":"Reportez-vous au Manuel d\'installation du Powerwall pour obtenir des conseils et résoudre les éventuels problèmes de câblage.","powerwall_container_no_additional_powerwalls_title":"Aucun autre Powerwall n’a été détecté","powerwall_container_scan_again":"NOUVELLE RECHERCHE","powerwall_container_scanning":"Recherche en cours","powerwall_container_scanning_for_more":"Recherche d’appareils supplémentaires","powerwall_container_subtitle":"Les Powerwalls détectés automatiquement par le Gateway sont affichés ci-dessous. Effectuez une nouvelle recherche si aucun Powerwall n’est affiché.","powerwall_container_subtitle_component_auto_detection":"Tous les composants automatiquement détectés par la Passerelle sont répertoriés. Vérifiez le câblage si un composant n’est pas répertorié.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Vérification des Powerwalls","powerwall_container_updating_note":"Remarque : Cela peut prendre jusqu\'à 60 secondes par Powerwall.","powerwall_item_view_blank_numbers":"En attente de vérification…","powerwall_item_view_numbers":"Numéro d\'article:{partNumber} Numéro de série:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL : {id}","powerwall_pairing_cancel":"Annuler","powerwall_pairing_connect":"Connexion","powerwall_pairing_done":"Effectué","powerwall_pairing_error_already_paired":"Échec d\'appairage : dispositif déjà appairé","powerwall_pairing_error_bad_pairing_response":"Échec d\'appairage : le dispositif refuse l’appairage. Assurez-vous que le suiveur a bien été arrêté","powerwall_pairing_error_bad_qr_code":"Ceci n’est pas un code QR WiFi","powerwall_pairing_error_changes_prohibited":"Échec d\'appairage : Interdit","powerwall_pairing_error_internal":"Échec d\'appairage : erreur interne","powerwall_pairing_error_no_qr_code":"Aucune code QR n\'a été trouvé","powerwall_pairing_error_no_response":"Échec d\'appairage : le dispositif ne répond pas.","powerwall_pairing_error_not_leader":"Échec d\'appairage : il s\'agit d\'un dispositif de suivi. Reconnectez-le au dispositif principal.","powerwall_pairing_error_prohibited_uncommissioned":"Échec d\'appairage : ce Powerwall n\'a pas encore été mis en service","powerwall_pairing_error_too_many_devices":"Échec d\'appairage : le nombre maximum de dispositifs sont déjà connectés.","powerwall_pairing_error_unknown":"Échec d\'appairage : Erreur inconnue","powerwall_pairing_error_wifi_connection_failed":"Échec d\'appairage : Impossible de se connecter au WiFi. Vérifiez le mot de passe.","powerwall_pairing_error_wifi_not_found":"Échec d\'appairage : Réseau WiFI introuvable","powerwall_pairing_exception":"Échec d\'appairage : Exception","powerwall_pairing_instructions_2":"Saisir ou scanner le SSID WiFi et le mot de passe pour appairer le Powerwall. Recherchez un code QR sur le dispositif.","powerwall_pairing_password_label":"Mot de passe :","powerwall_pairing_scan_qr_code":"scanner le code QR","powerwall_pairing_ssid_label":"SSID :","powerwall_pairing_state_complete":"Appairage complet. Le nouveau dispositif peut ne pas commencer à répondre avant une minute ou plus (si une mise à jour est en cours). Cliquez sur Done (Terminé) pour Annuler","powerwall_pairing_state_monitoring":"Apparaige du nouveau dispositif. Ceci peut prendre jusqu\'à une minute.","powerwall_starting":"Démarrage du Powerwall","powerwall_view_detected_backup":"Capacité de secours détectée","powerwall_view_detected_synchrometers":"Capacité de compteur détectée","powerwall_view_failed":"ÉCHEC","powerwall_view_no_backup":"Aucune capacité de secours détectée","powerwall_view_no_sync":"Aucun synchronisateur détecté","powerwall_view_scan":"RECHERCHER","powerwall_view_success":"SUCCÈS","powerwall_view_synchrometer_detected":"Compteurs de synchronisation détectés","powerwall_view_synchronizer_detected":"Synchronisateur détecté","powerwall_view_update":"VÉRIFIER LES POWERWALLS","privacy_policy_view_accept_warranty_title":"Accepter la Garantie limitée du Powerwall Tesla","privacy_policy_view_contact_bullet_one":"par e-mail à l\'adresse {privacyEmail} ;","privacy_policy_view_contact_bullet_two":"Par courrier à l\'adresse Tesla Inc. Attn : Legal 45500 Fremont Boulevard Fremont California 94538 États-Unis.","privacy_policy_view_contact_header":"Comment nous contacter","privacy_policy_view_contact_paragraph_one":"Pour nous transmettre une question ou un commentaire, ou pour vous désinscrire de certains services, veuillez nous contacter :","privacy_policy_view_contact_paragraph_three":"Si vous résidez dans un pays de l\'EEE ou en Suisse, la filiale Tesla locale peut être l\'entité responsable du traitement de vos informations personnelles.","privacy_policy_view_contact_paragraph_two":"Veuillez noter que les communications par e-mail ne sont pas toujours sûres, veuillez donc ne pas y indiquer des informations concernant des cartes de crédit ou des informations sensibles.","privacy_policy_view_cross_border_transfers_header":"Transferts transfrontaliers","privacy_policy_view_cross_border_transfers_paragraph_one":"Les Services sont contrôlés et exploités à partir des États-Unis. Des Informations provenant de/à propos de vous ou de votre utilisation de nos produits ou des Services peuvent être stockées et analysées dans n’importe quel pays où nous sommes implantés ou dans lequel nous engageons des prestataires de services. Ces pays peuvent appliquer des lois sur la protection des données différentes de celles du pays dans lequel vous avez initialement fourni les données. Lorsque nous transférons des informations provenant de/à propos de vous ou de votre utilisation de nos produits ou des Services vers d\'autres pays, nous les protégeons comme décrit dans la présente Politique de confidentialité. En utilisant nos produits, les Services, ou en nous fournissant des informations par tout autre moyen, vous acceptez le transfert des informations provenant de/à propos de vous ou de votre utilisation de nos produits ou des Services vers des pays autres que votre pays de résidence, y compris les États-Unis.","privacy_policy_view_cross_border_transfers_paragraph_two":"Si vous êtes situé dans l\'EEE ou en Suisse, nous nous conformons aux prescriptions légales applicables assurant une protection adéquate des informations personnelles transférées à destination de pays en dehors de l\'EEE ou de la Suisse. Tesla a certifié son adhésion au Programme Privacy Shield EU-États-Unis mis en place par le Département du Commerce et la Commission européenne concernant le traitement de certaines informations personnelles transférées de l’EEE à Tesla et ses filiales en propriété exclusive aux États-Unis. La politique {privacyShield} de Tesla est disponible ici.","privacy_policy_view_devices":"Provenant de/à propos de vous ou de vos appareils","privacy_policy_view_energy_products":"Provenant de vos produits Tesla Energy ou les concernant","privacy_policy_view_eu_policy_warning":"Vous devez accepter la Politique de confidentialité pour enregistrer votre Powerwall et suivre ses informations via l\'application mobile Tesla.","privacy_policy_view_eu_warranty_warning":"Si vous n’acceptez pas la Politique de confidentialité client Tesla, nous ne pourrons honorer la totalité de votre Garantie de dix ans. Tesla honorera votre Garantie pendant au moins quatre ans à compter de la date de première installation de votre Powerwall, sous réserve des exclusions et des limitations décrites dans la Garantie {warrantyLink}.","privacy_policy_view_grid_services":"Votre Powerwall est capable d\'optimiser la fiabilité du réseau électrique en proposant des services dans le cadre de programmes facultatifs mis en place par des fournisseurs d\'énergie ou des tiers. Ces services consistent généralement à décharger partiellement votre Powerwall aux moments opportuns en échange d\'une compensation financière, et nécessitent que vous partagiez votre consommation électrique ainsi que les informations de votre Powerwall avec les fournisseurs d\'énergie ou des tiers. Avant de vous proposer de rejoindre l\'un de ces programmes, nous vous indiquerons les détails de ces derniers et vous offrirons la possibilité de vous en retirer le cas échéant. Si vous ne vous retirez pas à ce moment-là, vous serez inscrit au programme.","privacy_policy_view_grid_services_title":"Services au réseau","privacy_policy_view_grid_warning":"Vous n\'êtes pas obligé d\'accepter. Si vous refusez, nous vous offrirons la possibilité de rejoindre ces programmes ultérieurement.","privacy_policy_view_here":"ici","privacy_policy_view_homeowner_na":"PROPRIÉTAIRE DU DOMICILE NON DISPONIBLE","privacy_policy_view_homeowner_required":"Cette partie doit obligatoirement être remplie par le propriétaire","privacy_policy_view_information_collection_devices_bullet_five":"Par l\'intermédiaire de votre navigateur ou de votre appareil : Certaines informations sont collectées par la plupart des navigateurs ou automatiquement par l\'intermédiaire de votre appareil, comme par exemple votre adresse MAC (Media Access Control), le type d\'ordinateur (Windows ou Macintosh), la résolution de l\'écran, le nom et la version du système d\'exploitation, le fabricant et le modèle de l\'appareil, la langue utilisée, le type et la version du navigateur Internet ainsi que le nom et la version des Services (par exemple les Tesla App) que vous utilisez. Nous utilisons ces informations afin d’assurer que les Services puissent fonctionner correctement.","privacy_policy_view_information_collection_devices_bullet_four":"Hors ligne : Nous sommes susceptibles de collecter des informations auprès de vous ou vous concernant hors ligne, par exemple lorsque vous vous rendez dans un magasin ou un centre de réparation Tesla, lorsque vous assistez à l\'un de nos événements, lorsque vous vous inscrivez en vue d\'un essai de conduite, lorsque vous passez une commande par téléphone ou encore lorsque vous contactez notre service clientèle ou notre service commercial.","privacy_policy_view_information_collection_devices_bullet_one":"Via nos Services : Nous sommes susceptibles de collecter des informations auprès de vous ou vous concernant via nos sites Web, applications logicielles, pages de médias sociaux, e-mails ou autres services numériques (les « Services »), par exemple lorsque vous vous abonnez à une lettre d\'information, faites un achat ou enregistrez votre produit auprès de notre société.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla : Les clients qui achètent certains produits Tesla recevront un compte My Tesla hébergé sur notre site Web. Il se peut que nous collections et traitions les types de données suivants, que vous choisissez de nous communiquer, pour votre compte My Tesla : vos informations d\'enregistrement de client ; le statut de votre commande ; la garantie ou d\'autres documents relatifs à vos produits Tesla ; ainsi que des informations d\'ordre général sur vos produits Tesla (notamment le numéro d\'identification du véhicule ou un autre numéro de série de produit, des informations sur le programme d\'entretien ou le module de connexion), les formulaires d\'assurance, le permis de conduire, les contrats de financement et autres. À tout moment, vous pouvez accéder à votre compte My Tesla pour mettre à jour les informations collectées auprès de vous ou vous concernant.","privacy_policy_view_information_collection_devices_bullet_two":"Via d\'autres sources : Nous sommes également susceptibles de recevoir des informations vous concernant et provenant d\'autres sources, par exemple de bases de données publiques, de partenaires de marketing, d\'installateurs agréés, de centres de réparation ou de services tiers ainsi que de plateformes de médias sociaux.","privacy_policy_view_information_collection_energy_products_bullet_one":"Nous sommes susceptibles de collecter des informations concernant votre produit, comme la date d\'installation, le nombre de produits installés et le(s) numéro(s) de série.","privacy_policy_view_information_collection_energy_products_bullet_two":"Pour améliorer la qualité de nos produits et de nos services, nous sommes susceptibles de collecter des données concernant l\'endroit où votre produit est installé et sa configuration, des données concernant l\'utilisation et les performances du produit, des données concernant votre consommation globale d\'énergie domestique ainsi que d\'autres données utilisées afin de diagnostiquer des problèmes.","privacy_policy_view_information_collection_header":"Informations que nous pouvons collecter","privacy_policy_view_information_collection_paragraph_five":"Si vous ne voulez plus que nous collections des données de performance ni d\'autres données provenant de votre produit Tesla Energy, veuillez nous contacter comme indiqué dans le paragraphe ”Comment nous contacter” ci-dessous. Veuillez noter que si vous choisissez de mettre fin à la collecte de données de performance provenant de votre produit Tesla, nous ne pourrons pas vous avertir en temps réel d\'éventuels problèmes concernant votre produit énergétique. Cela pourra par conséquent entraîner une dégradation des performances de votre produit énergétique, de graves dommages, voire l’impossibilité d\'utiliser votre produit. Cela pourra également entraîner la désactivation de nombreuses fonctionnalités de votre produit énergétique, et notamment des mises à jour régulières des logiciels et micrologiciels.","privacy_policy_view_information_collection_paragraph_four":"Nous sommes susceptibles de collecter différentes informations à partir de vos produits Tesla Energy ou les concernant par l\'intermédiaire d\'un installateur agréé ou à partir des produits installés (directement ou via des équipements jumelés, comme un onduleur), notamment :","privacy_policy_view_information_collection_paragraph_one":"Nous recueillons trois principaux types d\'informations vous concernant ou concernant votre utilisation de nos produits et services : (1) informations provenant de/à propos de vous ou de vos appareils ; (2) informations provenant de votre véhicule Tesla ou le concernant ; et (3) informations provenant de vos produits Tesla Energy ou les concernant. Selon les produits et services Tesla que vous demandez, possédez ou utilisez, il se peut que certains types d\'informations ne vous concernent pas.","privacy_policy_view_information_collection_paragraph_three":"Lorsque vous visitez notre site Web, ou lorsque vous utilisez nos Services d\'une quelconque manière, nous sommes susceptibles d\'utiliser des cookies, balises Web, outils d\'analyse et autres technologies similaires pour faciliter la fourniture et l\'amélioration de nos Services, comme indiqué ci-dessous :","privacy_policy_view_information_collection_paragraph_two":"Nous sommes susceptibles de collecter des informations auprès de vous ou vous concernant (comme vos nom, adresse, numéro de téléphone, e-mail, informations de paiement, etc.) ou concernant vos appareils, de différentes façons, notamment :","privacy_policy_view_information_collection_services_bullet_five":"Vous pouvez vous informer sur les pratiques de Google concernant cette collecte d’informations et sur la façon de vous désinscrire en téléchargeant l\'option Désactivation de Google Analytics, accessible à l\'adresse {website}.","privacy_policy_view_information_collection_services_bullet_four":"Outils d\'analyse : Nous avons recours à des services d\'analyse de sites Web et d\'applications fournis par des tiers qui utilisent des cookies ou d\'autres technologies comparables pour collecter des informations concernant l\'utilisation des sites Web ou des applications et pour étudier les tendances sans identifier les visiteurs individuels. Les tiers qui nous fournissent ces services peuvent également collecter des informations concernant votre utilisation de sites Web tiers.","privacy_policy_view_information_collection_services_bullet_one":"Cookies : Les cookies sont des éléments d’information stockés directement sur l’ordinateur que vous utilisez. Les cookies nous permettent de récupérer des informations comme le type de navigateur que vous utilisez, le temps que vous passez sur les pages Services, vos préférences linguistiques et d\'autres données de navigation en ligne. Nos prestataires de services et nous-mêmes utilisons ces informations à des fins de sécurité, pour faciliter votre navigation en ligne, pour vous fournir des informations plus ciblées, pour personnaliser votre expérience d\'utilisation des Services et pour analyser l\'activité des utilisateurs. Nous pouvons identifier votre ordinateur pour vous assister dans votre utilisation des Services. Nous recueillons également des informations statistiques concernant l\'utilisation des Services afin d\'améliorer en continu leur conception et leur fonctionnement, afin de mieux comprendre comment les Services sont utilisés et afin de mieux répondre aux questions éventuelles à propos des Services. En outre, les cookies nous permettent de sélectionner et de vous présenter les publicités et les offres qui sont les plus susceptibles de vous plaire. Nous pouvons aussi utiliser des cookies dans les publicités en ligne pour voir comment vous interagissez avec nos publicités et nous pouvons utiliser des cookies ou d\'autres fichiers pour comprendre la manière dont vous utilisez d\'autres sites Web.","privacy_policy_view_information_collection_services_bullet_three":"Balises Web et autres technologies comparables : Les balises Web (autrement connues comme pixels invisibles et GIF invisibles) peuvent être utilisées en relation avec certains Services afin, entre autres, de tracer les actions d\'utilisateurs des Services (y compris les destinataires d\'e-mails), de mesurer la réussite de nos campagnes marketing et de compiler des statistiques relatives à l\'utilisation des Services et aux taux de réponse.","privacy_policy_view_information_collection_services_bullet_two":"Si vous ne voulez pas que des informations soient collectées grâce à l\'utilisation de cookies lorsque vous utilisez votre compte My Tesla ou notre site Web, sachez que la plupart des navigateurs proposent une procédure simple qui vous permet de refuser automatiquement les cookies ou qui vous permet de refuser ou d\'accepter le transfert vers votre ordinateur d\'un cookie spécifique (ou de plusieurs cookies) à partir d\'un site donné. Nous vous conseillons de consulter {website}. Cependant, si vous n\'acceptez pas ces cookies, il se peut que votre expérience d\'utilisation des Services en pâtisse. Par exemple, il se peut que nous ne puissions pas identifier votre ordinateur et que vous deviez par conséquent vous identifier à chaque fois que vous visitez les pages Services.","privacy_policy_view_information_rights_choices_agree_eu":"Vous devez accepter la Politique de confidentialité pour enregistrer votre Powerwall et suivre ses informations via l\'application mobile Tesla.","privacy_policy_view_information_rights_choices_agree_one":"Vous devez accepter la Politique de confidentialité pour enregistrer votre Powerwall et suivre ses informations via l\'application mobile Tesla. Aucune autre action n\'est nécessaire si vous ne souhaitez pas accéder aux informations de votre Powerwall via l\'application mobile Tesla.","privacy_policy_view_information_rights_choices_bullet_one":"À tout moment, vous pouvez accéder à votre compte My Tesla pour mettre à jour les informations collectées auprès de vous ou vous concernant.","privacy_policy_view_information_rights_choices_bullet_two":"Si vous souhaitez examiner, corriger, mettre à jour, supprimer ou effacer des informations collectées auprès de vous ou vous concernant que vous nous avez fournies auparavant, vous pouvez nous contacter à l\'adresse ci-dessous.","privacy_policy_view_information_rights_choices_header":"Droits et choix","privacy_policy_view_information_rights_choices_paragraph_four":"Veuillez noter qu\'il est possible que nous ayons besoin de conserver certaines informations dans nos archives ou à fins de conformité et/ou en vue de conclure des transactions que vous avez entamées avant d\'avoir demandé le changement ou la suppression en question (par exemple lorsque vous effectuez un achat ou participez à une promotion, il est possible que vous ne puissiez pas modifier ou supprimer les informations fournies avant que l\'achat ou la promotion considérés soient terminés). Des informations résiduelles peuvent également se trouver dans nos bases de données ainsi que dans d\'autres archives, qui ne sont pas supprimées.","privacy_policy_view_information_rights_choices_paragraph_one":"Comme détaillé dans les paragraphes ci-dessus, nous vous proposons de nombreux choix quant à la collecte, l’utilisation et le partage des informations provenant de/à propos de vous ou de votre utilisation de nos produits ou des Services. Conformément au droit en vigueur, dans certaines juridictions, vous pouvez aussi disposer du droit de demander l\'accès et d\'obtenir des renseignements sur certaines données que nous conservons à votre sujet, d\'actualiser et de corriger les inexactitudes contenues dans ces données, et de bloquer ou de supprimer ces informations, autant que nécessaire. Ces droits peuvent être limités dans certaines circonstances par la législation locale. Nous vous proposons plusieurs méthodes vous permettant d\'accéder à, d’actualiser ou de demander le blocage ou la suppression des informations provenant de/à propos de vous, notamment","privacy_policy_view_information_rights_choices_paragraph_three":"Nous nous conformerons à votre/vos demande(s) d\'exercice de ces droits et de ces choix dès que cela sera raisonnablement possible.","privacy_policy_view_information_rights_choices_paragraph_two":"Dans votre demande, veuillez indiquer clairement quelles informations vous souhaitez modifier, que vous vouliez supprimer de notre base de données des informations que vous nous avez fournies ou nous faire part des limites que vous souhaitez appliquer à notre utilisation des informations que vous nous avez fournies. Pour votre protection, nous pouvons uniquement donner suite aux demandes concernant les informations associées à l’adresse e-mail spécifique que vous utilisez pour nous envoyer votre demande, et il se peut que nous devions vérifier votre identité avant d\'accéder à votre demande.","privacy_policy_view_information_share_header":"Comment nous partageons les informations collectées","privacy_policy_view_information_share_paragraph_eight":"Autres circonstances","privacy_policy_view_information_share_paragraph_eleven":"Si vous souhaitez retirer votre consentement pour tout traitement d\'informations auquel vous avez donné votre consentement préalable exprès, vous pouvez le faire en nous contactant comme indiqué dans le paragraphe ”Comment nous contacter” ci-dessous.","privacy_policy_view_information_share_paragraph_five":"Nous sommes susceptibles de partager des informations avec d\'autres tiers que vous autorisez, comme dans les circonstances suivantes :","privacy_policy_view_information_share_paragraph_five_point_four":"Avec les fournisseurs de comptes sur les réseaux sociaux, si vous connectez votre compte Services à l’un de vos comptes sur les réseaux sociaux. Si vous le faites, vous nous autorisez à partager des informations avec le fournisseur de votre compte de réseau social et vous comprenez que l\'utilisation des informations partagées sera régie par la politique de confidentialité du fournisseur de compte concerné.","privacy_policy_view_information_share_paragraph_five_point_one":"Avec nos installateurs agréés, afin de faciliter la fourniture des produits énergétiques que vous avez demandés.","privacy_policy_view_information_share_paragraph_five_point_three":"Aux sponsors tiers de concours et promotions similaires, si vous choisissez d\'y participer.","privacy_policy_view_information_share_paragraph_five_point_two":"Avec des centres ou des prestataires d’entretien tiers, si vous choisissez d\'en utiliser. Veuillez noter que certaines informations vous concernant sont stockées sur certains produits Tesla et peuvent être directement accessibles aux centres ou prestataires d’entretien tiers que vous choisissez d\'utiliser pour le diagnostic et l’entretien de votre produit Tesla.","privacy_policy_view_information_share_paragraph_four":"Avec d\'autres tiers autorisés par vous","privacy_policy_view_information_share_paragraph_nine":"Nous sommes susceptibles de partager des informations dans d\'autres circonstances, par exemple :","privacy_policy_view_information_share_paragraph_nine_point_one":"avec votre employeur ou un autre opérateur de flotte, ou encore le propriétaire du produit Tesla, si vous ne le possédez pas directement, et conformément au droit applicable.","privacy_policy_view_information_share_paragraph_nine_point_two":"avec un tiers, en relation avec une réorganisation, une fusion, une vente, co-entreprise, une cession, un transfert ou autre disposition de tout ou partie de nos activités, actifs ou titres (y compris en relation avec une procédure de faillite ou procédure similaire).","privacy_policy_view_information_share_paragraph_one":"Nous sommes susceptibles de partager les informations que nous collectons avec nos prestataires de services et nos partenaires commerciaux, avec d\'autres tiers autorisés par vous, avec d\'autres tiers lorsque la loi l’impose et dans d’autres circonstances. Vous trouverez ci-dessous des exemples illustrant la manière dont nous partageons les informations avec ces acteurs et dans ces circonstances.","privacy_policy_view_information_share_paragraph_seven":"Tesla est susceptible de transférer et de divulguer des informations, y compris des informations susceptibles ou non de vous identifier personnellement, à des tiers afin de se conformer à une obligation légale (y compris, mais sans s\'y limiter, des assignations) ; si nous considérons de bonne foi que la loi l\'exige ; en réponse à une demande légitime des autorités gouvernementales chargées d\'une enquête, y compris afin de respecter des obligations de police ; afin de contrôler ou de mettre en œuvre nos politiques et procédures ; afin de faire face à une situation d\'urgence ; afin de prévenir ou de faire cesser une activité que nous considérons comme étant ou pouvant être illégale, non conforme aux principes d’éthique ou passible de poursuites, ou encore de protéger les droits, la propriété, la sécurité des services, les droits de Tesla, de tiers, de visiteurs de nos Services ou du public, selon ce que nous aurons déterminé à notre discrétion absolue.","privacy_policy_view_information_share_paragraph_six":"Avec d\'autres tiers, si la loi l\'exige","privacy_policy_view_information_share_paragraph_ten":"Nous ne partageons pas d\'informations vous identifiant personnellement avec des tiers non affiliés dans l\'optique de leur marketing, à moins que vous ayez consenti à ce partage.","privacy_policy_view_information_share_paragraph_three":"Nous sommes susceptibles de partager des informations avec nos prestataires de services et nos partenaires commerciaux si cela est nécessaire pour la prestation de services pour notre compte ou votre compte, comme dans les situations suivantes :","privacy_policy_view_information_share_paragraph_three_point_one":"Avec les filiales de Tesla aux fins décrites dans la présente Politique de confidentialité. Les filiales de Tesla sont des entreprises appartenant à Tesla Inc. ou que Tesla Inc. contrôle et des entreprises dont Tesla Inc. possède des parts substantielles.","privacy_policy_view_information_share_paragraph_three_point_three":"Avec des partenaires commerciaux tiers dans la mesure où ils sont impliqués dans votre achat ou dans l’entretien de vos produits Tesla. Nous partageons des informations limitées provenant de vous ou vous concernant pour vous permettre de profiter pleinement de ces services si vous choisissez de les utiliser avec ces partenaires (sociétés de financement, leasing, immatriculation, etc.).","privacy_policy_view_information_share_paragraph_three_point_two":"Avec nos prestataires de services et partenaires de distribution tiers, pour fournir des services comme l\'hébergement de sites web, l\'analyse et le stockage de données, le traitement des paiements, l\'exécution des commandes et l\'installation des produits, la connectivité sans fil aux produits Tesla, les technologies de l\'information et infrastructure associée, le service clientèle, la maintenance des produits ou des services connexes, l’envoi d’e-mails, le traitement des cartes de crédit, l\'audit, le marketing, le traitement par commande vocale et d\'autres services similaires.","privacy_policy_view_information_share_paragraph_two":"Avec nos prestataires de services et nos partenaires commerciaux","privacy_policy_view_information_use_commuicate":"Communiquer avec vous","privacy_policy_view_information_use_header":"Comment nous utilisons les informations collectées","privacy_policy_view_information_use_other_purposes":"Autres finalités","privacy_policy_view_information_use_paragraph_five":"Nous sommes également susceptibles d\'utiliser des informations collectées à d\'autres fins, par exemple :","privacy_policy_view_information_use_paragraph_five_point_one":"À des fins commerciales : analyse de données, audits, contrôle et prévention de la fraude, identification des tendances d\'utilisation, détermination de l\'efficacité de nos campagnes promotionnelles ainsi que l\'exploitation et l\'expansion de nos activités commerciales.","privacy_policy_view_information_use_paragraph_five_point_two":"À l\'exception de ce qui est décrit ci-dessus et ci-dessous, Tesla est susceptible d\'utiliser ou de partager des informations qui ne vous identifieront pas personnellement, pour toute finalité, par exemple à des fins opérationnelles ou de recherche, en relation avec l\'analyse du secteur d\'activité ainsi que l\'amélioration ou la modification de nos produits et services, afin de mieux les personnaliser en fonction de vos besoins, et pour respecter des obligations légales.","privacy_policy_view_information_use_paragraph_four":"Nous sommes susceptibles d\'utiliser les informations collectées afin de fournir et améliorer nos produits et services, par exemple pour :","privacy_policy_view_information_use_paragraph_four_point_five":"Analyser et améliorer la sécurité de nos produits et services.","privacy_policy_view_information_use_paragraph_four_point_four":"Développer et promouvoir de nouveaux produits et services, et améliorer ou modifier notre gamme de produits et services.","privacy_policy_view_information_use_paragraph_four_point_one":"Finaliser et traiter votre achat, par ex. traiter vos paiements, organiser la livraison de votre commande, communiquer avec vous à propos de votre achat et vous fournir le service de clientèle connexe.","privacy_policy_view_information_use_paragraph_four_point_six":"Fournir tout autre service demandé.","privacy_policy_view_information_use_paragraph_four_point_three":"Vérifier les performances de votre produit Tesla et vous fournir des services le concernant.","privacy_policy_view_information_use_paragraph_four_point_two":"Fournir un service concernant votre produit Tesla, par exemple vous contacter pour vous communiquer des recommandations d’entretien et procéder à des mises à jour de votre produit à distance.","privacy_policy_view_information_use_paragraph_one":"Nous sommes susceptibles d’utiliser les informations collectées pour communiquer avec vous, dans le but de fournir et d\'améliorer nos produits et services et à d’autres fins. Vous trouverez ci-dessous des exemples illustrant la manière dont nous utilisons les informations à ces fins.","privacy_policy_view_information_use_paragraph_three":"Vos choix de communications :","privacy_policy_view_information_use_paragraph_three_point_one":"Réception de courriers électroniques de notre part ou de la part de nos filiales : Si vous ne voulez plus recevoir de courriers électroniques marketing de notre part ou de la part de nos filiales, vous pouvez vous désinscrire en suivant les instructions fournies dans tous les e-mails que nous vous envoyons ou en nous contactant à l\'adresse ci-dessous. Veuillez noter que nous pourrons toujours vous envoyer des messages administratifs et des messages de sécurité importants même si vous choisissez de ne plus recevoir d’e-mails marketing.","privacy_policy_view_information_use_paragraph_three_point_two":"Réception d\'appels marketing de notre part : Si vous recevez un appel marketing de notre part et si vous ne voulez plus recevoir d\'appels similaires à l\'avenir, il suffit de demander que l\'on vous mette sur notre « liste rouge ». Veuillez noter que nous pourrons toujours vous appeler pour des questions administratives, des questions de sécurité ou des questions liées à l\'entretien des produits même si vous choisissez de ne plus recevoir d\'appels marketing.","privacy_policy_view_information_use_paragraph_two":"Nous sommes susceptibles d\'utiliser les informations que nous collectons pour communiquer avec vous, par exemple :","privacy_policy_view_information_use_paragraph_two_point_five":"Présenter des produits et des offres personnalisés et pour améliorer nos listes par l\'ajout d\'informations provenant d\'autres sources.","privacy_policy_view_information_use_paragraph_two_point_four":"Vous adresser des informations administratives, par exemple des informations concernant les Services et les modifications de nos conditions générales et de nos politiques.","privacy_policy_view_information_use_paragraph_two_point_one":"Répondre à vos questions et satisfaire vos demandes, comme vous adresser des newsletters ou des informations produit, des alertes ou des brochures.","privacy_policy_view_information_use_paragraph_two_point_seven":"Pour faciliter le partage d\'informations et la fonctionnalité des communications sur les réseaux sociaux.","privacy_policy_view_information_use_paragraph_two_point_six":"Vous permettre de participer à des concours et à des promotions similaires et gérer ces activités.","privacy_policy_view_information_use_paragraph_two_point_three":"Vous communiquer d\'importantes informations de sécurité ou notifier les premiers secours en cas d\'accident impliquant votre véhicule.","privacy_policy_view_information_use_paragraph_two_point_two":"Organiser, évaluer et vous fournir des impressions concernant votre essai de conduite Tesla.","privacy_policy_view_information_use_provide":"Fournir et améliorer nos produits et services","privacy_policy_view_links_header":"Liens","privacy_policy_view_links_paragraph_one":"La présente Politique de confidentialité ne concerne pas et n\'entraîne en aucun cas notre responsabilité concernant les politiques de confidentialité ou autres pratiques de tiers, notamment des tiers exploitant des sites ou des services auxquels les Services sont liés. L’inclusion d\'un lien sur la page des Services ne constitue pas un soutien ou une approbation du site ou service lié, de notre part ou de la part de nos filiales. Elle ne constitue pas non plus une quelconque affiliation au tiers concerné.","privacy_policy_view_links_paragraph_two":"Veuillez noter que nous ne sommes pas responsables de la collecte, de l\'utilisation ou des politiques et des pratiques de divulgation (y compris les pratiques en matière de sécurité des données) d\'autres organisations, telles que d’autres développeurs d\'applications, fournisseurs d\'applications, prestataires de plateformes de médias sociaux, prestataires de systèmes d\'exploitation ou prestataire de services sans fil, y compris de toutes les informations que vous communiquez à d\'autres organisations par l\'intermédiaire de nos applications logicielles ou de nos pages de médias sociaux, ou en relation avec celles-ci.","privacy_policy_view_minors_header":"Mineurs","privacy_policy_view_minors_paragraph":"Les Services ne sont pas destinés aux personnes de moins de seize (16) ans et nous demandons à ce que ces personnes ne fournissent aucune information à Tesla.","privacy_policy_view_offers_eu":"Oui, je souhaite recevoir des communications marketing par e-mail, telles que des enquêtes, des promotions ou des offres de la part de Tesla et de ses filiales sur les produits et services Tesla. Vous avez le droit de retirer votre consentement à tout moment. En savoir plus {legalLink}.","privacy_policy_view_offers_title":"Communiqués sur les produits et nouvelles offres","privacy_policy_view_offers_usa":"J\'accepte d\'être contacté(e) au numéro indiqué pour recevoir des informations ou des offres sur les produits Tesla. Je comprends que ces appels ou ces SMS peuvent faire appel à une numérotation assistée par ordinateur ou comporter des messages pré-enregistrés. Ce consentement ne constitue pas une condition d\'achat.","privacy_policy_view_powerwall_warranty":"Garantie limitée du Powerwall Tesla","privacy_policy_view_privacy_policy":"Avis de confidentialité","privacy_policy_view_privacy_policy_agreement_eu":"Je soussigné(e), propriétaire, certifie avoir lu les informations relatives à la confidentialité client Tesla et consent au traitement de mes informations par Tesla comme décrit dans la Politique de confidentialité client Tesla. Vous avez le droit de retirer votre consentement à tout moment, comme décrit par la Politique de confidentialité client Tesla.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Je soussigné(e), propriétaire, certifie avoir lu les informations relatives à la confidentialité client Tesla et consent au traitement de mes informations par Tesla comme décrit dans la Politique de confidentialité client Tesla.","privacy_policy_view_privacy_shield":"Politique de Confidentialité","privacy_policy_view_retention_period_header":"Durée de conservation des données","privacy_policy_view_retention_period_paragraph":"Nous conserverons les informations que nous aurons collectées auprès de, ou concernant, nos clients, nos produits et les Services pendant toute la durée nécessaire pour les finalités décrites dans la présente Politique de confidentialité, à moins qu\'une durée de conservation supérieure soit requise ou autorisée par la loi.","privacy_policy_view_security_header":"Sécurité","privacy_policy_view_security_paragraph_one":"Nous nous efforçons d\'employer des mesures organisationnelles, techniques et administratives raisonnables pour protéger les informations au sein de notre organisation. Malheureusement, la sécurité d\'un système de transmission ou de stockage de données ne peut être garantie à 100 %. Si vous avez des raisons de penser que vos interactions avec nous ne sont plus sécurisées (par exemple, si vous avez le sentiment que la sécurité d\'un compte que vous possédez chez nous a été compromise), veuillez nous avertir immédiatement du problème en nous contactant comme expliqué dans le paragraphe « Comment nous contacter » ci-dessous.","privacy_policy_view_security_paragraph_two":"Si vous vendez ou cédez votre produit Tesla à quelqu\'un d\'autre, veuillez nous en informer, de sorte que nous puissions décider s\'il convient de mettre en œuvre des mesures supplémentaires pour mieux protéger les informations collectées auprès de vous ou vous concernant contre toute communication à l\'acheteur ou au cessionnaire du produit Tesla.","privacy_policy_view_title":"Consultez la politique de confidentialité complète","privacy_policy_view_updates_header":"Mises à jour de la présente Politique","privacy_policy_view_updates_paragraph":"Nous sommes susceptibles de modifier la présente Politique de confidentialité. Veuillez consulter la légende “Dernière mise à jour“ au bas de cette page pour connaître la date à laquelle cette Politique de confidentialité a été révisée pour la dernière fois. Toute modification apportée à la présente Politique de confidentialité prendra effet dès la publication de la Politique de confidentialité révisée sur la page des Services. En utilisant nos produits, les Services, ou en nous fournissant des informations par tout autre moyen suite à ces modifications, vous acceptez la Politique de confidentialité révisée.","privacy_policy_view_us_warranty_warning":"Vous devez accepter la Garantie limitée Tesla pour enregistrer votre Powerwall et suivre ses informations via l\'application mobile Tesla.","privacy_policy_view_warranty_information":"Je soussigné(e), propriétaire, accepte les conditions de la Garantie limitée du Powerwall Tesla disponible {warrantyLink}. Ces conditions comprennent une clause d’arbitrage par laquelle je renonce à mon droit d\'entamer ou de participer à des recours collectifs et des procès par jury. Je peux dénoncer cette clause dans un délai de 30 jours en suivant la procédure décrite dans la clause.","prompt_factory_reset_confirmation":"Vous confirmez réellement vouloir réinitialiser l\'unité aux réglages d’usine ?","pvac-state-active":"Actif","pvac-state-faulted":"En défaillance","pvac-state-init":"Initialisation...","pvac-state-standby":"En attente du photovoltaïque","pvac_alert_ac_fault":"Défaillance AC de l\'onduleur","pvac_alert_check_ac_note":"Vérifiez le câblage AC et la connexion au réseau. Redémarrez l’onduleur et réessayez.","pvac_alert_check_dc_string1_note":"Vérifiez le câblage et les panneaux de la rangée 1 DC. Redémarrez l’onduleur et réessayez.","pvac_alert_check_dc_string2_note":"Vérifiez la rangée 2 DC, le câblage et les panneaux. Redémarrez l’onduleur et réessayez.","pvac_alert_check_dc_string3_note":"Vérifiez la rangée 3 DC, le câblage et les panneaux. Redémarrez l’onduleur et réessayez.","pvac_alert_check_dc_string4_note":"Vérifiez la rangée 4 DC, le câblage et les panneaux. Redémarrez l’onduleur et réessayez.","pvac_alert_confirm_grid_code_note":"Vérifiez le câblage AC et la connexion au réseau. Confirmez le code de réseau sélectionné.","pvac_alert_dc_fault_string1":"Défaillance DC de l\'onduleur - Rangée 1","pvac_alert_dc_fault_string2":"Défaillance DC de l\'onduleur - Rangée 2","pvac_alert_dc_fault_string3":"Défaillance DC de l\'onduleur - Rangée 3","pvac_alert_dc_fault_string4":"Défaillance DC de l\'onduleur - Rangée 4","pvac_alert_freq_change":"Réseau incompatible - Changement de fréquence","pvac_alert_internal_comms":"Problème de communication interne","pvac_alert_over_freq":"Réseau incompatible - Sur-fréquence","pvac_alert_over_temp":"Surchauffe de l\'onduleur","pvac_alert_over_voltage":"Réseau incompatible - Surtension","pvac_alert_production_limited_note":"La production peut être limitée. Veillez au bon câblage des terminaisons, à un débit d’air et à un espace suffisants autour de l’installation.","pvac_alert_reboot_note":"Redémarrez l’onduleur, s\'assurer que le système est à jour et totalement opérationnel.","pvac_alert_under_freq":"Réseau incompatible - Sous-fréquence","pvac_alert_under_voltage":"Réseau incompatible - Sous-tension","pvi-power-status-dc-only":"DC seulement","pvi-power-status-disabled":"Désactivé","pvi-power-status-enabled":"Activé","pvi-reset-button-label":"Relancez l’onduleur et effacez les alertes","pvs-self-test-1":"Auto-test (1/6) : Défaut de mise à la masse","pvs-self-test-2":"Auto-testAuto-test (2/6) : Défaut d’arc","pvs-self-test-3":"Auto-testAuto-test (3/6) : MCI","pvs-self-test-4":"Auto-testAuto-test (4/6) : Isolation","pvs-self-test-5":"Auto-testAuto-test (5/6) : Soudage de relais","pvs-self-test-6":"Auto-testAuto-test (6/6) : Impédance","pvs_alert_check_arc_fault_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les problèmes de défaut d’arc.","pvs_alert_check_dc_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts de mise à la masse.","pvs_alert_check_dc_string1_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts d\'isolation en se concentrant sur la 1ère rangée.","pvs_alert_check_dc_string2_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts d\'isolation en se concentrant sur la 2ème rangée.","pvs_alert_check_dc_string3_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts d\'isolation en se concentrant sur la 3ème rangée.","pvs_alert_check_dc_string4_note":"Vérifiez le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts d\'isolation sur la 4ème rangée.","pvs_alert_check_dc_strings_note":"Vérifier le câblage DC, les connexions, les panneaux et la configuration des rangées.","pvs_alert_dc_arc_fault_detected":"Défaut d’arc DC - détecté","pvs_alert_dc_arc_fault_lockout":"Défaut de mise à la masse - verrouillé","pvs_alert_dc_ground_fault":"Défaut de mise à la masse DC","pvs_alert_dc_isolation_string1":"Problème d\'isolation DC - Rangée 1","pvs_alert_dc_isolation_string2":"Problème d\'isolation DC - Rangée 2","pvs_alert_dc_isolation_string3":"Problème d\'isolation DC - Rangée 3","pvs_alert_dc_isolation_string4":"Problème d\'isolation DC - Rangée 4","pvs_alert_dc_over_voltage":"Surtension DC","pvs_alert_rapid_shutdown":"Arrêt rapide initié","pvs_alert_rapid_shutdown_note":"Vérifiez le disjoncteur AC et le circuit d\'arrêt rapide à faible tension.","registration_container_continue_header":"Adresse e-mail du client saisie : {email}","registration_container_continue_modal_description":"Le client ne pourra pas accéder à l\'application mobile Tesla si l\'adresse e-mail est incorrecte. Assurez-vous que l\'adresse e-mail du client est valide.","registration_container_customer_email_required":"L\'adresse e-mail du client est nécessaire pour activer l\'application mobile Tesla.","registration_container_customer_information_title":"Informations relatives au site","registration_container_fill_required_fields":"L\'installateur ou le client doit remplir tous les champs obligatoires.","registration_container_loading_modal_registering":"Enregistrement","registration_container_reset_form_modal_description":"Veuillez confirmer que vous voulez continuer avec la réinitialisation du formulaire.","registration_container_reset_form_modal_header":"Toute information précédemment saisie sera perdue.","security_container_settings_title_customer":"Modifier ou réinitialiser le mot de passe (client)","security_container_settings_title_installer":"Modifier ou réinitialiser le mot de passe (installateur)","security_view_copied_to_clipboard":"Copié!","security_view_not_wifi_qr_code_error":"N\'est pas un code QR de Wi-Fi.","security_view_scan_qr_code_not_found_error":"Aucun code QR trouvé.","security_view_settings_change_password_error":"Les nouveaux mots de passe ne correspondent pas","security_view_settings_change_password_label":"CHANGER LE MOT DE PASSE","security_view_settings_completed":"TERMINÉ","security_view_settings_new_password_label":"NOUVEAU MOT DE PASSE","security_view_settings_old_password":"MOT DE PASSE ACTUEL","security_view_settings_password_change_info":"Pour modifier le mot de passe, saisissez le mot de passe actuel, puis un nouveau mot de passe.","security_view_settings_password_customer":"MOT DE PASSE","security_view_settings_password_customer_placeholder":"Cinq derniers caractères du mot de passe de l\'autocollant de la passerelle","security_view_settings_password_installer_label":"Mot de passe de la passerelle","security_view_settings_password_reset_info":"Pour réinitialiser le mot de passe, basculez le commutateur sur le Powerwall, puis saisissez les 5 derniers caractères du numéro de série du Gateway.","security_view_settings_password_reset_info_serial":"Pour réinitialiser le mot de passe, basculez le commutateur sur le Powerwall, puis saisissez les 5 derniers caractères du numéro de série de la passerelle.","security_view_settings_password_reset_installer_info":"Pour réinitialiser le mot de passe, basculez le commutateur sur un Powerwall, puis saisissez le mot de passe de l\'autocollant de la passerelle.","security_view_settings_password_reset_installer_info_serial":"Pour réinitialiser le mot de passe, basculez le commutateur du Powerwall, puis saisissez le numéro de série de la passerelle.","security_view_settings_re_enter_password_label":"RE-SAISIR LE NOUVEAU MOT DE PASSE","security_view_settings_reset_password_label":"RÉINITIALISER LE MOT DE PASSE","security_view_settings_serial_customer":"NUMÉRO DE SÉRIE","security_view_settings_serial_customer_placeholder":"Les 5 derniers caractères du numéro de série de la passerelle","security_view_settings_serial_installer_label":"Numéro de série de la passerelle","security_view_settings_success":"Mot de passe mis à jour avec succès","security_view_settings_success_new_password":"Le nouveau mot de passe est :","security_view_settings_toggled_password":"Mot de passe oublié ?","self_test_result_viewer_resi_only":"L\'affichage du journal d\'auto-tests est indisponible.","self_test_results_viewer_collapse_all":"Tout réduire","self_test_results_viewer_column_name":"Nom","self_test_results_viewer_column_result":"Résultat","self_test_results_viewer_column_spec":"Spécifications","self_test_results_viewer_column_test_time":"Heure du test","self_test_results_viewer_column_value":"Valeur","self_test_results_viewer_expand_all":"Tout développer","self_test_results_viewer_failed":"Échec","self_test_results_viewer_in_progress":"En cours","self_test_results_viewer_inconclusive":"Incertain","self_test_results_viewer_not_started":"Non démarré","self_test_results_viewer_passed":"Réussi","self_test_results_viewer_skipped":"Ignoré","self_test_results_viewer_warning":"Avertissement","settings_container_confirm_reset_operation_mode":"Confirmer que le mode a été changé en {operation}","settings_container_heco_modal_description":"Ce paramètre ne peut pas être modifié après la sélection. Vérifiez que le client est actuellement inscrit au programme de bonus de batterie HECO avant de soumettre votre sélection.","settings_container_heco_modal_title":"Vérifier l’inscription","settings_container_heco_view_description":"Le Powerwall se déchargera, à la capacité affectée quotidiennement, pour répondre aux exigences du programme. Ce paramètre ne peut pas être modifié après l’activation.","settings_container_heco_view_scheduled_dispatch_start_time":"Heure de début","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"Distribution programmée HECO","settings_container_heco_view_title":"Programme de bonus de batterie HECO","settings_container_operation_modes_modal_content":"Utilisez l\'écran « Personnaliser » de l\'application mobile Tesla pour modifier les modes de fonctionnement.","settings_container_operation_modes_modal_reset":"RÉINITIALISER LE MODE","settings_container_operation_modes_modal_title":"Mode de fonctionnement","settings_container_operation_modes_modal_warning":"Cette modification est définitive. Les modes avancés peuvent uniquement être réactivés par le biais de l\'application mobile Tesla.","settings_container_operation_modes_reset_modal_title":"Réinitialiser le mode de fonctionnement ?","settings_container_operation_settings_subtitle":"Définissez le nom de votre système, son mode de fonctionnement ainsi que les limitations d\'exportation éventuelles.","settings_container_operation_settings_title":"Paramètres de fonctionnement","settings_container_save_instructions":"Cliquez sur CONTINUER pour enregistrer.","settings_container_saving_site_info_modal":"Enregistrement des paramètres du site","settings_container_site_import_description":"Limite d’importation de site est un paramètre facultatif. Laissez ce champ vide pour désactiver les limites d’importation. Lorsque ce paramètre est activé, il spécifie la puissance maximale qu’il est permis d’importer du réseau vers le site.","settings_container_site_limits_header":"Limites du site","settings_view_custom_modes_label":"MODE PRÉCONFIGURÉ","settings_view_energy_reserve_heco_label":"Les modifications apportées à la réserve de secours sont limitées en raison de l’inscription au programme de bonus de batterie HECO. Le client pourra définir une réserve de secours dans son application.","settings_view_energy_reserve_label":"RÉSERVE DE SECOURS","settings_view_instruction_site_name":"Saisissez un nom de site","settings_view_net_meter_mode":"Mode d’exportation","settings_view_operation_label":"MODE DE FONCTIONNEMENT","settings_view_operation_set_label":"MODE DE FONCTIONNEMENT À DÉFINIR","settings_view_set_net_meter_mode_never_label":"Non-exportation permanente","settings_view_set_net_meter_mode_solar_label":"Exportation solaire","settings_view_site_name":"NOM DU SITE","settings_view_site_name_placeholder":"Ex. Ma Maison","settings_view_solar_export_limitation_slider":"Limitation d’export solaire","settings_view_solar_feature":"Cette fonctionnalité ne devrait être activée que lorsque le fournisseur interdit l’exportation d’électricité photovoltaïque. C\'est le cas par exemple à Hawaï et en Australie.","settings_view_solar_limitation":"POWERWALL INSTALLÉ À CÔTÉ D’UN SYSTÈME SOLAIRE QUI N’EST PAS UN POWERWALL+ ?","settings_view_solar_zero_export":"POWERWALL INSTALLÉ EN MÊME TEMPS QU\'UN SYSTÈME SOLAIRE SANS EXPORTATION ?","site_info_container_submit":"ENVOYER","solar_item_view_baudrate_label":"Débit de transmission","solar_item_view_brand_input_label":"MARQUE","solar_item_view_brand_label":"Marque","solar_item_view_check_inverter":"VÉRIFIER LA CONNEXION DE L\'ONDULEUR {id}","solar_item_view_connection_warning":"Impossible d\'établir la connexion","solar_item_view_inverter_brand":"Marque d’onduleur","solar_item_view_inverter_communication":"Configurer la communication directe avec l\'onduleur","solar_item_view_inverter_model_label":"Modèle d’onduleur","solar_item_view_ip_label":"ADRESSE IP","solar_item_view_model_label":"MODÈLE","solar_item_view_power_rating_explanation":"Il s’agit de la puissance nominale totale du système photovoltaïque par rapport aux modules/panneaux. C\'est donc la puissance nominale de l’installation. Par exemple, si vous avez 10 panneaux solaires de 300 W, indiquez 3 000 W même si l’onduleur PV fait 2 500 W ou 3 500 W.","solar_item_view_pv_array_dc_power_rating":"PUISSANCE NOMINALE CONTINUE DU SYSTÈME PV","solar_item_view_pv_array_dc_power_rating_label":"PUISSANCE NOMINALE CC RÉSEAU PV","solar_item_view_revenue_grade":"Grade de revenu","solar_item_view_revenue_grade_explanation":"Cochez cette option uniquement si l\'onduleur dispose d\'un compteur de niveau de revenus intégré. Les données de l\'onduleur seront lues à partir du compteur à la place de l\'onduleur si cette option est activée.","solar_item_view_revenue_grade_title":"Grade de revenu","solar_item_view_solar":"SOLAIRE {id}","solar_item_view_success":"CONNECTÉ AVEC SUCCÈS!","solar_item_view_unable":"LECTURE DE L\'ONDULEUR IMPOSSIBLE !","solar_list_view_continue_add_solar":"AJOUTER UN ONDULEUR SOLAIRE SUPPLÉMENTAIRE","solar_view_continue_add_solar":"AJOUTER UN ONDULEUR SOLAIRE SUPPLÉMENTAIRE","status_update_urgency_none":"À jour","status_update_urgency_optional":"Mise à jour facultative","status_update_urgency_required":"Mise à jour obligatoire","status_update_urgency_unknown":"Inconnu","success_view_awesome":"GÉNIAL !","success_view_copied_to_clipboard":"Copié!","success_view_installation_complete":"Installation effectuée","success_view_new_password_error_title":"Assistant mot de passe","success_view_new_password_title":"Assistant nouveau mot de passe","success_view_password_set":"Le mot de passe est déjà défini","success_view_record_password":"Veuillez mémoriser ce mot de passe avant de continuer","success_view_retry_registration":"RETENTER L\'ENREGISTREMENT","success_view_set_customer_password":"DÉFINIR LE MOT DE PASSE DU CLIENT","success_view_syncing_configuration":"Synchronisation de la configuration","summary_container_company":"Entreprise","summary_container_connection_type":"Type de connexion","summary_container_email":"E-mail","summary_container_installer_information":"Informations destinées à l\'installateur","summary_container_ip_address":"Adresse IP","summary_container_location":"Lieu","summary_container_meter":"Compteur n° {index}","summary_container_meter_information":"Informations sur le compteur","summary_container_phone":"Numéro de téléphone","summary_container_print":"Imprimer","summary_container_serial_number":"Numéro de série","summary_container_site_info":"Informations relatives au site","summary_container_site_name":"Nom du site","summary_container_subtitle":"Informations sur l\'installation","summary_site_information":"INFORMATIONS RELATIVES AU SITE","summary_view_autonomous":"Contrôle par créneaux horaires","summary_view_backup":"Secours uniquement","summary_view_backup_capable":"Capacité de secours prête","summary_view_backup_reserve":"RÉSERVE DE SECOURS","summary_view_backup_switch":"COMMUTATEUR DE SECOURS","summary_view_conductor_export":"LIMITE D\'EXPORTATION DE CONDUCTEUR","summary_view_conductor_import":"LIMITE D\'IMPORTATION DE CONDUCTEUR","summary_view_control":"Contrôle de site","summary_view_customer_version":"VERSION CLIENT","summary_view_direct":"Direct","summary_view_disabled":"DÉSACTIVÉ","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"LIMITE D\'EXPORTATION PV","summary_view_extra_programs":"PROGRAMMES SUPPLÉMENTAIRES","summary_view_followers":"SUCCESSIFS","summary_view_gateway":"GATEWAY","summary_view_grid_code":"CODE DE RÉSEAU","summary_view_gsm":"CELLULAIRE","summary_view_heco_battery_bonus":"Bonus de batterie HECO","summary_view_ip_address":"ADRESSE IP","summary_view_leader":"PRINCIPAL","summary_view_mode":"MODE","summary_view_msg_cannot_read_solar_assembly":"Arrêtez d’abord le système pour regarder la référence et le numéro de série de l’ensemble photovoltaïque Powerwall+.","summary_view_network":"RÉSEAU","summary_view_non_backup":"Hors secours","summary_view_panel_limit":"COURANT MAXIMAL DU PANEAU","summary_view_part_number":"Référence","summary_view_partnum":"Pièce {partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Agrégation","summary_view_self_consumption":"Autosuffisance","summary_view_serial":"Série","summary_view_serialnum":"Série {serialNumber}","summary_view_site_export":"LIMITE D\'EXPORTATION DE SITE","summary_view_site_import":"LIMITE D\'IMPORTATION DE SITE","summary_view_site_name":"NOM DU SITE","summary_view_solar_assembly":"ENSEMBLE PHOTOVOLTAÏQUE","summary_view_sync":"CAPACITÉ DE SECOURS","summary_view_time":"SYNTHÈSE DURÉE DE COMPILATION","summary_view_time_zone":"FUSEAU HORAIRE","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"Le dispositif appairé au WiFi ne répons pas actuellement","system-device-unknown-sitecontroller":"Le dispositif n\'a pas encore découvert ses enfants","system_acpw_vitals_charge":"Niveau de charge : {Charge} %","system_acpw_vitals_power":"Alimentation CA : {power}","system_acpw_vitals_power_charging":"Alimentation CA : {power} en cours de charge","system_acpw_vitals_power_discharging":"Alimentation CA : {power} en cours de déchargement","system_acpw_vitals_state":"État du Powerwall : {state}","system_acpw_vitals_voltage":"Tension AC : {voltage}","system_controller_din":"Contrôleur : {din}","system_device_alert_disabled":"Dispositif désactivé","system_device_alert_updating":"Mises à jour du microprogramme en cours...","system_device_gateway_not_islanding":"Ce n\'est pas le contrôleur d\'îlotage.","system_device_leader":"Principal","system_device_name_backup_switch":"Commutateur de secours ({sn})","system_device_name_battery_assembly":"Ensemble de batterie ({sn})","system_device_name_gateway":"Passerelle ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus":"{role} Powerwall+","system_device_name_powerwall_plus_leader":"Powerwall+ leader","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+ (câblé)","system_device_name_powerwall_plus_wireless":"Powerwall+ (sans fil)","system_device_name_remote_meter":"Compteur à distance ({sn})","system_device_name_solar_assembly":"Ensemble photovoltaïque ({sn})","system_device_name_solar_assembly_1":"Ensemble photovoltaïque","system_device_name_sync":"Contacteur de la passerelle/Contrôleur de compteur ({sn})","system_firmware_update":"Mise à jour : {percent}% ({step}/{numSteps})","system_gateway_din":"Passerelle : {din}","system_islanding_vitals_backup_state":"État de réserve : {backupState}","system_islanding_vitals_grid_line":"Ligne du réseau {lineNumber} : {v} {f}","system_islanding_vitals_island_line":"Ligne de l’île {lineNumber} : {v} {f}","system_overview_connected":"Connecté à Tesla","system_overview_disconnected":"Non connecté à Tesla","system_overview_follower":"Powerwall suiveur","system_overview_login_required":"Identifiant requis pour afficher le fonctionnement du système","system_overview_scanning":"Recherche d’appareils...","system_overview_site_controller":"Contrôleur de site","system_overview_updating":"Mise à jour des appareils...","system_pvi_vitals_ac_solar_power":"Puissance photovoltaïque AC : {power} / {current}","system_pvi_vitals_ac_solar_power_only":"Puissance photovoltaïque AC : {power}","system_pvi_vitals_lifetime_energy_kwh":"Énergie pour la durée de vie : {energy}","system_pvi_vitals_state":"État : {message}","system_pvi_vitals_string":"Rangée {number} : {voltage} / {current}","system_pvi_vitals_string_not_connected":"Rangée {number} : Déconnecté","system_remote_meter_ct_line":"CT {n} ({emplacement}) : {valeur}","system_remote_meter_no_cts":"Pas de CT configuré","system_rescan_button_text":"Relancer la recherche d\'appareils","system_scanning_label_text":"Recherche d\'appareils...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Testez le système pour vérifier qu\'il fonctionne correctement.","test_container_system_test_title":"Test du système","test_inverter_container_error_grid_uncompliant":"Le test ne peut pas être exécuté, car le réseau est non conforme.","test_inverter_container_error_not_idle":"Le Powerwall doit être en veille pour l’exécution du test.","test_inverter_container_results_error_plural_subtitle":"{num} tests échoués","test_inverter_container_results_error_singular_subtitle":"{num} test échoué","test_inverter_container_results_success_plural_subtitle":"{num} tests effectués avec succès","test_inverter_container_results_success_singular_subtitle":"{num} test effectué avec succès","test_inverter_container_results_success_subtitle":"Tous les tests ont été effectués avec succès","test_inverter_container_results_title":"Résultats de l’auto-test de l’onduleur","test_inverter_container_title":"Auto-test de l’onduleur","test_meter_composite_view_auxiliary_meter_setup_instructions":"Au moins un transformateur de courant doit être défini pour chaque compteur auxiliaire.","test_meter_composite_view_auxiliary_meters_title":"Compteurs auxiliaires","test_meter_composite_view_configure_meters":"CONFIGURER LES COMPTEURS","test_meter_composite_view_current_transformer_setup_instructions":"Utilisez au moins un TC de site OU un TC de charge, mais pas les deux.","test_meter_composite_view_external_meter_setup_instructions":"Au moins un transformateur de courant doit être défini pour chaque compteur externe.","test_meter_composite_view_external_meters_title":"Compteurs externes","test_meter_composite_view_internal_meters_gateway_title":"Compteurs internes (passerelles)","test_meter_composite_view_internal_meters_title":"Compteurs internes","test_meter_composite_view_no_configured_meters":"AUCUN COMPTEUR CONFIGURÉ. VEUILLEZ {configurer} POUR CONTINUER.","test_meter_composite_view_note":"REMARQUE","test_meter_item_view_acuvim_label":"Compteur {id} : Compteur Acuvim","test_meter_item_view_backup_switch_label":"Compteur {id} : Commutateur du compteur de secours","test_meter_item_view_configure_phases_note":"Configurez les phases pour activer les TC pour ce compteur","test_meter_item_view_internal_meter_x_gateway_label":"Compteur {id} : Compteur principal interne X (Passerelle)","test_meter_item_view_internal_meter_y_gateway_label":"Compteur {id} : Compteur auxiliaire interne Y (Passerelle)","test_meter_item_view_remote_w1_wifi_label":"Compteur {id} : Wi-Fi à distance","test_meter_item_view_remote_w1_wired_label":"Compteur {id} : Câblage à distance","test_meter_item_view_remote_w2_wifi_label":"Compteur {id} : Wi-Fi à distance","test_meter_item_view_remote_w2_wired_label":"Compteur {id} : Câblage à distance","test_meter_item_view_reset":"TOUT RÉINITIALISER","test_meter_item_view_site_meter_title":"Compteur de site interne","test_meter_item_view_sync_id":"Compteur de synchronisation {id}","test_meter_item_view_toggle_advanced":"Avancé","test_meter_item_view_toggle_power":"Puissance","test_meter_item_view_wifi_id":"Compteur {id}","test_meter_item_view_wired_id":"Compteur câblé {id}","test_view_canceled_status":"Le test a été annulé","test_view_failed_status":"Le test a échoué","test_view_idle_status":"Démarrage du test système","test_view_init_status":"Préparation du démarrage du test","test_view_inverter_test_warning_message":"Si vous avez un onduleur PV 0 Export, la procédure d\'auto-test de la passerelle ne peut pas qualifier le système de manière appropriée. Éteignez l’onduleur PV jusqu\'à la fin de l’auto-test.","test_view_passed_status":"Le test a été effectué avec succès","test_view_prep_status":"Initialisation des contrôles : Ceci peut prendre quelques minutes !","test_view_running_status":"Exécution des tests de charge","test_view_skip_start_system_test_text":"Confirmez pour ignorer le test système","test_view_start_system_test_warning":"AVERTISSEMENT","test_view_system_test_completed_message":"Test système terminé !","time_minute":"minute","time_minutes":"minutes","time_second":"seconde","time_seconds":"secondes","time_started_at":"Heure de début {time}","timezone_container_subtitle":"Par géolocalisation et en fonction de l’adresse IP, nous pouvons vous aider à trouver le fuseau horaire correct.","timezone_container_title":"Fuseau horaire","timezone_view_label":"fuseau horaire","toast_view_standard_title":"Note","toast_view_warning_title":"Avertissement","update_container_industrial_updating_description":"Le contrôleur de site va maintenant redémarrer automatiquement pour installer la mise à jour. {lb1}{lb2} Veuillez patienter deux minutes avant de vous reconnecter au réseau du contrôleur de site et de {refresh}","update_container_preparing_title":"Préparation à la dernière mise à jour","update_container_refresh_browser":"Rafraîchissez votre fenêtre de navigation.","update_container_residential_updating_description":"La passerelle va maintenant redémarrer automatiquement pour installer la mise à jour. {lb1}{lb2} Veuillez patienter deux minutes avant de vous reconnecter au réseau passerelle, puis {refresh}","update_container_skip_title":"Ignorer la mise à jour ?","update_container_subtitle":"Vérifiez les mises à jour. Remarque : la transmission de la mise à jour du microprogramme aux Powerwalls se produit sur la page Powerwall.","update_container_subtitle_industrial":"Vérifiez les mises à jour. Remarque : la transmission de la mise à jour du microprogramme aux batteries se produit sur la page Batterie.","update_container_title":"Mise à jour","update_container_updating_title":"Installation de la mise à jour","update_step_item_view_resolution_title":"Solution suggérée","update_view_check_again":"CLIQUEZ POUR REVÉRIFIER","update_view_check_for_update":"RECHERCHER LA MISE À JOUR DE LA PASSERELLE","update_view_check_for_update_industrial":"RECHERCHER LA MISE À JOUR DU CONTRÔLEUR DE SITE","update_view_checking_update":"Vérification des mises à jour","update_view_current_version":"Version actuelle : {version}","update_view_current_version_label":"VERSION ACTUELLE","update_view_downloading":"TÉLÉCHARGEMENT","update_view_downloading_update":"Téléchargement de la mise à jour","update_view_no_power_cicle":"NE PAS ÉTEINDRE L’APPAREIL !","update_view_percent_complete":"{percent} terminés","update_view_progress":"MISE À JOUR EN COURS","update_view_staged":"NOUVELLE VERSION ORGANISÉE","update_view_staged_update":"Prêt pour la mise à jour","update_view_staging":"ORGANISATION","update_view_staging_update":"Préparation de la mise à jour","update_view_time_remaining":"restant","update_view_up_to_date":"VERSION À JOUR","update_view_update_now":"METTRE À JOUR MAINTENANT","update_view_update_urgency_label":"Mettre à jour le statut : {status}","update_view_updated_industrial":"Le logiciel du contrôleur de site est à jour.","update_view_updated_residential":"Le logiciel de la passerelle est à jour.","update_view_wait_minutes":"VEUILLEZ PATIENTER QUELQUES MINUTES","validation_phone":"Insérez un numéro de téléphone valide","vitals_header_subtitle_firmware_update":"Mise à jour du microprogramme en cours...","vitals_header_subtitle_firmware_update_failed":"Échec de la mise à jour du microprogramme. Vérifiez les commutateurs activés et leur raccordement","vitals_header_title":"Système","vitals_powerwall_state_ac_fault":"Défaillance de niveau AC","vitals_powerwall_state_dc_fault":"Défaut de niveau DC","vitals_powerwall_state_grid_following":"Suivi de réseau","vitals_powerwall_state_grid_forming":"Formation de réseau","vitals_powerwall_state_init":"Initialisation","vitals_powerwall_state_off":"Désactivé","vitals_powerwall_state_standby":"En veille","vitals_powerwall_state_support_dc":"Assistance DC","warning":"AVERTISSEMENT","warning_off_grid":"Si le système électrique est déconnecté du réseau, les charges secourues seront éteintes dans un délai de 5 minutes.","warning_on_grid":"Si le système électrique est connecté au réseau, la recharge/décharge du Powerwall est interrompue.","warning_sitemaster_container_not_running":"Le maître du site n\'est pas en cours d\'exécution.","wifi_pairing_link_message":"Ajouter un Powerwall connecté par WiFi","wifi_view_find_network":"RECHERCHER RÉSEAU PAR SSID","wifi_view_note":"Remarque : La Passerelle est compatible uniquement avec les réseaux sans fil 2,4 GHz.","wifi_view_note_five_ghz":"Remarque : la passerelle est compatible avec les réseaux sans fil de 2,4 GHz et de 5 GHz.","wifi_view_readonly":"Ceci est un Powerwall suiveur, de sorte que sa configuration de réseau sans fil ne peut pas être modifiée.","wifi_view_security_label":"SÉCURITÉ","wizard_container_commissioning_wizard":"Assistant de mise en service Tesla","wizard_container_login_required":"Identifiant requis","wizard_container_title":"Commençons.\\n","wizard_container_verifying_login_title":"Vérifier l\'identifiant"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"エラー","advanced_settings_submit":"送信","advanced_settings_submitted":"送信完了","advanced_settings_title":"詳細設定","alert_container_ac_phase_1_over_voltage":"AC過電圧","alert_container_ac_phase_1_under_voltage":"AC不足電圧","alert_container_ac_phase_2_over_voltage":"AC過電圧","alert_container_ac_phase_2_under_voltage":"AC不足電圧","alert_container_ac_phase_3_over_voltage":"AC過電圧","alert_container_ac_phase_3_under_voltage":"AC不足電圧","alert_container_over_frequency":"AC周波数上昇","alert_container_rate_of_change_frequency":"周波数のAC変化率","alert_container_under_frequency":"AC周波数減少","app_container_engineering_mode_banner_message":"Tesla Service モードは認証は必要ありません。動作を変更する場合は、「システムを停止」してください。ブラウザを閉じる前に、システムの状態を準備してください。このモードでは認証は必要ありません。完了後はブラウザを閉じることができます。","app_container_engineering_mode_title":"Tesla Service モード","app_container_firmware_update_banner_message":"設置および配線を操作したり動かさずに、更新が完了するまで、このページを離れないでください。","app_container_firmware_update_banner_title":"ファームウェアをアップデート中です","app_container_sitemaster_message_title":"システムは現在実行されています。電池ブロックのステータスを表示するには、システムをシャットダウンする必要があります。システムは、ホームページから停止することができます。","app_container_sitemaster_power_supply_mode_banner_message":"ペアリングと構成のために電源装置にAC電圧を供給するバッテリー。ランディング ページでシステムを停止するボタン。","app_container_sitemaster_power_supply_mode_banner_title":"自立運転モード","app_container_sitemaster_running_banner_title":"システム実行中","auto_config_check_network_button":"ネットワークを点検してWiFiを有効にします","auto_config_check_system_and_summary":"システムおよび概要ページを点検します。","auto_config_done_button_text":"完了","auto_config_instructions_cannot_determine_grid_connection":"システムを始動させる前に、バックアップ スイッチまたはGatewayに至る配線を確認します。","auto_config_instructions_determining_on_grid":"このメッセージが3分を超えても消えない場合、自立運転スイッチまたはGatewayに至る配線を確認します。","auto_config_instructions_finding_contactor_controller":"このメッセージが3分を超えても消えない場合、自立運転スイッチまたはGatewayに至る配線を確認します。","auto_config_instructions_finding_powerwalls":"このメッセージが3分を超えても消えない場合、Powerwallの配線を確認します。","auto_config_instructions_lookup_failed_retry":"シリアル番号のステッカーをスキャンしてBoltに読み込ませ、自動Powerwallセットアップを有効にしてから、{retryButton}","auto_config_instructions_lookup_failed_wizard":"または手動Powerwallセットアップには{wizardButton}。","auto_config_instructions_missing_info_1":"以下の情報が欠落しているために自動Powerwallセットアップに失敗しました。","auto_config_instructions_missing_info_2":"手動で入力するには{wizardButton}。","auto_config_instructions_missing_info_3":"手動で{registrationButton}。","auto_config_instructions_no_grid_detected":"システムを指導する前に配線およびブレーカーを点検します。","auto_config_instructions_no_network_retry":"自動Powerwallセットアップを有効にするには{networkLink}、そして{retryButton}","auto_config_instructions_no_network_wizard":"または手動Powerwallセットアップには{wizardButton}。","auto_config_instructions_retry":"問題が解消しない場合{networkLink}","auto_config_instructions_retry_wizard":"または手動Powerwallセットアップには{wizardButton}。","auto_config_instructions_updating":"自動Powerwallセットアップを開始する前にソフトウェアのアップデートが必要です。アップデートは自動的にダウンロードされて適用されます。後ほどPowerwallのWiFiネットワークに再接続する必要がある場合があります。","auto_config_missing_grid":"顧客サイトの電力系統","auto_config_missing_gridcode":"顧客サイトのグリッドコード","auto_config_missing_registration":"製品登録のための顧客情報","auto_config_missing_timezone":"顧客サイトのタイムゾーン","auto_config_network_button_text":"ネットワークのセットアップ","auto_config_registration_button_text":"顧客情報の入力","auto_config_retry_button_label":"再試行","auto_config_run_button_label":"Powerwallを自動セットアップ","auto_config_run_wizard_button_text":"ウィザードの実行","auto_config_section_title":"自動Powerwallセットアップ","auto_config_status_cancelled":"自動セットアップはキャンセルされました。再試行可能:","auto_config_status_cannot_determine_grid_connection":"電力系統の接続を判定できませんでした。","auto_config_status_complete":"問題なく完了","auto_config_status_determining_on_grid":"電力系統の接続を判定...","auto_config_status_finding_contactor_controller":"開閉器コントローラを検索...","auto_config_status_finding_powerwalls":"Powerwallを検索...","auto_config_status_in_progress":"進行中","auto_config_status_lookup_failed":"シリアル番号の参照に失敗","auto_config_status_missing_information":"情報欠落","auto_config_status_no_grid_detected":"電力系統が見つかりません。","auto_config_status_no_network":"Teslaに接続されていません","auto_config_status_not_applicable":"自動セットアップは不要または実行済みです。再実行可能:","auto_config_status_retrying":"失敗したネットワークリクエストを再試行中","auto_config_status_timeout":"自動設定がタイムアウトしました。再試行可能:","auto_config_status_updating":"ソフトウェアのアップデートが必要です","auto_config_stop_system_modal_message":"システムの実行中は、自動セットアッププロセスを実行できません。システムを停止し、もう一度お試しください。","auto_config_stop_system_modal_title":"自動セットアップを始動できません","battery_container_add_all_batteries_button_label":"すべて追加","battery_container_available_batteries_subtitle":"に追加しない限り、バッテリーはシステム作動の一部ではありません。","battery_container_available_batteries_title":"使用可能なバッテリーブロック","battery_container_cannot_communicate":"Powerwallと通信できません。CANバス配線および終端抵抗を確認してください。","battery_container_cannot_communicate_with_device":"デバイスと通信できません。CANバス配線および終端抵抗を確認してください。","battery_container_chinv":"コンプレッサおよびヒーターVFD(CHINV){index}","battery_container_configured_batteries_label":"構成済みのバッテリー ブロック","battery_container_configured_batteries_subtitle":"これらのバッテリーはシステム運用の一部です。","battery_container_confirm_update_firmware":"このプロセスは数分かかる場合があります。更新を中断したり、このページを離れないでください。","battery_container_dcbc":"バッテリーブロック{name}","battery_container_dcbc_comms_failure":"通信失敗。ユニットのネットワーク接続をチェックして、もう一度スキャンしてください。","battery_container_dcbc_dcdisconnect_opened":"DC切断ハンドルがオフ位置にあります。","battery_container_dcbc_door_switch_opened":"インバータードア有効化ラインが開いています。ドアスイッチを確認してください。","battery_container_dcbc_enable_line_return_low_estop":"インバーター遠隔シャットダウンが開いています。遠隔シャットダウン回路を確認してください。","battery_container_dcbc_enable_line_return_low_inv":"インバータシステム有効化ラインが開いています。回路遮断器フィードバックを確認してください。","battery_container_dcbc_enable_line_return_low_str":"1つ以上のパワーパック列の有効化ラインが開いています。配線とパワーパックのドアを確認してください。診断用有効化ライン トラブルシューティングガイドを参照してください。","battery_container_delete_button_title":"このデバイスを削除","battery_container_diagnosis_incomplete":"診断が完了していません。このほかのチェックを実行する前に、ファームアップは必要です。","battery_container_faults":"故障","battery_container_firmware_update_needed":"ファームウェアのアップデートが必要です。","battery_container_gateway_contactor_meter_controller":"Gateway開閉器/メーター コントローラ","battery_container_industrial_confirm_update_firmware":"これにより、各電池ブロックおよびそのサブコンポーネントのファームウェアが更新されます。","battery_container_industrial_confirm_update_firmware_info":"これにより、内の各バッテリー ブロックのファームウェアが更新されます","battery_container_internal_communications_fault":"内部通信エラー。CANバス配線および終端を確認し、ファームアップを行なってください。","battery_container_meter_socket_adapter":"自立運転スイッチ","battery_container_mpbc":"バッテリー ブロック{index}","battery_container_mpthc":"サーマル コントローラー(MPTHC){index}","battery_container_no_msa_detected":"自立運転スイッチは検出されませんでした。","battery_container_no_sync_detected":"接触器コントローラーは検出されませんでした。バックアップ機能は検出されませんでした。","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"ポッド {index}","battery_container_post":"ポスト(LCC){index}","battery_container_post_missing":"欠落ポスト{index}","battery_container_powerpack":"パワーパック {index}","battery_container_powerstage":"パワーステージ{index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"Powerwallのスイッチが切られています。スイッチがON位置にあることを確認してください。","battery_container_qbms":"Qbert(QBMS)","battery_container_qhvp":"高電圧プロセッサー(QHVP)","battery_container_residential_confirm_update_firmware":"これは、各Powerwallのファームウェアおよび接触器コントローラー(ある場合)を更新します。","battery_container_resolve_connectivity":"ファームアップを実行する前に接続の問題を解決してください。","battery_container_scan":"スキャン","battery_container_scan_in_progress":"スキャン中…","battery_container_scbc":"充電器ブロック{index}","battery_container_scthc":"サーマル コントローラー(SCTHC){index}","battery_container_self_tests_failure":"自己テストで合格しませんでした。","battery_container_self_tests_inconclusive":"自己テスト結果が未決定です。","battery_container_self_tests_internal_error":"自己テストは内部システムエラーにより失敗しました。","battery_container_self_tests_stall":"タイムアウト:自己テストをスタートすることができません。","battery_container_self_tests_system_down":"システムのダウン中は、自己テストを実行することができません。システムを始動し、もう一度お試しください。","battery_container_self_tests_updating":"バッテリーをアップデートしている際は、セルフテストを実行することができません。アップデートが完了してから再試行してください。","battery_container_serial_number":"SN: {sn}","battery_container_solar_powerwall":"{index}ソーラーPowerwall","battery_container_starc":"DC-DCコンバーター(STARC){index}","battery_container_stitch":"コントロール パワーDC-DC(STITCH)","battery_container_synchronizer":"接触器コントローラー","battery_container_unknown":"未知のバス コントローラー{index}","battery_container_update_failed":"更新が失敗しました。配線を確認し、スイッチが更新処理中に中断されないようにして、もう一度お試しください。","battery_container_update_firmware":"ファームウェアのアップデート","battery_container_update_in_progress":"アップデートが進行中です…","battery_container_waiting_to_report_firmware":"ユニットからファームウェア・バージョンの報告を待機中。","battery_container_warnings":"警告","button_label_generate":"発電","can_reboot_message_backup":"自立運転モード","can_reboot_message_block_update":"ブロック アップデート進行中","can_reboot_message_enumeration":"計数進行中","can_reboot_message_initializing":"システム初期化中","can_reboot_message_power_flow_is_too_high":"電力フローが高すぎ","can_reboot_message_updating":"サイト パッケージ アップデート進行中","caution":"注意","charger_settings_cabinet":"Cabinet {sn} {state}","charger_settings_cabinet_posts_warning":"これらのコントロールはポスト イネーブルおよびキャビネット内部のHVバスだけを停止します。キャビネットにアクセスする際は依然として電力を遮断し、安全手順に従う必要があります。","charger_settings_common_bus":"Common Bus {state}","charger_settings_common_bus_warning":"コモンHVバスだけを停止しますキャビネットにアクセスする際は依然として電力を遮断し、安全手順に従う必要があります。","charger_settings_disabled":"無効","charger_settings_enabled":"有効","charger_settings_post":"Post {id} {state}","charger_settings_saving":"saving {spinner}","client_protocols_container_subtitle":"クライアント プロトコルの有効/無効を切り替える。","client_protocols_container_title":"クライアント プロトコル","client_protocols_menu_title":"クライアント プロトコル","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"Modbus TCP/IP","compliance_container_label_fcc_id":"FCC ID:{fccId}","compliance_container_label_ic_id":"IC:{icId}","compliance_container_label_manufacturer":"製造者: {manufacturer}","compliance_container_label_model":"モデル: {model}","compliance_container_title":"コンプライアンス","component-menu-title":"コンポーネント","conductor_limit":"蓄電池の制御により、幹線あるいは受電点にて電流の制限値を設ける事ができる。","conductor_min_current":"幹線の逆潮流上限値","control_container_add_on":"追加機能","control_container_always_active":"常時スタンバイ","control_container_battery_ok":"フルバッテリーエクスポートが可能","control_container_charge_power_target":"充電パワーターゲット","control_container_conductor_max_current":"幹線の潮流上限値","control_container_conductor_min_current_max_bound":"{mode} の上限値は200A","control_container_conductor_min_current_min_bound":"{mode} の下限値は5A","control_container_control_subtitle":"コントロールサブタイトル","control_container_control_title":"コントロールタイトル","control_container_direct":"直接指令","control_container_disable":"無効","control_container_discharge_power_target":"放電パワーターゲット","control_container_enabled":"使用可能","control_container_energy_target":"エネルギーターゲットこの値は、正常な状態では、設計資料および検査報告書によるシステムサイズと一致します。","control_container_error_message":"{mode}は必須です","control_container_explanation_bullet_five_max_site_meter_power_kw":"この制限値より負荷が大きい場合、蓄電池はこの制限値を越えることを防ぐため可能な限り放電を行います。","control_container_explanation_bullet_five_min_site_meter_power_kw":"この制限値より総発電量が大きい場合、バッテリーはこの制限値を越えることを防ぐため可能な限り充電を行います。","control_container_explanation_bullet_four_max_site_meter_power_kw":"負荷がこの制限値を下回る場合、バッテリー充電は許容範囲内に制限されます。","control_container_explanation_bullet_four_min_site_meter_power_kw":"総発電量がこの制限値を下回る場合、バッテリー放電は許容範囲内に制限されます。","control_container_explanation_bullet_one_max_site_meter_power_kw":"受電点正潮流制限値はオプション設定です。制限値を無効化する場合はこの欄を空欄にします。","control_container_explanation_bullet_one_min_site_meter_power_kw":"受電点逆潮流制限値はオプションの設定です。制限値を無効化する場合はこの欄を空欄にします。","control_container_explanation_bullet_three_max_site_meter_power_kw":"これはすべての相にわたるサイトメーターの総限度値です。(注記: 負荷メーターが使用される場合、サイトメーターは負荷電力、太陽光発電力、また蓄電池電力を使用して計算されます。)","control_container_explanation_bullet_three_min_site_meter_power_kw":"これはすべての相にわたるサイトメーターの総限度値です。(注記: 負荷メーターが使用される場合、サイトメーターは負荷電力、太陽光発電力、また蓄電池電力を使用して計算されます。)","control_container_explanation_bullet_two_max_site_meter_power_kw":"有効にした場合、Sitemasterの制御により受電点からの買電電力の最大値をコントロールします。","control_container_explanation_bullet_two_min_site_meter_power_kw":"有効にした場合、Sitemasterの制御により受電点の逆潮電力の最大値をコントロールします。","control_container_explanation_export_restrictions_locked":"系統への逆潮をどのように行うかを決定します。設定後に変更を行う場合は、Teslaにお問い合わせいただく必要があります。","control_container_explanation_export_restrictions_unlocked":"逆潮電力の設定できるのは最初の試運転調整時のみとなっています。修正を希望される場合はTeslaにご連絡ください。","control_container_explanation_nominal_system":"この値は、正常な状態では、設計資料および検査報告書に従よるシステムサイズと一致します。","control_container_heat_for_energy":"ヒートモード:電力量確保","control_container_heat_mode":"ヒートモード","control_container_heco_committed_capacity":"確約容量","control_container_heco_committed_discharge_power_W_max_bound":"{mode}の最大値は100000 W(100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode}の最小値は100 W","control_container_loading":"読み込み中","control_container_max_site_meter_power_W_max_bound":"{mode} の上限値は50000W(50kW)","control_container_max_site_meter_power_W_min_bound":"{mode} の下限値は1000W(1kW)","control_container_max_site_meter_power_kW_positive":"{mode}は0以上である必要があります。","control_container_max_site_meter_power_kw":"受電点正潮流制限値","control_container_max_site_meter_power_w":"受電点正潮流制限値","control_container_menu":"メニュー","control_container_min_site_meter_power_kW_positive":"{mode}は0以上である必要があります。","control_container_min_site_meter_power_kw":"受電点逆潮流制限値","control_container_min_site_meter_power_w":"受電点逆潮流制限値","control_container_minimum_charge_power":"最小充電電力","control_container_minimum_discharge_power":"最小放電電力","control_container_misc":"MISC","control_container_net_meter_mode":"逆潮流の限度","control_container_never":"逆潮無し","control_container_nominal_system_energy_kW_positive":"{mode}は0以上である必要があります。","control_container_nominal_system_energy_kWh_positive":"{mode}は0以上である必要があります。","control_container_nominal_system_energy_kwh":"公称システム電力量","control_container_nominal_system_energy_max_error":"公称システム電力量が最大エネルギー限度を超えています。","control_container_nominal_system_power_kw":"公称システム電力","control_container_nominal_system_power_max_error":"公称システム電力が最大電力を超えています。","control_container_number_error_message":"{mode}は数値入力である必要があります。","control_container_power":"電力","control_container_pv_only":"太陽光メーターの計測値まで逆潮可能","control_container_reactive_mode":"無効電力モード","control_container_real_mode":"有効電力モード","control_container_reset":"リセット","control_container_site_control":"サイト コントロール","control_container_site_limits":"受電点の制限値","control_container_site_max_power":"サイト最大電力","control_container_site_min_power":"サイト最小電力","control_container_submit":"送信","control_container_submitting_control":"コントロール信号送信","control_start":"スタート","control_stop":"停止","current_password_placeholder_text":"現在のパスワードを入力してください","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"アンペア{id}","current_transformer_item_view_battery_ct":"蓄電池","current_transformer_item_view_calculated_reading":"計算値:","current_transformer_item_view_conductor_ct":"幹線","current_transformer_item_view_ct_voltage_pairing_1":"L1相","current_transformer_item_view_ct_voltage_pairing_2":"L2相","current_transformer_item_view_ct_voltage_pairing_3":"L3相","current_transformer_item_view_ct_voltage_pairing_default":"デフォルト位相","current_transformer_item_view_doubled_solar_ct":"太陽光(1CT x2)","current_transformer_item_view_flip":"逆向き","current_transformer_item_view_generator_ct":"発電機","current_transformer_item_view_load_ct":"負荷","current_transformer_item_view_measure_pw_plus_input":"Powerwall+インバーターを測定","current_transformer_item_view_measured_reading":"CT当たり:","current_transformer_item_view_missing_ct":"喪失","current_transformer_item_view_no_reading":"読み取り値なし","current_transformer_item_view_none_ct":"なし","current_transformer_item_view_phase_sequence_dropdown_title":"相","current_transformer_item_view_site_ct":"サイト","current_transformer_item_view_smart_ct":"スマート","current_transformer_item_view_solar_ct":"太陽光","current_transformer_item_view_solar_rgm_ct":"太陽光収入のみ","current_transformers_container_800a_ct_ensure":"このページのCTの選択が設置済み機種と一致することを確認してください。","current_transformers_container_800a_ct_larger":"800 A CTは200/264のA CTより物理的に大きくなります。","current_transformers_container_800a_ct_use_case":"大型コンダクタあるいはパネル(400A/800Aのような)を測定する場合、800A CTを使用して設定を行ってください。","current_transformers_container_amps_explanation":"CTを通って流れる電流","current_transformers_container_check_phase_doubled_solar_ct_bullet":"正確な位相 ({sequence})でCTが設置されていることを確認してください。","current_transformers_container_configure_subtitle":"CTのメーターを設定してください。","current_transformers_container_ct_flipping_ensure_direction":"最初に、CTラベルがソーラーのインバーターに面している(ソーラーCTの場合)、または系統側に面している(サイトCTの場合)ことを確認してください。次に、各相の配線位置をチェックして、電流、力および力率読み取り値を確認してください。","current_transformers_container_ct_flipping_modal_title":"ソフトウェアによるのCTフリッピング","current_transformers_container_ct_flipping_software_incorrect_metering":"間違った位相で設置されたCTをソフトウエアにより反転させた場合、正しく測定できなくなります。","current_transformers_container_ct_flipping_wrong_phase":"マイナス電力値は、CTが逆あるいは間違った位相で設置されていることを示す場合があります。","current_transformers_container_double_check_recommendation":"続行する前に、配線、電圧、タップ、CTおよびメーター構成を再度確認してください。","current_transformers_container_doubled_solar_ct_explanation":"バランスPVインバーターの測定に単一のCTを使用することができます。","current_transformers_container_doubled_solar_ct_modal_title":"1つのCTでの単相3線のソーラーインバーターの測定","current_transformers_container_grid_code_phase_modal_title":"警告: CT数が推奨グリッド コード位相と一致しません。","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"警告: CTの数が、複数のメーターの推奨グリッドコード位相と一致しません。","current_transformers_container_grid_code_phase_multiple_warnings_message":"下記の{numMeters} のメーターで予期しない数のCTが含まれています:","current_transformers_container_grid_code_phase_warning_message":"下記のメーターで予期しない数のCTが含まれています:","current_transformers_container_grid_code_single_phase_warning":"適用されるグリッドコードは単相です。単相システムは典型的には、1相あるいは3相サービスのどちらかです。{lb} 奇数個のCT(1または3)が推奨されます。","current_transformers_container_grid_code_split_phase_warning":"適用されるグリッドコードは単相3線です。典型的には単相3線は各相に一つずつCTを取り付けます。 {lb} 太陽光CTを一つにするオプションを除いて、CTの数は偶数(2か4)をお勧めします。","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"計量法に基づいた計量(RGM)を有効にするためには、Powerwall+ソーラーインバーターを測定するNeurioメーターが必要です。","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Powerwall+ソーラーインバーターを測定していれば「はい」を選択します。Powerwall+アセンブリの一部でないソーラーインバーターを測定していれば「いいえ」を選択します。","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"Powerwall+インバーターを測定していますか?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"CTラベルがソーラーインバーターに面していることを確認してください。","current_transformers_container_label_modal_title":"ラベルの説明","current_transformers_container_load_ct_ensure":"負荷CTを構成する場合、サイト上の負荷がすべて測定され、バックアップのある負荷、およびバックアップのない負荷が別個に測定されていることを確認してください。","current_transformers_container_load_ct_modal_title":"CTのロード","current_transformers_container_load_ct_recommended":"サイトCTが使用できない場合のみ、負荷用CTを使用可能となります。","current_transformers_container_meter_id":"メーター{id}","current_transformers_container_no_load_and_site_ct":"負荷とサイトの両方のCTがあるとは限らない場合があります。","current_transformers_container_no_loads_doubled_solar_ct_bullet":"CTの裏には負荷を設置できません。","current_transformers_container_no_site_or_load_warning":"サイトまたは負荷電流の変圧器が設定されていません","current_transformers_container_no_solar_ct_warning":"ソーラーCTは設定されていません","current_transformers_container_no_solar_inverter_warning":"ソーラーインバーターは設定されていません","current_transformers_container_phase_usages_modal_title":"警告: CT設定が相構成と一致しません。","current_transformers_container_phase_usages_warning":"構成された位相の数が、構成されたCTの数と一致しません。{lb} {num} 個のCT設定が推奨されます。","current_transformers_container_phase_usages_warning_message":"下記のメーターで予期しない数のCTが含まれています:","current_transformers_container_power_amperage_configure_warning":"{type}CTでは、陽極電力とアンペア数の両方を正確に設定する必要があります。","current_transformers_container_power_factor_explanation":"力率(Power_Real/Power_Apparent)。高電源レベルでのみ表示されます。共通の抵抗型負荷については、力率は1の値の近くになります。低い力率は、CTの設置が不正確か、あるいは非常に大きい容量性/誘導負荷が存在する可能性があります。","current_transformers_container_power_factor_out_of_range_warning":"力率測定が規定範囲外です。{lb} 測定された力率: {powerFactor}PF{lb}メーターの設置が不正または位相が不正確か、あるいは、非常に大きな容量性/誘導負荷が存在する可能性があります。","current_transformers_container_system_test_configured_incorrect":"警告: CT{id}の設定が不正です。","current_transformers_container_title":"CT","current_transformers_container_voltage_out_of_range_warning":"電圧が規定範囲外です。{lb}測定電圧: {volts}V{lb}このCTの測定電圧は正常な動作範囲にありません。","current_transformers_container_volts_explanation":"ラインから電流変流器と関連する電圧タップ中の中立までの電圧","current_transformers_container_watts_explanation":"関連する電圧タップ中の電圧がかかったCTを流れる電力","customer_installation_view_email_label":"お客様のメールアドレス","customer_installation_view_email_placeholder":"Eメール","customer_registration_view_address_label":"建物名・号室","customer_registration_view_address_placeholder":"建物名・号室","customer_registration_view_city_label":"市区町村・番地","customer_registration_view_city_placeholder":"市区町村・番地","customer_registration_view_clear_form":"記入をクリア","customer_registration_view_country_label":"国","customer_registration_view_customer_information":"お客様情報","customer_registration_view_email_address_label":"メールアドレス","customer_registration_view_email_address_label_confirmation":"Eメールを再入力","customer_registration_view_email_placeholder":"Eメール","customer_registration_view_family_name_label":"苗字","customer_registration_view_family_name_warning":"苗字を入力してください","customer_registration_view_given_name_label":"名前","customer_registration_view_given_name_warning":"名前を入力してください","customer_registration_view_homeowner_family_name_placeholder":"苗字","customer_registration_view_homeowner_given_name_placeholder":"名前","customer_registration_view_installation_address":"設置先住所","customer_registration_view_phone_number_label":"電話番号","customer_registration_view_phone_placeholder":"電話","customer_registration_view_skip_explanation":"スキップした場合、所有者は、システムにアクセスする前にTeslaモバイルアプリから登録を実施することが必要になります。","customer_registration_view_state_placeholder":"都道府県","customer_registration_view_state_province_region_label":"都道府県","customer_registration_view_zip_label":"郵便番号","customer_registration_view_zip_placeholder":"郵便番号","diagnostic-alert-affected-children":"影響をうけるコンポーネント({count})","diagnostic-alerts-missing-alert-information":"アラート情報喪失","diagnostic-alerts-missing-data":"<フィールドに入力がありません>","diagnostic-alerts-toolbox-article":"ツールボックス記事","diagnostic-alerts-toolbox-article-external-link":"外部リンク","diagnostic_alert_alert_name":"アラート名","diagnostic_alert_alert_type":"アラートのタイプ","diagnostic_alert_audience":"対象","diagnostic_alert_clear_condition":"条件をクリア","diagnostic_alert_description":"説明","diagnostic_alert_display_name":"名前を表示","diagnostic_alert_id":"アラートID","diagnostic_alert_impact_category":"影響カテゴリー","diagnostic_alert_latching":"ラッチしている","diagnostic_alert_max":"最大","diagnostic_alert_min":"最小","diagnostic_alert_name":"名称","diagnostic_alert_node":"ノード","diagnostic_alert_offset":"オフセット","diagnostic_alert_payload_signals":"ペイロード信号","diagnostic_alert_potential_impact":"潜在的影響","diagnostic_alert_safety_reason":"安全上の理由","diagnostic_alert_scale":"スケール","diagnostic_alert_set_condition":"条件を設定","diagnostic_alert_signal_name":"信号名","diagnostic_alert_signoff":"サイン オフ","diagnostic_alert_sna_value":"SNA値","diagnostic_alert_supplier_dtc_name":"サプライヤーDTC名","diagnostic_alert_uiID":"UI ID","diagnostic_alert_units":"単位","diagnostic_alert_urgent":"緊急","diagnostic_category_item_view_alerts_description":"サイト、コンポーネントおよびサブコンポーネント アラート","diagnostic_category_item_view_download_results":"結果をダウンロード","diagnostic_category_item_view_internal_comms_description":"すべてのデバイス通信をチェックしてください","diagnostic_category_item_view_internal_comms_title":"デバイス通信","diagnostic_category_item_view_live_results":"最新の結果","diagnostic_category_item_view_metering_description":"メーターの接続を確認してください","diagnostic_category_item_view_metering_title":"測定","diagnostic_category_item_view_networking_description":"ネットワークの接続を確認してください","diagnostic_category_item_view_networking_title":"ネットワーキング","diagnostic_category_item_view_no_selected_tests":"選択されたテストはありません","diagnostic_category_item_view_rerun_selected":"選択された{num}テストを再実行","diagnostic_category_item_view_rerun_selected_test":"選択されたテストを再実行","diagnostic_category_item_view_run_selected":"選択された{num}テストを実行","diagnostic_category_item_view_run_selected_test":"選択されたテストを実行","diagnostic_category_item_view_select_all_tests":"全てを選択","diagnostic_category_item_view_self_tests_description":"システムの充電放電テストを開始します","diagnostic_category_item_view_self_tests_title":"自己診断テスト","diagnostic_category_item_view_toggle_all_tests":"すべて変更","diagnostic_input_view_blocks_label":"ブロック","diagnostic_input_view_individual_test_name_label":"個別テスト名","diagnostic_input_view_max_allowed_charge_power_label":"最大許容充電電力","diagnostic_input_view_max_allowed_discharge_power_label":"最大許容放電電力","diagnostic_test_enable_line":"ラインを有効化","diagnostic_test_item_view_ac_self_test_description":"AC電力自己診断テスト","diagnostic_test_item_view_ac_self_test_description_2":"一連のパワースロッシュテストをAC系統に実行します。Powerpackシステムは「MAX_ALLOWED_POWER」設定を使用します。これらをMegapackおよびスーパーチャージャーシステムに対して0に設定します。","diagnostic_test_item_view_dc_self_test_description":"DC電力自己診断テスト","diagnostic_test_item_view_dc_self_test_description_2":"DC系統に対して温度チェックを含む一連のテストを実行します。","diagnostic_test_item_view_enable_line_description":"PowerwallのスイッチがONの位置の確認テスト","diagnostic_test_item_view_enable_line_resolution":"スイッチをONにし、再度お試しください。","diagnostic_test_item_view_individual_self_test_description":"構成済みバスコントローラーで使用可能なセルフテストのリストを選択します。","diagnostic_test_item_view_meter_comms_description":"メーター通信の確認","diagnostic_test_item_view_network_connection_description":"インターネットとTeslaサーバーへの接続テスト","diagnostic_test_item_view_network_connection_resolution":"ネットワーキングを再設定","diagnostic_test_item_view_resolution_generic_text":"{name}を再設定し、再度お試しください。","diagnostic_test_item_view_step_canceled":"テストはユーザー操作により取り消されました。","diagnostic_test_item_view_step_config_update_status":"Tesla Configurationサーバーステータスのチェック","diagnostic_test_item_view_step_google_http":"Ping Google HTTP","diagnostic_test_item_view_step_google_https":"Ping Google HTTPS","diagnostic_test_item_view_step_hermes_status":"Tesla Loggingサーバーステータスのチェック","diagnostic_test_item_view_step_results_ip_address":"IP アドレス","diagnostic_test_item_view_step_results_subnet_mask":"サブネット:","diagnostic_test_item_view_table_header_key":"識別子","diagnostic_test_item_view_table_header_name":"ステップ ","diagnostic_test_item_view_table_header_value":"値","diagnostic_test_meter_comms":"メーター通信","diagnostic_test_network_connection":"ネットワーク接続","diagnostics_composite_view_no_tests_found":"利用可能なテストはありませんでした","diagnostics_composite_view_run_all_selected_tests":"選択されたテストをすべて実行","diagnostics_container_industrial_disruptive_tests_description":"次のテストで、ファンおよびサーマルシステムが作動し、ノイズを生成します。インバーター当たりおよそ30kWの消費が予期されます。さらに、次のテストで、システムの通常動作が中断されることがあります:","diagnostics_container_required_inputs_description":"次のテストには追加の入力が必要です。","diagnostics_container_residential_disruptive_tests_description":"次のテストを行った場合、ゲートウェイとPowerwallの両方の通常動作が中断されることがあります:","diagnostics_container_stop_test_title":"{name}テストを停止しますか?","diagnostics_container_subtitle":"システム設置に関する問題を分析するためのツール。","diagnostics_container_tests_running":"自己診断テスト中","diagnostics_container_title":"診断","disabled_reason_battery_breaker_open":"バッテリー ブレーカーが開いています","disabled_reason_checking_firmware_update":"ファームウェア アップデートの確認中","disabled_reason_config":"構成ファイルによって無効化","disabled_reason_excessive_voltage_drop":"過剰な電圧低下","disabled_reason_firmware_update_failed":"ファームウェアアップデートに失敗","disabled_reason_gridcode_write_failed":"グリッドコード設定に失敗","disabled_reason_user_requested":"ユーザー リクエストで無効化","dropdown_default_placeholder":"入力...","dropdown_list_view_not_listed_label":"記載なし: \\"{searchText}\\"","dropdown_list_view_select_all":"全てを選択","dropdown_list_view_select_field":"欄を選択してください。","dropdown_list_view_show_complete":"完全リストに切替","dropdown_list_view_show_searchable":"検索リストに切替","enumeration_warning_details_miswired_12v":"2つのPowerwall+を接続する場合、Gateway/バックアップ スイッチに接続されているユニットだけに12 Vを印加してください。チェーン内で後続するすべてのPowerwall+から12 Vを切り離し、(このページの末尾にある)デバイスを再スキャンして、この警告をクリアします。","enumeration_warning_details_multiple_controllers_gateway":"ソーラー アセンブリの右上にあるすべてのPowerwall+サイト コントローラの電源ハーネスのプラグを外します。","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"ソーラー アセンブリの右上にある、拡張Powerwall+サイト コントローラ(バックアップ スイッチに接続していない)の電源ハーネスのプラグを外します。","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"ソーラー アセンブリの右上にあるすべてのPowerwall+サイト コントローラの電源ハーネスのプラグを外します。Backup Gatewayを接続することで、システムの試運転を実施します。","enumeration_warning_details_multiple_controllers_unknown":"CANで配線された複数のPowerwall+をセットアップする場合は、サイト コントローラ1つだけしか電源が入っていないようにする必要があります。","enumeration_warning_details_multiple_controllers_unknown_with_details":"1つのサイトコントローラーだけが有効である必要があります。Backup Gatewayを使用する場合、すべてのPowerwall+コントローラーのプラグを抜きます。自立運転スイッチを使用する場合、1台を除きすべてのPowerwall+コントローラーのプラグを抜きます。1つのサイトコントローラーだけが有効になるまで「ウィザードを実行」は無効になります。","enumeration_warning_title_miswired_12v":"12 V配線エラー","enumeration_warning_title_multiple_controllers":"複数のサイト コントローラが通電中","error_details":"エラー詳細","error_item_view_check_network":"ネットワーク接続を確認してください。","error_item_view_disconnected":"ゲートウェイから切断されました。ネットワーク接続をチェックし{refresh}します。","error_item_view_forgot_password":"パスワードをリセットするには、クリックしてください。","error_item_view_refresh_browser":"ブラウザを更新。","error_item_view_try_logging_in_again":"もう一度ログインをお試しください。","ethernet_view_backup_dns_label":"バックアップDNSサーバー","ethernet_view_backup_dns_warning":"有効なバックアップDNSサーバー","ethernet_view_configuration_label":"設定","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"ゲートウェイ","ethernet_view_gateway_warning":"有効なゲートウェイ(ルーター)のIP","ethernet_view_ip_address_label":"IP アドレス","ethernet_view_ip_address_warning":"有効なIPアドレス","ethernet_view_not_available":"利用できません","ethernet_view_primary_dns_label":"プライマリDNSサーバー","ethernet_view_primary_dns_warning":"有効なプライマリDNSサーバー","ethernet_view_static_label":"固定","ethernet_view_subnet_mask_label":"サブネット マスク","ethernet_view_subnet_mask_warning":"有効なサブネット マスク","factory_reset_message":"これによりユニットはTesla指定のデフォルト状態にリセットされます。この操作は元に戻すことができません。使用可能にするには、このユニットを専門設置技術者によって再度試運転する必要があります。ユニットのWiFiネットワークを再接続する必要がある場合があります。","field_false":"誤り","field_true":"正しい","follower_powerwall_message":"このPowerwallは{leader}によって制御されています","follower_powerwall_title":"フォロワーPowerwall","form_legend_text":"必要なフィールドを表示","generation_container_connecting_status":"接続しています","generation_container_connection":"インバーター{id}接続","generation_container_connection_summary":"この接続プロセス中に、一時的にネットワークが切断されることがあります。{lb}正確なネットワークに再度接続したことを確認します。これには最長で 3 分ほどかかることがあります。","generation_container_subtitle":"ソーラーインバーターおよび発電機情報の両方を以下に追加してください。","generation_container_title":"発電","generator_item_view_disconnect_type_label":"解列手法","generator_item_view_generator":"発電機{id}","generator_item_view_manufacturer_label":"メーカー(OPT)","generator_item_view_model_label":"モデル","generator_item_view_serial_label":"シリアル","generator_item_view_sustained_power_label":"保持される電力","generator_view_add_generator":"発電機を追加","grid_code_container_off_grid_confirmation":"システムはオフグリッドですか?","grid_code_container_off_grid_detected":"オフグリッドシステムを検知しました。これが正確な設定であることを確かめてください。","grid_code_container_off_grid_warning":"{warning}: システムのオフグリッドステータスを検知することができませんでした。オフグリッドステータス設定不良はシステム障害に帰着するおそれがあります。","grid_code_container_results":"電力系統運用検出結果","grid_code_container_retrieving":"グリッドコードの検索","grid_code_container_saving":"電力系統コードの保存中","grid_code_container_subtitle":"場所とメーターの読み取り値に基づいて、設置に最良の設定を見つけてください。","grid_services_view_grid_services":"グリッド サービス","heading_change_password":"パスワードを変更する","help_view_how_password":"ゲートウェイ上でパスワードを見つける","help_view_how_password_description":"ゲートウェイのドアを開けてください。パスワードはラベルにあります。\\"Password:\\"","help_view_how_serial_number":"非バックアップゲートウェイ上でシリアル番号を見つける","help_view_how_serial_number_backup":"バックアップゲートウェイ上でシリアル番号を見つける","help_view_how_serial_number_backup_description":"バックアップゲートウェイのドアを開けてください。シリアル番号は/から始まります。\\"(S):\\"","help_view_how_serial_number_description":"ゲートウェイのドアを開けてください。シリアル番号は/から始まります。\\"(S):\\"","help_view_how_to_enable_line":"Powerwallの操作","help_view_how_to_enable_line_description":"Powerwallスイッチのオンとオフを切替えます複数台Powerwallシステムでは変更が必要なスイッチは一つだけです。","hierarchy_charger":"充電器ブロック{name}","hierarchy_chinv":"コンプレッサーとヒーターのVFD(CHINV)","hierarchy_converter":"DC-DCコンバーター(STARC)","hierarchy_inverter":"バッテリーブロック{name}","hierarchy_mega_thermal_controller":"サーマル コントローラー(MPTHC)","hierarchy_missing_post":"欠落ポスト","hierarchy_mpbc":"バッテリー ブロック{name}","hierarchy_part_number":"部品番号","hierarchy_pod":"ポッド","hierarchy_pods_reporting":"ポッド報告","hierarchy_post":"ポスト(LCC)","hierarchy_posts":"ポスト","hierarchy_power_stage":"パワーステージ電力ステージ","hierarchy_power_stages":"パワーステージ電力ステージ","hierarchy_powerpack":"パワーパック{name}","hierarchy_qbms":"バッテリー管理ボード(QBMS)","hierarchy_qhvp":"高電圧プロセッサー(QHVP)","hierarchy_scthcs":"サーマル コントローラー","hierarchy_serial_number":"シリアル番号","hierarchy_sitemaster":"サイトマスター{name}","hierarchy_starcs":"DC-DCコンバーター","hierarchy_stitch":"コントロール パワーDC-DC(STITCH)","hierarchy_thermal_controller":"サーマル コントローラー(SCTHC)","higher_order_login_login_required":"ログインが必要です","higher_order_login_title":"それでは、始めましょう。","home_container_caution":"⚠️ 注意","home_container_caution_deenergize":"システムを安全に非通電状態にするには、すべてのPowerwallのスイッチをオフにします。","home_container_caution_energized":"ソーラー ストリングが接続されていると、システムが通電状態のままになる可能性があります。","home_container_inactive_meter":"古くなったメータデータ","home_container_inactive_meter_description":"{type}メーター接続をチェックしてください。","home_container_inactive_meter_timestamp":"最後のメーター読み取りは{timestamp}です。","home_container_login_required":"ログインが必要です","home_container_missing_meter":"メーターがありません。","home_container_positive_meter":"警告: {type}メーター構成が不正確である可能性があります。","home_container_positive_meter_description":"{type}メーターでは、陽極電力とアンペア数の両方を正確に設定する必要があります。","home_container_powerwall_error":"パワーウォールシステムエラー","home_container_powerwall_start_error":"システム始動不能: {reason}","home_container_site_controller_error":"サイト コントローラー システム エラー","home_container_sitemaster_alternative":"注記: 通常システムは、すべてのPowerwallsの有効化スイッチを切り、ブレーカーを開くことにより無効化が行われます。","home_container_sitemaster_confirm":"システムを確実に停止する場合のみ、下で「はい」をクリックしてください。","home_container_sitemaster_confirm_industrial":"システムを停止してもよろしいですか?","home_container_sitemaster_confirm_wizard":"ウィザードを実行するにはシステムを停止させる必要があります。操作を継続してシステムを停止させますか?","home_container_sitemaster_header_warning":"{warning}これによりPowerwallとシステム運用が停止されます。","home_container_sitemaster_header_warning_industrial":"{warning}このシステムはテスラが停止を推奨している状態ではありません。理由: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning}このシステムはテスラが停止を推奨している状態ではありません。理由: \\"{reason}\\"","home_container_sitemaster_logging":"システムがオフになっている間は追跡記録は停止されます。","home_container_sitemaster_reset":"システムを停止してから、システムを再開するには、ウェルカムページのスタートボタンをクリックしてください。","home_container_sitemaster_update":"進行中の更新がある場合は終了されます。","home_container_start_powerwall":"システム始動","home_container_start_system_button":"システム始動","home_container_stop_powerwall":"システム停止","home_container_stop_system_button":"システム停止","home_view_compliance":"コンプライアンス","home_view_download_all_logs":"ログをすべてダウンロード","home_view_download_logs":"ログをダウンロード","home_view_download_logs_description_one":"これにより、オペレーティングシステム、ソフトウェアとネットワークの問題を分析するための圧縮システムログセットをダウンロードします。","home_view_download_logs_description_three":"ログは署名の上暗号化され、調査のためのテスラ・エネルギー・サービスに送信されます。","home_view_download_logs_description_two":"ゲートウェイをネットワークに接続できず高度なトラブルシュートが必要な場合、これは特に有用です。","home_view_login":"ログイン","home_view_logout":"ログアウト","home_view_run_wizard":"ウィザードを実行","input_accept":"同意します","input_confirm":"すべてのシステム警告を承認します。","input_consent":"同意します","input_decline":"同意しません","input_no_consent":"同意しません","input_title_email":"有効なEメールアドレスを入力してください:name@name.domain","installation_container_relay_section_modal_title":"Gateway 低電圧リレー","installation_container_residual_current_device_modal_title":"サイトRCDの設置要件","installation_container_subtitle":"インストーラーおよびサイト情報","installation_container_sync_relay_usage_open_off_grid":"自立運転中はリレーは「開」","installation_container_title":"設置に関する情報","installation_problem_detail_site_shutdown_0":"システムを再度有効にするには:","installation_problem_detail_site_shutdown_1":"すべてのPowerwallのON/OFFスイッチをオンにします","installation_problem_detail_site_shutdown_2":"非常停止回路を閉じます","installation_problem_detail_site_shutdown_3":"急速シャットダウンジャンパーが正しく取り付けられていることを確認します","installation_problem_detail_site_shutdown_4":"シャットダウン回路配線を確認します。","installation_problem_detail_title_site_shutdown":"サイトのシャットダウン回路がトリガーしました","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Powerwall+の急速シャットダウンによって、サイトのシャットダウン回路がトリガーしました","installation_problem_details_pvacs_with_no_solar_rgm":"Powerwall+アセンブリの一部ではないソーラーインバーターを測定している場合に限ってソーラーメーターが必要です。Powerwall+インバーターを測定するメーターは「変流器」ページと同様にマーキングされるべきです。","installation_problem_details_too_few_solar_rgm":"Powerwall+ソーラーインバーターを測定するCTの数はPowerwall+ソーラーインバーターの数と一致している必要があります。ウィザードを実行し、必要に応じてNeurioメーターをペアリングし、「変流器」ページでCT構成を調整します。","installation_problem_details_too_many_solar_rgm":"Powerwall+ソーラーインバーターを測定するCTの数はPowerwall+ソーラーインバーターの数と一致している必要があります。ウィザードを実行し、「変流器」ページでCT構成を調整します。","installation_problem_title_pvacs_with_no_solar_rgm":"Powerwall+インバーターを測定していないソーラーメーターこれは正しいですか?","installation_problem_title_site_shutdown":"サイトのシャットダウン回路がトリガーしました。すべてのPowerwallおよびPowerwall+ソーラーインバーターが無効になっています。","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Powerwall+の急速シャットダウンによって、サイトのシャットダウン回路がトリガーしましたすべてのPowerwallおよびPowerwall+ソーラーインバーターが無効になっています。","installation_problem_title_too_few_solar_rgm":"Powerwall+インバーターを測定するソーラーメーターが少なすぎます","installation_problem_title_too_many_solar_rgm":"Powerwall+インバーターを測定するソーラーメーターが多すぎます","installation_view_add_on_solar":"追加","installation_view_additional_connections_label":"追加コネクション","installation_view_back_wiring":"後面","installation_view_backup_configuration_label":"バックアップ設定","installation_view_basement_location":"地下室","installation_view_company_label":"会社名","installation_view_company_placeholder":"認定工事会社名","installation_view_conditioned_space_location":"管理されたスペース","installation_view_existing_solar":"既存","installation_view_floor_mounting":"床置き","installation_view_garage_location":"ガレージ","installation_view_home_label":"家の配線","installation_view_location_label":"POWERWALL設置場所","installation_view_modem_ethernet":"モバイルモデムに有線で接続していますか?","installation_view_modem_wifi":"モバイルモデムに無線で接続していますか?","installation_view_mounting_label":"Powerwallの取り付け","installation_view_na_backup_configuration":"N/A","installation_view_new_solar":"新設","installation_view_none_solar":"なし","installation_view_outdoor_location":"屋外","installation_view_pad_mounting":"架台設置","installation_view_partial_home_backup_configuration":"特定負荷バックアップ","installation_view_phone_label":"電話番号","installation_view_phone_placeholder":"施工者の電話番号","installation_view_powerline_ethernet":"電力線搬送通信はありますか?","installation_view_pv_panel":"太陽光パネル","installation_view_relay_enabled":"自立運転中はリレーは「開」","installation_view_relay_label":"Gateway 低電圧リレー","installation_view_relay_options_modal_content":"連系運転中または、他のAC電源接続時はリレーは「閉」 {lb1} 自立運転中は、リレーは「開」となります。 {lb1} 一例として、連系運転中は、エアコンの使用が可能にし、自立運転中は、Powerwallからの過電流を防ぐため、エアコンの使用を停止させる事ができます。","installation_view_relay_section_modal_content":"Gateway内蔵の解列リレーにより、運転状態からリレーの開閉を行います。 {lb1} 負荷や発電機などを制御する為に使用されます。 {lb1} Backup Gateway 1 では、AUX端子の5極(緑色 Phonex connector)の1,2 を使用します。 {lb1} Backup Gateway 2 では、AUX端子の5極(緑色 Phonex connector)の3,4 を使用します。 {lb1} リレーは、定格60V/2Aで、通常12V または24V用として使用されます。 {lb1} 詳細は、 load shedding and related application notes を参照ください。","installation_view_residual_current_device":"ゲートウェイの上流にRCDはインストールされていますか?","installation_view_residual_current_device_modal_content":"状況により、漏電遮断器の取り付け時には、TT系統接地が必要な場合があります。 {lb1}{lb2} オフグリット運転中の不要なブレーカートリップを無くすためには、Gatewayの上位にある漏電遮断器を時延形にするか、漏電遮断器をGatewayの下流に設置することをお勧めします。 {lb1}{lb2} 詳細は、RCD and Fault Protection Application Noteを参照ください。","installation_view_satellite_ethernet":"衛星通信モデムに有線で接続していますか?","installation_view_satellite_wifi":"衛星通信モデムに無線で接続していますか?","installation_view_side_wiring":"側面","installation_view_solar_label":"ソーラーの設置","installation_view_solar_panels":"Solar Panel","installation_view_solar_roof":"ソーラールーフ","installation_view_solar_type_label":"太陽光の種類","installation_view_solarglass":"Solarglass(現時点ではサポートされていません)","installation_view_stack_kit":"連結キットはありますか?","installation_view_type_commercial":"商用","installation_view_type_label":"工事担当者情報","installation_view_type_perm_off_grid":"常時オフグリッド","installation_view_type_residential":"住居","installation_view_wall_mounting":"壁","installation_view_whole_home_backup_configuration":"まるごとバックアップ","installation_view_wifi_extender":"Wi-Fi中継器はありますか?","installation_view_wiring_label":"Powerwallの配線","inverter_test_view_accuracy_magnitude":"精度マグニチュード","inverter_test_view_accuracy_time":"精度時間","inverter_test_view_complete":"完了","inverter_test_view_current_magnitude":"現在のマグニチュード","inverter_test_view_fail":"不合格","inverter_test_view_na":"N/A","inverter_test_view_not_run":"実行されていません","inverter_test_view_pass":"合格","inverter_test_view_running":"実行中","inverter_test_view_set_magnitude":"しきい値を設定","inverter_test_view_set_time":"時間を設定","inverter_test_view_test_description":"インバーター自己診断テストを実行","inverter_test_view_test_name_all":"すべてのテスト","inverter_test_view_test_name_over_freq_stage_one":"周波数上昇ステージ 1","inverter_test_view_test_name_over_freq_stage_two":"周波数上昇ステージ 2","inverter_test_view_test_name_over_volt_one":"過電圧ステージ 1","inverter_test_view_test_name_over_volt_two":"過電圧ステージ 2","inverter_test_view_test_name_under_freq_stage_one":"周波数減少ステージ 1","inverter_test_view_test_name_under_freq_stage_two":"周波数減少ステージ 2","inverter_test_view_test_name_under_volt_one":"不足電圧ステージ 1","inverter_test_view_test_name_under_volt_two":"不足電圧ステージ 2","inverter_test_view_timestamp":"タイムスタンプ","inverter_test_view_trip_magnitude":"トリップしきい値","inverter_test_view_trip_time":"トリップ時間","inverter_test_view_warning":"注記: インバーター テストは、1つのインバーター当たり最大で20~30分かかることがあります。","label_fail":"不合格","label_inconclusive":"未決定","label_pass":"合格","legal_container_customer_policy_subtitle":"必ず住宅所有者の方がご確認ください。","legal_container_customer_policy_title":"Tesla顧客個人情報保護方針と限定保証","legal_container_no_meters_warning":"メーターが構成されていません","legal_container_no_powerwalls_warning":"POWERWALLSが検出されませんでした","login_type_customer":"お客様","login_type_engineer":"技術者","login_type_installer":"設置工事者","login_view_cancel_login_auth":"キャンセル","login_view_change_forgot_password":"パスワード変更またはパスワードを忘れた場合","login_view_compliance":"コンプライアンス","login_view_customer_email_placeholder":"お客様メール","login_view_email":"Eメール","login_view_email_placeholder":"リードインストーラー電子メール","login_view_forgot_password":"パスワードをお忘れですか","login_view_forgot_password_login_type":"ログインの種類を選択してください","login_view_language_label":"言語","login_view_login_type_label":"ログインの種類","login_view_password_placeholder":"お客様のパスワードを入力してください","login_view_start_login_auth":"ログイン開始","login_view_start_login_auth_how_to_enable_line_description":"ログインするには、Powerwallの電源をOFF/ONする必要があります。Powerwallが複数台ある場合は、1台のPowerwallのスイッチをOFF/ONしてください。","login_view_username":"ユーザー名","login_view_username_placeholder":"ユーザー名","login_warning_view_expand":"ウィザードが開始しない場合、{click}をクリックします。","login_warning_view_firmware_update":"ファームアップが進行中の場合","login_warning_view_heading":"{warning} ウィザードを開始した場合バッテリー動作が停止されます。","login_warning_view_protect_system":"システムを保護するため、次の場合は、ウィザードは開始されません:","login_warning_view_stop_operation":"ウィザード強制開始","login_warning_view_supported_browsers":"{warning} 現在ウェブブラウザはChromeおよびSafariのみサポートされています。","login_warning_view_system_force_launch":"蓄電池システムを停止してウィザードを開始する場合は、ウィザード強制開始を選択してください。","login_warning_view_system_off_grid":"蓄電池システムがオフグリッドの場合","login_warning_view_warning_click":"詳細はクリックしてください","mater_item_view_bad_barcode":"無効なバーコードをスキャンしました","mater_item_view_barcode_scan_failed":"バーコードのスキャンに失敗","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"バッテリー","meter_aggregate_type_load":"負荷","meter_aggregate_type_site":"サイト","meter_aggregate_type_solar":"ソーラー","meter_container_add_meter_error":"メーターの確認中","meter_container_add_meter_status":"メーターの追加中","meter_container_authorizing_status":"認証中","meter_container_decode":"イメージからシリアルを読み取ることができませんでした。","meter_container_detecting_status":"有線メーターの検出","meter_container_failed_status":"メーターを追加できませんでした","meter_container_reconnecting_status":"再接続中","meter_container_skip_title":"メーターの試運転が行われてません。続行しますか?","meter_container_starting_status":"充電開始中","meter_container_subtitle":"接続するエネルギーメーターの短いIDおよびシリアル番号を入力してください。試運転後、各メーターをテストしてください。","meter_container_subtitle_industrial":"接続するエネルギーメーターのIPアドレスおよび場所を入力してください。試運転後、各メーターをテストしてください。","meter_container_success_status":"メーターが追加されました","meter_container_title":"メーター","meter_container_unknown_status":"不明","meter_container_updating_status":"メーターの更新中","meter_container_verification":"メーター{id}検証","meter_container_verification_gw1":"このWiFiペアリングプロセス中に、ゲートウェイWiFiネットワークから一時的に切断されることがあります。{lb}正確なネットワークに再度接続したことを確認します。これには最大で 3 分ほどかかることがあります。","meter_container_verification_gw2":"WiFiペアリングプロセスは、最長で 3 分ほどかかることがあります。","meter_container_verify_meter_error":"メーターの確認中","meter_container_verifying_status":"メーターの確認中","meter_item_view_add_failed":"メーターを追加できませんでした","meter_item_view_add_failed_help":"ショートIDおよびシリアルナンバーを確認してください。メーターのチャイムが鳴ったら、サイクルメーターの電源を入れ、接続します。問題が解決しない場合、メーターを削除しもう一度実行してください。","meter_item_view_advanced_settings":"詳細設定(オプション)","meter_item_view_battery_ct":"蓄電池","meter_item_view_battery_location":"蓄電池","meter_item_view_check_meter":"メーター{id}接続チェック","meter_item_view_conductor_location":"導線","meter_item_view_cts":"{count} CTが検出されました","meter_item_view_doubled_solar_location":"2倍ソーラー","meter_item_view_generator_location":"発電機","meter_item_view_ip_address":"IP アドレス","meter_item_view_load_location":"負荷","meter_item_view_mac_address":"MACアドレス","meter_item_view_meter_location":"メーター位置","meter_item_view_none_location":"なし","meter_item_view_remote_ip_address_placeholder":"例、123.123.123.123","meter_item_view_remote_mac_address_placeholder":"例、12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"例、OBB1231231234、VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"例、01.234","meter_item_view_serial":"シリアル","meter_item_view_short_id":"短いID","meter_item_view_site_ct":"サイト","meter_item_view_site_location":"サイト","meter_item_view_solar_ct":"太陽光","meter_item_view_solar_location":"太陽光","meter_item_view_solar_rgm_location":"太陽光収入のみ","meter_item_view_success":"接続に成功しました","meter_item_view_unable":"メーターを読み取れません","meter_item_view_upgrading":"メーターはアップグレード中です","meter_list_view_add":"Wi-Fiメーターを追加(現時点ではサポートされていません)","meter_list_view_add_ip":"IPメーターを追加","meter_list_view_detect":"有線メーターを検知(現時点ではサポートされていません)","meter_list_view_enable_inverter_readings":"バッテリー インバーター指示値を有効にする","meter_list_view_inverter_meter":"インバーター メーター","meter_list_view_inverter_meter_desc":"これを有効にした場合にバッテリー メーターが設定されていないと、サイト コントローラーはバッテリー インバーターの指示値をバッテリー メーターとして使用します。","meter_msa_id":"自立運転スイッチ{id}","meter_sync_id":"同期メーター{id}","meter_sync_x_id":"内部主メーターX(Gateway){id}","meter_sync_y_id":"内部補助メーターY(Gateway){id}","meter_update_modal_fetch_status_error":"エラー: メーター更新ステータスを取得できません","meter_update_modal_footer":"これには最大で 2 分ほどかかることがあります","meter_update_modal_remaining_time":"残り時間: {seconds}秒","meter_update_modal_timeout_error":"エラー: メーターの更新中にタイムアウトが発生しました","meter_update_modal_title":"メーター更新を実行中","meter_validation_container_error":"サイトコントローラー作動中はメーター確認が使用できません。","meter_validation_container_error_placeholder":"メーター確認が使用できません:{error}。","meter_validation_container_power_command":"電力コマンド","meter_validation_container_power_start":"開始","meter_validation_container_power_stop":"停止","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"無効電力コマンド","meter_validation_container_real_power_command":"有効電力コマンド","meter_validation_container_show_per_phase":"各相の値を表示","meter_validation_container_title":"メーター確認","meter_validation_container_usage":"電力コマンドを送信し、メーター データを確認します。電力コマンドを継続するには、このページに留まる必要があります。マイナス値の場合、システムが充電を行います。プラス値の場合、システムが放電を行います。","meter_validation_control_subtitle":"コントロール","meter_validation_control_title":"コントロールタイトル","meter_validation_disable":"無効","meter_validation_loading":"読み込み中","meter_validation_menu":"メニュー","meter_validation_reset":"リセット","meter_validation_submit":"送信","meter_validation_submitting_control":"コントロールの提出","meter_validation_title":"メーター確認","meter_validation_view_apparent_power":"皮相電力(kVA)","meter_validation_view_battery_location":"蓄電池","meter_validation_view_conductor_location":"導線","meter_validation_view_current":"電流(A)","meter_validation_view_doubled_solar_location":"2倍ソーラー","meter_validation_view_generator_location":"発電機","meter_validation_view_inverters":"インバーター({length})","meter_validation_view_load_location":"負荷","meter_validation_view_meter":"メーター({length})","meter_validation_view_none_location":"なし","meter_validation_view_pf":"力率","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"平均値","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"合計","meter_validation_view_reactive_power":"無効電力(kVAr)","meter_validation_view_real_power":"有効電力(kW)","meter_validation_view_site_location":"サイト","meter_validation_view_solar_location":"太陽光","meter_validation_view_solar_rgm_location":"太陽光収入のみ","meter_validation_view_voltage":"電圧(V)","meter_w1_wifi_id":"メーター{id}","meter_w1_wired_id":"有線メーター{id}","meter_w2_wifi_id":"メーター{id}","meter_w2_wired_id":"有線メーター{id}","meter_wifi_id":"メーター{id}","meter_wired_id":"有線メーター{id}","metrics_aggregate":"蓄電システム","metrics_apparent_power":"皮相電力 ({unit})","metrics_battery":"バッテリー","metrics_current":"電流 ({unit})","metrics_meter":"メートル","metrics_no_metrics":"表示するメトリクスはありません。","metrics_power_factor":"力率","metrics_reactive_power":"無効電力 ({unit})","metrics_real_power":"有効電力 ({unit})","metrics_subtitle":"メトリクス","metrics_voltage_l_n":"電圧L-N ({unit})","modal_acknowledge":"同意して確認","modal_confirm":"確定","modal_exit":"閉じる","modal_no":"いいえ","modal_note":"注記","modal_ok":"OK","modal_reconfigure":"再設定","modal_yes":"はい","modbus_container_title":"Modbusインターフェース","modbus_table_register_address":"住所","modbus_table_register_name":"氏名","modbus_table_register_type":"タイプ","modbus_table_register_value":"値","modbus_table_register_value_decimal":"値(10進)","modbus_table_register_value_hex":"値(6進)","msa-off-grid":"オフ グリッド","msa-on-grid":"オン グリッド","navigation_email":"Eメール","network-switch-menu-item":"ネットワーク スイッチ","network_cellular_configured":"接続が確認できません。GWの設置位置が圏外でない事、アンテナが受信できる状態である事を確認してください。","network_connected":"接続されました","network_container_connect_ethernet":"イーサネットに接続中","network_container_connect_to_internet":"システムがインターネット接続を試行するまでお待ちください。","network_container_connect_wifi":"{ssid}に接続中","network_container_connect_wifi_description":"このプロセス中に、設置を継続するためにゲートウェイ ネットワークに再度接続する必要がある場合があります。","network_container_connman":"Network Connection Managerが、最適なネットワークにダイナミックに接続します。","network_container_connman_body":"接続を保証するために、利用可能なすべてのネットワーク設定を行ってください。:","network_container_delete_network":"設定済みネットワークを削除しますか?","network_container_ethernet_and_wifi_warning":"接続を保証するために、利用可能なイーサネットおよびWi-Fiネットワーク設定を行ってください。","network_container_ethernet_subtitle":"イーサネット","network_container_ethernet_warning":"接続を保証するために、利用可能なイーサネットWi-Fiネットワーク設定を行ってください。","network_container_network_description":"すべての利用可能なネットワーク・タイプでインターネットに接続してください。","network_container_network_subtitle":"ネットワーク","network_container_no_internet_bullet_four":"Powerwallによって技術サポートが問題を識別し、Teslaに運転データを送信することができます。","network_container_no_internet_bullet_four_industrial":"デバイスによって技術サポートが問題を識別し、Teslaに運転データを送信することができます。","network_container_no_internet_bullet_one":"Powerwallレジストレーション情報がTeslaに送信されることで、完全な10年保証が有効化されます。","network_container_no_internet_bullet_three":"テスラ・モバイルアプリを使用し、エネルギー使用をモニターし、またPowerwallをコントロールすることができます。","network_container_no_internet_bullet_two":"Powerwallでパフォーマンス向上および新しい機能が利用できるようになり、遠隔ファームアップを受信できます。","network_container_no_internet_bullet_two_industrial":"デバイスでパフォーマンス向上および新しい機能が利用できるようになり、遠隔ファームアップを受信できます。","network_container_no_internet_bullet_zero":"試運転調整前にファームウェアの更新が必要であるかを判断することができます。","network_container_no_internet_no_cell_title":"設置サイトで利用可能なインターネット接続がある場合は、このステップをスキップしないでください。イーサネット(推奨)あるいはWi-Fi経由でお客様の利用されているインタネットサービスに接続してください。","network_container_no_internet_title":"設置サイトで利用可能なインターネット接続がある場合は、このステップをスキップしないでください。イーサネット(推奨)あるいはWi-Fi経由でお客様の利用されているインタネットサービスに接続するか、あるいはモバイルネットワークリンクを確立してください。","network_container_no_internet_warning":"次の目的のため、安定したインターネットを確立することは重要です:","network_container_scan_networks":"Wi-Fiネットワークのスキャン","network_container_scan_wifi_disconnect_warning":"警告: 新しいネットワークをスキャンする場合、一時的に無線接続が切断されます。","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"接続を保証するために、利用可能なWi-Fiネットワーク設定を行ってください。","network_disabled":"無効になっています","network_disconnected":"未接続","network_ethernet_configured":"通信できていません。イーサネットケーブルが正しく挿しこまれているか確認してください。","network_switches_container_discover_failure":"最新の検出不具合: {error}","network_switches_container_discover_switches":"ネットワーク スイッチの検出","network_switches_container_discovered_label":"検出済みのネットワーク スイッチ","network_switches_container_discovering_stop_button":"検出を停止","network_switches_container_discovery_switches_running_label":"新しいネットワーク スイッチの検出を現在実行中です。以下のようにして検出を停止することができます。","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"ネットワーク スイッチは産業用システムだけでしかサポートしていませんでした。","network_switches_container_password_not_set":"パスワードが設定されていません","network_switches_container_password_set":"パスワードが設定されています","network_switches_container_passwords_error":"パスワード設定ステータス: {status}","network_switches_container_set_password_label":"工場デフォルト パスワードを依然として使用しているすべてのネットワーク スイッチにパスワードを設定します。\\n すべてのパスワードは同じ値に設定されます。","network_switches_container_set_passwords":"パスワードを設定","network_switches_container_set_passwords_button":"パスワードを設定","network_switches_container_setting_passwords_button":"パスワードの設定中...","network_switches_container_start_discovering_button":"検出を開始","network_switches_container_start_discovery_help":"ネットワーク スイッチの検出は自動的かつ定期的に実行されますが、「検出を開始」ボタンでトリガーすることができます。","network_switches_container_subtitle":"ネットワーク スイッチを表示する","network_switches_container_title":"ネットワーク スイッチ","network_view_check_connection":"インターネットの接続を確認してください","network_view_connection_failed":"接続されていません","network_view_connection_success":"接続に成功しました","network_view_continue_no_internet":"インターネット接続なしで続行","network_view_default_error":"接続エラー","network_view_local_network_connected":"ローカルネットワークが接続されました","network_view_local_network_disconnected":"ローカルネットワークエラー","network_view_tesla_internet_connected":"テスラ サービスおよびインターネットに接続","network_view_tesla_internet_disconnected":"Teslaサービスおよびインターネット接続エラー","network_warning":"警告","network_wifi_configured":"通信できていません。Wifiの設定を確認してください。","open_meter_validatiion_container_title":"メーター確認を開く","operation_mode_autonomous":"自動モード","operation_mode_backup":"バックアップ充電のみ","operation_mode_self_consumption":"自家消費モード","operation_mode_site_control":"サイト コントロール","overview_menu_control_title":"コントロール","overview_menu_diagnostics_title":"診断","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"接続されました","overview_menu_network_no_connection":"接続されていません","overview_menu_registration_complete":"完了","overview_menu_registration_incomplete":"未完了","overview_menu_registration_pending":"インターネット接続保留中","overview_menu_security_title":"パスワード変更あるいはリセット","overview_menu_settings_title":"設定","overview_menu_summary_title":"まとめ","overview_menu_system_title":"蓄電システム","overview_menu_update_title":"ソフトウェアアップデート","overview_menu_view_alerts_event":"事故","overview_menu_view_alerts_events":"イベント","overview_menu_view_inverter_title":"インバーターテスト","overview_menu_view_network_title":"ネットワーク","overview_menu_view_registration_title":"登録","overview_menu_view_test_title":"自己テスト","overview_meter_validation_title":"メーター確認","password_generate_error":"新しいパスワードの生成時にエラーが発生しました。接続および現在のパスワードを確認してから再試行してください。","password_generate_help_text":"既存のパスワードを入力するとランダムに新しいパスワードが生成されます。","password_generate_menu_title":"パスワードを変更する","password_generate_notice":"パスワードが変更されました。このページを離れる前に新しいパスワードを記録してください。","phase_container_detect_timeout":"フェーズ検出がタイムアウトされました。","phase_container_detection_attempt":"試行#{num}","phase_container_grid_code_validating_modal_title":"グリッド コード確認中","phase_container_grid_compliant_description":"グリッド適合 {checkmark}","phase_container_grid_modal_description":"グリッドは{time}秒で適合が完了します。","phase_container_grid_modal_title":"グリッド コンプライアンス待機中","phase_container_modal_description":"フェーズ検出は、1つのPowerwall当たり最長 2 分かかることがあります。","phase_container_modal_title":"相検出実行中","phase_container_saving_phases_modal_title":"位相の保存","phase_container_subtitle":"Powerwallがオンであるラインを表示し、ライン ステータスを更新します","phase_container_supported_error":"Powerwallは検出されませんでした。位相検出はサポートされていません。","phase_container_title":"位相","phase_container_voltage_caution_body":"{lineNumber}の上で予期しない電圧{voltage}Vが検知されました。この位相で{lineStatus}が適切な設定か再確認してください。","phase_container_warning_body":"バックアップ位相は選択されていません。したがって、グリッド接続が失われると、システムは負荷をサポートできません。","phase_container_warning_modal_header":"バックアップは無効になっていまます。","phase_line_id":"ライン - {id}","phase_line_item_view_line":"ライン","phase_line_item_view_line_status_backup":"バックアップ","phase_line_item_view_line_status_configured":"非バックアップ","phase_line_item_view_line_status_not_configured":"設定されていません","phase_line_status_backup":"バックアップ","phase_line_status_configured":"非バックアップ","phase_line_status_not_configured":"設定されていません","phase_view_detect":"位相を検出","phase_view_split_phase":"単相三線式","power_flow_view_go_off_grid":"オフ グリッドに進む","power_flow_view_go_on_grid":"オン グリッドに進む","power_flow_view_grid_button_disabled_reason":"オフ グリッドに進むにはシステムを起動する必要があります。","power_flow_view_grid_spinner_alt_label":"システム移行","power_flow_view_start_system":"システム始動","power_flow_view_stop_system":"システム停止","powerwall_container_industrial_no_additional_title":"追加のバッテリーブロックは見つかりませんでした。","powerwall_container_industrial_subtitle":"Site Controllerによって自動検知されたバッテリーブロックをすべてリストしています。バッテリーブロックがリストされていない場合は、もう一度スキャンしてください。","powerwall_container_industrial_subtitle_auto_detection":"Site Controllerによって自動検知されたバッテリーブロックをすべてリストしています。バッテリー ブロックがリストにない場合、配線を含むネットワーク機器を点検し、バス コントローラが通電していることを確認してください。","powerwall_container_industrial_title":"バッテリーブロック","powerwall_container_industrial_updating":"バッテリーブロックの確認","powerwall_container_no_additional_powerwalls_description":"配線問題の解決のヒントは、Powerwall設置マニュアルを参照してください。","powerwall_container_no_additional_powerwalls_title":"このほかにPowerwallsは見つかりませんでした。","powerwall_container_scan_again":"もう一度スキャン","powerwall_container_scanning":"スキャン中","powerwall_container_scanning_for_more":"さらにスキャン","powerwall_container_subtitle":"ゲートウェイによって自動検知されたPowerwallsをすべてリストしています。Powerwallがリストされていない場合は、もう一度スキャンしてください。","powerwall_container_subtitle_component_auto_detection":"Gatewayによって自動検知されたコンポーネントがすべてリストされています。コンポーネントがリストにない場合は、配線を確認してください。","powerwall_container_title":"Powerwall","powerwall_container_updating":"Powerwallsの確認","powerwall_container_updating_note":"注記: この操作は、1つのPowerwall当たり最長 60 秒かかることがあります。","powerwall_item_view_blank_numbers":"検証を待機中...","powerwall_item_view_numbers":"部品番号:{partNumber} シリアル:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"キャンセル","powerwall_pairing_connect":"接続","powerwall_pairing_done":"完了","powerwall_pairing_error_already_paired":"ペアリングに失敗: デバイスは既にペアリングされています","powerwall_pairing_error_bad_pairing_response":"ペアリングに失敗: デバイスがペアリングを拒否しました。フォロワーが停止していることを確認してください","powerwall_pairing_error_bad_qr_code":"WiFiのQRコードではありません","powerwall_pairing_error_internal":"ペアリングに失敗: 内部エラー","powerwall_pairing_error_no_qr_code":"QRコードが見つかりません","powerwall_pairing_error_no_response":"ペアリングに失敗: デバイスが応答しませんでした。","powerwall_pairing_error_not_leader":"ペアリングに失敗: フォロワー デバイスです。リーダー デバイスに再接続してください。","powerwall_pairing_error_prohibited_uncommissioned":"ペアリングに失敗: このPowerwallは試運転が終わっていません","powerwall_pairing_error_too_many_devices":"ペアリングに失敗: 既に最大数のデバイスがペアリングされています","powerwall_pairing_error_unknown":"ペアリングに失敗: 不明なエラー","powerwall_pairing_error_wifi_connection_failed":"ペアリングに失敗: WiFiに接続できませんでした。パスワードを確認してください。","powerwall_pairing_error_wifi_not_found":"ペアリングに失敗: WiFiネットワークが見つかりません","powerwall_pairing_exception":"ペアリングに失敗: 例外","powerwall_pairing_instructions_2":"ペアリングするPowerwallのWiFiのSSIDおよびパスワードを入力またはスキャンしてください。デバイスのQRコードを探してください。","powerwall_pairing_password_label":"パスワード:","powerwall_pairing_scan_qr_code":"QRコードをスキャン","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"ペアリング完了。新しいデバイスは1分以上(アップデート進行中はさらに長く)応答を開始しない可能性があります。「完了」をクリックすると終了します。","powerwall_pairing_state_monitoring":"新しいデバイスのペアリング中です。1分ほどかかることがあります。","powerwall_starting":"Powerwallを開始","powerwall_view_detected_backup":"バックアップ能力が検出されました","powerwall_view_detected_synchrometers":"検出されたメーター能力","powerwall_view_failed":"失敗","powerwall_view_no_backup":"バックアップ機能は検出されませんでした","powerwall_view_no_sync":"シンクロナイザーは検出されませんでした","powerwall_view_scan":"スキャン","powerwall_view_success":"成功","powerwall_view_synchrometer_detected":"同期メーターが検出されました","powerwall_view_synchronizer_detected":"シンクロナイザーが検出されました","powerwall_view_update":"POWERWALLSを確認","privacy_policy_view_accept_warranty_title":"Tesla Powerwall限定保証への同意","privacy_policy_view_contact_bullet_one":"メール {privacyEmail};","privacy_policy_view_contact_bullet_two":"郵送先 Tesla, Inc., Attn: Legal, 45500 Fremont Boulevard, Fremont, California 94538, United States.","privacy_policy_view_contact_header":"Teslaへの連絡方法について","privacy_policy_view_contact_paragraph_one":"ご意見ご質問のある方または特定のサービスのオプトアウトを希望される方は、Teslaまでご連絡ください。","privacy_policy_view_contact_paragraph_three":"お客様がEEAまたはスイスに所在されている場合、お客様の地域のTesla系列会社がお客様の個人情報の処理に責任を負う場合があります。","privacy_policy_view_contact_paragraph_two":"メールによる通信は必ずしも安全ではないため、Teslaに送信されるメールには、クレジットカード情報や機密情報を含めないようにご注意ください。","privacy_policy_view_cross_border_transfers_header":"外国へのデータ移転について","privacy_policy_view_cross_border_transfers_paragraph_one":"Teslaのサービスはアメリカから統括され運営されています。お客様あるいはTeslaの製品またはサービスのお客様の使用に基づく、あるいはお客様に関する情報は、Teslaが設備を持つあらゆる国あるいはTeslaが利用するサービス・プロバイダーの所在国や地域で保存、処理されます。これらの国では、最初に情報を提供した国と同じデータ保護法が施行されていない場合があります。お客様あるいは製品あるいはサービスのお客様の使用に基づく情報、あるいはお客様に関する情報をその他の国々に転送する場合も、Teslaはこの個人情報保護方針と同じ保護を行います。Teslaの製品、サービスを利用する場合、あるいはその他Teslaへの情報提供によって、お客様あるいは製品あるいはサービスのお客様の使用に基づく情報、あるいはお客様に関する情報を、アメリカを含め、お客様の居住国外に転送することに同意したとみなされます。","privacy_policy_view_cross_border_transfers_paragraph_two":"お客様がEEAまたはスイスに所在されている場合、Teslaは、EEAまたはスイス域外国への個人情報の移転に適切な保護を義務付けた法的必要条件に従います。Teslaは、EEAからTeslaおよびその全額出資米国子会社に移転される個人情報の処理に関して米国商務省と欧州委員会によって定めたEU-米国Privacy Shieldフレームワークの適合認証を取得しています。Tesla{privacyShield}はこちらでご確認いただけます。","privacy_policy_view_devices":"お客様またはお客様のデバイスから送信される情報、およびお客様またはお客様のデバイスに関する情報","privacy_policy_view_energy_products":"お客様のTeslaエネルギー製品からの情報および同製品に関する情報","privacy_policy_view_eu_policy_warning":"TeslaモバイルアプリでPowerwallを製品登録し、TeslaモバイルアプリでPowerwallを遠隔管理をご利用いただくには、プライバシーポリシーに同意していただく必要があります。","privacy_policy_view_eu_warranty_warning":"お客様がTesla顧客個人情報保護方針に同意いただけない場合、10年完全保証の対象外となる場合があります。 Teslaは、保証{warrantyLink}の中で述べられた除外条件と制限に従って、お客様のPowerwallが初めて設置された日付後、少なくとも4年間の保証を提供します。","privacy_policy_view_grid_services":"お客様のPowerwallは、電力会社やサードパーティーによるプログラムを通してサービスを提供することで、送配電網の信頼性を高めることができます。これらのサービスを利用した場合、適切なタイミングでPowerwallの電力の一部を放電する代わりに、お客様には金銭的なメリットが発生します。サービスをご利用いただくには、お客様のPowerwallとエネルギー利用状況に関する情報を電力会社やサードパーティーと共有する必要があります。Teslaは、これらのプログラムに加盟する前に、プログラムの詳細をお客様に説明し、参加の可否をお尋ねいたします。その際、お客様がオプトアウトされなかった場合は、プログラムにご参加いただくことになります。","privacy_policy_view_grid_services_title":"グリッド サービス","privacy_policy_view_grid_warning":"ご同意いただくことは必須ではありません。ご同意いただかなくても、今後これらのプログラムに参加する機会を提供する場合があります。","privacy_policy_view_here":"こちら","privacy_policy_view_homeowner_na":"住宅所有者は利用不可","privacy_policy_view_homeowner_required":"必ず住宅所有者の方がご確認ください","privacy_policy_view_information_collection_devices_bullet_five":"お客様のブラウザまたはデバイスを通じた収集: お客様のメディアアクセス制御 (MAC) アドレス、コンピューターの種類(WindowsまたはMacintosh)、画面の解像度、オペレーティングシステムの名称とバージョン、デバイス製造元と型番、使用言語、インターネットブラウザの種類とバージョン、お客様が利用されている本サービス(Teslaアプリ等)の名称とバージョン等の情報が、数多くのブラウザまたはお客様のデバイスを通じて自動的に収集されます。Teslaは、本サービスが適切に機能するよう、これらの情報を利用します。","privacy_policy_view_information_collection_devices_bullet_four":"オフラインTeslaは、お客様からの情報またはお客様に関する情報をで(例えば、お客様によるTesla店舗や修理工場への訪問、Teslaイベントへの参加、試乗の登録、電話での注文、当社の顧客サービス部門やセールス部門への連絡などの際に)収集することがあります。","privacy_policy_view_information_collection_devices_bullet_one":"サービスを通じた収集: Teslaは、ウェブサイト、ソフトウェアアプリケーション、ソーシャルメディアページ、メール、あるいはお客様がニュースレターに登録したり製品を購入したり、あるいはTeslaにお客様の商品を登録する際に利用する他のデジタルサービス (以下総称して「本サービス」といいます。) を通じて、お客様からの情報またはお客様に関する情報を収集することがあります。","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla: Tesla車を購入するお客様には、Teslaウェブサイト上でMy Teslaアカウントが作成されます。Teslaは、お客様が同意された場合My Teslaアカウントから次の種類のデータを収集し処理する場合があります:お客様登録情報;ご注文状況、Tesla製品の (車両登録番号かその他製品シリアル番号、サービス計画情報あるいは接続パッケージなど) 関する一般的な情報、保証およびその他ドキュメンテーション;またTesla製品、保険、運転免許、融資契約および類似情報。お客様は、いつでもMy Teslaアカウントにアクセスして、アカウント内のお客様に関する情報を更新することができます。","privacy_policy_view_information_collection_devices_bullet_two":"その他のソースを通じた収集: Teslaは、さらに公共データベース、マーケティングパートナー、認定設置業者、第三者である車両修理またはサービスセンター、ソーシャルメディアプラットフォームなど、他のソースからお客様に関する情報を取得することがあります。","privacy_policy_view_information_collection_energy_products_bullet_one":"Teslaは、お客様の商品に関する情報(設置日、設置した商品の数量、製造番号等)を収集することがあります。","privacy_policy_view_information_collection_energy_products_bullet_two":"Teslaのエネルギー製品およびサービスの提供および改善のため、Teslaは、お客様の商品の設置場所、その使用設定、商品の使用・性能に関するデータ、自宅での総エネルギー消費に関するデータ、問題を診断するのに必要なその他のデータを収集することがあります。","privacy_policy_view_information_collection_header":"Teslaが収集する可能性がある情報について","privacy_policy_view_information_collection_paragraph_five":"Teslaがお客様のTeslaエネルギー製品から運転データあるいはその他どんなデータも集めることを許可しない場合は、「お問い合わせ」セクションからお問い合わせください。お客様がTeslaエネルギー製品からの運転データの収集をやめた場合、お客様のエネルギー製品に該当する問題をリアルタイムで通知できなくなる点にご注意ください。また、これは、エネルギー製品で機能縮小、深刻な損害あるいは動作不良につながるおそれがあります。また、さらに、定期的なソフトウェアおよびファームアップを含む、エネルギー製品の多くの機能をご利用いただけなくなる場合があります。","privacy_policy_view_information_collection_paragraph_four":"当社は、お客様のTeslaエネルギー製品からの情報および同製品に関するさまざまな情報を認定設置業者を通じて、または設置した製品から(直接またはインバーター等のペアリングをした機器を通じて)収集することがあります。","privacy_policy_view_information_collection_paragraph_one":"Teslaはお客様に関連する内容あるいはお客様の製品やサービスのご使用状況について、主として次の3つの種類の情報を収集します。(1)お客様から送られる情報、またはお客様やお客様のデバイスに関する情報、(2)お客様のTesla車両から送信される情報、またはお客様の車両に関する情報、(3)お客様のTeslaエネルギー製品から送信される情報、またははお客様の製品に関する情報。お客様が要求、所有、使用するTesla製品およびサービスによっては、これらの種類の情報すべてがお客様に該当するとは限りません。","privacy_policy_view_information_collection_paragraph_three":"お客様がTeslaのウェブサイトにアクセスしたり、当サービスを利用される際、Teslaは、Cookie、ピクセルタグ、解析ツール、その他本サービスの向上のための類似の技術を使用することがあり、その詳細は下記のとおりです。","privacy_policy_view_information_collection_paragraph_two":"Teslaは、お客様からの情報またはお客様に関する情報(お名前、住所、電話番号、電子メールアドレス、支払情報等)またはお客様のデバイスに関する情報を、下記のようなさまざまな方法で収集することがあります。","privacy_policy_view_information_collection_services_bullet_five":"このような情報収集及びオプトアウトに関するGoogleの取扱いに関しては、 {website}からGoogle Analytics オプトアウト ブラウザアドオンをダウンロードしてください。","privacy_policy_view_information_collection_services_bullet_four":"分析ツール: Teslaは、クッキーおよびその他同様の技術を使用する第三者によって提供されるウェブサイトとアプリケーションの分析サービスを利用し、個々のビジターを識別することなく、ウェブサイトやアプリケーション使用に関する情報を収集し、かつトレンドを報告することがあります。Teslaにこれらのサービスを提供する第三者は、さらに第三者ウェブサイトでお客様の使用に関する情報を収集している場合があります。","privacy_policy_view_information_collection_services_bullet_one":"クッキー: クッキーは使用されるコンピューター上に直接保存された小さなサイズの情報です。クッキーは、Teslaがブラウザ・タイプ、サービス利用時間、閲覧ページ、言語設定およびその他ウェブ・トラフィックデータのような情報を収集することを可能にします。Teslaのサービス・プロバイダーとTeslaは、セキュリティ、オンライン情報のナビゲーションを促進し、情報をより有効に表示し、サービス利用体験を個別化し、またその他ユーザー・アクティビティを分析する目的で使用します。Teslaは、これによってサービスのご使用を支援するためにお客様のコンピューターを認識することができます。さらに、Teslaは絶えずサービスの設計と機能性を改善するために、使用法に関する統計情報を集めて、サービスがどのように利用されるか理解し、サービスに関する課題解決を支援するためにこれらの情報を活用しています。クッキーはさらに、Teslaの広告または製品等でお客様の好みに合うものがどれか、かつお客様に訴求する可能性が最も高いか、どの製品を表示することをTeslaが選択することを可能にします。さらに、Teslaはオンライン広告でお客様がどのようにTeslaの広告に対応するか知るためにクッキーを使用することがあります。さらに、その他ウェブサイトのお客様の使用を理解するためにクッキーあるいはその他ファイルを使用する場合があります。","privacy_policy_view_information_collection_services_bullet_three":"ピクセルタグおよびその他類似の技術: ピクセルタグ(別名ウェブ・ビーコンやクリアGIF)は、特に、当サービスのユーザー(メール受信者を含みます。)による活動の追跡、当社のマーケティングキャンペーンの成果の測定、当サービスの利用状況や応答率に関する統計をとるために当サービスの一部において使用されることがあります。","privacy_policy_view_information_collection_services_bullet_two":"お客様がMy TeslaアカウントあるいはTeslaのウェブサイトでクッキーを通じた情報が収集されることを希望されない場合、ほとんどのブラウザで、シンプルな設定により、お客様が自動的にクッキーを拒否するか、特定サイトから特定クッキー(複数可)のお客様のコンピューターへの移行を禁止、許可する選択を行うことができます。さらに{website}もご確認ください。ただしこれらのクッキーを禁止する場合、一部のサービスの使用でご不便をおかけするおそれがあります。例えば、Teslaはお客様のコンピューターを認識することができず、それぞれのサービスごとに、別個のログインが必要となることがあります。","privacy_policy_view_information_rights_choices_agree_eu":"Powerwallを製品登録し、TeslaモバイルアプリでPowerwallを監視するには、プライバシーポリシーに同意していただく必要があります。","privacy_policy_view_information_rights_choices_agree_one":"Powerwallを製品登録し、TeslaモバイルアプリでPowerwallを監視するには、プライバシーポリシーに同意していただく必要があります。Powerwall情報へのアクセスでTeslaモバイルアプリを利用されない場合は、ご対応は必要ございません。","privacy_policy_view_information_rights_choices_bullet_one":"お客様は、いつでもMy Teslaアカウントにアクセスして、アカウント内のお客様に関する情報を更新することができます。","privacy_policy_view_information_rights_choices_bullet_two":"お客様が以前に提供されたお客様に関する情報の見直し、修正、更新、非公開、削除などをリクエストされる場合は、下記のアドレス宛にご連絡ください。","privacy_policy_view_information_rights_choices_header":"お客様の権利と選択肢について","privacy_policy_view_information_rights_choices_paragraph_four":"記録保存・法令遵守のため、および/または情報の変更もしくは削除の依頼提出前に開始した取引を完了するため、特定の情報を保管する必要がある場合(例えば、商品の購入またはプロモーションへの参加に際して、完了するまで先に提供した情報の変更や削除は行えません)がありますので、ご了承ください。またTeslaのデータベースその他の記録には残留情報がある場合がありますが、これらは削除されません。","privacy_policy_view_information_rights_choices_paragraph_one":"上記のセクションの中で詳述されるとおり、Teslaはお客様についての、お客様からの、あるいはお客様に関する情報あるいは製品またはサービスのお客様の使用に関する情報の収集、使用、共有について多くの選択肢を提供しています。準拠法を条件として、一部の法域管轄では、さらにTeslaがお客様に関して保持する一定の情報に関する情報にアクセスする、更新する、情報を修正する、情報のブロックまたは削除をリクエストする権利が認められている場合があります。これらの権利は地域法によって一部の状況では制限される場合があります。Teslaは、次のものを含めお客様からの、あるいはお客様に関する情報にアクセスする、情報を修正する、更新する、情報のブロックまたは削除をリクエストするさまざまな方法をご提供しています。","privacy_policy_view_information_rights_choices_paragraph_three":"Teslaでは、実行可能な限り速やかに、お客様からのこれらの権利および選択権の行使のご依頼にお応えします。","privacy_policy_view_information_rights_choices_paragraph_two":"お客様のリクエストでは、修正を依頼する情報、提供済み情報のデータベースからの削除、あるいはお客様がTeslaに提供した情報の使用の制限の種類を明記してください。お客様の情報の保護のため、Teslaは依頼を送るために使用される特定のEメールアドレスと関連する情報のみ対応を行います。また、Teslaはお客様のリクエストを実行する前にお客様の身元を確認する必要がある場合があります。","privacy_policy_view_information_share_header":"個人情報の提供方法について","privacy_policy_view_information_share_paragraph_eight":"その他の場合","privacy_policy_view_information_share_paragraph_eleven":"お客様が事前にオプトインに同意された情報について、オプトアウトを希望される場合は、下記の「Teslaへの連絡方法」に従って当社にご連絡ください。","privacy_policy_view_information_share_paragraph_five":"Teslaは、下記のような場合、お客様が承認するその他の第三者に情報を提供することがあります。","privacy_policy_view_information_share_paragraph_five_point_four":"お客様のソーシャルメディア・アカウントと私たちのサービスを接続する場合のお客様のソーシャルメディア・アカウントプロバイダーとの共有。この場合お客様はソーシャルメディア・アカウント供給者とTeslaが情報を共有することを認め、Teslaが共有する情報の使用は、各ソーシャルメディア・アカウントプロバイダーの個人情報保護方針によって管理されることに同意したとみなされます。","privacy_policy_view_information_share_paragraph_five_point_one":"お客様が要求されたエネルギー製品の提供を促進するため、Teslaの認定設置業者に情報を提供することがあります。","privacy_policy_view_information_share_paragraph_five_point_three":"お客様がコンテストやそれに類するプロモーションに参加することを選択した場合、それらのスポンサーである第三者への情報提供。","privacy_policy_view_information_share_paragraph_five_point_two":"お客様が利用される第三者サービス・センターあるいはプロバイダーとの情報共有。お客様の情報の一部はTesla製品上に保存され、お客様のテスラ製品の診断またはサービスのために利用を選択された第三者であるサービスセンターまたはプロバイダーが直接アクセスできる場合があります。","privacy_policy_view_information_share_paragraph_four":"お客様が承認するその他の第三者への提供","privacy_policy_view_information_share_paragraph_nine":"Teslaは、下記のような場合もお客様の情報を共有することがあります:","privacy_policy_view_information_share_paragraph_nine_point_one":"お客様がTesla製品を直接所有していない場合であっても、適用法令により認められる場合、お客様の雇用主、他の車両の運行者またはTesla製品の所有者に情報を提供することがあります。","privacy_policy_view_information_share_paragraph_nine_point_two":"再編、合併、売却、合弁事業、譲渡、移転その他のTeslaの事業、資産または株式の全部または一部の処分(倒産やそれに類する手続に関連するものを含む)に関する、第三者への情報提供。","privacy_policy_view_information_share_paragraph_one":"Teslaは、収集する情報を、Teslaが利用するサービスプロバイダーと取引先企業、お客様が認可するその他第三者、法律によって義務づけられているその他第三者、およびその他状況で共有することがあります。これらの対象者と、これらの状況の下でTeslaがどのように情報を共有するかの例を以下に示します。","privacy_policy_view_information_share_paragraph_seven":"Teslaは、その自由裁量に基づき、法的義務(召喚命令を含み、これらのみに限定されない)を遵守するため、当社が法律で義務付けられていると真摯に信じたとき、法令の執行条件を遵守すべく、調査中の政府機関の要請に応じるため、Teslaのポリシーと手続きを正当化もしくは執行するため、緊急事態に対応するため、Teslaが違法・非倫理的・提訴可能もしくはそれらのリスクをもたらすと認める行為を防止もしくは停止するため、または本サービス、Tesla、第三者、当サービスへのビジターおよび公の権利、財産、安心もしくは安全を保護するため、お客様を個人的に特定できる情報またはかかる特定ができない情報を含む情報を、第三者に提供または開示することがあります。","privacy_policy_view_information_share_paragraph_six":"法令が要求するその他の第三者への提供","privacy_policy_view_information_share_paragraph_ten":"Teslaは、お客様からのオプトインがない限り、お客様を個人的に特定する情報をマーケティング目的で外部の第三者に提供することはありません。","privacy_policy_view_information_share_paragraph_three":"Teslaは、下記のような場合でお客様またはTeslaのためにサービスを提供する必要がある場合には、Teslaのサービスプロバイダーおよびビジネスパートナーに情報を提供することがあります。","privacy_policy_view_information_share_paragraph_three_point_one":"Tesla系列会社と、本個人情報保護方針に記述されている目的のために。Tesla提携企業とは、Tesla, Incが所有または管理する企業およびTesla, Incが経営権の一部を有する企業のことです。","privacy_policy_view_information_share_paragraph_three_point_three":"その他第三者取引先企業と、お客様の購入あるいはお客様のTesla製品のサービスに関する範囲での共有。金融、賃貸、レジストレーションおよび権原保険会社のようなパートナーのサービスを利用される場合、私たちは、お客様から、あるいはお客様に関してサービス提供に必要な一定の情報を共有します。","privacy_policy_view_information_share_paragraph_three_point_two":"ウェブサイトホスティング、データの解析と保管、支払処理、受注管理、製品設置、テスラ製品に対する無線接続、情報技術と関連インフラ、顧客サービス、製品のメンテナンスとそれに関連するサービス、メール送信、クレジットカード決済、監査、マーケティング、ボイスコマンド処理その他の類似するサービスを提供するため、第三者であるサービスプロバイダーおよびチャンネルパートナーに情報を提供することがあります。","privacy_policy_view_information_share_paragraph_two":"Teslaのサービスプロバイダーおよびビジネスパートナーへの提供","privacy_policy_view_information_use_commuicate":"お客様とのご連絡","privacy_policy_view_information_use_header":"Teslaが収集した情報の利用方法について","privacy_policy_view_information_use_other_purposes":"その他の目的","privacy_policy_view_information_use_paragraph_five":"Teslaは、その他の目的のために当社が収集した情報を下記のとおり利用することがあります。","privacy_policy_view_information_use_paragraph_five_point_one":"Teslaの事業目的のため(例えば、データ解析、会計、不正の監視および防止、利用動向の特定、当社のプロモーションキャンペーンの有効性の決定、当社のビジネス活動の遂行および拡張のため)。","privacy_policy_view_information_use_paragraph_five_point_two":"別途記載のものを除き、Teslaは、お客様個人を特定しないような情報を、その目的の如何を問わず(事業遂行または調査目的、産業解析、当社製品・サービスの改善・変更、当社製品・サービスのお客様のニーズに合わせたよりよいカスタマイズのため、または法的に要求された場合等)利用または提供することがあります。","privacy_policy_view_information_use_paragraph_four":"Teslaは、当社の製品およびサービスの提供および改善のために当社が収集した情報を下記のとおり利用することがあります。","privacy_policy_view_information_use_paragraph_four_point_five":"Teslaの製品・サービスの安全性の解析・改善のため。","privacy_policy_view_information_use_paragraph_four_point_four":"新しい商品・サービスを開発・促進し、Teslaの現行の製品・サービスを改善または変更するため。","privacy_policy_view_information_use_paragraph_four_point_one":"お客様による購入手続を完遂するため(例えば、支払処理を行い、注文をお客様にお伝えし、お客様による購入に関するお客様との連絡を行い、関連するカスタマー・サービスをお客様に提供するため等)。","privacy_policy_view_information_use_paragraph_four_point_six":"お客様が要求されたその他のサービスを提供するため。","privacy_policy_view_information_use_paragraph_four_point_three":"お客様のTesla製品の性能をモニターし、お客様の製品に関するサービスを提供するため。","privacy_policy_view_information_use_paragraph_four_point_two":"お客様のTesla製品に対するサービスの提供のため(例えば、お客様にサービス推奨を行い、お客様の製品の無線アップデートを行うため)。","privacy_policy_view_information_use_paragraph_one":"Teslaは、製品とサービスを提供および改善、ならびにその他目的で、収集した情報をご連絡先として使用する場合があります。Teslaが収集した情報をどのように使用するかについて、いつくか例を挙げます。","privacy_policy_view_information_use_paragraph_three":"コミュニケーションに関する選択肢:","privacy_policy_view_information_use_paragraph_three_point_one":"TeslaまたはTeslaの系列会社から電子通信によるコミュニケーション: TeslaまたはTeslaの系列会社からのマーケティング関連の電子メール受信を解除される場合は、Teslaが送信した電子メール内のオプトアウト手順から、あるいは下の連絡先へのお問い合わせにより、オプトアウトを行っていただくことができます。マーケティングに関するe-mail受信を停止した後も、重要な管理および安全に関するメッセージは送信される点にご注意ください。","privacy_policy_view_information_use_paragraph_three_point_two":"マーケティング関連の電話連絡: お客様がTeslaからマーケティング関連の電話連絡を受け、今後同様のマーケティング関連の電話連絡を受けたくない場合、Teslaの「電話禁止」リストにご登録いただけます。電話マーケティングからの停止後も、重要な管理および安全・製品サービスの問題に関するお電話は行われる点にご注意ください。","privacy_policy_view_information_use_paragraph_two":"Teslaは、お客様にご連絡するため、当社が収集した情報を下記のとおり利用することがあります。","privacy_policy_view_information_use_paragraph_two_point_five":"お客様のニーズに合った製品やオファーを提示し、他のソースからの情報を用いて顧客関連リストを改善するため。","privacy_policy_view_information_use_paragraph_two_point_four":"管理情報(例えば、本サービスに関する情報および利用規約やポリシーの変更など)をお送りするため。","privacy_policy_view_information_use_paragraph_two_point_one":"ニュースレターや製品情報、注意情報、パンフレットを送付するなど、お客様からのお問い合わせやご要望にお応えするため。","privacy_policy_view_information_use_paragraph_two_point_seven":"ソーシャルシェアリングやコミュニケーションの機能を促進するため。","privacy_policy_view_information_use_paragraph_two_point_six":"お客様がコンテストやそれに類するプロモーションに参加できるようにするとともに、それらの活動を管理するため。","privacy_policy_view_information_use_paragraph_two_point_three":"安全上重要な情報についてお客様にお知らせし、お客様の車両に関連する事故が発生した場合に第一応答者に通知をするため。","privacy_policy_view_information_use_paragraph_two_point_two":"お客様によるTesla車両のテストドライブの設定、評価またはフィードバックの提供を行うため。","privacy_policy_view_information_use_provide":"Teslaの製品およびサービスの提供・改善","privacy_policy_view_links_header":"リンク","privacy_policy_view_links_paragraph_one":"この個人情報保護方針では、サービスとリンクするあらゆるサイトあるいはサービスを提供する第三者を含め、第三者のプライバシー、情報保護あるいはその他慣行を対象としていません。またTeslaはこれらの第三者による情報管理についての責任を負いません。サービスとのリンクが行われている場合も、TeslaあるいはTeslaの系列会社が、リンクされたサイトやサービスを支持することや、第三者との関係があることを示すものではありません。","privacy_policy_view_links_paragraph_two":"アプリ開発業者、アプリケーションプロバイダー、ソーシャルメディアプラットフォームプロバイダー、OSプロバイダー、ワイヤレスサービスプロバイダーなど、他の組織による情報(当社のソフトウェアアプリケーションまたはソーシャルメディアページを通じてお客様が他の組織に開示するあらゆる情報を含みます。)の収集、利用または開示に関するポリシーと運用(データセキュリティに関するものを含みます。)に関して、Teslaは責任を負わないことをご了承ください。","privacy_policy_view_minors_header":"未成年者について","privacy_policy_view_minors_paragraph":"当サービスは、16歳未満の個人を対象としていませんので、該当される方はTeslaに情報を提供しないようお願いします。","privacy_policy_view_offers_eu":"Tesla製品とサービスに関するアンケート、プロモーションおよびキャンペーン情報を含む、Teslaおよび関連企業からのメール配信を希望します。お客様はいつでもこの同意を取り消す権利を有します。詳しい情報{legalLink}。","privacy_policy_view_offers_title":"製品発表および新しいオファー","privacy_policy_view_offers_usa":"また、登録した電話番号にTesla製品の情報やプロモーションに関する連絡を受けることに同意します。また、これらの電話連絡やテキスト メッセージには、コンピューターを使用した自動ダイヤルや録音したメッセージが使われる場合があることを理解しています。これに同意することは購入条件には含まれません。","privacy_policy_view_powerwall_warranty":"Tesla Powerwall限定保証","privacy_policy_view_privacy_policy":"プライバシーについての通知","privacy_policy_view_privacy_policy_agreement_eu":"住宅所有者として、お客様向けプライバシーポリシー全文を読み、本プライバシーポリシーが定める通りにTeslaが個人情報を取り扱うことに同意します。(プライバシーポリシーに記載されている通り、お客様はいつでもこの同意を取り消す権利を有します。)","privacy_policy_view_privacy_policy_agreement_usa_australia":"住宅所有者として、お客様向けプライバシーポリシー全文を読み、本プライバシーポリシーが定める通りにTeslaが個人情報を取り扱うことに同意します。","privacy_policy_view_privacy_shield":"Privacy Shieldポリシー","privacy_policy_view_retention_period_header":"情報の保有期間について","privacy_policy_view_retention_period_paragraph":"Teslaは、お客様、Tesla製品および当サービスからの情報、またはお客様、Tesla製品および当サービスに関する情報を、本プライバシーポリシーに略述した目的を遂行するために必要な期間保有するものとします。ただし、それより長期間保有することが法令で義務付けられているかまたは認められる場合はこの限りではありません。","privacy_policy_view_security_header":"セキュリティ","privacy_policy_view_security_paragraph_one":"Teslaは、組織内の情報を保護する合理的な組織的手段、技術的手段および管理上の手段の使用に努めます。ただしデータ伝送や保存システムにおいては、100%の安全を保証することはできません。Teslaとのお客様の通信がもはや安全ではない(例えばTeslaとの任意のアカウントのセキュリティが危険にさらされたと疑われる場合)と思われる場合は、下記「お問い合わせ」セクションから問題を直ちに私たちに通知してください。","privacy_policy_view_security_paragraph_two":"お客様のTesla製品を他の方に売却・譲渡される場合、Teslaにご連絡いただければ、お客様からの情報またはお客様に関する情報を当該売却先・譲渡先への開示から守るために別途対策が必要かどうか、Teslaで判断します。","privacy_policy_view_title":"プライバシーポリシー全文を見る","privacy_policy_view_updates_header":"本ポリシーの更新について","privacy_policy_view_updates_paragraph":"Teslaはこの個人情報保護方針を適宜変更することがあります。この個人情報保護方針がの最終更新日はこのページの最下部の「最終更新日」をご確認ください。この個人情報保護方針へのどんな変更は、サービスについて、改訂された個人情報保護方針をTeslaが公開した時点で有効となります。これらの変更後に、Teslaの製品、サービスあるいはその他Teslaへの提供情報の使用を続行した場合、改訂された個人情報保護方針を受理したとみなされます。","privacy_policy_view_us_warranty_warning":"Tesla モバイルアプリでPowerwallを製品登録し、Tesla モバイルアプリでPowerwallを遠隔管理するためには、Tesla限定保証条件に同意していただく必要があります。","privacy_policy_view_warranty_information":"私は住宅所有者として、TeslaのPowerwall限定保証の条件{warrantyLink}に同意します。","prompt_factory_reset_confirmation":"本当にユニットを工場設定にリセットしますか?","pvac-state-active":"アクティブ","pvac-state-faulted":"故障","pvac-state-init":"初期化中...","pvac-state-standby":"ソーラーを待機","pvac_alert_ac_fault":"インバータAC故障","pvac_alert_check_ac_note":"AC配線および電力系統の接続を確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_check_dc_string1_note":"ストリング1 DC配線およびパネルを確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_check_dc_string2_note":"ストリング2 DC配線およびパネルを確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_check_dc_string3_note":"ストリング3 DC配線およびパネルを確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_check_dc_string4_note":"ストリング4 DC配線およびパネルを確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_confirm_grid_code_note":"AC配線および電力系統の接続を確認してください。選択したグリッド コードを確認します。","pvac_alert_dc_fault_string1":"インバータDC故障 - ストリング1","pvac_alert_dc_fault_string2":"インバータDC故障 - ストリング2","pvac_alert_dc_fault_string3":"インバータDC故障 - ストリング3","pvac_alert_dc_fault_string4":"インバータDC故障 - ストリング4","pvac_alert_freq_change":"電力系統不整合 - 周波数変更","pvac_alert_internal_comms":"内部通信問題","pvac_alert_over_freq":"電力系統不整合 - 過大な周波数","pvac_alert_over_temp":"インバータ過熱","pvac_alert_over_voltage":"電力系統不整合 - 過電圧","pvac_alert_production_limited_note":"生産が制限される可能性があります。電線の終端が適正であり、十分な空気流量があり、設置環境が適正であることを確認します。","pvac_alert_reboot_note":"インバータを再起動し、システムが最新で、十分な試運転調整がなされていることを確認します。","pvac_alert_under_freq":"電力系統不整合 - 低周波数","pvac_alert_under_voltage":"電力系統不整合 - 低電圧","pvi-power-status-dc-only":"DCのみ","pvi-power-status-disabled":"無効","pvi-power-status-enabled":"有効","pvi-reset-button-label":"インバータを再起動してアラートをクリアします","pvs-self-test-1":"セルフテスト(1/6): 漏電","pvs-self-test-2":"セルフテスト(2/6): アーク不良","pvs-self-test-3":"セルフテスト(3/6): MCI","pvs-self-test-4":"セルフテスト(4/6): 絶縁","pvs-self-test-5":"セルフテスト(5/6): リレーのウェルド","pvs-self-test-6":"セルフテスト(6/6): インピーダンス","pvs_alert_check_arc_fault_note":"DC配線、接続部、パネルおよび急速遮断デバイスにアーク不良問題がないか確認します。","pvs_alert_check_dc_note":"DC配線、接続部、パネルおよび急速遮断デバイスに漏電の問題がないか確認します。","pvs_alert_check_dc_string1_note":"DC配線、接続部、パネルおよび急速遮断デバイスに、ストリング1に関する絶縁問題がないか確認します。","pvs_alert_check_dc_string2_note":"DC配線、接続部、パネルおよび急速遮断デバイスに、ストリング2に関する絶縁問題がないか確認します。","pvs_alert_check_dc_string3_note":"DC配線、接続部、パネルおよび急速遮断デバイスに、ストリング3に関する絶縁問題がないか確認します。","pvs_alert_check_dc_string4_note":"DC配線、接続部、パネルおよび急速遮断デバイスに、ストリング4に関する絶縁問題がないか確認します。","pvs_alert_check_dc_strings_note":"DC配線、接続部、パネルおよびストリングの構成を確認します。","pvs_alert_dc_arc_fault_detected":"DCアーク不良 - 検出","pvs_alert_dc_arc_fault_lockout":"DCアーク不良 - ロックアウト","pvs_alert_dc_ground_fault":"DC漏電","pvs_alert_dc_isolation_string1":"DC絶縁問題 - ストリング1","pvs_alert_dc_isolation_string2":"DC絶縁問題 - ストリング2","pvs_alert_dc_isolation_string3":"DC絶縁問題 - ストリング3","pvs_alert_dc_isolation_string4":"DC絶縁問題 - ストリング4","pvs_alert_dc_over_voltage":"DC過電圧","pvs_alert_rapid_shutdown":"急速遮断開始","pvs_alert_rapid_shutdown_note":"ACブレーカーおよび低電圧急速遮断回路を点検します。","registration_container_continue_header":"入力された顧客Eメール: {email}","registration_container_continue_modal_description":"電子メールが正しくない場合、顧客はTeslaモバイル アプリにアクセスすることができません。お客様のEメールが有効であることを確認してください。","registration_container_customer_email_required":"Teslaモバイル アプリを有効化するには、お客様の電子メールが必要です。","registration_container_customer_information_title":"現場情報","registration_container_fill_required_fields":"インストーラーまたはお客様は必要なフィールドすべてに入力する必要があります。","registration_container_loading_modal_registering":"登録中","registration_container_reset_form_modal_description":"フォームのリセットを続行するかどうか確認してください。","registration_container_reset_form_modal_header":"以前に入力された情報は削除されます。","security_container_settings_title_customer":"パスワード変更あるいはリセット(お客様)","security_container_settings_title_installer":"パスワード変更あるいはリセット(設置業者)","security_view_copied_to_clipboard":"コピーされました","security_view_not_wifi_qr_code_error":"WiFiのQRコードではありません。","security_view_scan_qr_code_not_found_error":"QRコードが見つかりません。","security_view_settings_change_password_error":"パスワードが一致しません","security_view_settings_change_password_label":"パスワードを変更","security_view_settings_completed":"完了","security_view_settings_new_password_label":"新しいパスワード","security_view_settings_old_password":"現在のパスワード","security_view_settings_password_change_info":"パスワードを変更するには、現在のパスワードおよび新しいパスワードを入力してください。","security_view_settings_password_customer":"パスワード","security_view_settings_password_customer_placeholder":"ゲートウェイ ステッカー パスワードの最後の5桁","security_view_settings_password_installer_label":"ゲートウェイ パスワード","security_view_settings_password_reset_info":"パスワードをリセットするには、Powerwallスイッチを切り替えてから、ゲートウェイ ステッカー パスワードの最後の5桁を入力してください。","security_view_settings_password_reset_info_serial":"パスワードをリセットするには、Powerwallスイッチを切り替えてから、ゲートウェイシリアル番号の最後の5桁を入力してください。","security_view_settings_password_reset_installer_info":"パスワードをリセットするには、Powerwallスイッチを切り替えてから、ゲートウェイ ステッカー パスワードを入力してください。","security_view_settings_password_reset_installer_info_serial":"パスワードをリセットするには、Powerwallスイッチを切り替えてから、ゲートウェイシリアル番号を入力してください。","security_view_settings_re_enter_password_label":"新しいパスワードを再度入力","security_view_settings_reset_password_label":"パスワードのリセット","security_view_settings_serial_customer":"シリアル番号","security_view_settings_serial_customer_placeholder":"ゲートウェイシリアル番号の最後の5桁","security_view_settings_serial_installer_label":"ゲートウェイ シリアル番号","security_view_settings_success":"パスワードが更新されました","security_view_settings_success_new_password":"新しいパスワードは次のとおりです:","security_view_settings_toggled_password":"パスワードをお忘れですか?","self_test_result_viewer_resi_only":"セルフテスト ログ ビューワは使用できません。","self_test_results_viewer_collapse_all":"すべて閉じる","self_test_results_viewer_column_name":"名称","self_test_results_viewer_column_result":"結果","self_test_results_viewer_column_spec":"仕様","self_test_results_viewer_column_test_time":"テスト時間","self_test_results_viewer_column_value":"値","self_test_results_viewer_expand_all":"すべて開く","self_test_results_viewer_failed":"失敗","self_test_results_viewer_in_progress":"進行中","self_test_results_viewer_inconclusive":"未決定","self_test_results_viewer_not_started":"開始されていません","self_test_results_viewer_passed":"合格","self_test_results_viewer_skipped":"スキップ","self_test_results_viewer_warning":"警告","settings_container_confirm_reset_operation_mode":"{operation}へのモードチェンジを確認します。","settings_container_heco_modal_description":"選択後、この設定を変更することはできません。選択を送信する前に、この顧客が現在HECOバッテリーボーナスプログラムに登録していることを確認します。","settings_container_heco_modal_title":"登録確認","settings_container_heco_view_description":"Powerwallはプログラムの要件に適合するために、確約容量で毎日放電します。有効化後にこの設定を変更することはできません。","settings_container_heco_view_scheduled_dispatch_start_time":"開始時刻","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"HECO予定ディスパッチ","settings_container_heco_view_title":"HECOバッテリーボーナスプログラム","settings_container_operation_modes_modal_content":"Teslaモバイル アプリの「カスタマイズ」画面で運転モードを変更することができます。","settings_container_operation_modes_modal_reset":"モードリセット","settings_container_operation_modes_modal_title":"動作モード","settings_container_operation_modes_modal_warning":"これの変更はもとに戻せません。詳細モードは、Teslaモバイル アプリでのみ再有効化できます。","settings_container_operation_modes_reset_modal_title":"動作モードをリセットしますか?","settings_container_operation_settings_subtitle":"システムの名前、動作モードおよびエクスポート制限がある場合セットします。","settings_container_operation_settings_title":"運転設定","settings_container_save_instructions":"「継続」をクリックして保存してください。","settings_container_saving_site_info_modal":"サイト設定保存中","settings_container_site_import_description":"受電点正潮流制限値はオプション設定です。インポート制限を無効化する場合はこの欄を空欄にします。有効にした場合、この設定は電力系統からサイトへインポートされる最大許容電力を指定します。","settings_container_site_limits_header":"受電点の制限値","settings_view_custom_modes_label":"設定済みモード","settings_view_energy_reserve_heco_label":"自立運転リザーブへの変更は、HECOバッテリーボーナスプログラムへの登録により制限されています。この顧客はアプリで自立運転リザーブを設定できます。","settings_view_energy_reserve_label":"バックアップリザ―ブ","settings_view_instruction_site_name":"現場名を入力","settings_view_net_meter_mode":"エクスポート モード","settings_view_operation_label":"動作モード","settings_view_operation_set_label":"セットする動作モード","settings_view_set_net_meter_mode_never_label":"恒常的にエクスポートなし","settings_view_set_net_meter_mode_solar_label":"ソーラーエクスポート","settings_view_site_name":"現場名","settings_view_site_name_placeholder":"例:マイホーム","settings_view_solar_export_limitation_slider":"ソーラーのエクスポート制限","settings_view_solar_feature":"この機能は、相互連結によりソーラーシステムがグリッドにエネルギーをエクスポートしないことが必要な場合のみアクティベートします。主にハワイ(CSS)およびオーストラリアの地域において適用されます。","settings_view_solar_limitation":"PowerwallはPowerwall+ではないソーラーシステムと共に設置されましたか?","settings_view_solar_zero_export":"POWERWALLはゼロエクスポートソーラーシステムと合わせて設置されていますか?","site_info_container_submit":"送信","solar_item_view_baudrate_label":"ボーレート","solar_item_view_brand_input_label":"メーカー","solar_item_view_brand_label":"メーカー","solar_item_view_check_inverter":"インバーター{id}接続をチェック","solar_item_view_connection_warning":"接続を確立できませんでした。","solar_item_view_inverter_brand":"インバーターメーカー","solar_item_view_inverter_communication":"インバーターとの直接通信を設定します","solar_item_view_inverter_model_label":"インバーターモデル","solar_item_view_ip_label":"IP アドレス","solar_item_view_model_label":"モデル","solar_item_view_power_rating_explanation":"これはモジュール/パネルに関するソーラーシステムの定格合計電力です。これはアレイの公称電力です。例えば、10x 300Wのソーラーパネルでは、PVインバーターが2500Wでも、3500Wでも、3000Wとしてリストされます。","solar_item_view_pv_array_dc_power_rating":"PV アレイ DC電力定格","solar_item_view_pv_array_dc_power_rating_label":"PV アレイ DC電力定格","solar_item_view_revenue_grade":"計量法に基づいた電力メーター","solar_item_view_revenue_grade_explanation":"インバーターに検定メーターが内蔵されている場合のみチェックしてください。このオプションが有効化されている場合、インバーターではなくメーターからインバーターデータが読み取られます。","solar_item_view_revenue_grade_title":"計量法に基づいた電力メーター","solar_item_view_solar":"ソーラー{id}","solar_item_view_success":"接続に成功しました","solar_item_view_unable":"インバーターを読み取れません","solar_list_view_continue_add_solar":"ソーラーを追加","solar_view_continue_add_solar":"ソーラーを追加","status_update_urgency_none":"最新","status_update_urgency_optional":"更新はオプションです","status_update_urgency_required":"更新が必要です","status_update_urgency_unknown":"不明","success_view_awesome":"ありがとうございます","success_view_copied_to_clipboard":"コピーされました","success_view_installation_complete":"設置完了","success_view_new_password_error_title":"ウィザード パスワード","success_view_new_password_title":"新しいウィザード パスワード","success_view_password_set":"パスワードは既に設定されています","success_view_record_password":"続行する前にこのパスワードを記録して保管しておいてください","success_view_retry_registration":"レジストレーション再試行","success_view_set_customer_password":"お客様パスワードを設定","success_view_syncing_configuration":"設定を同期しています","summary_container_company":"会社名","summary_container_connection_type":"接続タイプ","summary_container_email":"Eメール","summary_container_installer_information":"工事担当者情報","summary_container_ip_address":"IP アドレス","summary_container_location":"住所","summary_container_meter":"メーター#{index}","summary_container_meter_information":"メーター情報","summary_container_phone":"電話番号","summary_container_print":"印刷","summary_container_serial_number":"シリアル番号","summary_container_site_info":"現場情報","summary_container_site_name":"現場名","summary_container_subtitle":"製品と設置情報","summary_site_information":"現場情報","summary_view_autonomous":"時間帯設定","summary_view_backup":"バックアップ専用モード","summary_view_backup_capable":"バックアップ機能あり","summary_view_backup_reserve":"バックアップリザ―ブ","summary_view_backup_switch":"自立運転スイッチ","summary_view_conductor_export":"幹線の逆潮流上限値","summary_view_conductor_import":"幹線の潮流上限値","summary_view_control":"サイト コントロール","summary_view_customer_version":"顧客ファームウエアバージョン","summary_view_direct":"ダイレクト","summary_view_disabled":"無効","summary_view_ethernet":"イーサネット","summary_view_export_limit":"PVエクスポート制限","summary_view_extra_programs":"追加プログラム","summary_view_followers":"フォロワー","summary_view_gateway":"ゲートウェイ","summary_view_grid_code":"グリッドコード","summary_view_gsm":"携帯電話","summary_view_heco_battery_bonus":"HECOバッテリーボーナス","summary_view_ip_address":"IP アドレス","summary_view_leader":"リーダー","summary_view_mode":"モード","summary_view_msg_cannot_read_solar_assembly":"最初にシステムを停止して、Powerwall+ソーラーアセンブリの部品番号およびシリアルを確認してください。","summary_view_network":"ネットワーキング","summary_view_non_backup":"バックアップなし","summary_view_panel_limit":"パネル最大電流","summary_view_part_number":"部品番号","summary_view_partnum":"部品{partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"集約","summary_view_self_consumption":"自家消費","summary_view_serial":"シリアル","summary_view_serialnum":"シリアル{serialNumber}","summary_view_site_export":"売電上限値","summary_view_site_import":"買電上限値","summary_view_site_name":"現場名","summary_view_solar_assembly":"ソーラー アセンブリ","summary_view_sync":"バックアップ機能","summary_view_time":"概略コンパイル時間","summary_view_time_zone":"タイムゾーン","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"WiFiにペアリングされたデバイスは現在応答していません","system-device-unknown-sitecontroller":"デバイスは子機を発見できていません","system_acpw_vitals_charge":"充電レベル: {charge}%","system_acpw_vitals_power":"AC電源: {power}","system_acpw_vitals_power_charging":"AC電源: {power}充電中","system_acpw_vitals_power_discharging":"AC電源: {power}放電中","system_acpw_vitals_state":"Powerwallの状態: {state}","system_acpw_vitals_voltage":"AC電圧: {voltage}","system_controller_din":"コントローラ: {din}","system_device_alert_disabled":"デバイスが無効","system_device_gateway_not_islanding":"アイランド コントローラーではありません。","system_device_name_backup_switch":"自立運転スイッチ({sn})","system_device_name_battery_assembly":"バッテリー アセンブリ({sn})","system_device_name_gateway":"ゲートウェイ ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus_leader":"リーダーPowerwall+","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+(有線)","system_device_name_powerwall_plus_wireless":"Powerwall+(無線)","system_device_name_remote_meter":"リモート メーター({sn})","system_device_name_solar_assembly_1":"ソーラー アセンブリ","system_device_name_sync":"Gateway開閉器/メーター コントローラ({sn})","system_firmware_update":"更新中: {percent}% ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"自立運転状態: {backupState}","system_islanding_vitals_grid_line":"グリッド ライン{lineNumber}: {v} {f}","system_islanding_vitals_island_line":"アイランド ライン{lineNumber}: {v} {f}","system_overview_connected":"Teslaに接続されています","system_overview_disconnected":"Teslaに接続されていません","system_overview_follower":"フォロワーPowerwall","system_overview_login_required":"システムの作動を表示するにはログインが必要です","system_overview_scanning":"デバイスをスキャン中...","system_overview_site_controller":"サイト コントローラー","system_overview_updating":"デバイスを更新中...","system_pvi_vitals_ac_solar_power":"ACソーラー電力: {power} / {current}","system_pvi_vitals_ac_solar_power_only":"ACソーラー電力: {power}","system_pvi_vitals_lifetime_energy_kwh":"通算エネルギー量: {energy}","system_pvi_vitals_state":"都道府県:{message}","system_pvi_vitals_string":"ストリング{number}: {voltage} / {current}","system_pvi_vitals_string_not_connected":"ストリング{number}: 接続されていません","system_remote_meter_ct_line":"CT {n} ({location}): {value}","system_remote_meter_no_cts":"構成されているCTがありません","system_rescan_button_text":"デバイスを再スキャン","system_scanning_label_text":"デバイスをスキャン中...","system_vitals_missing_value":"---","test_container_configure_subtitle":"システムが想定通りに動作しているかテストします。","test_container_system_test_title":"システム テスト","test_inverter_container_error_grid_uncompliant":"グリッドが未適合のためこのテストは実行することができません。","test_inverter_container_error_not_idle":"Powerwallはテストを実行する前にスタンバイモードにあることが必要です。","test_inverter_container_results_error_plural_subtitle":"{num}テストが失敗","test_inverter_container_results_error_singular_subtitle":"{num}テストが失敗","test_inverter_container_results_success_plural_subtitle":"{num}テストに合格","test_inverter_container_results_success_singular_subtitle":"{num}テストに合格","test_inverter_container_results_success_subtitle":"テストがすべて合格しました","test_inverter_container_results_title":"インバーター自己診断テスト結果","test_inverter_container_title":"インバーター自己診断テスト","test_meter_composite_view_auxiliary_meter_setup_instructions":"各補助メーターに少なくとも1台のCTをセットする必要があります。","test_meter_composite_view_auxiliary_meters_title":"補助メーター","test_meter_composite_view_configure_meters":"メーター設定","test_meter_composite_view_current_transformer_setup_instructions":"少なくとも1つのサイトCTを使用するか、あるいは負荷CTを選択してください。両方を使用することはできません。","test_meter_composite_view_external_meter_setup_instructions":"各外部メーターに少なくとも1台のCTをセットする必要があります。","test_meter_composite_view_external_meters_title":"外部メーター","test_meter_composite_view_internal_meters_gateway_title":"内部メーター(Gateway)","test_meter_composite_view_internal_meters_title":"内部メーター","test_meter_composite_view_no_configured_meters":"設定されたメーターはありません。続行するには{configure}を行ってください。","test_meter_composite_view_note":"注記","test_meter_item_view_acuvim_label":"メーター{id}: Acuvimメーター","test_meter_item_view_backup_switch_label":"メーター{id}: 自立運転スイッチ メーター","test_meter_item_view_configure_phases_note":"このメーターでCTを有効化するには位相を設定してください","test_meter_item_view_internal_meter_x_gateway_label":"メーター{id}: 内部主メーターX(Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"メーター{id}: 内部補助メーターY(Gateway)","test_meter_item_view_remote_w1_wifi_label":"メーター{id}: リモートWi-Fi","test_meter_item_view_remote_w1_wired_label":"メーター{id}: リモート有線","test_meter_item_view_remote_w2_wifi_label":"メーター{id}: リモートWi-Fi","test_meter_item_view_remote_w2_wired_label":"メーター{id}: リモート有線","test_meter_item_view_reset":"設定リセット","test_meter_item_view_site_meter_title":"内部サイト メーター","test_meter_item_view_sync_id":"同期メーター{id}","test_meter_item_view_toggle_advanced":"詳細","test_meter_item_view_toggle_power":"電力","test_meter_item_view_wifi_id":"メーター{id}","test_meter_item_view_wired_id":"有線メーター{id}","test_view_canceled_status":"テストが取り消されました","test_view_failed_status":"テストに失敗しました","test_view_idle_status":"システムテストを始める","test_view_init_status":"テストを始める準備中","test_view_inverter_test_warning_message":"0 エクスポートPVインバーターがある場合、ゲートウェイの自己試験手順はシステム確認にはご利用いただけません。自己テストが完了するまでPVインバーターをオフにしてください。","test_view_passed_status":"テストが完了しました","test_view_prep_status":"コントロールの初期化: これは数分かかる場合があります","test_view_running_status":"充電テスト実行中","test_view_skip_start_system_test_text":"確認するとシステムテストをスキップします","test_view_start_system_test_warning":"警告","test_view_system_test_completed_message":"システムテストが完了しました","time_minute":"分","time_minutes":"分","time_second":"秒","time_seconds":"秒","time_started_at":"開始時刻:{time}","timezone_container_subtitle":"私たちは、お客様の住所とIPアドレスに基づいて、設置タイムゾーンの判断をお手伝いします。","timezone_container_title":"タイムゾーン","timezone_view_label":"タイムゾーン","toast_view_standard_title":"注記","toast_view_warning_title":"警告","update_container_industrial_updating_description":"サイト コントローラーは、自動的に再起動し、更新をインストールします。{lb1}{lb2}2分間お待ちください。サイト コントローラーネットワークに接続してから {refresh}してください。","update_container_preparing_title":"最新のアップデートの準備中","update_container_refresh_browser":"お客様のブラウザをリフレッシュ","update_container_residential_updating_description":"ゲートウェイは、自動的に再起動し、更新をインストールします。{lb1}{lb2}2分間お待ちください。ゲートウェイネットワークに接続してから {refresh}してください。","update_container_skip_title":"更新をスキップしますか?","update_container_subtitle":"アップデートを確認。注記: Powerwallページでは、Powerwallsへのファームアップのプッシュが発生します。","update_container_subtitle_industrial":"アップデートを確認。注記: バッテリーページでは、バッテリーへのファームアップのプッシュが発生します。","update_container_title":"アップデート","update_container_updating_title":"アップデート更新中","update_step_item_view_resolution_title":"推奨される対応","update_view_check_again":"もう一度チェックするにはクリックしてください","update_view_check_for_update":"ゲートウェイ更新チェック","update_view_check_for_update_industrial":"サイト コントローラー更新チェック","update_view_checking_update":"アップデートの確認中","update_view_current_version":"現在のバージョン: {version}","update_view_current_version_label":"現在のバージョン:","update_view_downloading":"ダウンロード中","update_view_downloading_update":"アップデートのダウンロード","update_view_no_power_cicle":"電力サイクルを行わないでください","update_view_percent_complete":"{percent}完了","update_view_progress":"アップデートが進行中です","update_view_staged":"新バージョンのステージング済み","update_view_staged_update":"更新をインストールする準備ができています","update_view_staging":"ステージング","update_view_staging_update":"アップデートのステージング","update_view_time_remaining":"残り","update_view_up_to_date":"バージョンは最新です","update_view_update_now":"今すぐ更新","update_view_update_urgency_label":"更新状態: {status}","update_view_updated_industrial":"サイト コントローラーソフトウェアは最新です。","update_view_updated_residential":"ゲートウェイ ソフトウェアは最新です。","update_view_wait_minutes":"数分お待ちください","validation_phone":"有効な電話番号を入力","vitals_header_subtitle_firmware_update":"ファームウェアをアップデート中...","vitals_header_subtitle_firmware_update_failed":"ファームウェアアップデートに失敗しました。スイッチが有効であることおよび配線を確認します。","vitals_header_title":"蓄電システム","vitals_powerwall_state_ac_fault":"ACステージ不良","vitals_powerwall_state_dc_fault":"DCステージ不良","vitals_powerwall_state_grid_following":"電力系統追従","vitals_powerwall_state_grid_forming":"電力系統形成","vitals_powerwall_state_init":"初期化","vitals_powerwall_state_off":"オフ","vitals_powerwall_state_standby":"スタンバイ","vitals_powerwall_state_support_dc":"サポートDC","warning":"警告","warning_off_grid":"電気系統がオフグリッドの場合、バックアップ負荷は5分以内に停止します。","warning_on_grid":"電気系統がオングリッドの場合、Powerwallは充電/放電を中止します。","warning_sitemaster_container_not_running":"Sitemasterは実行されていません。","wifi_pairing_link_message":"WiFi接続Powerwallを追加","wifi_view_find_network":"SSIDでネットワークを検出","wifi_view_note":"注記: このゲートウェイは2.4GHzワイヤレス・ネットワークとのみ互換性を持ちます。","wifi_view_note_five_ghz":"注記: このゲートウェイは2.4GHzおよび5GHzの両方のワイヤレス・ネットワークと互換性を持ちます。","wifi_view_readonly":"これはフォロワーPowerwallなので、無線ネットワーク設定を編集できない可能性があります。","wifi_view_security_label":"セキュリティ","wizard_container_commissioning_wizard":"Tesla試運転ウィザード","wizard_container_login_required":"ログインが必要です","wizard_container_title":"それでは、始めましょう。","wizard_container_verifying_login_title":"ログインの確認"}' ); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }); const o = a(i(1)), s = i(3); i(645); class _ extends o.Component { constructor() { super(...arguments), (this.state = { error: null, errorInfo: null }); } componentDidCatch(e, t) { var i, n; this.setState({ error: e, errorInfo: t }), null === (n = (i = this.props).logError) || void 0 === n || n.call(i, e, t); } render() { var e; const { error: t } = this.state; return t ? o.createElement( "div", { className: "error-boundary" }, o.createElement( "h1", null, o.createElement(s.FormattedMessage, { id: "error_boundary_title", description: "Title for page that shows any unforeseen application errors", defaultMessage: "Oh no! Something went wrong." }) ), o.createElement( "h3", null, o.createElement(s.FormattedMessage, { id: "error_boundary_subtitle", description: "Subtitle for page that shows any unforeseen application errors", defaultMessage: "Well, this is embarrassing. We encountered an error in the app.", }) ), o.createElement("p", { className: "error" }, t.toString()), o.createElement("h3", null, o.createElement(s.FormattedMessage, { id: "error_boundary_label_error_details", description: "Label shown above a detailed ", defaultMessage: "Error Details:" })), o.createElement("p", { className: "stack" }, null === (e = this.state.errorInfo) || void 0 === e ? void 0 : e.componentStack) ) : this.props.children; } } t.default = _; }, , , , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.errors = t.labels = t.prompts = t.titles = t.buttons = void 0); const n = i(1051); (t.buttons = (0, n.defineMessages)({ BACK: { id: "navigation_back", description: "Label for button that returns to the previous screen.", defaultMessage: "BACK" }, CANCEL: { id: "navigation_cancel", description: "Label for button that cancels or aborts the current action.", defaultMessage: "CANCEL" }, CONTINUE: { id: "navigation_forward", description: "Label for button that advances to the next screen.", defaultMessage: "CONTINUE" }, SKIP: { id: "navigation_skip", description: "Label for button that skips the current screen and advances to the next screen.", defaultMessage: "SKIP" }, CLOSE: { id: "modal_close", description: "Label for button that closes a modal dialog (e.g. a warning).", defaultMessage: "CLOSE" }, FINISH: { id: "label_button_finish", description: "Label for button that completes the current procedure (e.g. commissioning wizard).", defaultMessage: "FINISH" }, SAVE: { id: "modal_save", description: "Label for button that saves the settings shown on the current screen.", defaultMessage: "SAVE" }, EDIT: { id: "label_button_edit", description: "Label for button that edits the setting shown on the current screen.", defaultMessage: "EDIT" }, DELETE: { id: "control_delete", description: "Label for button that deletes or removes the specified item.", defaultMessage: "DELETE" }, CONNECT: { id: "control_connect", description: "Label for button that connects to the network or devices show on the current screen.", defaultMessage: "CONNECT" }, REFRESH: { id: "modal_refresh", description: "Label for button that refreshes or reloads the current list or screen.", defaultMessage: "REFRESH" }, UPLOAD: { id: "label_button_upload", description: "Label for button that uploads a file or data to the device or service.", defaultMessage: "UPLOAD" }, SCAN_BARCODE: { id: "label_button_scan_barcode", description: "Label for button that will scan a barcode using the camera.", defaultMessage: "SCAN BARCODE" }, SCAN_QRCODE: { id: "label_button_scan_qrcode", description: "Label for button that will scan a QR code using the camera.", defaultMessage: "SCAN QR CODE" }, ENTER_MANUALLY: { id: "label_button_enter_manually", description: "Label for button that enables manual data entry rather than scanning a barcode.", defaultMessage: "ENTER MANUALLY" }, FACTORY_RESET: { id: "button_label_factory_reset", description: "Button label for a factory reset action.", defaultMessage: "RESET TO FACTORY DEFAULTS" }, CONFIRM: { id: "button_label_confirm", description: "Button label for confirming an action.", defaultMessage: "CONFIRM" }, })), (t.titles = (0, n.defineMessages)({ gridCode: { id: "grid_code_container_title", description: "Grid Code is the techncial specification of the electric grid standard. This term may appear as the title of a screen or section showing the Grid Code settings and parameters.", defaultMessage: "Grid Code", }, ethernet: { id: "network_view_ethernet_title", description: "Title for a screen or section showing the device's Ethernet connection details or configuration options.", defaultMessage: "Ethernet" }, wifi: { id: "network_view_wifi_title", description: "Title for a screen or section showing the device's Wi-Fi connection details or configuration options.", defaultMessage: "Wi-Fi" }, cellular: { id: "network_view_gsm_title", description: "Title for a screen or section showing the device's cellular connection details or configuration options.", defaultMessage: "Cellular" }, metering: { id: "title_metering", description: "Title for a screen or section showing the device's metering configuration and connection status", defaultMessage: "Metering" }, networks: { id: "title_networks", description: "Title for a screen or section showing the device's networking devices, settings, and status.", defaultMessage: "Networks" }, service: { id: "title_service", description: "Title for a screen or section showing features accessible to a service person.", defaultMessage: "Service" }, siteInfo: { id: "title_site_info", description: "Site Info is a screen for configuring different items relating to the site. e.g. Inverter is connected to Solar Roof or PV Panels.", defaultMessage: "Site Info" }, siteMeter: { id: "title_site_meter", description: "Site Meter is an electrical meter that is installed at the interconnection point where the site connects to the electric grid. This term may appear as the title of a screen or section showing a Site Meter configuration, or denote ", defaultMessage: "Site Meter", }, softwareUpdate: { id: "title_software_update", description: "Title for a screen or section showing the device's software update status.", defaultMessage: "Software Update" }, software: { id: "title_software", description: "Title for a screen or section showing the device's software version and software update status.", defaultMessage: "Software" }, alerts: { id: "alert_container_title", description: "Title for a screen or section showing the device's alerts or alert status.", defaultMessage: "Alerts" }, installation: { id: "title_installation", description: "Title for a screen or section showing the device's installation parameters and settings.", defaultMessage: "Installation" }, summary: { id: "summary_container_title", description: "Title for a screen or section showing a summary of the device's configuration.", defaultMessage: "Summary" }, })), (t.prompts = (0, n.defineMessages)({ requiredField: { id: "prompt_required_field", description: "Prompt shown next to a field that is required.", defaultMessage: "This field is required." }, select: { id: "dropdown_default_selection", description: "Prompt shown in a dropdown selector that does not have a preselected value and a user selection is desired or required.", defaultMessage: "Select" }, })), (t.labels = (0, n.defineMessages)({ factoryReset: { id: "label_factory_reset", description: "Label for a factory reset.", defaultMessage: "FACTORY RESET" }, partNumber: { id: "label_part_number", description: "Label for the device part number", defaultMessage: "Part Number" }, partNumberTPN: { id: "label_part_number_psn", description: "Label for a Tesla part number. 'TPN' is how it is identified on the device enclosure.", defaultMessage: "Part Number (TPN)" }, serialNumber: { id: "label_serial_number", description: "Label for the device serial number", defaultMessage: "Serial Number" }, serialNumberTSN: { id: "label_serial_number_tsn", description: "Label for a Tesla serial number. 'TSN' is how it is identified on the device enclosure.", defaultMessage: "Serial Number (TSN)" }, model: { id: "label_model", description: "Label for the device model", defaultMessage: "Model" }, })), (t.errors = (0, n.defineMessages)({ invalidPassword: { id: "error_messages_invalid_password", description: "indicates an error due to an invalid password.", defaultMessage: "Invalid password. Please try again." } })); }, function (e, t) {}, , function (e, t, i) { e.exports = i.p + "012955c70685614a5639d326f41890bd.png"; }, function (e, t, i) { e.exports = i.p + "230aeae00823cd3b622d093948d9c433.png"; }, function (e, t, i) { e.exports = i.p + "4e28cc8f2bdf3ba640331daa2c453341.png"; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAADCAYAAAB8mEQQAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA7SURBVHgBtY4xEQAgDMT6/aUjEmoFB0jBIVawwNyFeoBmy5ILzMxJLgAuj2RjR0RnRmfKkD80VT2oOL0stgxY/9w14gAAAABJRU5ErkJggg=="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAADCAYAAAB8mEQQAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA4SURBVHgBrY4BEQAgCMTeT0IVmxCNJkbBJJx8BlmAbSszraoOAMM/l+RmC31IKDToLWaogBl0Gg8ymhHD+8iQzwAAAABJRU5ErkJggg=="; }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return _; }), i.d(t, "registrationSelector", function () { return c; }); var n = i(2); function r(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function a(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? r(Object(i), !0).forEach(function (t) { o(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function o(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { isFetching: !1, isSaving: !1, isRegistering: !1, didInvalidate: !1, name: "", email: "", phone: "", street: "", city: "", state: "", zip: "", country: "", privacyNotice: null, limitedWarranty: null, gridServices: null, marketing: null, consent: !1, registered: !1, timedOut: !1, }; function _(e = s, t) { switch (t.type) { case n.REQUEST_CUSTOMER_INFORMATION_CONFIG: case n.REQUEST_REGISTRATION: return a(a({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case n.REQUEST_SAVE_LEGAL_INFORMATION: return a(a({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case n.REQUEST_REGISTER_CUSTOMER_INFORMATION: return a(a({}, e), {}, { isRegistering: !0, didInvalidate: !1 }); case n.RECEIVE_CUSTOMER_INFORMATION_CONFIG_SUCCESS: return a( a(a({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt }, l(e, t)), {}, { registered: null != t.registered ? t.registered : e.registered, timedOut: null != t.timed_out_registration ? t.timed_out_registration : e.timedOut } ); case n.RECEIVE_REGISTRATION_SUCCESS: return a(a({}, e), {}, { isFetching: !1, didInvalidate: !1, registered: t.registered, timedOut: t.timed_out_registration }); case n.RECEIVE_SAVE_LEGAL_INFORMATION_SUCCESS: return a( a({}, e), {}, { isSaving: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, privacyNotice: t.privacy_notice, limitedWarranty: t.limited_warranty, gridServices: t.grid_services, marketing: t.marketing, consent: t.consent, registered: null != t.registered ? t.registered : e.registered, timedOut: null != t.timed_out_registration ? t.timed_out_registration : e.timedOut, } ); case n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_SUCCESS: return a( a(a({}, e), {}, { isRegistering: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt }, l(e, t)), {}, { registered: null != t.registered ? t.registered : e.registered, timedOut: null != t.timed_out_registration ? t.timed_out_registration : e.timedOut } ); case n.RECEIVE_CUSTOMER_INFORMATION_CONFIG_ERROR: case n.RECEIVE_REGISTRATION_ERROR: return a(a({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case n.RECEIVE_SAVE_LEGAL_INFORMATION_ERROR: return a(a({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR: return a(a({}, e), {}, { isRegistering: !1, didInvalidate: !0 }, l(e, t)); case n.RESET_ALL: case n.RESET_CUSTOMER_INFORMATION: return s; default: return e; } } function l(e, t) { return { name: null != t.name ? t.name : e.name, email: null != t.email ? t.email : e.email, phone: null != t.phone ? t.phone : e.phone, street: null != (t.address || t.street) ? t.address || t.street : e.street, city: null != t.city ? t.city : e.city, state: null != t.state ? t.state : e.state, zip: null != t.zip ? t.zip : e.zip, country: null != t.country ? t.country : e.country, privacyNotice: null != t.privacy_notice ? t.privacy_notice : e.privacyNotice, limitedWarranty: null != t.limited_warranty ? t.limited_warranty : e.limitedWarranty, gridServices: null != t.grid_services ? t.grid_services : e.gridServices, marketing: null != t.marketing ? t.marketing : e.marketing, }; } const c = ({ registration: e }) => e; }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return c; }), i.d(t, "hasNetworkConnectionSelector", function () { return d; }); var n = i(60), r = i(2), a = i(37); function o(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function s(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(i), !0).forEach(function (t) { _(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : o(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const l = { networks: { isFetching: !1, didInvalidate: !1, items: [] }, accessPoints: { isFetching: !1, didInvalidate: !1, isScanning: !1, items: [] }, connectingNetwork: { didInvalidate: !1, networkName: "", interface: null, startedAt: null }, clientProtocols: { didInvalidate: !1, isFetching: !1, m2m: null, modbus: null, dnp3: null, service_shell: null }, }; function c(e = l, t) { switch (t.type) { case r.REQUEST_NETWORKS: return s(s({}, e), {}, { networks: s(s({}, e.networks), {}, { isFetching: !0, didInvalidate: !1 }) }); case r.RECEIVE_NETWORKS_SUCCESS: return s(s({}, e), {}, { networks: s(s({}, e.networks), {}, { items: t.networks || [], isFetching: !1, didInvalidate: !1 }) }); case r.RECEIVE_NETWORKS_ERROR: return s(s({}, e), {}, { networks: s(s({}, e.networks), {}, { isFetching: !1, didInvalidate: !0 }) }); case r.REQUEST_ACCESS_POINTS: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isFetching: !0, didInvalidate: !1 }) }); case r.RECEIVE_ACCESS_POINTS_SUCCESS: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isScanning: null == e.accessPoints.scanStartedAt && e.accessPoints.isScanning, isFetching: !1, didInvalidate: !1, items: t.accessPoints || [] }) }); case r.RECEIVE_ACCESS_POINTS_ERROR: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isFetching: !1, didInvalidate: !0 }) }); case r.REQUEST_SCAN_WIFI_NETWORKS: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isScanning: !0, didInvalidate: !1 }) }); case r.RECEIVE_SCAN_WIFI_NETWORKS_SUCCESS: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { scanStartedAt: t.receivedAt, didInvalidate: !1 }) }); case r.RECEIVE_SCAN_WIFI_NETWORKS_ERROR: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isScanning: !1, didInvalidate: !0 }) }); case r.REQUEST_CONNECT_ETHERNET: case r.REQUEST_CONNECT_WIFI: return s(s({}, e), {}, { connectingNetwork: { networkName: t.networkName, interface: t.interface, didInvalidate: !1, startedAt: t.startedAt } }); case r.RECEIVE_CONNECT_ETHERNET_SUCCESS: case r.RECEIVE_CONNECT_WIFI_SUCCESS: return s(s({}, e), {}, { connectingNetwork: s({}, l.connectingNetwork) }); case r.RECEIVE_CONNECT_ETHERNET_ERROR: case r.RECEIVE_CONNECT_WIFI_ERROR: return s(s({}, e), {}, { connectingNetwork: s(s({}, l.connectingNetwork), {}, { didInvalidate: !0 }) }); case r.CANCEL_NETWORK: return s( s({}, e), {}, { networks: s(s({}, e.networks), {}, { isFetching: !1, didInvalidate: !1 }), accessPoints: s(s({}, e.accessPoints), {}, { isFetching: !1, didInvalidate: !1, isScanning: !1 }), connectingNetwork: s({}, l.connectingNetwork), } ); case r.REQUEST_CLIENT_PROTOCOLS: return s(s({}, e), {}, { clientProtocols: s(s({}, e.clientProtocols), {}, { isFetching: !0, didInvalidate: !1 }) }); case r.RECEIVE_CLIENT_PROTOCOLS_SUCCESS: return s(s({}, e), {}, { clientProtocols: s(s({}, t.clientProtocols), {}, { didInvalidate: !1, isFetching: !1 }) }); case r.RECEIVE_CLIENT_PROTOCOLS_ERROR: return s(s({}, e), {}, { clientProtocols: s(s({}, e.clientProtocols), {}, { didInvalidate: !0, isFetching: !1 }) }); case r.RESET_ALL: case r.RESET_NETWORK_CONFIG: return l; default: return e; } } function d(e) { let t = (e.network && e.network.networks && e.network.networks.items) || [], i = Object(n.cellularDisabledSelector)(e); for (let e of t) if ((!i || e.interface !== a.d.GSM) && e.active) return !0; return !1; } }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const s = a(i(1)), _ = i(3), l = i(35), c = i(17), d = i(28), u = i(283), m = i(26), p = i(133), g = i(150), w = o(i(5)), v = a(i(4)); i(823); const f = (0, _.defineMessages)({ heading: { id: "heading_change_password", defaultMessage: "Change Password" }, currentPasswordPlaceholderText: { id: "current_password_placeholder_text", description: "Placeholder text shown in current password field", defaultMessage: "Enter your current password" }, }); t.default = (0, l.connect)(function (e) { return {}; })( (0, _.injectIntl)(function (e) { const { dispatch: t, intl: i } = e; let n, [r, a] = (0, s.useState)(""), [o, l] = (0, s.useState)(!1), [h, E] = (0, s.useState)(null), [b, y] = (0, s.useState)(null); return ( (0, s.useEffect)(() => { t((0, p.showHeader)("header-default", { title: i.formatMessage(f.heading) })); }, []), (0, s.useEffect)(() => { t((0, g.showBack)(null, "< " + i.formatMessage(d.buttons.BACK), c.browserHistory.goBack)); }, []), (n = h ? s.default.createElement("pre", { className: "form-control-static" }, h) : s.default.createElement( s.default.Fragment, null, s.default.createElement( "button", { type: "button", className: "btn btn-action", onClick: function () { l(!0), fetch(w.default.api.uri + "/password/generate", { method: "POST", credentials: w.default.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ password: r }) }) .then(v.checkStatus) .then(v.parseText) .then((e) => { const t = v.parseResponseText(e); if (!t || !t.password) throw new Error("Received invalid response"); v.checkResponseStatus(t), l(!1), E(t.password), y(null); }) .catch((e) => { console.error("Error generating password:", e), l(!1), E(null), y(e); }); }, disabled: !r || o, }, s.default.createElement(_.FormattedMessage, { id: "button_label_generate", defaultMessage: "GENERATE" }) ), o && s.default.createElement(u.LoadingSpinner, { className: "spinner password-generate-spinner" }) )), s.default.createElement( "div", { className: "password-generate-container" }, s.default.createElement( "p", { className: "password-generate-help-text" }, s.default.createElement(_.FormattedMessage, { id: "password_generate_help_text", defaultMessage: "Enter the existing password to generate a new random password." }) ), s.default.createElement( "form", { role: "form", className: "form-horizontal", onSubmit: (e) => e.preventDefault() }, s.default.createElement( "div", { className: "form-group" }, s.default.createElement("label", { htmlFor: "currentPassword", className: "col-sm-4" }, s.default.createElement(_.FormattedMessage, Object.assign({}, m.passwordFormLabels.currentPassword))), s.default.createElement( "div", { className: "col-sm-8" }, s.default.createElement("input", { type: "password", id: "currentPassword", className: "form-control", placeholder: i.formatMessage(f.currentPasswordPlaceholderText), onChange: (e) => a(e.target.value), autoComplete: "off", autoCorrect: "off", required: !0, }) ) ), s.default.createElement( "div", { className: "form-group" }, s.default.createElement("label", { className: "col-sm-4" }, s.default.createElement(_.FormattedMessage, Object.assign({}, m.passwordFormLabels.newPassword))), s.default.createElement("div", { className: "col-sm-8" }, n) ) ), !!h && s.default.createElement( "p", { className: "password-generate-notice" }, s.default.createElement(_.FormattedMessage, { id: "password_generate_notice", defaultMessage: "The password has been changed. Record the new password before leaving this page." }) ), !!b && s.default.createElement( "p", { className: "password-generate-error" }, s.default.createElement(_.FormattedMessage, { id: "password_generate_error", defaultMessage: "There was an error generating a new password. Verify connectivity and the current password and try again." }) ) ) ); }) ); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__awaiter) || function (e, t, i, n) { return new (i || (i = Promise))(function (r, a) { function o(e) { try { _(n.next(e)); } catch (e) { a(e); } } function s(e) { try { _(n.throw(e)); } catch (e) { a(e); } } function _(e) { var t; e.done ? r(e.value) : ((t = e.value), t instanceof i ? t : new i(function (e) { e(t); })).then(o, s); } _((n = n.apply(e, t || [])).next()); }); }, s = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const _ = a(i(1)), l = i(17), c = i(3), d = i(35), u = i(28), m = i(133), p = i(55), g = i(2), w = s(i(14)), v = i(455), f = i(21); i(824); function h(e) { return _.default.createElement( "div", { className: "factory-reset-modal-container" }, _.default.createElement("p", null, _.default.createElement(c.FormattedMessage, { id: "prompt_factory_reset_confirmation", defaultMessage: "Confirm you really wish to reset the unit to factory settings?" })), _.default.createElement( "div", { className: "btn-group" }, _.default.createElement("button", { className: "btn btn-secondary factory-reset-modal-button", onClick: e.onCancel, type: "button" }, _.default.createElement(c.FormattedMessage, Object.assign({}, u.buttons.CANCEL))), _.default.createElement("button", { className: "btn btn-danger factory-reset-modal-button", onClick: e.onConfirm, type: "button" }, _.default.createElement(c.FormattedMessage, Object.assign({}, u.buttons.CONTINUE))) ) ); } t.default = (0, d.connect)( function (e) { return { din: e.configuration.din, isEngineer: (0, f.isEngineer)(e.authentication) }; }, function (e) { return { destroyModal: (t) => { e((0, p.destroyModal)(t)); }, showHeader: (t) => { e((0, m.showHeader)("header-default", { title: t })); }, showModal: (t, i, n) => { e((0, p.showModal)(t, i, n)); }, setErrors: (t) => { e((0, m.updateHeader)("header-default", { errors: t })); }, clearErrors: () => { e((0, m.updateHeader)("header-default", { errors: [] })); }, }; } )( (0, c.injectIntl)(function (e) { const { intl: t, din: i, isEngineer: n } = e, [r, a] = (0, _.useState)(!1); e.showHeader(t.formatMessage(u.titles.service)); let s = (0, _.useMemo)(() => (0, v.getTEDAPI)({ din: i, isEngineer: n }), [i, n]); const d = () => o(this, void 0, void 0, function* () { console.info("Initiated factory reset"); try { a(!0), yield s.common.factoryReset({}), console.info("Factory reset succeess"), l.browserHistory.replace("/"); } catch (t) { if ((console.error("Factory reset failed", t), !(t instanceof Error))) throw t; e.setErrors([new w.default(g.FACTORY_RESET, t.message)]); } finally { a(!1); } }), m = (t) => { t && d(), e.destroyModal("FACTORY_RESET_MODAL"); }; return _.default.createElement( "div", { className: "service-container" }, _.default.createElement("h3", null, _.default.createElement(c.FormattedMessage, Object.assign({}, u.labels.factoryReset))), _.default.createElement( "p", null, _.default.createElement(c.FormattedMessage, { id: "factory_reset_message", defaultMessage: "This will cause the unit to reset to the default state as provided by Tesla. This action cannot be undone. The unit will need to be re-commissioned by a professional installer before operation is possible. You may need to reconnect to the unit's WiFi network.", }) ), _.default.createElement( "button", { className: "btn btn-primary btn-block", disabled: r, onClick: () => { e.clearErrors(), e.showModal("FACTORY_RESET_MODAL", { centered: !0, showCancel: !1, contentView: _.default.createElement(h, { onCancel: () => m(!1), onConfirm: () => m(!0) }) }, void 0); }, type: "button", }, _.default.createElement(c.FormattedMessage, Object.assign({}, u.buttons.FACTORY_RESET)) ) ); }) ); }, , , , , , , function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAAXNSR0IArs4c6QAAAkhJREFUOBGtlT9oU1EUxvNenslSEAyIZChKKYUiOAmiIFjoIEUEqVMpCIX8GSIEYnFxdZAuGkJIWsGlgxAFkSKYvRQ6udRBsmSIU9ZiQv74+17vS5v38pSUXrg55537fd89995zb6xISEun07cYWh0Oh8vYWXqC3qY3LcuqY2uVSuUHNtAsfySVSs1BekP8NoK72D16I5lMtlutloTn6Ctg1rCHYDar1WoDf9TGRLPZ7MPBYPAB4FY8Hn9XLBY7I6TPyeVy8U6n8xzxgm3bz8rl8jcPMhKVYL/ffx+NRp8AOPAA/7Pw7sD7DG/DE3ZFzZL3mfHxNILehBJmhV9Y4V1tha0B7aGW/C/BfD5/xRPxW/HEN2cRscwpf43FYvP+PWQFlwC+hvDUTD6D/5JsdvzC2uNut/uL+CNlqrLZ9Qsa0gPsHw5tAaHr+Pfpb0lkETvWxJcOwVUHR3VYGEOYD4S+46q7jbo8IvsGnBsEjkz4rNljbMshosIeq7OzKM9H7DIHuQ4p6ThOWHVIZ1bLT6iwPfIkm8lkltjbJid8E+F7pVJpIt7oJJSpd1N+TxJUDMFjMvzIdmTCMIqbG9dWpk26rl5oo7h/UtzboYDTAek0bbKo46ycxoMegtd6vd7V4EggojehrkxrOGuqswDEBMh0CfdV2Lji4ksHt+biqLtPnO4L9+OcP+JLR3RlGuEQNpmloDus72mbeOJLR1xXlFNt6PnSazOtsPDiiS8diY6ePn0AuNj3VKJq7M3Fvvwnsie/5vU613/UX4d8Ju+yyDc7AAAAAElFTkSuQmCC"; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.unitMessages = t.phaseMessages = void 0); const n = i(3), r = i(134); (t.phaseMessages = (0, n.defineMessages)({ [r.PhaseType.SINGLE]: { id: "phase_type_single", description: "Identifies a grid or installation that has a single phase.", defaultMessage: "Single-Phase" }, [r.PhaseType.TWO]: { id: "phase_type_two", description: "Identifies a two-phase grid or installation.", defaultMessage: "Two-Phase" }, [r.PhaseType.THREE]: { id: "phase_type_three", description: "Identifies a three-phase grid or installation.", defaultMessage: "Three-Phase" }, [r.PhaseType.SPLIT]: { id: "phase_type_split", description: "Identifies a split-phase grid or installation.", defaultMessage: "Split-Phase" }, [r.PhaseType.WYE_LL]: { id: "phase_type_wye_ll", description: "Identifies an L-L (line-to-line) installation on wye 3-phase grid (also called a star connection).", defaultMessage: "Wye L-L" }, })), (t.unitMessages = (0, n.defineMessages)({ hertz: { id: "display_frequency_hertz", defaultMessage: "{frequency}Hz" }, volts: { id: "display_voltage_volts", defaultMessage: "{voltage}V" }, amps: { id: "display_current_amps", defaultMessage: "{current}A" }, watts: { id: "display_power_watts", defaultMessage: "{power}W" }, kiloWatts: { id: "display_power_kilowatts", defaultMessage: "{power}kW" }, wattHours: { id: "display_energy_watt_hours", defaultMessage: "{energy}Wh" }, kiloWattHours: { id: "display_energy_kilowatt_hours", defaultMessage: "{energy}kWh" }, ohms: { id: "display_resistance_ohms", defaultMessage: "{resistance}Ω" }, kiloOhms: { id: "display_resistance_kiloohms", defaultMessage: "{resistance}kΩ" }, })); }, function (e, t, i) {}, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }); const o = a(i(1)); i(652); class s extends o.Component { constructor() { super(...arguments), (this.state = { focused: !1 }); } render() { var e, t, i; let n = null; if (this.props.inputAddonView) { let t = null !== (e = this.props.inputAddonProps) && void 0 !== e ? e : { className: "input-group-addon" }; n = o.createElement("div", Object.assign({}, t), this.props.inputAddonView); } let r = null !== (t = this.props.className) && void 0 !== t ? t : "input-group"; this.state.focused && (r += " focus"); let a = null !== (i = this.props.inputProps) && void 0 !== i ? i : { type: "text", className: "form-control", autoCapitalize: "none", autoComplete: "off", autoCorrect: "off" }; return o.createElement("div", { className: r, onFocus: this._handleFocus.bind(this), onBlur: this._handleBlur.bind(this) }, o.createElement("input", Object.assign({}, a)), n); } _handleFocus() { this.setState({ focused: !0 }); } _handleBlur() { this.setState({ focused: !1 }); } } t.default = s; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const s = a(i(1)), _ = i(50), l = o(i(153)); i(749); class c extends s.Component { constructor(e) { super(e), (this.state = { collapsed: !!e.collapsedOnMount }); } render() { const { style: e, collapsedHeader: t } = this.props; return s.createElement( "div", { className: "collapsible-container", style: e }, s.createElement("div", { className: "collapsible-header", role: "button", "data-toggle": "collapse", onClick: this._handleCollapseToggle.bind(this) }, t, this._getCaret()), this._getContent() ); } _getCaret() { return this.props.children && this.props.isCollapsible ? s.createElement("div", { className: this.props.caretClassName }, s.createElement("img", { className: (0, _.classNames)({ "rotate-90": !this.state.collapsed }), src: l.default, alt: "indicator" })) : null; } _getContent() { const { hasWell: e, children: t, id: i } = this.props; if (this.state.collapsed) return null; let n = t; return e && n && (n = s.createElement("div", { className: "well" }, n)), s.createElement("div", { id: "collapse-" + i }, n); } _handleCollapseToggle(e) { if ((e.preventDefault(), e.stopPropagation(), !this.props.isCollapsible)) return; const t = !this.state.collapsed; this.setState({ collapsed: t }), this.props.toggleCallback && this.props.toggleCallback(t); } } t.default = c; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAcCAYAAAB2+A+pAAAAAXNSR0IArs4c6QAAArZJREFUSA2tVs1rE1EQn9lNNQfFg9QvUPygBUEsGIQgCNpupc3FgxfpTa+CXwhCQVrwpCgWIf+JJKmuIvZSKB4iglCx9eBBFBHRSmmzO868xP1IXnb3rQ4smTfv9/Fm8/btIhgG1Z0zAN5tICgrKsIigH0PJ92XJlJoAqbG2BXw6TEAWXEe+mDhVZx4Xo3X+48yG1PNKQN6C9xpQSuH0AKyT2PF5TuQHl0r1xOIZi1Av9rXVGiyIMYorF4mVs1kDPOvLgPRiRhTNxCMYDNE6q2mZ84OaHnvuaPBDHoACF+hYA/huPsjCZ/esefPZjYVJ1mgcFIisWPu9ih3+0b9fxGh9Q0Pyjdeq8rioxIUt9iRWU5loxXs49z1u/hEOEruuOXPdZsKdWn5JzRX19QleU/IRhNuQvQ1poZznjfUOR3X8ykoR/OgKAlzlUasGA60xlSb3ArkPwxhOTPWUFoautYYcP0mr/iIBm9WEg3R0kSPMT0d38e4aQ02b2m6oxnj9xiD17rPG2pbDPUvA9ESza6IGdP86Cmen+rC/I/hVEc70AqM1Rkrbx7ipzAlLAwh0bwvTTRZO3qOB8bQWLjEpqW+5MhEaWg7HNpdVJfkmUK0xaMTaunt89hf5p286+9E2q/ntZ9l2w67T+MA4hcoWMNyjrc7bvkzJqZiYDFTLqOQxsSLA8kdG4ZN/y3f5oGsIs2VXzBxp6ngjbsjMHLY4CFA2IQB65jFptdMTMWt+uQTfP6+oS7JjUIaZE+5WRUjIoMPDBYDSjQPiulJhb+fcK+8RE3i1oX9vCXaDMlzxB6k+tlV9j2Yg5yfgvCRP+Kwnl8hJ5M9LX6uHrD5Wk4Jc5p4saeFjrvCH+MX+b/+ba5iymAP9hLP4Nih2qi8f6/zRjvJJ+tOU8lEPME3bmyJMXNYefFBsH8AhWv0MUn9RD0AAAAASUVORK5CYII="; }, function (e, t, i) { "use strict"; var n; Object.defineProperty(t, "__esModule", { value: !0 }), (t.BarcodeReader = t.BarcodeError = t.DecodeStatus = t.BarcodeFormat = void 0), (function (e) { (e.None = "None"), (e.Code39 = "Code39"), (e.Code128 = "Code128"), (e.QRCode = "QRCode"); })(t.BarcodeFormat || (t.BarcodeFormat = {})), (function (e) { (e.NoError = "NoError"), (e.NotFound = "NotFound"), (e.FormatError = "FormatError"), (e.ChecksumError = "ChecksumError"), (e.InternalError = "InternalError"); })((n = t.DecodeStatus || (t.DecodeStatus = {}))); class r extends Error { constructor(e, t) { super(`${e}${t ? ": " + t : ""}`), (this.status = e), (this.error = t); } } t.BarcodeError = r; t.BarcodeReader = class { constructor(e = "") { (this._queue = []), (this._disabled = !1), (this._worker = new Worker(e + "/barcode.js")), (this._worker.onmessage = this._handleWorkerMessage.bind(this)), (this._worker.onerror = this.stop.bind(this)); } _handleWorkerMessage(e) { const t = this._queue.shift(); if (!t) return; const { result: i } = e.data; if (i.status !== n.NoError) return void t.reject(new r(i.status, i.error)); const { format: a, text: o } = i; t.resolve({ format: a, text: o }); } scanBarcode(e, t = []) { if (this._disabled) { const e = new r(n.InternalError, "BarcodeReader is unavailable."); return Promise.reject(e); } const i = { file: e, hints: { tryHarder: !0, tryRotate: !0, formats: t.join("|") } }; return this._worker.postMessage(i), new Promise((e, t) => this._queue.push({ resolve: e, reject: t })); } stop() { if (this._disabled) return; this._worker.terminate(), (this._disabled = !0); const e = this._queue; this._queue = []; const t = new r(n.InternalError, "BarcodeReader is unavailable."); e.forEach((e) => e.reject(t)); } }; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAYAAAA4qEECAAAAAXNSR0IArs4c6QAACMRJREFUeAHtm0mIHVUUhuOQwSFqoolGMxjFOKMiCk4kiAgOCxUUwQFE0ZUrQXEvuHYtigQcViJOiIKYRcCoiIkYBzTSMcEhDtEYxxj9v5f6w/Hyujs1va7qvgf+3HOHqjr3e/edulWvM2tWtkwgE8gEMoFMIBPIBDKBTCATyAQygUwgE8gEMoFMoCSBg0qOH/Vw4jtcmi/Nkw6VZkvYnkJ/qtwl/Sr9K3XSugb6MFE6QzpLOlNaJgGXOA8pyugfrDbrH/nbpU3SxkK7VXbCugAagOdIl0jnSXMl4jJAygg3+vSlH4DHA/5t6XVpg8Q3YMpsKkHP0awvla6WjpWIBUXAhka7Vza+4U4E2sdS/iA9K70okWpGbgQ9amPirN7rpKMlw3UZAeG7PgwufbHd411yTuQxO+U/Ib0g7ZVGZgQxSluqi90srZAM0CBcNySX9OMb1oH68XiOpe5zfSz/UekTaSRGAKOyi3Whu6QFEhNmh0CJAcFGG6KNMRFQ7Is+Y+I4z8vncZ+PWazxN0iklJHAdkC6XmvGJK+XrpHwMSaMeeKu05ZC8TGxfSI/9jG/eA36LHL+aon0xU2TD7U1axs027U7pPOLGRhonHycnNtpsx/BDWtjDh5jsK4zHn+iMcTGbmed1NqNkkDasoU68Z3SIsmADIJ69IGRynDYlu2UfpF+ln6S6OP8xxXiGn6gSc/jOtfET6/r2L5S333SVqlx4yJtGJO+VwIAk/Nkos+EMdqQAVAC9oNCn6lkTzyRccy50mXS5dISiTZfL/WHxcPYMekWiQ+1UWsDNAHfJp0qcX5PNvU9efdT8kTHA8ZWqY6t0sF8m66UOK+vRQyOg3YU2/DXS/dIk324GnLgRgBNGw8gPOnZCN6W+p7kFxrwlPSmRHqoa+wmOBc3uRXSSRLXMljmHevRZzw3yHVSY9Y0aG4sayQCxyj3Drx9vtvdx83naekliXTRtO3QCV+WPpdIKTzeGzalfeKyT3mB9I30kdSIxYnXPeEJOgFf12FfU64TJ4MP2LXSt9Io7BRd5DFppeRYgIpclzuos9UjddwofSjVtqZWNIHeJB1VREQ9musut6jzSamNVRyvG312K69K3DSXS8TiFIKfQmefTQp8Tqq9x24KNPtQ0oYDMlDq9uUO+r9UuVb6i4YRG6nqFelCaZnk1WwOrhMzYvfynbRJqmURQtUTzdaBd0tHSA4wljF4tk2PS79LU2nc7J6XVhZBOMZY0sU8uLFeJNWKmRPXtbN1Ap4AWb2p9qrNItBnpFoB6/gmjJ0NDye7pQg3XSD08V7kdqmW1QXNV46vIYC5eRgqdfwInrv/91JXjJ3IQxIMUkXg+PdLfHMrW13Qy3VlftMDKmbAhk6JxqRPpa4ZN8f3JBbMMMGH9qXSVVJlqwv6dF3ZcNPV7DrlW5UjbP/AR3SJdAXDJbZRv7VOKHVAz9GFT5YA6RRhuIavrsFK/hqno/a+4mJlw8KrOvoAx66VvH0dNJT5pw7oE3UhA3WKAHT096j+bpmApmgsDzJABmpkQp129tTc8K+QKlk8adkTRNDjrWi2c+xDu27sk7dJ8AAuYAFM3W20r5EqGSepajxyAxjzynYacQrZsq+7F/++pihTsBEyoFdXnUlV0BxHviJNkB5iuoh+n0DzxOiV7HRBGcUzA/XSVhX0kcWV4opOV/XfGsMbsL7YegXKIzpMECsYuU7JBmClVNo4uIqxmg2WFUyqcGmf/IzfF+Obye4ohWzgLldVmVBV0HN1MSAC28C5fqz/RkPPjFe2ThtOIzCygL2oypw4WRXjOEMd7/hd43V0uH27YuObmRpztfHyrLTVAT1eWuBTx/q4orcpblIIFuHGOq8cSltV0AQx7JOPAaSBxr6u+vyN9R+TBOeFNMmw/3dXBc2OYjKQ5PG+Ga9w0x8kUrDsTEpbk6BT8PNKRzP1B2xUCICMcFN/c5Uwq4Lm65WmjhQ0e86+2QYFvE1iZwFgS+7A+LXlncIvVVTd3pHLAMsN0aLuNkpAVz2/Dp0SY6f0sMSNnPSISCWUtD0o8XxQ2io9TuoqXPi05GoGTTPwWQ2sAALsk40p2DekhRJbORYVT40PSLxSrWTAqGprdOD84uAImSbXCXpzMWZGF3W+2jsKoGnqADJtlIulbCJQBzQ/tEbI9g0Z0OTpyr9K6NhpY1VzNADYBq0oSAAVGXKEzs6mDy//i6m0U9QBDUxel/rZn7rNwIHPI+uPUqWNvk/Y97IOaOYOUP/Skq5q6hglv7fxZmzGWl3QPLgcL5Hr4ypmNwNg2tBsiW1eF/5KSWGM3uqC9ipeoNANlzb/CMCMPIa/d+MvOv12jL4ZY3VBA4q/X1siGTRtwMUovdKpswMhX9M2o6wJ0MBklR4jRbBOG7Hkw+DmycqeUdYEaICxqgFNLsYAPp4Yw06EdwaMmRHWFGhgAdtPgjFdGLjf9tEHbB7fOcbtcqevNQmat1yIm55Bx7QBRaAaPHVg+zjq09aaBA0kVijnJDUAFNCY4cbSHwY5mx8JeCM4bVd306DFapB7gUd6iGBT3x8CJXFwDI/r3FjdJ3d6WBugIcONjq0c4LxyAT3Mdxsl8bC6eZLkIcgfjtx+W1uggcavFbwLicAMztAZh8V2fIzj+FbwBpAPjDpii4j5vPtqHf+3LdBMm3zL/yNkhQ5LI4as7v0rPfoRPu3+AOxn0JAoDDikEaCkf0ZGH7BjaV/NQ/votxiD3wtrc0VHAOxGuMkN240wzsANkdIr3jBjnbb4yM85Om2jAg0E3kfzBo+V7a99BKvm/avV7WlbrGfQ0BjHyNv8qkzpv2TyanYZV7CBu+S09jNoaExiPA0aODuKaAY5rGSc2zPoSG0CH2AAJ53wVAi4mFJU3Z+78RmP9RI0k+uSAZoV7n0zsTmlkG4MGZ/YfYOU223rGuiUFvFZ9MVVHev42TKBTCATyAQygUwgE8gEMoFMIBPIBDKBTCATyAQygelF4D841E51Be+GwQAAAABJRU5ErkJggg=="; }, function (e, t, i) { e.exports = i.p + "25be833719104362501e2268c5346d10.png"; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAAAXNSR0IArs4c6QAAAJFJREFUGBlj+P//fxsQ5zDgAkBJDSB+CsRFuNQwACVVgfgxEFfgU6QIVPAAiOvwKZIDKrgLxC34FEkDFdwE4i6QIkZsKoGSkkDx/UC8nQmbAqCYCBALAPFtDHmgbkMgfgXEKdgkTYESr4E4HpukJVDiLRBHYpO0BUq8A+IQbJKOUEl/DEmQAFByBRB7Y5UECgIAfeZ8AwjCztMAAAAASUVORK5CYII="; }, function (e, t, i) { e.exports = i.p + "3b8bde11a1eab10668c1dbaf6dbd94ad.png"; }, function (e, t, i) { e.exports = i.p + "fd509b9190bcc31cd81e9e21c97fe678.png"; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.DevicesWithVitals = t.SiteControllerConnectedDeviceWithVitals = t.DeviceVital = void 0); const n = i(770), r = i(40), a = { name: "" }, o = { alerts: "" }, s = {}; function _(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } (t.DeviceVital = { encode(e, t = r.Writer.create()) { var i, n, a, o; return ( t.uint32(10).string(e.name), "intValue" === (null === (i = e.value) || void 0 === i ? void 0 : i.$case) && t.uint32(24).int64(e.value.intValue), "floatValue" === (null === (n = e.value) || void 0 === n ? void 0 : n.$case) && t.uint32(33).double(e.value.floatValue), "stringValue" === (null === (a = e.value) || void 0 === a ? void 0 : a.$case) && t.uint32(42).string(e.value.stringValue), "boolValue" === (null === (o = e.value) || void 0 === o ? void 0 : o.$case) && t.uint32(48).bool(e.value.boolValue), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, a); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.name = i.string(); break; case 3: o.value = { $case: "intValue", intValue: _(i.int64()) }; break; case 4: o.value = { $case: "floatValue", floatValue: i.double() }; break; case 5: o.value = { $case: "stringValue", stringValue: i.string() }; break; case 6: o.value = { $case: "boolValue", boolValue: i.bool() }; break; default: i.skipType(7 & e); } } return o; }, }), (t.SiteControllerConnectedDeviceWithVitals = { encode(e, i = r.Writer.create()) { void 0 !== e.device && void 0 !== e.device && n.SiteControllerConnectedDevice.encode(e.device, i.uint32(10).fork()).ldelim(); for (const n of e.vitals) t.DeviceVital.encode(n, i.uint32(18).fork()).ldelim(); for (const t of e.alerts) i.uint32(26).string(t); return i; }, decode(e, i) { const a = e instanceof Uint8Array ? new r.Reader(e) : e; let s = void 0 === i ? a.len : a.pos + i; const _ = Object.assign({}, o); for (_.vitals = [], _.alerts = []; a.pos < s; ) { const e = a.uint32(); switch (e >>> 3) { case 1: _.device = n.SiteControllerConnectedDevice.decode(a, a.uint32()); break; case 2: _.vitals.push(t.DeviceVital.decode(a, a.uint32())); break; case 3: _.alerts.push(a.string()); break; default: a.skipType(7 & e); } } return _; }, }), (t.DevicesWithVitals = { encode(e, i = r.Writer.create()) { for (const n of e.devices) t.SiteControllerConnectedDeviceWithVitals.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, s); for (o.devices = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.devices.push(t.SiteControllerConnectedDeviceWithVitals.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.parseWifiCode = void 0), (t.parseWifiCode = function (e) { if (!e.startsWith("WIFI:")) throw new Error("Not a WiFi code."); const t = (e = e.slice(5)).indexOf(";;"); -1 !== t && (e = e.slice(0, t)); let i = e.match(/(\\.|[^;])+/g) || []; if (((i = i.filter((e) => e.indexOf(":") > 0)), 0 == i.length)) throw new Error("Empty WiFi code"); let n = {}; return ( i.forEach((e) => { const t = e.indexOf(":"); if (-1 === t || 0 === t) return; let i = e.slice(0, t); if (n[i]) return; let r = e.slice(t + 1); r.startsWith('"') && r.endsWith('"') && (r = r.slice(1, -1)), (n[i] = r.replace(/\\\\/g, "\\").replace(/\\;/g, ";").replace(/\\:/g, ":").replace(/\\,/g, ",").replace(/\\"/g, '"')); }), n ); }); }, function (e, t, i) {}, , , , , , , , , , , , , , , , , , , , , , , , , function (e, t) {}, , , , , , function (e, t) {}, , , , , , , , , , , , , , , , , , , function (e, t, i) {}, function (e, t, i) {}, , function (e, t, i) { var n = { "./af": 299, "./af.js": 299, "./ar": 300, "./ar-dz": 301, "./ar-dz.js": 301, "./ar-kw": 302, "./ar-kw.js": 302, "./ar-ly": 303, "./ar-ly.js": 303, "./ar-ma": 304, "./ar-ma.js": 304, "./ar-sa": 305, "./ar-sa.js": 305, "./ar-tn": 306, "./ar-tn.js": 306, "./ar.js": 300, "./az": 307, "./az.js": 307, "./be": 308, "./be.js": 308, "./bg": 309, "./bg.js": 309, "./bm": 310, "./bm.js": 310, "./bn": 311, "./bn.js": 311, "./bo": 312, "./bo.js": 312, "./br": 313, "./br.js": 313, "./bs": 314, "./bs.js": 314, "./ca": 315, "./ca.js": 315, "./cs": 316, "./cs.js": 316, "./cv": 317, "./cv.js": 317, "./cy": 318, "./cy.js": 318, "./da": 319, "./da.js": 319, "./de": 320, "./de-at": 321, "./de-at.js": 321, "./de-ch": 322, "./de-ch.js": 322, "./de.js": 320, "./dv": 323, "./dv.js": 323, "./el": 324, "./el.js": 324, "./en-SG": 325, "./en-SG.js": 325, "./en-au": 326, "./en-au.js": 326, "./en-ca": 327, "./en-ca.js": 327, "./en-gb": 328, "./en-gb.js": 328, "./en-ie": 329, "./en-ie.js": 329, "./en-il": 330, "./en-il.js": 330, "./en-nz": 331, "./en-nz.js": 331, "./eo": 332, "./eo.js": 332, "./es": 333, "./es-do": 334, "./es-do.js": 334, "./es-us": 335, "./es-us.js": 335, "./es.js": 333, "./et": 336, "./et.js": 336, "./eu": 337, "./eu.js": 337, "./fa": 338, "./fa.js": 338, "./fi": 339, "./fi.js": 339, "./fo": 340, "./fo.js": 340, "./fr": 341, "./fr-ca": 342, "./fr-ca.js": 342, "./fr-ch": 343, "./fr-ch.js": 343, "./fr.js": 341, "./fy": 344, "./fy.js": 344, "./ga": 345, "./ga.js": 345, "./gd": 346, "./gd.js": 346, "./gl": 347, "./gl.js": 347, "./gom-latn": 348, "./gom-latn.js": 348, "./gu": 349, "./gu.js": 349, "./he": 350, "./he.js": 350, "./hi": 351, "./hi.js": 351, "./hr": 352, "./hr.js": 352, "./hu": 353, "./hu.js": 353, "./hy-am": 354, "./hy-am.js": 354, "./id": 355, "./id.js": 355, "./is": 356, "./is.js": 356, "./it": 357, "./it-ch": 358, "./it-ch.js": 358, "./it.js": 357, "./ja": 359, "./ja.js": 359, "./jv": 360, "./jv.js": 360, "./ka": 361, "./ka.js": 361, "./kk": 362, "./kk.js": 362, "./km": 363, "./km.js": 363, "./kn": 364, "./kn.js": 364, "./ko": 365, "./ko.js": 365, "./ku": 366, "./ku.js": 366, "./ky": 367, "./ky.js": 367, "./lb": 368, "./lb.js": 368, "./lo": 369, "./lo.js": 369, "./lt": 370, "./lt.js": 370, "./lv": 371, "./lv.js": 371, "./me": 372, "./me.js": 372, "./mi": 373, "./mi.js": 373, "./mk": 374, "./mk.js": 374, "./ml": 375, "./ml.js": 375, "./mn": 376, "./mn.js": 376, "./mr": 377, "./mr.js": 377, "./ms": 378, "./ms-my": 379, "./ms-my.js": 379, "./ms.js": 378, "./mt": 380, "./mt.js": 380, "./my": 381, "./my.js": 381, "./nb": 382, "./nb.js": 382, "./ne": 383, "./ne.js": 383, "./nl": 384, "./nl-be": 385, "./nl-be.js": 385, "./nl.js": 384, "./nn": 386, "./nn.js": 386, "./pa-in": 387, "./pa-in.js": 387, "./pl": 388, "./pl.js": 388, "./pt": 389, "./pt-br": 390, "./pt-br.js": 390, "./pt.js": 389, "./ro": 391, "./ro.js": 391, "./ru": 392, "./ru.js": 392, "./sd": 393, "./sd.js": 393, "./se": 394, "./se.js": 394, "./si": 395, "./si.js": 395, "./sk": 396, "./sk.js": 396, "./sl": 397, "./sl.js": 397, "./sq": 398, "./sq.js": 398, "./sr": 399, "./sr-cyrl": 400, "./sr-cyrl.js": 400, "./sr.js": 399, "./ss": 401, "./ss.js": 401, "./sv": 402, "./sv.js": 402, "./sw": 403, "./sw.js": 403, "./ta": 404, "./ta.js": 404, "./te": 405, "./te.js": 405, "./tet": 406, "./tet.js": 406, "./tg": 407, "./tg.js": 407, "./th": 408, "./th.js": 408, "./tl-ph": 409, "./tl-ph.js": 409, "./tlh": 410, "./tlh.js": 410, "./tr": 411, "./tr.js": 411, "./tzl": 412, "./tzl.js": 412, "./tzm": 413, "./tzm-latn": 414, "./tzm-latn.js": 414, "./tzm.js": 413, "./ug-cn": 415, "./ug-cn.js": 415, "./uk": 416, "./uk.js": 416, "./ur": 417, "./ur.js": 417, "./uz": 418, "./uz-latn": 419, "./uz-latn.js": 419, "./uz.js": 418, "./vi": 420, "./vi.js": 420, "./x-pseudo": 421, "./x-pseudo.js": 421, "./yo": 422, "./yo.js": 422, "./zh-cn": 423, "./zh-cn.js": 423, "./zh-hk": 424, "./zh-hk.js": 424, "./zh-tw": 425, "./zh-tw.js": 425, }; function r(e) { var t = a(e); return i(t); } function a(e) { if (!i.o(n, e)) { var t = new Error("Cannot find module '" + e + "'"); throw ((t.code = "MODULE_NOT_FOUND"), t); } return n[e]; } (r.keys = function () { return Object.keys(n); }), (r.resolve = a), (e.exports = r), (r.id = 643); }, , function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAABHklEQVQ4jc3UvU4CURAF4A8SQrTA2l4tsNJGaHwWhZoH0efQRCoVfAyipZIorQ12logWzIZls7hoKDjJFPfMz525d2bYdJQK9Ls4xl6cX/GI979e1MA9vvCdkQnuwqYQFVxGoGkEbeE0pBXcNGwuwicX23iILJ5R/+XiOl7Cto+trEEJ3TC4Ry2lq6IZUk3xO+iFT1fmP85DcYVyij/E0Pz9hsElKOM6dGcJeYBPvOVkNsQYnZBxcOlMaxhFjH0YxA3ZX2sG30lxneCaS2wH5VTtRT25MpKSR4pL/rBCyaz5U1hsm15Opsvaph8+N3KebK2NnaBiNk7J6PXQNh+9dnArjV4aDbMFMJG/HG5xkue4yvo6sri+nvxjfW0OfgDNJWMGCxPjVQAAAABJRU5ErkJggg=="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAABnElEQVQ4ja3Uu2tUURAG8N8md41eRAtBSGHnAwQLraKFItqlTgpT+MLCyk7srfwXrCxcMWqhG+1s7EMMiJpCAhYipItY+Ni4FmcuOdncbG6xA4dz75zvfHwzc2ZgBR0URmQd9DE/CtICV2OfDd8cevFdYhpHsIEvWML3JsTzNUrvhy9fPbzEVBPSZ3HpU/wfwgzO4Txu4BX+heIHaO9EOI5HmZJhOT0pFbOPBeyrI3sagDd40YD0ILoZrpUf3s0O2rbmdHlIWGM2X8m1ynkKv/ERezNwiR8Bfj5E6QGs4ieOwfu4dGYAOB3+JbuHfzYwi4VUMZgYAJWxP8RF6Z2O4Qr+DmB/xT4Ox0PuasivbD++xbqdKV0eUDqBD/gjpQ9cD/DjUFHZ5SCsntJ6Tfg3w3cvl9yyWdVujdIZKael7R11GLeqcHMr8TrAn6XHW2cF3traUTtaW2qnDalY3QjpAi7hjtTH/ThvPKWm4mLP9uHQxxOcUDNQWjVkuU3iNI5iD77iHdbivJA6ZVYaLHO7KW1ieZt2RkFYkXaw8h/dmHogm+upYwAAAABJRU5ErkJggg=="; }, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAAAXNSR0IArs4c6QAAAIlJREFUGBljYMANsoBS/bilscukAIVfAPF1IO7CrgRTNB4o9AqIdYFYEohvAnELEOMFkUDZ10BsiKRKGsi+C8R1SGIozBAg7y0Qm6KIQjhyQOoBEFdAuAjSH8h8B8SWCCEMliJQ5DEQF8FkvIEMkCZbmAAeWhUo9xSIc0BqVgCxI4hBJNAAqmsDAPL9E9lufkHxAAAAAElFTkSuQmCC"; }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAAXNSR0IArs4c6QAAA1NJREFUSA21VctrE0Ec/mazibSmsaggii8QFBHBvm1R8aDiyQqCiqgXRXxWUTx48SB4ETx6EPUPaPUiehIfF59JiorUm+ALwcZam9TYZJMdv6md7ewmkaTWhWVnfvPN7/tmfo8FqnwyCRwaTmBjlfCqYVbVSGCLLbC6BnxV0FoEVOWwVpBPAK/54kg/1tbqhPuO8d1R6z6F9wmQEt8tF321iCDxcUicky4GpyKgZE86jjN0+jEoYvQ55skkZpkbMkmcyMTxOf0C6037P4/p8DSFvCJhWDtLPUbD4CNE9TzTj5VKaDqJddo2rV86nqscjiawOZ3AUwoaGn8TuJ19jYVqTWPUeKqP+NtGEmyHixtBjBB4H61Hp1iFvF77+RJtRQeXOQ9pGwRSfA/aNmY4eVwnWcxYy4sQjtmeITBgQlq84ksBM/0hK4GeILlbwC1ivRBx/I3gAxPkd7hvieHLsQT2R5vx1v4RxxGWwjJjUcbacTbzDMthY45h/0MusDvWhifank2gvVjATQr2k1votsMYdXK4S/LFGs+vY1kkb8U9ZfOVoQFCMYw6cz5x8l0l5ChDXvDI1clN8rxJrvxzvfwjBxDJZDHAGp/tkbfjqYlmCW5whe/kiIQwUNeMD8NxrOE1LzDxIYFPPPkb01ZRgAKxAjYVXSaPwB6GxSNnVaxgHphhA2OdmtmERCqJ+RGJJpOEpx5raMFD06bHFQWoEou14ht7wpxYB4b0hmwSHUU5fu0ztY33mOK425bIFoA7HC/y1oA8b2JftA33DZs3LJsDqhGx/O6rRvQ/yZWKkjJU5MLCKdfCTtECR0tVrZnh6GO2T8vJtV9fCNR/gPE+qchnteC5Bg2/xFK7gKskb9A2bvwlBY7mcvgSieAa52a2S8vGedb5A42v6svGM6XfcVXOK4B8NxDEMBydDMcFluIkTmAw2ojDYyNodFxc4YLXL3gjOZZlT2Mr3gV9VZpPOg4gJsh7AzEfZHJ2h0MYcySzXf75KY1vJTnF7q1UbgH33rR8FcTRxVwIJtxXWcS2cBi56SJXKkoEMBG7eC29bDT1nkwBRd7NZMs7hdKTu27tJ9e+S0IwEsdWqpokJ5Jdrl+1V1WKVtHfXoXEu2gHXmuHtX5/Aw4ZVLNS+Es3AAAAAElFTkSuQmCC"; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAVCAYAAAC6wOViAAAAAXNSR0IArs4c6QAAAuBJREFUSA2llTtok1EUx/OQiKAOKtiA4OJgIg6C4OSgiK5OnSymNi0+Cmor9ZHEvEi0Q4sOonRxFuujxZoWRBQR1NGhKLgIYlodCg4p5OnvSM7lNv3Sfq0XLufc//2f87/nfucmHo+LkUql3mYymcMuqK4oPlcsj8dfr9e9Lrmr0ozo6OjoJqo5tGqERRgeHt7CLRy0IFeuES2VSvsbjcYjkhx3Ewlv6+Li4rjX64264dscIxqPxz/5fL4oScbS6fQJm4R/k/lFMRHEfwy3yEH7FXdrjagEJBKJV5geEj3I5XJBTRIMBt8h9EvX2FtNwSh41cJduY7NgeDOWCw2T8KjZEkyw8wi8xkzy5RK/6xHkDiPo6hscMVHqHhcfHtQYSaZTN5VLJ/P7y2Xyw9Zb1YMOw1niMYcIscpxYmtMM9tUKDVQpbv2Domwe8p2BScYL1DMZLOwIkheA17RXFslXUPh/no5YreA5hv6/f7E7Va7Q3BPyH5raBJ/F690hUEI8QOtgqCnUFwSvJJpYN0rblmRL/RUFWu9wd7u4VEwARJ+lQQu6tSqYyB19ieFw7jA5yzYF34Xdh/OFgDf0gFhWjEZGEPRGPwBwhYImhz1uu3/aahUOj27OzsAsJjWmE2mw3xc3gfbKMlWGA/wyGvgp9UnMNWWPez91kxtcsqhSTPYSQQCNxg/FZiU1Cq3q4YiQsdHR3dc3Nz0qUDimPl7XaT66WFGdc0kCBNwSe4fp7BgrLAw1ToWpDDRIhxFJScplIRhPyUE38Ph8N9nZ2d0iQe8D0Y+ckzFbJ+TYW9xWLxAripkNga6/M0TUFi2w0jyrs6QDURBAdUsF3Q/+JGtDURh9jHIUbA7bc6ReV3mk1zzIqp8NQu89S+Wlhb11G0KficqG0aybVNcaU9NI380lyycOnSCIeZVmw1u0x0JUG+4XUSXtSkHGTNghK7RNRJEM4L/tqiToLsnaZpZiTRWsZfoX9+zsO/NisAAAAASUVORK5CYII="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAdCAYAAAC5UQwxAAAAAXNSR0IArs4c6QAAA8pJREFUSA2Vll1IVEEUx7v7obu42pqEZfVQUFkWirqbBUIipJF9vRt9SAUFGgYFBUkvvUUGQWY9REVEQW8FQeRDZO66amjCkhhpWASSS2Zo+dHv6N5lvHt39zowd87H/5z/zJmZe6+2LEEbGBhIj0QiNbidCSBJzXa7/X1xcfGQEaQZDaL39PRsnJmZaUVcS8+im+KwJ2pjOGyapp0uKSl5o4JsqiJyV1dXLWSvEQcYy2w22yHkb+Kz0iC56Xa7t4NtmZubexgKherVuNjMcSzHcZ1eBvCCz+d7qQMV3wHdZjL+guwsK3ql+4LBoI8J30b/4HQ6GwoLCyfmCUm4A5IWAtbQJ5An9SDDmGPQVXUQZZSeTo40crjoImdik20JU7GjDowaZSzHkYdcQ8fHpmnaeWQBNs0bog/sJxEPqjbkr2AbdBvyDeSP9FbJxyo9jE8cDscuBwnmIAxj+E4Zg3pQd3f34OzsrLe0tDRmE19nZ2czMTrsM4JsxTpKNlJUVDQiDjDDDJ/0fOFwOHN8fPwHtqFYpABTNRJthuytgjuH3Cw6k7vs9/vvKj5TMe6UmqKiRsj2K/5nVGVK1ynbXl1ONi6VUF4E0iL0Jkj889rCY2dvb2+2opuKlgkp5wZWtFWysNKr7O0oZcxD/oJpjG6fnJzcw5i0WSYksb66AK+sx5KVQ3EEWe7tsOhWymqZkHw6YQb39gErlgMjJ7KOyRSKTKtob293L4jmT0uEHR0d8k4tiqbYBkEVq9H6+/tXMV5SUru5HrsVPU60REiSfcZI9i/Inl3DnqH6mEzS02qJkD3Sy6nnnubzk2NiF38VdrsONI4pL35fX1/u1NRUL4EqNozuoUup4xqEhzlQ7+IcGFKukLJJOVWyZSTchM2UTEgoa9wWiF1aSkKCjeWUhKniqhfSxz8XzdzoDgQCOZzCfpUA+Sn9PlgvK13BmM2YSz+j4rBX8nLoY1zUHIs0g8LnpJpE6moCLpersaCg4K8BKvfxJ7Yril3KGkeoJlOwCyJHX31ZD2M9bkYmaA7JLYYXIktjoqbXIyEhlz2LEpVHg38z1sr7U/REzePx1OOTb6Ts8xa2ZL0Rm5CQclYBdjLTWe7cKcjkKiRt+fn54wCO0f8IkLi4VSYkZIbz5eTQNPGClr84S00mRmxjFGyNsK2tTf5BKuiP+Au7Y4lJARHzHPUe3c+vykrFZX4PvV5vJaAQM72ogpcoy89XiEnL1sSaaUmnp6cL0tLSTlCefzHkEgWJ5Ye4DkJfylC+d6tTgiwCKGkpW+TS4f8BQK1g4UJKUyEAAAAASUVORK5CYII="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAaCAYAAABCfffNAAAAAXNSR0IArs4c6QAAA1BJREFUSA2dlU9Ik3EYx7c5Nm1lJkaIdaiIckVQl5T1xwy0f1Z08FRUQhodPFQQhFPnttYuRh4yunjpUCOCoEOg1KxTeogC7VSJSacysiKn+9Pned073v22d44e+L7Pn9/z/L6//6/VokggEKiJx+P3CO9Rmopxp20227nu7u4JY7LN6Ph8vhYIosQ+geNgEhQjv0hqA4+TyeSz3t7eU8YiqzgEV6D8oBFcxX+BtgwMDDhnZ2e7MS+KbyITJSUlbV6v97O0U1uHumu1Wp/W1tYGWltbE9a+vr7tsN+nYQv4Cv4AVTYQKFWDaV8GlAJO4ACSVwnWg1Gn09luT6VSwlzNWjajNYH0OcZ1Yu/SIQux09gdup/WD8kZEpv2Y6iT+O3i028FeBSLxbbamdZ7nFds1ltpFGHKoySPGzeQ2I2lVu37mu8+sEOvo30tfpXBL8eXvGltTzAKSigUWsOI5BCUgJ8gBG4Bkd0QzCyZ+b9Zpyt/isWysLBwmDYhsDDzPtQmsUXwjyxZ5t+iSFjOlnQXYyzHA+zMHaJN9qKgLEsSDodX0cN+EAfXGLmcpEHQCeZAHcslp8lUliWZn59volqO5hsINnPkd9HpE/yVQDZX+pAcU1mWhOWQmy/iwR4CTcFgcB2+8bQV3JeCJIxYXoJGYTDI2OLiYhBfZqJLQ39/f5nuqLogCctziAJjcZKZrCZ2QumobG5u7qASy7gFSehQXyq9YArDqzuKNl0yUxJ5HOlE3dCNxOQdyyfNkUhEu0tqoykJr+8Bkl1KQaEXomJycrJeyddcUxJa1aUadLvd1Q6Ho5anvZ63TS7hTaXTo4qvufZ8QU6VxOUp0WUYw8e/IYn+nsZH9Di5snxngYjsi/Foa0GzmeyltULLsFg+oDvoTAhypLKyUjrVfwk15O1Uk8xI9KX6Zrfbz1D4Wy3U/c7Ozhj2BfAjHctZshwSOpSYJC6A811dXV/SxaaKmhnu1CUS5F1bnoQNlRe2ClyheAxdlPT09LwkMQy2+f1+OeoZyZkJv9EWRnUHgkgmq0gDotukDicSiayLmUXCDdfuAf8M9WgWRcPgUqWlpZdJdhsLsm4oSeUul2vU4/HIfvyXjIyMxBoaGqbA32g0qvXzD+edDWdswixvAAAAAElFTkSuQmCC"; }, function (e, t) { // blue house icon e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAaCAYAAABGiCfwAAABb0lEQVR42t3WsUscQRTH8c8dq3dIEhFOEYRUCeGaFJYBMZUEwSBYSPAfSOEfoGCXNAYEiwSDIoi9RSqLdCkDduIFtEobG41gwChppliW2dzduofgg4F982bnu7+3b95uZf7juR5ZH67SE9VbbDb0n9gzTGUni8Km8RWvIrFRbOBnGbA3WEUdHzCbij0IoAaOszcmXYLeYjHzsO8DeA/reIoT/CkKq2AJCznxFcyhGfyj2KJOYAneYabNumbqulUEVscaJrtMd9fKHuITxgsU0Y/YZF41NrBTEPQLtU6VjWELjwuewWF8C9AWDrAdgz3BJkZKaFfDYRzG0vgcuyWB0naThb0IUh/1oCEvYhnVBIOYwJcQfI2BkkB/cYaX+J0EZzW1YLJE2H5QlVv6lRJT2N/unFV7BUs6hF2ELp5Exq1gsTR+Dh0lawP4XnYab3r1zmLKrgvCavdWWd+dKYtV42Hke3Sas9lV+MPKs8u08w9Szzdf/9wzWwAAAABJRU5ErkJggg=="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAXCAYAAAD+4+QTAAAAAXNSR0IArs4c6QAAAjJJREFUSA2tlc1LG0EYxrPZtJseWkKwIHoohd566EUI6CVe2mOhQsE/oEUI5FgCuSRLQIQeJCAICoLSQwMKPRZaSKBHzxFb1EtPIqGlICmsSX+vZMLs7Idd9YWHmffzmXlnZjeVSijD4dCKSqnVas9brZZt+gMGM0DXKTLR6XS2isXiebvd/qH7XNctsIA3pVJpV7fLPG0aovRGozGNbwc8BSsQvlKxzJ8MBoNV9CNl08eMrkTNpYjneRv4H45ipGVuvV53WP1X5uvgPuiCgFy5E9rwjKxtoAjGRSCoonwEk2JMp9MHMpoSSwLBHG3YJOmBmajpivwil8t91+zjaSQJrXgBwRqR98bR8ZPjcrn8NywklIQzeE0r3pPwX2c2KhzaKvEF7jwEb7GXR4lJhiPLsr6wuMNMJnNQrVZ/og+lwPid4MRmvcMmJNeRPEkzQNq8wHva4y2dS6HLncgr7Xa7LvpLMd6CfKMjS6qO1Ww2nV6vJ/2fV8ZbGveo40Lm2YVCYRFlCpyACeCAm4qcxWPwiE9Qx3fwsH7AIY/vRpLNZucqlcpvVcS8wqau4hKN/X7/jp5gFvXtTA9MOL+rx5uPzSSV2M/AA3LdJV4gK50FUYtKTLLMWZ1R0CfY9jFkfcaRYtu27/KYKw+szHGci7BCcTYetm8nJompp/gKDOIKhvl48bEHHyDhpiTeCf+VZO1ipYl3Qo6vXebt+kPAL70F+Xw+dCe08ZPZe5WH71TNZfwHVU2gRMdtneUAAAAASUVORK5CYII="; }, function (e, t, i) {}, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(62), s = n(i(113)), _ = n(i(174)); t.default = function ({ device: e, overrideSerialNumber: t }) { return r.default.createElement( o.DeviceView, null, r.default.createElement( o.DeviceHeader, { device: e }, r.default.createElement(a.FormattedMessage, { id: "system_device_name_gateway", defaultMessage: "Gateway ({sn})", values: { sn: t || e.serialNumber() } }), r.default.createElement(_.default, { device: e }) ), r.default.createElement( o.DeviceBody, null, r.default.createElement(s.default, { device: e }), r.default.createElement(a.FormattedMessage, { id: "system_device_gateway_not_islanding", defaultMessage: "This is not the islanding controller." }) ) ); }; }, function (e, t, i) {}, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(138), o = i(3), s = i(62), _ = n(i(113)), l = n(i(751)), c = n(i(174)); t.default = function ({ device: e, overrideSerialNumber: t }) { const i = e.type(); return r.default.createElement( s.DeviceView, null, r.default.createElement( s.DeviceHeader, { device: e }, i === a.DeviceType.MSA ? r.default.createElement(o.FormattedMessage, { id: "system_device_name_backup_switch", defaultMessage: "Backup Switch ({sn})", values: { sn: e.serialNumber() } }) : r.default.createElement(o.FormattedMessage, { id: "system_device_name_sync", defaultMessage: "Gateway Contactor / Meter Controller ({sn})", values: { sn: t || e.serialNumber() } }), r.default.createElement(c.default, { device: e }) ), r.default.createElement(s.DeviceBody, null, r.default.createElement(_.default, { device: e }), r.default.createElement(l.default, { device: e })) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(155), s = i(138), _ = i(62); function l({ vitals: e }) { const t = e.getBoolean("ISLAND_GridConnected"); let i = _.MissingValue; switch (t) { case !0: i = r.default.createElement(a.FormattedMessage, { id: "msa-on-grid", defaultMessage: "On Grid" }); break; case !1: i = r.default.createElement(a.FormattedMessage, { id: "msa-off-grid", defaultMessage: "Off Grid" }); } return r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(a.FormattedMessage, { id: "system_islanding_vitals_backup_state", defaultMessage: "Backup state: {backupState}", values: { backupState: i } }) ); } function c(e, t, i) { const n = Number(e.getNumber(t)), a = Number(e.getNumber(i)), s = n >= 10 && a > 0 ? a : null; return { v: r.default.createElement(o.Volts, { value: r.default.createElement(_.Vital, { value: n }) }), f: r.default.createElement(o.Hertz, { value: r.default.createElement(_.Vital, { value: s }) }) }; } function d({ lineNumber: e, vitals: t }) { const i = `ISLAND_FreqL${e}_Main`, n = `ISLAND_VL${e}N_Main`; return r.default.createElement(a.FormattedMessage, { id: "system_islanding_vitals_grid_line", defaultMessage: "Grid Line {lineNumber}: {v} {f}", values: Object.assign(Object.assign({}, c(t, n, i)), { lineNumber: e }) }); } function u({ lineNumber: e, vitals: t }) { const i = `ISLAND_FreqL${e}_Load`, n = `ISLAND_VL${e}N_Load`; return r.default.createElement(a.FormattedMessage, { id: "system_islanding_vitals_island_line", defaultMessage: "Island Line {lineNumber}: {v} {f}", values: Object.assign(Object.assign({}, c(t, n, i)), { lineNumber: e }) }); } t.default = function ({ device: e }) { const t = e.vitals(), i = !1 === t.getBoolean("ISLAND_GridConnected"), n = s.DeviceType.MSA === e.type() ? [1, 2] : [1, 2, 3], a = n.map((e) => r.default.createElement("p", { className: "vitals-value", id: "gridVitalLine" + e, key: "gridVitalLine" + e }, r.default.createElement(d, { lineNumber: e, vitals: t }))), o = i && n.map((e) => r.default.createElement("p", { className: "vitals-value", id: "islandVitalLine" + e, key: "islandVitalLine" + e }, r.default.createElement(u, { lineNumber: e, vitals: t }))); return r.default.createElement(r.default.Fragment, null, r.default.createElement(l, { vitals: t }), a, o); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(155), s = i(12), _ = i(62); function l({ device: e }) { let t = e.vitals(), i = []; for (let e = 0; e < 4; e++) { let n = t.getString(`NEURIO_CT${e}_Location`); if (!n) continue; let l = r.default.createElement(a.FormattedMessage, Object.assign({}, s.CurrentTransformerConnectionLabels[n])), c = t.getNumber(`NEURIO_CT${e}_InstRealPower`), d = r.default.createElement(o.Watts, { value: r.default.createElement(_.Vital, { value: c }) }), u = r.default.createElement( "p", { className: "vitals-value", key: "CT" + e }, r.default.createElement(a.FormattedMessage, { id: "system_remote_meter_ct_line", defaultMessage: "CT {n} ({location}): {value}", values: { n: e + 1, location: l, value: d } }) ); i.push(u); } return ( 0 === i.length && i.push(r.default.createElement("p", { className: "vitals-value" }, r.default.createElement(a.FormattedMessage, { id: "system_remote_meter_no_cts", defaultMessage: "No CTs configured" }))), r.default.createElement(r.default.Fragment, null, i) ); } t.default = function ({ device: e }) { return r.default.createElement( _.DeviceView, null, r.default.createElement(_.DeviceHeader, { device: e }, r.default.createElement(a.FormattedMessage, { id: "system_device_name_remote_meter", defaultMessage: "Remote Meter ({sn})", values: { sn: e.serialNumber() } })), r.default.createElement(_.DeviceBody, null, r.default.createElement(l, { device: e })) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(62), s = n(i(113)), _ = n(i(448)), l = n(i(174)); t.default = function ({ device: e }) { return r.default.createElement( o.DeviceView, null, r.default.createElement( o.DeviceHeader, { device: e }, r.default.createElement(a.FormattedMessage, { id: "system_device_name_powerwall", defaultMessage: "Powerwall ({sn})", values: { sn: e.serialNumber() } }), r.default.createElement(l.default, { device: e }) ), r.default.createElement(o.DeviceBody, null, r.default.createElement(s.default, { device: e }), r.default.createElement(_.default, { device: e })) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(138), o = i(3), s = i(62), _ = n(i(113)), l = n(i(448)), c = n(i(755)), d = n(i(449)), u = n(i(788)), m = n(i(174)); t.default = function (e) { var t, i; const { device: n, leader: p, follower: g, index: w, sitemanagerRunning: v } = e; let f, h, E; f = w > 0 ? r.default.createElement(o.FormattedMessage, { id: "system_device_name_powerwall_plus_wired", defaultMessage: "Powerwall+ (wired)" }) : p ? r.default.createElement(o.FormattedMessage, { id: "system_device_name_powerwall_plus_leader", defaultMessage: "Leader Powerwall+" }) : g ? r.default.createElement(o.FormattedMessage, { id: "system_device_name_powerwall_plus_wireless", defaultMessage: "Powerwall+ (wireless)" }) : r.default.createElement(o.FormattedMessage, { id: "system_device_name_powerwall_plus_solo", defaultMessage: "Powerwall+" }); for (let e of n.children) switch (e.type()) { case a.DeviceType.ACPW: h = e; break; case a.DeviceType.PVI: E = e; } return r.default.createElement( s.DeviceView, { doNotCollapse: !0 }, r.default.createElement(s.DeviceHeader, { device: n, sitemanagerRunning: v }, f, r.default.createElement(m.default, { device: h })), r.default.createElement( s.DeviceBody, null, r.default.createElement(_.default, { device: n }), E && r.default.createElement( s.DeviceView, null, r.default.createElement(s.DeviceHeader, { device: E, sitemanagerRunning: v }, r.default.createElement(o.FormattedMessage, { id: "system_device_name_solar_assembly_1", defaultMessage: "Solar Assembly" })), r.default.createElement( s.DeviceBody, null, r.default.createElement(_.default, { device: E, sitemanagerRunning: v }), r.default.createElement(c.default, { device: E, powerwallId: (null === (t = n.parent) || void 0 === t ? void 0 : t.din()) || "", follower: g, sitemanagerRunning: v }), r.default.createElement(d.default, { device: E, powerwallId: (null === (i = n.parent) || void 0 === i ? void 0 : i.din()) || "", follower: g, sitemanagerRunning: v }), r.default.createElement(u.default, { device: E }) ) ), h && r.default.createElement( s.DeviceView, null, r.default.createElement( s.DeviceHeader, { device: h }, r.default.createElement(o.FormattedMessage, { id: "system_device_name_battery_assembly", defaultMessage: "Battery Assembly ({sn})", values: { sn: h.serialNumber() } }) ), r.default.createElement(s.DeviceBody, null, r.default.createElement(_.default, { device: h }), r.default.createElement(l.default, { device: h })) ) ) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = n(i(5)), s = i(113); t.default = function ({ device: e, powerwallId: t, follower: i, sitemanagerRunning: n }) { return e.hasAlerts() || e.disabledReasons().includes(s.DisabledReason.DisabledArcFaultLockout) ? (e.vitals().getString("PVS_State") || "").startsWith("PVS_SelfTest") ? null : n ? (t.startsWith("STSTSM--") && (t = t.substring(8)), r.default.createElement( "div", null, r.default.createElement( "button", { className: "inverter-reset-button", onClick: () => (function () { var n; const r = o.default.api.uri + "/solar_powerwall/reset"; let a = null === (n = e.parent) || void 0 === n ? void 0 : n.din(); (null == a ? void 0 : a.startsWith("TETHC--")) && (a = a.substring(7)); const s = { battery_din: a, follower_din: i ? t : "" }; fetch(r, { method: "POST", credentials: o.default.credentials, body: JSON.stringify(s) }); })(), }, r.default.createElement(a.FormattedMessage, { id: "pvi-reset-button-label", description: "This is the button to reset the PVI ECUs", defaultMessage: "Restart Inverter and Clear Alerts" }) ) )) : null : null; }; }, , , , , , , , , , , , , , , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.SiteControllerConnectedDevice = t.SiteControllerConnectedDeviceStore = void 0); const n = i(771), r = i(40), a = {}, o = {}; (t.SiteControllerConnectedDeviceStore = { encode(e, i = r.Writer.create()) { for (const n of e.siteControllerConnectedDevice) t.SiteControllerConnectedDevice.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === i ? n.len : n.pos + i; const s = Object.assign({}, a); for (s.siteControllerConnectedDevice = []; n.pos < o; ) { const e = n.uint32(); switch (e >>> 3) { case 1: s.siteControllerConnectedDevice.push(t.SiteControllerConnectedDevice.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return s; }, }), (t.SiteControllerConnectedDevice = { encode: (e, t = r.Writer.create()) => (void 0 !== e.device && void 0 !== e.device && n.Device.encode(e.device, t.uint32(10).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, o); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.device = n.Device.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return s; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.ChargerPostAttributes = t.PayterModuleAttributes = t.BatterySystemCapabilities = t.MeterAttributes = t.PVInverterAttributes = t.GeneratorAttributes = t.TeslaEnergyEcuAttributes = t.TeslaHardwareId = t.DeviceAttributes = t.ConnectionParameters = t.Device = t.Manifest = void 0); const n = i(772), r = i(40), a = i(453), o = { gatewayDin: "", trigger: 0 }, s = {}, _ = { serialBaud: 0, modbusId: 0 }, l = {}, c = {}, d = { ecuType: 0 }, u = { nameplateRealPowerW: 0, nameplateApparentPowerVa: 0 }, m = { nameplateRealPowerW: 0 }, p = { meterLocation: 0 }, g = { nominalEnergyWh: 0, nominalPowerW: 0 }, w = { id: "" }, v = {}; function f(e) { return { seconds: e.getTime() / 1e3, nanos: (e.getTime() % 1e3) * 1e6 }; } function h(e) { let t = 1e3 * e.seconds; return (t += e.nanos / 1e6), new Date(t); } function E(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } (t.Manifest = { encode(e, i = r.Writer.create()) { i.uint32(10).string(e.gatewayDin), i.uint32(16).int32(e.trigger), void 0 !== e.generatedTime && void 0 !== e.generatedTime && n.Timestamp.encode(f(e.generatedTime), i.uint32(26).fork()).ldelim(); for (const n of e.device) t.Device.encode(n, i.uint32(34).fork()).ldelim(); return ( void 0 !== e.batterySystemCapabilities && void 0 !== e.batterySystemCapabilities && t.BatterySystemCapabilities.encode(e.batterySystemCapabilities, i.uint32(42).fork()).ldelim(), void 0 !== e.gatewayFirmwareVersion && void 0 !== e.gatewayFirmwareVersion && a.StringValue.encode({ value: e.gatewayFirmwareVersion }, i.uint32(50).fork()).ldelim(), void 0 !== e.gatewayFirmwareGithash && void 0 !== e.gatewayFirmwareGithash && a.StringValue.encode({ value: e.gatewayFirmwareGithash }, i.uint32(58).fork()).ldelim(), i ); }, decode(e, i) { const s = e instanceof Uint8Array ? new r.Reader(e) : e; let _ = void 0 === i ? s.len : s.pos + i; const l = Object.assign({}, o); for (l.device = []; s.pos < _; ) { const e = s.uint32(); switch (e >>> 3) { case 1: l.gatewayDin = s.string(); break; case 2: l.trigger = s.int32(); break; case 3: l.generatedTime = h(n.Timestamp.decode(s, s.uint32())); break; case 4: l.device.push(t.Device.decode(s, s.uint32())); break; case 5: l.batterySystemCapabilities = t.BatterySystemCapabilities.decode(s, s.uint32()); break; case 6: l.gatewayFirmwareVersion = a.StringValue.decode(s, s.uint32()).value; break; case 7: l.gatewayFirmwareGithash = a.StringValue.decode(s, s.uint32()).value; break; default: s.skipType(7 & e); } } return l; }, }), (t.Device = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.din && void 0 !== e.din && a.StringValue.encode({ value: e.din }, i.uint32(10).fork()).ldelim(), void 0 !== e.partNumber && void 0 !== e.partNumber && a.StringValue.encode({ value: e.partNumber }, i.uint32(18).fork()).ldelim(), void 0 !== e.serialNumber && void 0 !== e.serialNumber && a.StringValue.encode({ value: e.serialNumber }, i.uint32(26).fork()).ldelim(), void 0 !== e.manufacturer && void 0 !== e.manufacturer && a.StringValue.encode({ value: e.manufacturer }, i.uint32(34).fork()).ldelim(), void 0 !== e.siteLabel && void 0 !== e.siteLabel && a.StringValue.encode({ value: e.siteLabel }, i.uint32(42).fork()).ldelim(), void 0 !== e.componentParentDin && void 0 !== e.componentParentDin && a.StringValue.encode({ value: e.componentParentDin }, i.uint32(50).fork()).ldelim(), void 0 !== e.firmwareVersion && void 0 !== e.firmwareVersion && a.StringValue.encode({ value: e.firmwareVersion }, i.uint32(58).fork()).ldelim(), void 0 !== e.firstCommunicationTime && void 0 !== e.firstCommunicationTime && n.Timestamp.encode(f(e.firstCommunicationTime), i.uint32(66).fork()).ldelim(), void 0 !== e.lastCommunicationTime && void 0 !== e.lastCommunicationTime && n.Timestamp.encode(f(e.lastCommunicationTime), i.uint32(74).fork()).ldelim(), void 0 !== e.connectionParameters && void 0 !== e.connectionParameters && t.ConnectionParameters.encode(e.connectionParameters, i.uint32(82).fork()).ldelim(), void 0 !== e.deviceAttributes && void 0 !== e.deviceAttributes && t.DeviceAttributes.encode(e.deviceAttributes, i.uint32(90).fork()).ldelim(), void 0 !== e.firmwareGithash && void 0 !== e.firmwareGithash && a.StringValue.encode({ value: e.firmwareGithash }, i.uint32(98).fork()).ldelim(), i ), decode(e, i) { const o = e instanceof Uint8Array ? new r.Reader(e) : e; let _ = void 0 === i ? o.len : o.pos + i; const l = Object.assign({}, s); for (; o.pos < _; ) { const e = o.uint32(); switch (e >>> 3) { case 1: l.din = a.StringValue.decode(o, o.uint32()).value; break; case 2: l.partNumber = a.StringValue.decode(o, o.uint32()).value; break; case 3: l.serialNumber = a.StringValue.decode(o, o.uint32()).value; break; case 4: l.manufacturer = a.StringValue.decode(o, o.uint32()).value; break; case 5: l.siteLabel = a.StringValue.decode(o, o.uint32()).value; break; case 6: l.componentParentDin = a.StringValue.decode(o, o.uint32()).value; break; case 7: l.firmwareVersion = a.StringValue.decode(o, o.uint32()).value; break; case 8: l.firstCommunicationTime = h(n.Timestamp.decode(o, o.uint32())); break; case 9: l.lastCommunicationTime = h(n.Timestamp.decode(o, o.uint32())); break; case 10: l.connectionParameters = t.ConnectionParameters.decode(o, o.uint32()); break; case 11: l.deviceAttributes = t.DeviceAttributes.decode(o, o.uint32()); break; case 12: l.firmwareGithash = a.StringValue.decode(o, o.uint32()).value; break; default: o.skipType(7 & e); } } return l; }, }), (t.ConnectionParameters = { encode: (e, t = r.Writer.create()) => ( void 0 !== e.ipAddress && void 0 !== e.ipAddress && a.StringValue.encode({ value: e.ipAddress }, t.uint32(10).fork()).ldelim(), void 0 !== e.serialPort && void 0 !== e.serialPort && a.StringValue.encode({ value: e.serialPort }, t.uint32(18).fork()).ldelim(), t.uint32(24).int64(e.serialBaud), t.uint32(32).uint32(e.modbusId), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, _); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.ipAddress = a.StringValue.decode(i, i.uint32()).value; break; case 2: o.serialPort = a.StringValue.decode(i, i.uint32()).value; break; case 3: o.serialBaud = E(i.int64()); break; case 4: o.modbusId = i.uint32(); break; default: i.skipType(7 & e); } } return o; }, }), (t.DeviceAttributes = { encode(e, i = r.Writer.create()) { var n, a, o, s; return ( "teslaEnergyEcuAttributes" === (null === (n = e.deviceAttributes) || void 0 === n ? void 0 : n.$case) && t.TeslaEnergyEcuAttributes.encode(e.deviceAttributes.teslaEnergyEcuAttributes, i.uint32(10).fork()).ldelim(), "generatorAttributes" === (null === (a = e.deviceAttributes) || void 0 === a ? void 0 : a.$case) && t.GeneratorAttributes.encode(e.deviceAttributes.generatorAttributes, i.uint32(18).fork()).ldelim(), "pvInverterAttributes" === (null === (o = e.deviceAttributes) || void 0 === o ? void 0 : o.$case) && t.PVInverterAttributes.encode(e.deviceAttributes.pvInverterAttributes, i.uint32(26).fork()).ldelim(), "meterAttributes" === (null === (s = e.deviceAttributes) || void 0 === s ? void 0 : s.$case) && t.MeterAttributes.encode(e.deviceAttributes.meterAttributes, i.uint32(34).fork()).ldelim(), i ); }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, l); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.deviceAttributes = { $case: "teslaEnergyEcuAttributes", teslaEnergyEcuAttributes: t.TeslaEnergyEcuAttributes.decode(n, n.uint32()) }; break; case 2: o.deviceAttributes = { $case: "generatorAttributes", generatorAttributes: t.GeneratorAttributes.decode(n, n.uint32()) }; break; case 3: o.deviceAttributes = { $case: "pvInverterAttributes", pvInverterAttributes: t.PVInverterAttributes.decode(n, n.uint32()) }; break; case 4: o.deviceAttributes = { $case: "meterAttributes", meterAttributes: t.MeterAttributes.decode(n, n.uint32()) }; break; default: n.skipType(7 & e); } } return o; }, }), (t.TeslaHardwareId = { encode: (e, t = r.Writer.create()) => ( void 0 !== e.pcbaId && void 0 !== e.pcbaId && a.UInt32Value.encode({ value: e.pcbaId }, t.uint32(10).fork()).ldelim(), void 0 !== e.assemblyId && void 0 !== e.assemblyId && a.UInt32Value.encode({ value: e.assemblyId }, t.uint32(18).fork()).ldelim(), void 0 !== e.usageId && void 0 !== e.usageId && a.UInt32Value.encode({ value: e.usageId }, t.uint32(26).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, c); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.pcbaId = a.UInt32Value.decode(i, i.uint32()).value; break; case 2: o.assemblyId = a.UInt32Value.decode(i, i.uint32()).value; break; case 3: o.usageId = a.UInt32Value.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.TeslaEnergyEcuAttributes = { encode: (e, i = r.Writer.create()) => ( i.uint32(8).int32(e.ecuType), void 0 !== e.hardwareId && void 0 !== e.hardwareId && t.TeslaHardwareId.encode(e.hardwareId, i.uint32(18).fork()).ldelim(), void 0 !== e.pvInverterAttributes && void 0 !== e.pvInverterAttributes && t.PVInverterAttributes.encode(e.pvInverterAttributes, i.uint32(26).fork()).ldelim(), void 0 !== e.meterAttributes && void 0 !== e.meterAttributes && t.MeterAttributes.encode(e.meterAttributes, i.uint32(34).fork()).ldelim(), void 0 !== e.chargerPostAttributes && void 0 !== e.chargerPostAttributes && t.ChargerPostAttributes.encode(e.chargerPostAttributes, i.uint32(42).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, d); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.ecuType = n.int32(); break; case 2: o.hardwareId = t.TeslaHardwareId.decode(n, n.uint32()); break; case 3: o.pvInverterAttributes = t.PVInverterAttributes.decode(n, n.uint32()); break; case 4: o.meterAttributes = t.MeterAttributes.decode(n, n.uint32()); break; case 5: o.chargerPostAttributes = t.ChargerPostAttributes.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.GeneratorAttributes = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.nameplateRealPowerW), t.uint32(16).uint64(e.nameplateApparentPowerVa), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, u); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.nameplateRealPowerW = E(i.uint64()); break; case 2: a.nameplateApparentPowerVa = E(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.PVInverterAttributes = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.nameplateRealPowerW), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, m); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.nameplateRealPowerW = E(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.MeterAttributes = { encode(e, t = r.Writer.create()) { t.uint32(10).fork(); for (const i of e.meterLocation) t.int32(i); return t.ldelim(), t; }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, p); for (a.meterLocation = []; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: if (2 == (7 & e)) { const e = i.uint32() + i.pos; for (; i.pos < e; ) a.meterLocation.push(i.int32()); } else a.meterLocation.push(i.int32()); break; default: i.skipType(7 & e); } } return a; }, }), (t.BatterySystemCapabilities = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.nominalEnergyWh), t.uint32(16).uint64(e.nominalPowerW), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, g); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.nominalEnergyWh = E(i.uint64()); break; case 2: a.nominalPowerW = E(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.PayterModuleAttributes = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.id), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, w); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.id = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.ChargerPostAttributes = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.label && void 0 !== e.label && a.StringValue.encode({ value: e.label }, i.uint32(10).fork()).ldelim(), void 0 !== e.payterModuleAttributes && void 0 !== e.payterModuleAttributes && t.PayterModuleAttributes.encode(e.payterModuleAttributes, i.uint32(18).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === i ? n.len : n.pos + i; const s = Object.assign({}, v); for (; n.pos < o; ) { const e = n.uint32(); switch (e >>> 3) { case 1: s.label = a.StringValue.decode(n, n.uint32()).value; break; case 2: s.payterModuleAttributes = t.PayterModuleAttributes.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return s; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Timestamp = void 0); const n = i(40), r = { seconds: 0, nanos: 0 }; function a(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } t.Timestamp = { encode: (e, t = n.Writer.create()) => (t.uint32(8).int64(e.seconds), t.uint32(16).int32(e.nanos), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, r); for (; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.seconds = a(i.int64()); break; case 2: s.nanos = i.int32(); break; default: i.skipType(7 & e); } } return s; }, }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3); t.default = function (e) { return e.updateFailed ? r.default.createElement( "span", { className: "system-warning-subtitle" }, r.default.createElement(a.FormattedMessage, { id: "vitals_header_subtitle_firmware_update_failed", defaultMessage: "Firmware update failed. Check enable switches and wiring." }) ) : e.updating ? r.default.createElement("span", { className: "system-warning-subtitle" }, r.default.createElement(a.FormattedMessage, { id: "vitals_header_subtitle_firmware_update", defaultMessage: "Firmware update in progress..." })) : null; }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__awaiter) || function (e, t, i, n) { return new (i || (i = Promise))(function (r, a) { function o(e) { try { _(n.next(e)); } catch (e) { a(e); } } function s(e) { try { _(n.throw(e)); } catch (e) { a(e); } } function _(e) { var t; e.done ? r(e.value) : ((t = e.value), t instanceof i ? t : new i(function (e) { e(t); })).then(o, s); } _((n = n.apply(e, t || [])).next()); }); }; Object.defineProperty(t, "__esModule", { value: !0 }); const s = a(i(1)), _ = i(3), l = i(582), c = i(589), d = i(175), u = i(454); var m, p; !(function (e) { (e[(e.HIDDEN = 0)] = "HIDDEN"), (e[(e.VISIBLE = 1)] = "VISIBLE"), (e[(e.PAIRING = 2)] = "PAIRING"), (e[(e.MONITORING = 3)] = "MONITORING"), (e[(e.CONFIGURING = 4)] = "CONFIGURING"), (e[(e.COMPLETE = 5)] = "COMPLETE"); })(m || (m = {})), (function (e) { (e[(e.NONE = 0)] = "NONE"), (e[(e.NO_QR_CODE = 1)] = "NO_QR_CODE"), (e[(e.BAD_QR_CODE = 2)] = "BAD_QR_CODE"), (e[(e.PAIRING_EXCEPTION = 3)] = "PAIRING_EXCEPTION"), (e[(e.UNKNOWN_PAIRING_ERROR = 4)] = "UNKNOWN_PAIRING_ERROR"), (e[(e.WIFI_NOT_FOUND = 5)] = "WIFI_NOT_FOUND"), (e[(e.WIFI_CONNECTION_FAILED = 6)] = "WIFI_CONNECTION_FAILED"), (e[(e.NO_RESPONSE = 7)] = "NO_RESPONSE"), (e[(e.BAD_RESPONSE = 8)] = "BAD_RESPONSE"), (e[(e.INTERNAL_ERROR = 9)] = "INTERNAL_ERROR"), (e[(e.CHANGES_PROHIBITED = 10)] = "CHANGES_PROHIBITED"), (e[(e.TOO_MANY_DEVICES = 11)] = "TOO_MANY_DEVICES"), (e[(e.NOT_LEADER = 12)] = "NOT_LEADER"), (e[(e.ALREADY_PAIRED = 13)] = "ALREADY_PAIRED"); })(p || (p = {})); const g = { [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_FOUND]: p.WIFI_NOT_FOUND, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CANNOT_JOIN]: p.WIFI_CONNECTION_FAILED, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NO_RESPONSE]: p.NO_RESPONSE, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_BAD_RESPONSE]: p.BAD_RESPONSE, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_INTERNAL_ERROR]: p.INTERNAL_ERROR, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CHANGES_PROHIBITED]: p.CHANGES_PROHIBITED, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_MAX_DEVICES]: p.TOO_MANY_DEVICES, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_LEADER]: p.NOT_LEADER, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_EXISTS]: p.ALREADY_PAIRED, }, w = (0, _.defineMessages)({ [p.NO_QR_CODE]: { id: "powerwall_pairing_error_no_qr_code", defaultMessage: "No QR code found", description: "An error message indicating that the QR code scan failed because no QR code was seen" }, [p.BAD_QR_CODE]: { id: "powerwall_pairing_error_bad_qr_code", defaultMessage: "Not a WiFi QR code", description: "An error message indicating that the QR scan failed because the QR code was not the right type" }, [p.PAIRING_EXCEPTION]: { id: "powerwall_pairing_exception", defaultMessage: "Pairing Failed: Exception", description: "An error message indicating that device pairing failed because an exception was thrown" }, [p.UNKNOWN_PAIRING_ERROR]: { id: "powerwall_pairing_error_unknown", defaultMessage: "Pairing Failed: Unknown Error", description: "An error message indicating that device pairing failed for unknown reasons" }, [p.WIFI_NOT_FOUND]: { id: "powerwall_pairing_error_wifi_not_found", defaultMessage: "Pairing Failed: WiFi network not found", description: "An error message indicating that device pairing failed because the specified wifi network was not found", }, [p.WIFI_CONNECTION_FAILED]: { id: "powerwall_pairing_error_wifi_connection_failed", defaultMessage: "Pairing Failed: Could not connect to WiFi. Check the password.", description: "An error message indicating that device pairing failed because we could not connect to the WiFi network", }, [p.NO_RESPONSE]: { id: "powerwall_pairing_error_no_response", defaultMessage: "Pairing Failed: device did not respond.", description: "An error message indicating that device pairing failed because the device did not respond", }, [p.BAD_RESPONSE]: { id: "powerwall_pairing_error_bad_pairing_response", defaultMessage: "Pairing Failed: device refused to pair. Ensure the follower has been stopped", description: "An error message indicating that device pairing failed because of a bad response", }, [p.INTERNAL_ERROR]: { id: "powerwall_pairing_error_internal", defaultMessage: "Pairing Failed: internal error", description: "An error message indicating that device pairing failed because of an internal error" }, [p.CHANGES_PROHIBITED]: { id: "powerwall_pairing_error_prohibited_uncommissioned", defaultMessage: "Pairing Failed: this Powerwall is not commissioned yet", description: "An error message indicating that device pairing failed because changes are currently prohibited", }, [p.TOO_MANY_DEVICES]: { id: "powerwall_pairing_error_too_many_devices", defaultMessage: "Pairing Failed: the maximum number of devices are already paired", description: "An error message indicating that device pairing failed because we have already reached the limit for paired devices", }, [p.NOT_LEADER]: { id: "powerwall_pairing_error_not_leader", defaultMessage: "Pairing Failed: this is a follower device. Reconnect to the leader device.", description: "An error message indicating that device pairing failed because we are connected to a follower device", }, [p.ALREADY_PAIRED]: { id: "powerwall_pairing_error_already_paired", defaultMessage: "Pairing Failed: the device is already paired", description: "An error message indicating that device pairing failed because the device is already connected", }, }); t.default = function ({ tedapi: e, followers: t }) { const i = (null == t ? void 0 : t.length) || 0, [n, r] = (0, s.useState)(m.HIDDEN), [a, v] = (0, s.useState)(-1), [f, h] = (0, s.useState)(""), [E, b] = (0, s.useState)(""), [y, S] = (0, s.useState)(p.NONE), R = (0, s.useRef)(null), T = (0, s.useRef)(null); function A() { R.current && R.current.scrollIntoView({ behavior: "smooth", block: "start" }); } function C() { return T.current || (T.current = new l.BarcodeReader()), T.current; } function I() { T.current && (T.current.stop(), (T.current = null)); } function O() { var t, i; return o(this, void 0, void 0, function* () { try { let n = yield e.energysitenet.getConfig({}); N(null === (i = null === (t = null == n ? void 0 : n.config) || void 0 === t ? void 0 : t.recentlyAdded) || void 0 === i ? void 0 : i.status); } catch (e) { console.error("Exception while checking pairing status:", e), S(p.PAIRING_EXCEPTION), r(m.VISIBLE), v(-1); } }); } function N(e) { switch (e) { case u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_IN_PROGRESS: case void 0: n !== m.MONITORING && r(m.MONITORING); break; case u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_ADDED: r(m.CONFIGURING); break; default: r(m.VISIBLE), v(-1); let t = g[e]; t || (t = p.UNKNOWN_PAIRING_ERROR), S(t); } } (0, s.useEffect)(() => { switch (n) { case m.VISIBLE: return void A(); case m.HIDDEN: return I(), h(""), b(""), void S(p.NONE); case m.MONITORING: A(); let e = setInterval(O, 1e3); return () => clearInterval(e); case m.CONFIGURING: A(), i === a && (r(m.COMPLETE), v(-1)); } }, [n, i]), (0, s.useEffect)(() => { S(p.NONE); }, [f, E]), (0, s.useEffect)(A, [y]), (0, s.useEffect)(() => I, []); let k = n !== m.VISIBLE && n !== m.COMPLETE, P = n === m.COMPLETE, D = k ? { disabled: !0 } : {}; return s.default.createElement( "div", { className: "powerwall-pairing-container" }, n === m.HIDDEN && s.default.createElement( "a", { className: "powerwall-pairing-link", onClick: () => r(m.VISIBLE) }, s.default.createElement(_.FormattedMessage, { id: "wifi_pairing_link_message", defaultMessage: "Add a WiFi-connected Powerwall" }) ), n !== m.HIDDEN && s.default.createElement( s.default.Fragment, null, s.default.createElement("hr", null), s.default.createElement( "p", { ref: R }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_instructions_2", defaultMessage: "Enter or scan the WiFi SSID and password for the Powerwall to be paired. Look for a QR code on the device.", }) ), s.default.createElement( "div", { className: "powerwall-pairing-column" }, s.default.createElement( "label", null, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_ssid_label", defaultMessage: "SSID:" }), s.default.createElement("input", { type: "text", className: "form-control", value: f, onChange: (e) => h(e.target.value), autoCapitalize: "characters", autoComplete: "off", autoCorrect: "off", disabled: k }) ), s.default.createElement( "label", null, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_password_label", defaultMessage: "Password:" }), s.default.createElement("input", { type: "text", className: "form-control", value: E, onChange: (e) => b(e.target.value), autoCapitalize: "characters", autoComplete: "off", autoCorrect: "off", disabled: k }) ), (n === m.MONITORING || n === m.CONFIGURING) && s.default.createElement( "p", { className: "powerwall-pairing-message" }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_state_monitoring", defaultMessage: "Pairing new device. This may take up to a minute." }) ), n === m.COMPLETE && s.default.createElement( "p", { className: "powerwall-pairing-success" }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_state_complete", defaultMessage: "Pairing complete. The new device may not start responding for a minute or more (longer if there is an update in progress). Click Done to dismiss.", }) ), y !== p.NONE && s.default.createElement("p", { className: "powerwall-pairing-error" }, s.default.createElement(_.FormattedMessage, Object.assign({}, w[y]))), k && s.default.createElement("div", { className: "progress" }, s.default.createElement("div", { className: "progress-bar progress-bar-striped active", role: "progressbar" })), P ? s.default.createElement( "div", { className: "powerwall-pairing-row" }, s.default.createElement( "button", { onClick: () => { r(m.HIDDEN); }, className: "btn btn-primary", disabled: k, }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_done", defaultMessage: "Done" }) ) ) : s.default.createElement( "div", { className: "powerwall-pairing-row" }, s.default.createElement( "button", { onClick: () => { r(m.HIDDEN), v(-1); }, className: "btn btn-primary", disabled: k, }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_cancel", defaultMessage: "Cancel" }) ), s.default.createElement( "label", Object.assign({ className: "btn btn-primary", onClick: () => !k && C() }, D), s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_scan_qr_code", defaultMessage: "Scan QR Code" }), s.default.createElement("input", { type: "file", accept: "image/*", capture: "camera", onChange: (e) => { let t = e && e.target && e.target.files && e.target.files[0]; t && (function (e) { o(this, void 0, void 0, function* () { let t = C(); try { let i = yield t.scanBarcode(e, [l.BarcodeFormat.QRCode]); try { let e = (0, c.parseWifiCode)(i.text); e.S && h(e.S), e.P && b(e.P); } catch (e) { S(p.BAD_QR_CODE); } } catch (e) { S(p.NO_QR_CODE); } }); })(t); }, disabled: k, }) ), s.default.createElement( "button", { className: "btn btn-primary", onClick: () => (function () { var t; return o(this, void 0, void 0, function* () { r(m.PAIRING), S(p.NONE), v(i + 1); try { let i = yield e.energysitenet.addDevice({ device: { wifiApConfig: { ssid: f, password: { value: E }, securityType: d.WifiNetworkSecurityType.WIFI_NETWORK_SECURITY_TYPE_INVALID } }, }); N(null === (t = i.recentlyAdded) || void 0 === t ? void 0 : t.status); } catch (e) { console.error("Exception while adding device:", e), S(p.PAIRING_EXCEPTION), r(m.VISIBLE), v(-1); } }); })(), disabled: k || !f || !E, }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_connect", defaultMessage: "Connect" }) ) ) ) ) ); }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Status = void 0); const n = i(776), r = i(40), a = { code: 0, message: "" }; t.Status = { encode(e, t = r.Writer.create()) { t.uint32(8).int32(e.code), t.uint32(18).string(e.message); for (const i of e.details) n.Any.encode(i, t.uint32(26).fork()).ldelim(); return t; }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, a); for (s.details = []; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.code = i.int32(); break; case 2: s.message = i.string(); break; case 3: s.details.push(n.Any.decode(i, i.uint32())); break; default: i.skipType(7 & e); } } return s; }, }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Any = void 0); const n = i(40), r = { typeUrl: "" }; t.Any = { encode: (e, t = n.Writer.create()) => (t.uint32(10).string(e.typeUrl), t.uint32(18).bytes(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, r); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.typeUrl = i.string(); break; case 2: o.value = i.bytes(); break; default: i.skipType(7 & e); } } return o; }, }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__exportStar) || function (e, t) { for (var i in e) "default" === i || Object.prototype.hasOwnProperty.call(t, i) || n(t, e, i); }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.createEnergyDeviceAPIClient = void 0); const s = a(i(778)), _ = a(i(779)); o(i(780), t), (t.createEnergyDeviceAPIClient = function (e) { return { common: s.createCommonAPIClient(e), energysitenet: _.createEnergySiteNetAPIClient(e) }; }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.createCommonAPIClient = void 0); const n = i(140); t.createCommonAPIClient = function (e) { const t = "CommonAPI"; return { getSystemInfo(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "getSystemInfoRequest", getSystemInfoRequest: i } } } }; return e.rpc(t, "GetSystemInfo", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "getSystemInfoResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.getSystemInfoResponse; throw e.error(t, "GetSystemInfo", r, i, "response message did not contain expected payload"); }); }, setLocalSiteConfig(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "setLocalSiteConfigRequest", setLocalSiteConfigRequest: i } } } }; return e.rpc(t, "SetLocalSiteConfig", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "setLocalSiteConfigResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.setLocalSiteConfigResponse; throw e.error(t, "SetLocalSiteConfig", r, i, "response message did not contain expected payload"); }); }, performUpdate(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "performUpdateRequest", performUpdateRequest: i } } } }; return e.rpc(t, "PerformUpdate", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "performUpdateResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.performUpdateResponse; throw e.error(t, "PerformUpdate", r, i, "response message did not contain expected payload"); }); }, factoryReset(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "factoryResetRequest", factoryResetRequest: i } } } }; return e.rpc(t, "FactoryReset", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "factoryResetResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.factoryResetResponse; throw e.error(t, "FactoryReset", r, i, "response message did not contain expected payload"); }); }, wifiScan(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "wifiScanRequest", wifiScanRequest: i } } } }; return e.rpc(t, "WifiScan", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "wifiScanResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.wifiScanResponse; throw e.error(t, "WifiScan", r, i, "response message did not contain expected payload"); }); }, configureWifi(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "configureWifiRequest", configureWifiRequest: i } } } }; return e.rpc(t, "ConfigureWifi", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "configureWifiResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.configureWifiResponse; throw e.error(t, "ConfigureWifi", r, i, "response message did not contain expected payload"); }); }, checkForUpdate(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "checkForUpdateRequest", checkForUpdateRequest: i } } } }; return e.rpc(t, "CheckForUpdate", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "checkForUpdateResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.checkForUpdateResponse; throw e.error(t, "CheckForUpdate", r, i, "response message did not contain expected payload"); }); }, clearUpdate(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "clearUpdateRequest", clearUpdateRequest: i } } } }; return e.rpc(t, "ClearUpdate", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "clearUpdateResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.clearUpdateResponse; throw e.error(t, "ClearUpdate", r, i, "response message did not contain expected payload"); }); }, deviceCert(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "deviceCertRequest", deviceCertRequest: i } } } }; return e.rpc(t, "DeviceCert", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "deviceCertResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.deviceCertResponse; throw e.error(t, "DeviceCert", r, i, "response message did not contain expected payload"); }); }, configureWifiWithEncryptedPassword(i) { let r = "ConfigureWifiWithEncryptedPassword", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "configureWifiWithEncryptedPasswordRequest", configureWifiWithEncryptedPasswordRequest: i } } }, }; return e.rpc(t, r, a).then((i) => { var n, o; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "configureWifiWithEncryptedPasswordResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case)) return i.payload.common.message.configureWifiWithEncryptedPasswordResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, getNetworkingStatus(i) { let r = "GetNetworkingStatus", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "getNetworkingStatusRequest", getNetworkingStatusRequest: i } } } }; return e.rpc(t, r, a).then((i) => { var n, o; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "getNetworkingStatusResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case)) return i.payload.common.message.getNetworkingStatusResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, getCellularInfo(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "getCellularInfoRequest", getCellularInfoRequest: i } } } }; return e.rpc(t, "GetCellularInfo", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "getCellularInfoResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.getCellularInfoResponse; throw e.error(t, "GetCellularInfo", r, i, "response message did not contain expected payload"); }); }, configureEthernet(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "configureEthernetRequest", configureEthernetRequest: i } } } }; return e.rpc(t, "ConfigureEthernet", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "configureEthernetResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.configureEthernetResponse; throw e.error(t, "ConfigureEthernet", r, i, "response message did not contain expected payload"); }); }, forgetWifiNetwork(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "forgetWifiNetworkRequest", forgetWifiNetworkRequest: i } } } }; return e.rpc(t, "ForgetWifiNetwork", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "forgetWifiNetworkResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.forgetWifiNetworkResponse; throw e.error(t, "ForgetWifiNetwork", r, i, "response message did not contain expected payload"); }); }, checkInternet(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "checkInternetRequest", checkInternetRequest: i } } } }; return e.rpc(t, "CheckInternet", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "checkInternetResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.checkInternetResponse; throw e.error(t, "CheckInternet", r, i, "response message did not contain expected payload"); }); }, checkForUpdateUrgency(i) { let r = "CheckForUpdateUrgency", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "checkForUpdateUrgencyRequest", checkForUpdateUrgencyRequest: i } } } }; return e.rpc(t, r, a).then((i) => { var n, o; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "checkForUpdateUrgencyResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case)) return i.payload.common.message.checkForUpdateUrgencyResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, negotiateUpdateWithLocallyAvailablePackages(i) { let r = "NegotiateUpdateWithLocallyAvailablePackages", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "negotiateUpdateWithLocallyAvailablePackagesRequest", negotiateUpdateWithLocallyAvailablePackagesRequest: i } } }, }; return e.rpc(t, r, a).then((i) => { var n, o; if ( "common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "negotiateUpdateWithLocallyAvailablePackagesResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case) ) return i.payload.common.message.negotiateUpdateWithLocallyAvailablePackagesResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, prepareRegistrationPayload(i) { let r = "PrepareRegistrationPayload", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "prepareRegistrationPayloadRequest", prepareRegistrationPayloadRequest: i } } } }; return e.rpc(t, r, a).then((i) => { var n, o; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "prepareRegistrationPayloadResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case)) return i.payload.common.message.prepareRegistrationPayloadResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, }; }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.createEnergySiteNetAPIClient = void 0); const n = i(140); t.createEnergySiteNetAPIClient = function (e) { const t = "EnergySiteNetAPI"; return { addDevice(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "energysitenet", energysitenet: { message: { $case: "addDeviceRequest", addDeviceRequest: i } } } }; return e.rpc(t, "AddDevice", r).then((i) => { var n, a; if ("energysitenet" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "addDeviceResponse" === (null === (a = i.payload.energysitenet.message) || void 0 === a ? void 0 : a.$case)) return i.payload.energysitenet.message.addDeviceResponse; throw e.error(t, "AddDevice", r, i, "response message did not contain expected payload"); }); }, removeDevice(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "energysitenet", energysitenet: { message: { $case: "removeDeviceRequest", removeDeviceRequest: i } } } }; return e.rpc(t, "RemoveDevice", r).then((i) => { var n, a; if ("energysitenet" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "removeDeviceResponse" === (null === (a = i.payload.energysitenet.message) || void 0 === a ? void 0 : a.$case)) return i.payload.energysitenet.message.removeDeviceResponse; throw e.error(t, "RemoveDevice", r, i, "response message did not contain expected payload"); }); }, getConfig(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "energysitenet", energysitenet: { message: { $case: "getConfigRequest", getConfigRequest: i } } } }; return e.rpc(t, "GetConfig", r).then((i) => { var n, a; if ("energysitenet" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "getConfigResponse" === (null === (a = i.payload.energysitenet.message) || void 0 === a ? void 0 : a.$case)) return i.payload.energysitenet.message.getConfigResponse; throw e.error(t, "GetConfig", r, i, "response message did not contain expected payload"); }); }, }; }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.createHermesClient = t.createLocalClient = t.createRPCClient = t.HTTPClientTransport = t.RPCClient = t.serviceParticipant = t.localParticipant = t.deviceParticipant = t.RPCError = void 0); const s = o(i(450)), _ = a(i(40)), l = i(781); Object.defineProperty(t, "deviceParticipant", { enumerable: !0, get: function () { return l.deviceParticipant; }, }), Object.defineProperty(t, "localParticipant", { enumerable: !0, get: function () { return l.localParticipant; }, }), Object.defineProperty(t, "serviceParticipant", { enumerable: !0, get: function () { return l.serviceParticipant; }, }); const c = a(i(140)), d = a(i(785)), u = i(786); Object.defineProperty(t, "RPCError", { enumerable: !0, get: function () { return u.RPCError; }, }), (_.util.Long = s.default), _.configure(); class m { constructor(e, t) { (this.messageOpts = e), (this.clientOpts = t); } rpc(e, t, i) { let n = { api: e, method: t, request: i, requestedAt: Date.now() }, r = (0, l.encode)(i, this.messageOpts); return this.clientOpts.transport .request(n, r) .catch((e) => { throw (e instanceof Error && !(e instanceof u.RPCError) && ((n.transportError = e), (e = new u.RPCError(n, "Transport error: " + e.message))), e); }) .then((e) => { var t, i, r, a, o; let s; try { s = (0, l.decode)(e, this.messageOpts); } catch (e) { if (!(e instanceof Error)) throw new u.RPCError(n, "Caught unexpected non-error type: " + String(e)); throw (e instanceof l.DecodeError && ((n.responseAuthEnvelope = e.authEnvelope), (n.response = null !== (t = e.messageEnvelope) && void 0 !== t ? t : void 0)), new u.RPCError(n, "Decode error: " + e.message)); } if ("common" === (null === (i = s.payload) || void 0 === i ? void 0 : i.$case) && "errorResponse" === (null === (r = s.payload.common.message) || void 0 === r ? void 0 : r.$case)) { let { errorResponse: e } = s.payload.common.message; n.errorResponse = e; let { status: t } = e; const i = t ? `${t.code}: ${t.message}` : "???"; throw new u.RPCError(n, i); } return null === (o = (a = this.clientOpts).successHandler) || void 0 === o || o.call(a, n), s; }) .catch((e) => { var t, i; throw (null === (i = (t = this.clientOpts).errorHandler) || void 0 === i || i.call(t, e), e); }); } error(e, t, i, n, r) { let a = { api: e, method: t, request: i, response: n, requestedAt: Date.now() }; return new u.RPCError(a, r); } } t.RPCClient = m; class p { constructor(e) { this.opts = e; } request(e, t) { var i; const { endpoint: n } = this.opts; e.endpoint = n; const r = new XMLHttpRequest(); return ( (r.timeout = null !== (i = this.opts.timeout) && void 0 !== i ? i : 12e3), (r.responseType = "arraybuffer"), (r.withCredentials = "include" === this.opts.credentials), r.open("POST", n, !0), r.setRequestHeader("Content-Type", "application/octet-stream"), r.send(t), new Promise((t, i) => { (r.onload = () => { r.readyState === XMLHttpRequest.DONE && (r.status >= 200 && r.status < 300 ? t(new Uint8Array(r.response)) : ((e.httpResponse = new Response(r.response, { status: r.status, statusText: r.statusText })), i(new u.RPCError(e, `POST ${n}: ${r.status} ${r.statusText}`)))); }), (r.onerror = () => { i(new TypeError(`POST ${n}: Network error`)); }), (r.ontimeout = () => { i(new TypeError(`POST ${n}: Timeout`)); }); }) ); } } function g(e, t) { let i = new p({ endpoint: t.host.replace(/\/$/, "") + "/tedapi/v1", credentials: t.credentials, timeout: t.timeout }); return new m(e, { transport: i, successHandler: t.successHandler, errorHandler: t.errorHandler }); } (t.HTTPClientTransport = p), (t.createRPCClient = g), (t.createLocalClient = function (e) { return g( { externalAuthType: c.ExternalAuthType.EXTERNAL_AUTH_TYPE_PRESENCE, deliveryChannel: c.DeliveryChannel.DELIVERY_CHANNEL_LOCAL_HTTPS, ourParticipant: (0, l.localParticipant)(d.LocalParticipant.LOCAL_PARTICIPANT_INSTALLER), theirParticipant: (0, l.deviceParticipant)(e.din), }, e ); }), (t.createHermesClient = function (e) { return g( { externalAuthType: c.ExternalAuthType.EXTERNAL_AUTH_TYPE_HERMES_COMMAND, deliveryChannel: c.DeliveryChannel.DELIVERY_CHANNEL_HERMES_COMMAND, ourParticipant: (0, l.serviceParticipant)(c.TeslaService.TESLA_SERVICE_COMMAND), theirParticipant: (0, l.deviceParticipant)(e.din), }, e ); }); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.decode = t.encode = t.serviceParticipant = t.localParticipant = t.deviceParticipant = t.DecodeError = void 0); const o = i(782), s = a(i(140)); class _ extends Error { constructor(e, t, i) { super(i), (this.authEnvelope = e), (this.messageEnvelope = t); } } function l(e, t) { var i, n, r, a; switch (null === (i = t.id) || void 0 === i ? void 0 : i.$case) { case "din": return "din" === (null === (n = e.id) || void 0 === n ? void 0 : n.$case) && t.id.din === e.id.din; case "teslaService": return "teslaService" === (null === (r = e.id) || void 0 === r ? void 0 : r.$case) && t.id.teslaService === e.id.teslaService; case "local": return "local" === (null === (a = e.id) || void 0 === a ? void 0 : a.$case) && t.id.local === e.id.local; } return !1; } (t.DecodeError = _), (t.deviceParticipant = function (e) { return { id: { $case: "din", din: e } }; }), (t.localParticipant = function (e) { return { id: { $case: "local", local: e } }; }), (t.serviceParticipant = function (e) { return { id: { $case: "teslaService", teslaService: e } }; }), (t.encode = function (e, t) { return ( (e.deliveryChannel = t.deliveryChannel), (e.sender = t.ourParticipant), (e.recipient = t.theirParticipant), s.AuthEnvelope.encode({ payload: o.MessageEnvelope.encode(e).finish(), auth: null !== t.externalAuthType ? { $case: "externalAuth", externalAuth: { type: t.externalAuthType } } : void 0 }).finish() ); }), (t.decode = function (e, t) { var i; let n = s.AuthEnvelope.decode(e); if (!n.payload) throw new _(n, null, "missing AuthEnvelope.payload"); switch (null === (i = n.auth) || void 0 === i ? void 0 : i.$case) { case "externalAuth": { const { externalAuth: e } = n.auth; if (e.type <= s.ExternalAuthType.EXTERNAL_AUTH_TYPE_INVALID) throw new _(n, null, "missing/invalid AuthEnvelope.externalAuth.type"); if (null !== t.externalAuthType && e.type !== t.externalAuthType) throw new _(n, null, "unexpected AuthEnvelope.externalAuth.type"); break; } default: throw new _(n, null, "missing AuthEnvelope.auth"); } let r = o.MessageEnvelope.decode(n.payload); const { deliveryChannel: a, sender: c, recipient: d } = r; if (a !== t.deliveryChannel) throw new _(n, r, "unexpected MessageEnvelope.deliveryChannel"); if (!c) throw new _(n, r, "missing MessageEnvelope.sender"); if (!l(c, t.theirParticipant)) throw new _(n, r, "unexpected MessageEnvelope.sender"); if (!d) throw new _(n, r, "missing MessageEnvelope.recipient"); if (!l(d, t.ourParticipant)) throw new _(n, r, "unexpected MessageEnvelope.recipient"); return r; }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.MessageEnvelope = void 0); const n = i(140), r = i(783), a = i(784), o = i(40), s = { deliveryChannel: 0 }; t.MessageEnvelope = { encode(e, t = o.Writer.create()) { var i, s; return ( t.uint32(8).int32(e.deliveryChannel), void 0 !== e.sender && void 0 !== e.sender && n.Participant.encode(e.sender, t.uint32(18).fork()).ldelim(), void 0 !== e.recipient && void 0 !== e.recipient && n.Participant.encode(e.recipient, t.uint32(26).fork()).ldelim(), "common" === (null === (i = e.payload) || void 0 === i ? void 0 : i.$case) && r.CommonMessages.encode(e.payload.common, t.uint32(34).fork()).ldelim(), "energysitenet" === (null === (s = e.payload) || void 0 === s ? void 0 : s.$case) && a.EnergySiteNetMessages.encode(e.payload.energysitenet, t.uint32(82).fork()).ldelim(), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new o.Reader(e) : e; let _ = void 0 === t ? i.len : i.pos + t; const l = Object.assign({}, s); for (; i.pos < _; ) { const e = i.uint32(); switch (e >>> 3) { case 1: l.deliveryChannel = i.int32(); break; case 2: l.sender = n.Participant.decode(i, i.uint32()); break; case 3: l.recipient = n.Participant.decode(i, i.uint32()); break; case 4: l.payload = { $case: "common", common: r.CommonMessages.decode(i, i.uint32()) }; break; case 10: l.payload = { $case: "energysitenet", energysitenet: a.EnergySiteNetMessages.decode(i, i.uint32()) }; break; default: i.skipType(7 & e); } } return l; }, }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.CommonMessages = void 0); const n = i(175), r = i(40), a = {}; t.CommonMessages = { encode(e, t = r.Writer.create()) { var i, a, o, s, _, l, c, d, u, m, p, g, w, v, f, h, E, b, y, S, R, T, A, C, I, O, N, k, P, D, L, M, z, U, V, G, j; return ( "errorResponse" === (null === (i = e.message) || void 0 === i ? void 0 : i.$case) && n.ErrorResponse.encode(e.message.errorResponse, t.uint32(10).fork()).ldelim(), "getSystemInfoRequest" === (null === (a = e.message) || void 0 === a ? void 0 : a.$case) && n.CommonAPIGetSystemInfoRequest.encode(e.message.getSystemInfoRequest, t.uint32(18).fork()).ldelim(), "getSystemInfoResponse" === (null === (o = e.message) || void 0 === o ? void 0 : o.$case) && n.CommonAPIGetSystemInfoResponse.encode(e.message.getSystemInfoResponse, t.uint32(26).fork()).ldelim(), "setLocalSiteConfigRequest" === (null === (s = e.message) || void 0 === s ? void 0 : s.$case) && n.CommonAPISetLocalSiteConfigRequest.encode(e.message.setLocalSiteConfigRequest, t.uint32(34).fork()).ldelim(), "setLocalSiteConfigResponse" === (null === (_ = e.message) || void 0 === _ ? void 0 : _.$case) && n.CommonAPISetLocalSiteConfigResponse.encode(e.message.setLocalSiteConfigResponse, t.uint32(42).fork()).ldelim(), "performUpdateRequest" === (null === (l = e.message) || void 0 === l ? void 0 : l.$case) && n.CommonAPIPerformUpdateRequest.encode(e.message.performUpdateRequest, t.uint32(50).fork()).ldelim(), "performUpdateResponse" === (null === (c = e.message) || void 0 === c ? void 0 : c.$case) && n.CommonAPIPerformUpdateResponse.encode(e.message.performUpdateResponse, t.uint32(58).fork()).ldelim(), "factoryResetRequest" === (null === (d = e.message) || void 0 === d ? void 0 : d.$case) && n.CommonAPIFactoryResetRequest.encode(e.message.factoryResetRequest, t.uint32(66).fork()).ldelim(), "factoryResetResponse" === (null === (u = e.message) || void 0 === u ? void 0 : u.$case) && n.CommonAPIFactoryResetResponse.encode(e.message.factoryResetResponse, t.uint32(74).fork()).ldelim(), "wifiScanRequest" === (null === (m = e.message) || void 0 === m ? void 0 : m.$case) && n.CommonAPIWifiScanRequest.encode(e.message.wifiScanRequest, t.uint32(82).fork()).ldelim(), "wifiScanResponse" === (null === (p = e.message) || void 0 === p ? void 0 : p.$case) && n.CommonAPIWifiScanResponse.encode(e.message.wifiScanResponse, t.uint32(90).fork()).ldelim(), "configureWifiRequest" === (null === (g = e.message) || void 0 === g ? void 0 : g.$case) && n.CommonAPIConfigureWifiRequest.encode(e.message.configureWifiRequest, t.uint32(98).fork()).ldelim(), "configureWifiResponse" === (null === (w = e.message) || void 0 === w ? void 0 : w.$case) && n.CommonAPIConfigureWifiResponse.encode(e.message.configureWifiResponse, t.uint32(106).fork()).ldelim(), "checkForUpdateRequest" === (null === (v = e.message) || void 0 === v ? void 0 : v.$case) && n.CommonAPICheckForUpdateRequest.encode(e.message.checkForUpdateRequest, t.uint32(114).fork()).ldelim(), "checkForUpdateResponse" === (null === (f = e.message) || void 0 === f ? void 0 : f.$case) && n.CommonAPICheckForUpdateResponse.encode(e.message.checkForUpdateResponse, t.uint32(122).fork()).ldelim(), "clearUpdateRequest" === (null === (h = e.message) || void 0 === h ? void 0 : h.$case) && n.CommonAPIClearUpdateRequest.encode(e.message.clearUpdateRequest, t.uint32(130).fork()).ldelim(), "clearUpdateResponse" === (null === (E = e.message) || void 0 === E ? void 0 : E.$case) && n.CommonAPIClearUpdateResponse.encode(e.message.clearUpdateResponse, t.uint32(138).fork()).ldelim(), "deviceCertRequest" === (null === (b = e.message) || void 0 === b ? void 0 : b.$case) && n.CommonAPIDeviceCertRequest.encode(e.message.deviceCertRequest, t.uint32(146).fork()).ldelim(), "deviceCertResponse" === (null === (y = e.message) || void 0 === y ? void 0 : y.$case) && n.CommonAPIDeviceCertResponse.encode(e.message.deviceCertResponse, t.uint32(154).fork()).ldelim(), "configureWifiWithEncryptedPasswordRequest" === (null === (S = e.message) || void 0 === S ? void 0 : S.$case) && n.CommonAPIConfigureWifiWithEncryptedPasswordRequest.encode(e.message.configureWifiWithEncryptedPasswordRequest, t.uint32(162).fork()).ldelim(), "configureWifiWithEncryptedPasswordResponse" === (null === (R = e.message) || void 0 === R ? void 0 : R.$case) && n.CommonAPIConfigureWifiWithEncryptedPasswordResponse.encode(e.message.configureWifiWithEncryptedPasswordResponse, t.uint32(170).fork()).ldelim(), "getNetworkingStatusRequest" === (null === (T = e.message) || void 0 === T ? void 0 : T.$case) && n.CommonAPIGetNetworkingStatusRequest.encode(e.message.getNetworkingStatusRequest, t.uint32(178).fork()).ldelim(), "getNetworkingStatusResponse" === (null === (A = e.message) || void 0 === A ? void 0 : A.$case) && n.CommonAPIGetNetworkingStatusResponse.encode(e.message.getNetworkingStatusResponse, t.uint32(186).fork()).ldelim(), "getCellularInfoRequest" === (null === (C = e.message) || void 0 === C ? void 0 : C.$case) && n.CommonAPIGetCellularInfoRequest.encode(e.message.getCellularInfoRequest, t.uint32(194).fork()).ldelim(), "getCellularInfoResponse" === (null === (I = e.message) || void 0 === I ? void 0 : I.$case) && n.CommonAPIGetCellularInfoResponse.encode(e.message.getCellularInfoResponse, t.uint32(202).fork()).ldelim(), "configureEthernetRequest" === (null === (O = e.message) || void 0 === O ? void 0 : O.$case) && n.CommonAPIConfigureEthernetRequest.encode(e.message.configureEthernetRequest, t.uint32(210).fork()).ldelim(), "configureEthernetResponse" === (null === (N = e.message) || void 0 === N ? void 0 : N.$case) && n.CommonAPIConfigureEthernetResponse.encode(e.message.configureEthernetResponse, t.uint32(218).fork()).ldelim(), "forgetWifiNetworkRequest" === (null === (k = e.message) || void 0 === k ? void 0 : k.$case) && n.CommonAPIForgetWifiNetworkRequest.encode(e.message.forgetWifiNetworkRequest, t.uint32(226).fork()).ldelim(), "forgetWifiNetworkResponse" === (null === (P = e.message) || void 0 === P ? void 0 : P.$case) && n.CommonAPIForgetWifiNetworkResponse.encode(e.message.forgetWifiNetworkResponse, t.uint32(234).fork()).ldelim(), "checkInternetRequest" === (null === (D = e.message) || void 0 === D ? void 0 : D.$case) && n.CommonAPICheckInternetRequest.encode(e.message.checkInternetRequest, t.uint32(242).fork()).ldelim(), "checkInternetResponse" === (null === (L = e.message) || void 0 === L ? void 0 : L.$case) && n.CommonAPICheckInternetResponse.encode(e.message.checkInternetResponse, t.uint32(250).fork()).ldelim(), "checkForUpdateUrgencyRequest" === (null === (M = e.message) || void 0 === M ? void 0 : M.$case) && n.CommonAPICheckForUpdateUrgencyRequest.encode(e.message.checkForUpdateUrgencyRequest, t.uint32(258).fork()).ldelim(), "checkForUpdateUrgencyResponse" === (null === (z = e.message) || void 0 === z ? void 0 : z.$case) && n.CommonAPICheckForUpdateUrgencyResponse.encode(e.message.checkForUpdateUrgencyResponse, t.uint32(266).fork()).ldelim(), "negotiateUpdateWithLocallyAvailablePackagesRequest" === (null === (U = e.message) || void 0 === U ? void 0 : U.$case) && n.CommonAPINegotiateUpdateWithLocallyAvailablePackagesRequest.encode(e.message.negotiateUpdateWithLocallyAvailablePackagesRequest, t.uint32(274).fork()).ldelim(), "negotiateUpdateWithLocallyAvailablePackagesResponse" === (null === (V = e.message) || void 0 === V ? void 0 : V.$case) && n.CommonAPINegotiateUpdateWithLocallyAvailablePackagesResponse.encode(e.message.negotiateUpdateWithLocallyAvailablePackagesResponse, t.uint32(282).fork()).ldelim(), "prepareRegistrationPayloadRequest" === (null === (G = e.message) || void 0 === G ? void 0 : G.$case) && n.CommonAPIPrepareRegistrationPayloadRequest.encode(e.message.prepareRegistrationPayloadRequest, t.uint32(290).fork()).ldelim(), "prepareRegistrationPayloadResponse" === (null === (j = e.message) || void 0 === j ? void 0 : j.$case) && n.CommonAPIPrepareRegistrationPayloadResponse.encode(e.message.prepareRegistrationPayloadResponse, t.uint32(298).fork()).ldelim(), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, a); for (; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.message = { $case: "errorResponse", errorResponse: n.ErrorResponse.decode(i, i.uint32()) }; break; case 2: s.message = { $case: "getSystemInfoRequest", getSystemInfoRequest: n.CommonAPIGetSystemInfoRequest.decode(i, i.uint32()) }; break; case 3: s.message = { $case: "getSystemInfoResponse", getSystemInfoResponse: n.CommonAPIGetSystemInfoResponse.decode(i, i.uint32()) }; break; case 4: s.message = { $case: "setLocalSiteConfigRequest", setLocalSiteConfigRequest: n.CommonAPISetLocalSiteConfigRequest.decode(i, i.uint32()) }; break; case 5: s.message = { $case: "setLocalSiteConfigResponse", setLocalSiteConfigResponse: n.CommonAPISetLocalSiteConfigResponse.decode(i, i.uint32()) }; break; case 6: s.message = { $case: "performUpdateRequest", performUpdateRequest: n.CommonAPIPerformUpdateRequest.decode(i, i.uint32()) }; break; case 7: s.message = { $case: "performUpdateResponse", performUpdateResponse: n.CommonAPIPerformUpdateResponse.decode(i, i.uint32()) }; break; case 8: s.message = { $case: "factoryResetRequest", factoryResetRequest: n.CommonAPIFactoryResetRequest.decode(i, i.uint32()) }; break; case 9: s.message = { $case: "factoryResetResponse", factoryResetResponse: n.CommonAPIFactoryResetResponse.decode(i, i.uint32()) }; break; case 10: s.message = { $case: "wifiScanRequest", wifiScanRequest: n.CommonAPIWifiScanRequest.decode(i, i.uint32()) }; break; case 11: s.message = { $case: "wifiScanResponse", wifiScanResponse: n.CommonAPIWifiScanResponse.decode(i, i.uint32()) }; break; case 12: s.message = { $case: "configureWifiRequest", configureWifiRequest: n.CommonAPIConfigureWifiRequest.decode(i, i.uint32()) }; break; case 13: s.message = { $case: "configureWifiResponse", configureWifiResponse: n.CommonAPIConfigureWifiResponse.decode(i, i.uint32()) }; break; case 14: s.message = { $case: "checkForUpdateRequest", checkForUpdateRequest: n.CommonAPICheckForUpdateRequest.decode(i, i.uint32()) }; break; case 15: s.message = { $case: "checkForUpdateResponse", checkForUpdateResponse: n.CommonAPICheckForUpdateResponse.decode(i, i.uint32()) }; break; case 16: s.message = { $case: "clearUpdateRequest", clearUpdateRequest: n.CommonAPIClearUpdateRequest.decode(i, i.uint32()) }; break; case 17: s.message = { $case: "clearUpdateResponse", clearUpdateResponse: n.CommonAPIClearUpdateResponse.decode(i, i.uint32()) }; break; case 18: s.message = { $case: "deviceCertRequest", deviceCertRequest: n.CommonAPIDeviceCertRequest.decode(i, i.uint32()) }; break; case 19: s.message = { $case: "deviceCertResponse", deviceCertResponse: n.CommonAPIDeviceCertResponse.decode(i, i.uint32()) }; break; case 20: s.message = { $case: "configureWifiWithEncryptedPasswordRequest", configureWifiWithEncryptedPasswordRequest: n.CommonAPIConfigureWifiWithEncryptedPasswordRequest.decode(i, i.uint32()) }; break; case 21: s.message = { $case: "configureWifiWithEncryptedPasswordResponse", configureWifiWithEncryptedPasswordResponse: n.CommonAPIConfigureWifiWithEncryptedPasswordResponse.decode(i, i.uint32()) }; break; case 22: s.message = { $case: "getNetworkingStatusRequest", getNetworkingStatusRequest: n.CommonAPIGetNetworkingStatusRequest.decode(i, i.uint32()) }; break; case 23: s.message = { $case: "getNetworkingStatusResponse", getNetworkingStatusResponse: n.CommonAPIGetNetworkingStatusResponse.decode(i, i.uint32()) }; break; case 24: s.message = { $case: "getCellularInfoRequest", getCellularInfoRequest: n.CommonAPIGetCellularInfoRequest.decode(i, i.uint32()) }; break; case 25: s.message = { $case: "getCellularInfoResponse", getCellularInfoResponse: n.CommonAPIGetCellularInfoResponse.decode(i, i.uint32()) }; break; case 26: s.message = { $case: "configureEthernetRequest", configureEthernetRequest: n.CommonAPIConfigureEthernetRequest.decode(i, i.uint32()) }; break; case 27: s.message = { $case: "configureEthernetResponse", configureEthernetResponse: n.CommonAPIConfigureEthernetResponse.decode(i, i.uint32()) }; break; case 28: s.message = { $case: "forgetWifiNetworkRequest", forgetWifiNetworkRequest: n.CommonAPIForgetWifiNetworkRequest.decode(i, i.uint32()) }; break; case 29: s.message = { $case: "forgetWifiNetworkResponse", forgetWifiNetworkResponse: n.CommonAPIForgetWifiNetworkResponse.decode(i, i.uint32()) }; break; case 30: s.message = { $case: "checkInternetRequest", checkInternetRequest: n.CommonAPICheckInternetRequest.decode(i, i.uint32()) }; break; case 31: s.message = { $case: "checkInternetResponse", checkInternetResponse: n.CommonAPICheckInternetResponse.decode(i, i.uint32()) }; break; case 32: s.message = { $case: "checkForUpdateUrgencyRequest", checkForUpdateUrgencyRequest: n.CommonAPICheckForUpdateUrgencyRequest.decode(i, i.uint32()) }; break; case 33: s.message = { $case: "checkForUpdateUrgencyResponse", checkForUpdateUrgencyResponse: n.CommonAPICheckForUpdateUrgencyResponse.decode(i, i.uint32()) }; break; case 34: s.message = { $case: "negotiateUpdateWithLocallyAvailablePackagesRequest", negotiateUpdateWithLocallyAvailablePackagesRequest: n.CommonAPINegotiateUpdateWithLocallyAvailablePackagesRequest.decode(i, i.uint32()), }; break; case 35: s.message = { $case: "negotiateUpdateWithLocallyAvailablePackagesResponse", negotiateUpdateWithLocallyAvailablePackagesResponse: n.CommonAPINegotiateUpdateWithLocallyAvailablePackagesResponse.decode(i, i.uint32()), }; break; case 36: s.message = { $case: "prepareRegistrationPayloadRequest", prepareRegistrationPayloadRequest: n.CommonAPIPrepareRegistrationPayloadRequest.decode(i, i.uint32()) }; break; case 37: s.message = { $case: "prepareRegistrationPayloadResponse", prepareRegistrationPayloadResponse: n.CommonAPIPrepareRegistrationPayloadResponse.decode(i, i.uint32()) }; break; default: i.skipType(7 & e); } } return s; }, }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.EnergySiteNetMessages = void 0); const n = i(454), r = i(40), a = {}; t.EnergySiteNetMessages = { encode(e, t = r.Writer.create()) { var i, a, o, s, _, l; return ( "addDeviceRequest" === (null === (i = e.message) || void 0 === i ? void 0 : i.$case) && n.EnergySiteNetAPIAddDeviceRequest.encode(e.message.addDeviceRequest, t.uint32(10).fork()).ldelim(), "addDeviceResponse" === (null === (a = e.message) || void 0 === a ? void 0 : a.$case) && n.EnergySiteNetAPIAddDeviceResponse.encode(e.message.addDeviceResponse, t.uint32(18).fork()).ldelim(), "removeDeviceRequest" === (null === (o = e.message) || void 0 === o ? void 0 : o.$case) && n.EnergySiteNetAPIRemoveDeviceRequest.encode(e.message.removeDeviceRequest, t.uint32(26).fork()).ldelim(), "removeDeviceResponse" === (null === (s = e.message) || void 0 === s ? void 0 : s.$case) && n.EnergySiteNetAPIRemoveDeviceResponse.encode(e.message.removeDeviceResponse, t.uint32(34).fork()).ldelim(), "getConfigRequest" === (null === (_ = e.message) || void 0 === _ ? void 0 : _.$case) && n.EnergySiteNetAPIGetConfigRequest.encode(e.message.getConfigRequest, t.uint32(42).fork()).ldelim(), "getConfigResponse" === (null === (l = e.message) || void 0 === l ? void 0 : l.$case) && n.EnergySiteNetAPIGetConfigResponse.encode(e.message.getConfigResponse, t.uint32(50).fork()).ldelim(), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, a); for (; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.message = { $case: "addDeviceRequest", addDeviceRequest: n.EnergySiteNetAPIAddDeviceRequest.decode(i, i.uint32()) }; break; case 2: s.message = { $case: "addDeviceResponse", addDeviceResponse: n.EnergySiteNetAPIAddDeviceResponse.decode(i, i.uint32()) }; break; case 3: s.message = { $case: "removeDeviceRequest", removeDeviceRequest: n.EnergySiteNetAPIRemoveDeviceRequest.decode(i, i.uint32()) }; break; case 4: s.message = { $case: "removeDeviceResponse", removeDeviceResponse: n.EnergySiteNetAPIRemoveDeviceResponse.decode(i, i.uint32()) }; break; case 5: s.message = { $case: "getConfigRequest", getConfigRequest: n.EnergySiteNetAPIGetConfigRequest.decode(i, i.uint32()) }; break; case 6: s.message = { $case: "getConfigResponse", getConfigResponse: n.EnergySiteNetAPIGetConfigResponse.decode(i, i.uint32()) }; break; default: i.skipType(7 & e); } } return s; }, }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.LocalAuthAPICheckAuthStatusResponse = t.LocalAuthAPICheckAuthStatusRequest = t.LocalAuthAPILogoutResponse = t.LocalAuthAPILogoutRequest = t.LocalAuthAPILoginResponse = t.LocalAuthAPILoginRequest = t.LocalAuthAPIRequiredFactorsResponse = t.LocalAuthAPIRequiredFactorsRequest = t.LocalAuthResult = t.LocalParticipant = void 0); const n = i(175), r = i(40), a = {}, o = { password: !1, presence: !1 }, s = { participant: 0, email: "" }, _ = { result: 0 }, l = {}, c = {}, d = {}, u = { result: 0 }; !(function (e) { (e[(e.LOCAL_PARTICIPANT_INVALID = 0)] = "LOCAL_PARTICIPANT_INVALID"), (e[(e.LOCAL_PARTICIPANT_INSTALLER = 1)] = "LOCAL_PARTICIPANT_INSTALLER"), (e[(e.LOCAL_PARTICIPANT_CUSTOMER = 2)] = "LOCAL_PARTICIPANT_CUSTOMER"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.LocalParticipant || (t.LocalParticipant = {})), (function (e) { (e[(e.LOCAL_AUTH_RESULT_INVALID = 0)] = "LOCAL_AUTH_RESULT_INVALID"), (e[(e.LOCAL_AUTH_RESULT_SUCCESS = 1)] = "LOCAL_AUTH_RESULT_SUCCESS"), (e[(e.LOCAL_AUTH_RESULT_INVALID_PARAMETERS = 2)] = "LOCAL_AUTH_RESULT_INVALID_PARAMETERS"), (e[(e.LOCAL_AUTH_RESULT_INVALID_PASSWORD = 3)] = "LOCAL_AUTH_RESULT_INVALID_PASSWORD"), (e[(e.LOCAL_AUTH_RESULT_PRESENCE_PROOF_REQUIRED = 4)] = "LOCAL_AUTH_RESULT_PRESENCE_PROOF_REQUIRED"), (e[(e.LOCAL_AUTH_RESULT_PRESENCE_PROOF_TIMED_OUT = 5)] = "LOCAL_AUTH_RESULT_PRESENCE_PROOF_TIMED_OUT"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.LocalAuthResult || (t.LocalAuthResult = {})), (t.LocalAuthAPIRequiredFactorsRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, a); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return o; }, }), (t.LocalAuthAPIRequiredFactorsResponse = { encode: (e, t = r.Writer.create()) => (t.uint32(8).bool(e.password), t.uint32(16).bool(e.presence), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, o); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.password = i.bool(); break; case 2: a.presence = i.bool(); break; default: i.skipType(7 & e); } } return a; }, }), (t.LocalAuthAPILoginRequest = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.participant), t.uint32(18).string(e.email), void 0 !== e.password && void 0 !== e.password && n.WifiPassword.encode(e.password, t.uint32(26).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, s); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.participant = i.int32(); break; case 2: o.email = i.string(); break; case 3: o.password = n.WifiPassword.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return o; }, }), (t.LocalAuthAPILoginResponse = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.result), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, _); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.result = i.int32(); break; default: i.skipType(7 & e); } } return a; }, }), (t.LocalAuthAPILogoutRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, l); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.LocalAuthAPILogoutResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, c); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.LocalAuthAPICheckAuthStatusRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, d); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.LocalAuthAPICheckAuthStatusResponse = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.result), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, u); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.result = i.int32(); break; default: i.skipType(7 & e); } } return a; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.RPCError = void 0); class n extends Error { constructor(e, t) { super(`${e.api}.${e.method}: ${t}`), Object.assign(this, e), (this.api = e.api), (this.method = e.method), (this.request = e.request), (this.requestedAt = e.requestedAt); } } t.RPCError = n; }, function (e, t, i) {}, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(155), s = i(50), _ = i(62), l = n(i(789)); t.default = function ({ device: e }) { const t = e.vitals(); let i = t.getNumber("PVAC_Pout"), n = (t.getNumber("PVAC_Iout"), t.getNumber("PVAC_LifetimeEnergyPV_Total")); n && (n /= 1e3); let c = [ { number: 1, connected: t.getBoolean("PVS_StringA_Connected"), voltage: t.getNumber("PVAC_PVMeasuredVoltage_A"), current: t.getNumber("PVAC_PVCurrent_A") }, { number: 2, connected: t.getBoolean("PVS_StringB_Connected"), voltage: t.getNumber("PVAC_PVMeasuredVoltage_B"), current: t.getNumber("PVAC_PVCurrent_B") }, { number: 3, connected: t.getBoolean("PVS_StringC_Connected"), voltage: t.getNumber("PVAC_PVMeasuredVoltage_C"), current: t.getNumber("PVAC_PVCurrent_C") }, { number: 4, connected: t.getBoolean("PVS_StringD_Connected"), voltage: t.getNumber("PVAC_PVMeasuredVoltage_D"), current: t.getNumber("PVAC_PVCurrent_D") }, ], d = t.getString("PVS_State"), u = !!d && d.startsWith("PVS_SelfTest"); return r.default.createElement( r.default.Fragment, null, r.default.createElement(l.default, { device: e }), r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_ac_solar_power_only", defaultMessage: "AC Solar Power: {power}", values: { power: r.default.createElement(o.Watts, { value: r.default.createElement(_.Vital, { value: i }) }) }, }) ), r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_lifetime_energy_kwh", defaultMessage: "Lifetime Energy: {energy}", values: { energy: r.default.createElement(o.KiloWattHours, { value: r.default.createElement(_.Vital, { value: n }) }) }, }) ), c.map((e) => r.default.createElement( "p", { key: e.number, className: (0, s.classNames)("vitals-value", { "vitals-value-muted": u }) }, e.connected || u ? r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_string", description: "Displays the DC voltage and current for the specified string of PV panels", defaultMessage: "String {number}: {voltage} / {current}", values: { number: e.number, voltage: r.default.createElement(o.Volts, { value: r.default.createElement(_.Vital, { value: e.voltage }) }), current: r.default.createElement(o.Amps, { value: r.default.createElement(_.Vital, { value: e.current }) }), }, }) : r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_string_not_connected", description: "Indicates that no PV panels are connected to the specified string", defaultMessage: "String {number}: Not connected", values: { number: e.number }, }) ) ) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(50), s = i(62), _ = i(449); var l, c; !(function (e) { (e.PVS_State_SNA = "PVS_State_SNA"), (e.PVS_GridSupporting = "PVS_GridSupporting"), (e.PVS_Fault = "PVS_Fault"), (e.PVS_ActiveToIdleNotice = "PVS_ActiveToIdleNotice"), (e.PVS_Active = "PVS_Active"), (e.PVS_SelfTestRelayWeld = "PVS_SelfTestRelayWeld"), (e.PVS_SelfTestMci = "PVS_SelfTestMci"), (e.PVS_SelfTestArcFault = "PVS_SelfTestArcFault"), (e.PVS_SelfTestIsolation = "PVS_SelfTestIsolation"), (e.PVS_SelfTestPeImpedance = "PVS_SelfTestPeImpedance"), (e.PVS_SelfTestGroundFault = "PVS_SelfTestGroundFault"), (e.PVS_Standby = "PVS_Standby"), (e.PVS_Idle = "PVS_Idle"), (e.PVS_Init = "PVS_Init"), (e.PVS_Off = "PVS_Off"); })(l || (l = {})), (function (e) { (e.PVAC_State_SNA = "PVAC_State_SNA"), (e.PVAC_Active = "PVAC_Active"), (e.PVAC_Standby = "PVAC_Standby"), (e.PVAC_Faulted = "PVAC_Faulted"), (e.PVAC_Init = "PVAC_Init"); })(c || (c = {})); const d = (0, a.defineMessages)({ [l.PVS_SelfTestGroundFault]: { id: "pvs-self-test-1", defaultMessage: "Self-test (1/6): Ground Fault" }, [l.PVS_SelfTestArcFault]: { id: "pvs-self-test-2", defaultMessage: "Self-test (2/6): Arc Fault" }, [l.PVS_SelfTestMci]: { id: "pvs-self-test-3", defaultMessage: "Self-test (3/6): MCI" }, [l.PVS_SelfTestIsolation]: { id: "pvs-self-test-4", defaultMessage: "Self-test (4/6): Isolation" }, [l.PVS_SelfTestRelayWeld]: { id: "pvs-self-test-5", defaultMessage: "Self-test (5/6): Relay Weld" }, [l.PVS_SelfTestPeImpedance]: { id: "pvs-self-test-6", defaultMessage: "Self-test (6/6): Impedance" }, }), u = (0, a.defineMessages)({ [c.PVAC_Init]: { id: "pvac-state-init", description: "Indicates the inverter is initializing.", defaultMessage: "Initializing..." }, [c.PVAC_Faulted]: { id: "pvac-state-faulted", description: "Indicates the inverter is in a faulted state.", defaultMessage: "Faulted" }, [c.PVAC_Standby]: { id: "pvac-state-standby", description: "Indicates the inverter is on stand-by.", defaultMessage: "Wait for Solar" }, [c.PVAC_Active]: { id: "pvac-state-active", description: "Indicates the inverter is active.", defaultMessage: "Active" }, }); t.default = function ({ device: e }) { const t = e.vitals(); let i, n = t.getString("PVS_State"), l = t.getString("PVAC_State"), c = t.getString("PVI-PowerStatusSetpoint") || _.PowerStatus.UNSET, m = !1; return ( n && n in d ? ((i = r.default.createElement(a.FormattedMessage, Object.assign({}, d[n]))), (m = !0)) : (i = c === _.PowerStatus.OFF || c === _.PowerStatus.DC_ONLY ? r.default.createElement(a.FormattedMessage, Object.assign({}, _.powerStatusMessages[c])) : l && l in u ? r.default.createElement(a.FormattedMessage, Object.assign({}, u[l])) : s.MissingValue), r.default.createElement( "p", { className: (0, o.classNames)("vitals-value", { "vitals-value-selftest": m }) }, r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_state", defaultMessage: "State: {message}", values: { message: i } }) ) ); }; }, function (e, t, i) { e.exports = i.p + "c8fcb53fcd20652d2178b6f0b250133d.svg"; }, function (e, t, i) { e.exports = i.p + "b8edeecd65dc2e9ab81897c5ee2db33e.svg"; }, function (e, t, i) { e.exports = i.p + "a850d2157007ce3dcec027b4e229da17.png"; }, function (e, t, i) { e.exports = i.p + "f3e32873e5f25c0515bc4c3485ebf289.png"; }, function (e, t, i) { e.exports = i.p + "5101b9205648ce60c79f155a9f738027.png"; }, function (e, t, i) {}, function (e, t, i) { e.exports = i.p + "43b51e1b10d9be72e3f138207d0dcb50.png"; }, function (e, t, i) { fetch('/stats') .then(response => response.json()) .then(data => { const isPW3 = data.pw3; if (isPW3 == true) { e.exports = i.p + "2cd211ee063a3608ab501624f326d61e.png"; } else { e.exports = i.p + "cb0da8a8999c06735455bf5056a5cd78.png"; } }) .catch(error => { console.error('Error fetching /stats:', error); e.exports = i.p + "cb0da8a8999c06735455bf5056a5cd78.png"; }); }, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, , , , , , , , function (e, t) {}, , , , , , function (e, t) {}, , , , , function (e, t, i) {}, function (e, t, i) {}, , function (e, t, i) {}, function (e, t, i) {}, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; i.r(t); var n = {}; i.r(n), i.d(n, "showBanner", function () { return j; }), i.d(n, "destroyBanner", function () { return W; }), i.d(n, "destroyBanners", function () { return F; }); var r = i(18), a = i.n(r), o = i(292), s = i.n(o), _ = i(0), l = i.n(_), c = i(1), d = i.n(c), u = i(3), m = i(35), p = i(17), g = i(49), w = i(55), v = i(66), f = i.n(v), h = i(14), E = i(29), b = i(154), y = i(10), S = i(2); i(640); function R(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const T = Object(u.defineMessages)({ tryLoggingInAgain: { id: "error_item_view_try_logging_in_again", defaultMessage: "Try logging in again." }, refreshBrowser: { id: "error_item_view_refresh_browser", defaultMessage: "Refresh browser." }, disconnected: { id: "error_item_view_disconnected", defaultMessage: "Disconnected from Gateway. Check network connection and {refresh}" }, checkNetwork: { id: "error_item_view_check_network", defaultMessage: "Check network connection." }, }); class A extends c.Component { constructor(...e) { super(...e), R(this, "_handleClick", this._handleClick.bind(this)), R(this, "_navigateToSecurity", this._navigateToSecurity.bind(this)); } render() { const { error: e, intl: t } = this.props; let n = null, r = null, a = e.message, o = "", s = null != a && !(a.lastIndexOf(".") === a.length - 1), _ = !1; return ( e instanceof h.default && (e.isDetailed() && (n = c.createElement("img", { "data-testid": "8610cc7e-2d95-433c-b4f2-d8f221997d2c", className: "error-info", alt: "Detailed Error", src: i(298), onClick: this._handleClick })), (_ = e.isUnauthorized()), (o = e.toErrorString())), Object(E.p)(a) || _ ? (r = e.name && e.name === S.RECEIVE_LOGIN_ERROR ? c.createElement("u", { onClick: this._navigateToSecurity }, c.createElement(u.FormattedMessage, { id: "error_item_view_forgot_password", defaultMessage: "Click to reset password." })) : c.createElement("a", { "data-testid": "81f30817-fd59-4219-81a1-f9770578976c", className: "refresh", onClick: b.b }, t.formatMessage(T.tryLoggingInAgain))) : Object(E.j)(a) ? ((o = t.formatMessage(T.disconnected, { refresh: "" })), (s = !1), (r = c.createElement("a", { "data-testid": "391bbcd8-77e4-46fb-aeed-93b5655d4c29", className: "refresh text-lowercase", onClick: b.b }, t.formatMessage(T.refreshBrowser)))) : Object(E.q)(a) ? (r = c.createElement("a", { "data-testid": "2a56dd50-21f9-46da-a789-86662115ed52", className: "refresh", onClick: b.b }, t.formatMessage(T.refreshBrowser))) : Object(E.k)(a) && ((s = !1), (r = c.createElement("a", { "data-testid": "28a36a86-b956-4612-8756-cbf01fd6d1a7", className: "error-link", href: "/network" }, t.formatMessage(T.checkNetwork)))), c.createElement("p", { "data-testid": "9d67a30d-6c1d-4d2a-861a-74593cd27470", className: "error-item" }, o || a, s ? "." : "", r ? " " : "", r, n) ); } _navigateToSecurity() { let e = "/password"; this.props.selectedLoginType !== y.c.CUSTOMER && (e += "?mode=" + y.c.INSTALLER), p.browserHistory.push(e); } _handleClick(e) { this.props.handleClick && this.props.handleClick(e); } } R(A, "propTypes", { intl: u.intlShape.isRequired, error: l.a.instanceOf(h.default).isRequired, handleClick: l.a.func, selectedLoginType: l.a.oneOf(Object.values(y.c)) }); var C, I, O; i(641); function N(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function k(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class P extends c.Component { constructor(e) { super(e), (this.ui = {}), (this._handleHidden = this._handleHidden.bind(this)); } componentDidMount() { (this.ui.modal = f()(this.refs.modal)), this.ui.modal.modal( (function (e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? N(Object(i), !0).forEach(function (t) { k(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : N(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; })({}, this.props.bootstrapProps) ), this.ui.modal.on("hidden.bs.modal", this._handleHidden), this.props.fadeIn && (this.ui.fade = f()(".modal.fade.in")), this.props.onMount && this.props.onMount(); } componentWillUnmount() { this.ui.modal.off("hidden.bs.modal", this._handleHidden), this.ui.modal.modal("hide"), this.ui.fade && this.ui.fade.length && this.ui.fade.remove(), this.props.onUnmount && this.props.onUnmount(); } render() { const { size: e, centered: t, fullscreen: i, fadeIn: n, showCancel: r, showBorders: a, showErrors: o, modalClass: s, errors: _, selectedLoginType: l, bannerView: d, headerView: u, contentView: m, footerView: p, } = this.props; return c.createElement( "div", { "data-testid": "6c45a17b-1a5a-4dec-8351-665862b60642", className: this._getModalClassName(t, i, n, a, s, o, _), tabIndex: "-1", role: "dialog", ref: "modal" }, c.createElement( "div", { "data-testid": "0e8ca6c4-0912-426e-9fb4-9600c6cfd314", className: "modal-dialog modal-" + e, role: "document" }, c.createElement( "div", { "data-testid": "85b231c4-419d-4b0b-a37b-69f4cafd4aae", className: "modal-content" }, d && this._getModalBanner(d), u && this._getModalHeader(u, r, o, _, l), m && this._getModalContent(m), p && this._getModalFooter(p) ) ) ); } _getModalClassName(e, t, i, n, r, a, o) { let s = ["modal"]; return e && s.push("modal-center"), t && s.push("modal-fullscreen"), i && s.push("fade"), n || s.push("modal-no-borders"), r && s.push(r), a && o.length && (s.push("modal-error"), i && s.push("in")), s.join(" "); } _getModalBanner(e) { return c.createElement("div", null, e); } _getModalHeader(e, t, i, n, r) { let a = []; return ( i && n.length && (a = n.map((e, t) => c.createElement(A, { intl: this.props.intl, key: t, error: e, selectedLoginType: r }))), c.createElement("div", { "data-testid": "53249177-ed6d-400d-aff2-e3e77db701f4", className: "modal-header" }, this._getCancel(t), e, a) ); } _getCancel(e) { return e ? c.createElement( "button", { "data-testid": "33954d8f-f1b2-47c5-85ed-2bbd210cdbe5", type: "button", className: "close", "data-dismiss": "modal", "aria-label": "Close" }, c.createElement("span", { "data-testid": "df78842b-6663-4a34-b983-e698658d2f47", "aria-hidden": "true" }, "×") ) : null; } _getModalContent(e) { return c.createElement("div", { "data-testid": "26d958a5-5f8d-4b2d-867b-9e0b942de3f7", className: "modal-body" }, e); } _getModalFooter(e) { return c.createElement("div", { "data-testid": "3722b54d-83dd-4180-b93d-c82a43b68239", className: "modal-footer" }, e); } _handleHidden() { this.props.hideModal && this.props.hideModal(); } } function D() { return (D = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } k(P, "propTypes", { intl: u.intlShape.isRequired, size: l.a.string.isRequired, centered: l.a.bool.isRequired, fullscreen: l.a.bool.isRequired, fadeIn: l.a.bool.isRequired, showCancel: l.a.bool.isRequired, showBorders: l.a.bool.isRequired, showErrors: l.a.bool.isRequired, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, modalClass: l.a.string, bannerView: l.a.element, headerView: l.a.element, contentView: l.a.element, footerView: l.a.element, hideModal: l.a.func, onMount: l.a.func, onUnmount: l.a.func, bootstrapProps: l.a.object, }), k(P, "defaultProps", { size: "md", centered: !1, fullscreen: !1, fadeIn: !0, showCancel: !0, showBorders: !1, showErrors: !0, errors: [] }); class L extends c.Component { render() { const { modalType: e, modalProps: t, bootstrapProps: i, hideModal: n, errors: r, selectedLoginType: a, intl: o } = this.props; return e ? c.createElement(P, D({}, t, { intl: o, bootstrapProps: i, hideModal: n, selectedLoginType: a, errors: r.filter((t) => !(e === y.b && Object(E.l)(t.message))) })) : null; } } (C = L), (I = "propTypes"), (O = { intl: u.intlShape.isRequired, modalType: l.a.string, modalProps: l.a.object, bootstrapProps: l.a.object, hideModal: l.a.func, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, }), I in C ? Object.defineProperty(C, I, { value: O, enumerable: !0, configurable: !0, writable: !0 }) : (C[I] = O); var M = Object(m.connect)( (e, t) => { const { authentication: i, modal: n, error: r } = e; return { modalType: n.modalType, modalProps: n.modalProps, bootstrapProps: n.bootstrapProps, errors: r.items, selectedLoginType: i.selectedLoginType }; }, (e) => ({ hideModal: () => { e(Object(w.hideModal)()); }, }) )(Object(u.injectIntl)(L)), z = i(150), U = i(133), V = i(7), G = i(6); const j = Object(G.b)(S.SHOW_BANNER, "bannerProps"), W = Object(G.b)(S.DESTROY_BANNER, "name"), F = Object(G.b)(S.DESTROY_ALL_BANNERS); var q = i(74), x = i(135), B = i(39), H = i(109), K = i(5), Y = i.n(K), Q = i(4); function Z() { return function (e) { fetch(Y.a.api.uri + "/troubleshooting/problems", { credentials: Y.a.credentials }) .then(Q.checkStatus) .then((e) => e.json()) .then((t) => { var i; t && Array.isArray(t.problems) && e(((i = t.problems), { type: S.RECEIVE_INSTALLATION_PROBLEMS, problems: i })); }) .catch((e) => {}); }; } var J = i(20), X = i.n(J), $ = i(554), ee = i.n($), te = i(28), ie = i(68), ne = i(48); i(646); function re(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class ae extends c.Component { render() { const { headerClass: e, title: t, subtitle: i, subtitleView: n, additionalView: r, email: a, errors: o, progress: s, handleClick: _, kioskMode: l, selectedLoginType: d, intl: m, installationProblems: g } = this.props; let w = null, v = [], f = []; return ( o.length && (v = o.map((e, t) => c.createElement(A, { intl: m, key: t, error: e, handleClick: _, selectedLoginType: d }))), (w = i ? c.createElement("p", { "data-testid": "092c8885-9b44-4193-b471-90781f43b19c", className: "subtitle" }, i) : n), Array.isArray(g) && g.length > 0 && (f = g.map((e) => { const t = ne.installationProblemTitles[e]; if (!t) return null; switch (e) { case ne.InstallationProblems.PVACsWithNoSolarRGM: case ne.InstallationProblems.TooManySolarRGM: case ne.InstallationProblems.TooFewSolarRGM: return c.createElement( "div", { key: e }, c.createElement(p.Link, { onClick: () => this._showSolarRGMProblemModal(e) }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, t)) ); default: return c.createElement("div", { key: e }, c.createElement(p.Link, { to: "/system" }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, t))); } })), c.createElement( "div", { "data-testid": "ce33805a-86b7-4f6d-807e-c4e305cb3205", className: this._getClassName(e, o) }, c.createElement( "div", { "data-testid": "8300b4f1-fdc2-458d-94b8-3f69f84f436f", className: "container" }, this._getProgressIndication(a, s, l), c.createElement("h2", { "data-testid": "361ccdc2-ce7c-4772-a631-f833bd8c2193", className: "title" }, t), w, r, v, f ) ) ); } _showSolarRGMProblemModal(e) { this.props.showModal("PROBLEMS_MODAL", { modalClass: "modal-caution", size: "md", centered: !1, showCancel: !0, showErrors: !0, headerView: c.createElement("h2", { className: "modal-title" }, c.createElement(u.FormattedMessage, ne.installationProblemTitles[e])), contentView: c.createElement("div", null, c.createElement(u.FormattedMessage, ne.installationProblemDetails[e])), footerView: c.createElement( "div", { className: "center-block" }, c.createElement("button", { type: "button", className: "btn btn-primary", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE)) ), }); } _getClassName(e, t) { let i = ["header", e]; return t.length && i.push("error"), i.join(" "); } _getProgressIndication(e, t, i) { if (i || (!t && !e)) return null; let n = ""; return e && (n += e), t && (n += ` ${t}/${this.props.isResi ? 13 : 9}`), c.createElement("p", { "data-testid": "0438bf7f-2a09-4985-8749-4f5c28b91dc4", className: "wizard-progress" }, n); } } re(ae, "propTypes", { intl: u.intlShape.isRequired, headerClass: l.a.string.isRequired, title: l.a.string.isRequired, subtitle: l.a.string, subtitleView: l.a.element, additionalView: l.a.element, email: l.a.string, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, progress: l.a.number.isRequired, handleClick: l.a.func.isRequired, kioskMode: l.a.bool.isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, isResi: l.a.bool.isRequired, installationProblems: l.a.array.isRequired, showModal: l.a.func.isRequired, }), re(ae, "defaultProps", { title: "", subtitle: "", subtitleView: null, additionalView: null, errors: [], progress: 0, installationProblems: [] }); var oe = i(26), se = i(60), _e = i(126); function le() { return (le = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } class ce extends c.Component { constructor(e) { super(e), (this._handleDetailedClick = this._handleDetailedClick.bind(this)); } render() { const { headerType: e, headerProps: t, errors: i, email: n, kioskMode: r, selectedLoginType: a, intl: o, isResi: s, installationProblems: _, showModal: l } = this.props; return t.title ? c.createElement(ae, le({ isResi: s, intl: o, errors: i, email: n, headerClass: e, handleClick: this._handleDetailedClick, kioskMode: r, selectedLoginType: a, installationProblems: _, showModal: l }, t)) : null; } _handleDetailedClick(e) { this.props.showModal("DETAILED_ERROR_MODAL", { modalClass: "modal-error", size: "lg", centered: !0, showCancel: !1, showErrors: !1, headerView: c.createElement("h2", { "data-testid": "229cc453-2a7f-4b73-b53f-1be26ffdcbdc", className: "modal-title" }, this.props.intl.formatMessage(oe.errorMessages.details)), contentView: c.createElement( "div", { "data-testid": "d757513a-9115-4fbc-993e-2b3404a8f4c5" }, c.createElement( "ul", { "data-testid": "a4d93b83-2d09-4111-a8d9-79931254aef0", className: "detailed-errors" }, Object(E.b)(this.props.errors).map((e, t) => c.createElement( "li", { "data-testid": "6f7e814c-9bae-40b7-a93a-749dc41528ba", key: t }, c.createElement("div", { "data-testid": "992d8ad6-e14a-4245-84b8-82152941eabd", className: "line-breaks" }, e.toDetailedString()) ) ) ) ), footerView: c.createElement( "button", { "data-testid": "19625f9d-50ec-4956-a59a-5f4f434fc47d", type: "button", className: "btn btn-link center-block", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE) ), }); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(ce, "propTypes", { intl: u.intlShape.isRequired, headerType: l.a.string, headerProps: l.a.shape({ title: l.a.string }).isRequired, email: l.a.string, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, kioskMode: l.a.bool.isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, isResi: l.a.bool.isRequired, installationProblems: l.a.array.isRequired, }); var de = Object(m.connect)( (e, t) => { const { header: i, authentication: n, error: r } = e; return { headerType: i.headerType, headerProps: i.headerProps, email: n.email, selectedLoginType: n.selectedLoginType, errors: r.items, kioskMode: t.location.query.mode === y.c.KIOSK, isResi: Object(se.isResiGatewaySelector)(e), installationProblems: Object(_e.b)(e), }; }, (e) => ({ showModal: (t, i, n) => { e(Object(w.showModal)(t, i, n)); }, }) )(Object(u.injectIntl)(ce)), ue = i(50); i(647); function me(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class pe extends c.Component { _renderDefaultView() { const { title: e, message: t } = this.props; return c.createElement( "div", { "data-testid": "7c9c24f1-3171-4b44-b739-d40696a3e6ae", className: "container text-break" }, null != e ? c.createElement("p", { "data-testid": "0de58fa5-e1b6-4084-9d80-148ad4bf6324", className: "text-extra-large mt-1" }, e) : null, c.createElement("p", { "data-testid": "462f9c99-d750-4a98-8142-c755e0f7e39a", className: "text-medium " + (null != e ? "no-margin" : "mt-1") }, t) ); } render() { return c.createElement( "div", { "data-testid": "23935f4a-3964-46da-a559-9b3828970a14", className: Object(ue.classNames)("absolute flex py-5 banner-container", this.props.containerClasses) }, this.props.contentView || this._renderDefaultView(), c.createElement("div", { "data-testid": "1a33ddfd-a96a-48fb-8c63-379befbc0285", className: "text-larger absolute px-2 banner-close", onClick: this.props.onClose }, "×") ); } } me(pe, "zIndex", 10), me(pe, "propTypes", { contentView: l.a.element, title: l.a.string, message: l.a.string, containerClasses: l.a.string, onClose: l.a.func.isRequired }), me(pe, "defaultProps", { containerClasses: "" }); var ge = i(15); class we extends c.Component { constructor(e) { super(e), (this.state = { closing: !1 }); } _getCloseHandler(e, t) { const { destroyBanner: i } = this.props; return async () => { this.state.closing || this.setState({ closing: !0 }, async () => { await Object(ge.d)(200), i(e), t && t(), this.setState({ closing: !1 }); }); }; } render() { if (this.props.banners.length < 1) return null; const e = this.props.banners[0], { name: t, closeCallback: i, containerClasses: n, contentView: r, title: a, message: o } = e; return c.createElement( "div", { "data-testid": "fbf0f7cc-6e47-4e1d-be38-17f916d8076f", className: "banners-container" }, c.createElement(pe, { key: t, contentView: r, title: a, message: o, containerClasses: Object(ue.classNames)({ "slide-out-top": this.state.closing, "slide-in-top": !this.state.closing }, n || ""), onClose: this._getCloseHandler(t, i), }) ); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(we, "propTypes", { banners: l.a.arrayOf(l.a.object).isRequired, destroyBanner: l.a.func.isRequired }); var ve = Object(m.connect)( (e) => ({ banners: e.banner.items }), (e) => ({ destroyBanner(t) { e(W(t)); }, }) )(Object(u.injectIntl)(we)), fe = i(58); i(426); function he() { return (he = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function Ee(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function be(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? Ee(Object(i), !0).forEach(function (t) { ye(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : Ee(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function ye(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const Se = { route: l.a.string, text: l.a.string, onClick: l.a.func, buttonClass: l.a.string, additionalProps: l.a.object }; class Re extends c.Component { constructor(e) { super(e), (this.ui = {}), (this._handleClick = this._handleClick.bind(this)); } render() { const { footerClass: e, back: t, cancel: i, forward: n } = this.props; return c.createElement( "div", { "data-testid": "134d20db-2e72-4492-a144-db29e5937d75", className: this._getClassName(e) }, c.createElement( "div", { "data-testid": "3131d07c-cbb5-4233-991c-b56fc24f1501", className: "container" }, c.createElement( "div", { "data-testid": "503c0c08-0e04-467f-9778-28a8bff38b6c", className: "row" }, c.createElement("div", { "data-testid": "e5e7071f-68a3-4e72-9b80-95825520f022", className: "col-xs-4 back-section" }, this._getLink(fe.a.BACK, t)), c.createElement("div", { "data-testid": "4e41cfcb-2350-45a5-9b4a-08479fa9e71b", className: "col-xs-4 no-padding cancel-section" }, this._getLink(fe.a.CANCEL, i)), c.createElement("div", { "data-testid": "beaf52e5-59fa-4eed-b3e7-2fefced724d5", className: "col-xs-4 forward-section" }, this._getLink(fe.a.FORWARD, n)) ) ) ); } componentDidMount() { (this.ui.tooltip = f()('[data-toggle="tooltip"]')), this.ui.tooltip && this.ui.tooltip.length && this.ui.tooltip.tooltip(); } _getClassName(e) { return ["footer", e].join(" "); } _getLink(e, t) { const { route: i, text: n, onClick: r, buttonClass: a, additionalProps: o } = t; if (i || r) { let t = be({ to: i, type: e, onClick: this._handleClick, className: this._getLinkClassName(e, a) }, o), r = n.indexOf("< ") > -1 ? c.createElement( "svg", { width: "8px", height: "10px", viewBox: "0 0 8 10" }, c.createElement( "g", { id: "left-chevron", fill: "none", fillRule: "evenodd", strokeWidth: "2", stroke: "inherit", transform: "translate(-18.000000, -1120.000000) translate(20.000000, 1116.000000)" }, c.createElement("polyline", { transform: "translate(2.531860, 8.995758) rotate(-180.000000) translate(-2.531860, -8.995758) ", points: "-7.10542736e-15 12.9915161 5.0637207 8.95031738 0.0109863281 5", }) ) ) : null, s = n.indexOf(" >") > -1 ? c.createElement( "svg", { width: "8px", height: "10px", viewBox: "0 0 8 10" }, c.createElement( "g", { id: "right-chevron", fill: "none", fillRule: "evenodd", strokeWidth: "2", stroke: "inherit", transform: "translate(-332.000000, -1121.000000)" }, c.createElement("polyline", { points: "333 1129.99152 338.063721 1125.95032 333.010986 1122" }) ) ) : null; return "/" === i ? c.createElement(p.IndexLink, t, r, this._getText(n), s) : c.createElement(p.Link, he({ "data-testid": "eaaace92-28e7-4758-b87e-4335215a72dd" }, t), r, this._getText(n), s); } if (n) { let e = be({ className: a || "btn-text" }, o); return c.createElement("a", he({ "data-testid": "d0e40650-58fc-449a-a81f-5de2daee5799" }, e), n); } return null; } _getLinkClassName(e, t) { let i = e.toLowerCase() + "-link"; return t && (i += " " + t), i; } _getText(e) { return e.indexOf("< ") > -1 ? e.replace("< ", "") : e.indexOf(" >") > -1 ? e.replace(" >", "") : e; } _handleClick(e) { let t = e.target, i = t.getAttribute("type"); t.getAttribute("href") || e.preventDefault(), i && this.props[i.toLowerCase()].onClick && this.props[i.toLowerCase()].onClick(e); } } ye(Re, "propTypes", { footerClass: l.a.string.isRequired, back: l.a.shape(Se).isRequired, cancel: l.a.shape(Se).isRequired, forward: l.a.shape(Se).isRequired }), ye(Re, "defaultProps", { back: {}, cancel: {}, forward: {} }); class Te extends c.Component { render() { const { navigationType: e, back: t, cancel: i, forward: n } = this.props; return t.route || n.route || i.route || i.onClick || t.onClick || n.onClick ? c.createElement(Re, { footerClass: e, back: t, cancel: i, forward: n }) : null; } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(Te, "propTypes", { navigationType: l.a.string, back: l.a.object.isRequired, cancel: l.a.object.isRequired, forward: l.a.object.isRequired }); var Ae = Object(m.connect)((e, t) => { const { navigation: i } = e; return { navigationType: i.navigationType, back: i.back, cancel: i.cancel, forward: i.forward }; })(Te), Ce = i(555), Ie = i(136), Oe = i(108); i(648); class Ne extends c.Component { constructor(e) { super(e), (this.state = { offset: 0, startTimestamp: 0, closing: !1 }), (this._handleStart = this._handleStart.bind(this)), (this._handleStop = this._handleStop.bind(this)), (this._handleDrag = this._handleDrag.bind(this)); } _renderHeader() { const { type: e, header: t } = this.props, i = c.createElement("button", { "data-testid": "3eb9001c-000f-4631-afce-231723abd0e5", type: "button", ref: (e) => (this.closeButton = e), className: "close toast-close px-2 py-1" }, "×"); switch (e) { case Ie.WARNING_TOAST: return c.createElement( "div", { "data-testid": "cdf90d0c-deff-4515-81ef-cf8fe1428eef", className: "toast-header toast-warning-header py-1 pl-2" }, c.createElement("strong", { className: "toast-title" }, t || c.createElement(u.FormattedMessage, { id: "toast_view_warning_title", defaultMessage: "Warning" })), i ); case Ie.STANDARD_TOAST: default: return c.createElement( "div", { "data-testid": "186dadde-46f4-4889-89d0-bcf85f3dd46d", className: "toast-header toast-standard-header py-1 pl-2" }, c.createElement("strong", { className: "toast-title" }, t || c.createElement(u.FormattedMessage, { id: "toast_view_standard_title", defaultMessage: "Note" })), i ); } } render() { const e = { transform: `translateX(${this.state.offset}px)` }, t = this.props.link ? c.createElement( "p", { "data-testid": "798ac791-9579-4610-8cdc-2e0f2cf5dd88", className: "toast-link px-2 py-3 hand" }, c.createElement("span", { "data-testid": "d5262048-88c3-429b-96c9-95e139ca7901" }, this.props.message), c.createElement("img", { "data-testid": "a4d2c88e-2f52-4751-9d87-130be5876ec4", className: "caret-right toast-link-indicator ml-1", src: i(153) }) ) : c.createElement("span", { "data-testid": "c78e8e56-e68d-449c-ab72-ef733abb74de", className: "px-2 py-3" }, this.props.message); return c.createElement( Ce.DraggableCore, { axis: "x", handle: ".handle", onStart: this._handleStart, onStop: this._handleStop, onDrag: this._handleDrag, grid: [5] }, c.createElement( "div", { "data-testid": "d1b2275c-f235-4032-9954-32d780124b2f", className: "toast handle " + (this.state.closing ? "fade-out" : "fade-in"), role: "alert", style: e }, this._renderHeader(), c.createElement("div", { "data-testid": "024c5b58-a596-424a-bec3-131ba89f54e6", className: "toast-body" }, t) ) ); } _navigateToLink() { this.props.link && p.browserHistory.push(this.props.link); } _handleStart(e, t) { this.setState({ startTimestamp: Date.now() }); } _handleStop(e, t) { e.preventDefault(); const i = Math.abs(this.state.offset); i > 125 || e.target.isSameNode(this.closeButton) ? this.setState({ closing: !0 }, async () => { await Object(ge.d)(300), this.props.onClose(); }) : i < 5 && Date.now() - this.state.startTimestamp < Oe.b ? this._navigateToLink() : this.setState({ offset: 0, startTimestamp: 0 }); } _handleDrag(e, t) { t && this.setState((e) => ({ offset: e.offset + t.deltaX })); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(Ne, "propTypes", { intl: u.intlShape.isRequired, type: l.a.string.isRequired, link: l.a.string, header: l.a.string, message: l.a.string.isRequired, onClose: l.a.func.isRequired }); i(649); function ke() { return (ke = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } class Pe extends c.Component { _createCloseHandler(e) { return () => { this.props.clearToast(e); }; } render() { return c.createElement( "div", { "data-testid": "3af20fbe-4447-43a9-84fe-8ad6c315ac8d", className: "toast-list" }, this.props.items.map(({ name: e, toastProps: t }) => c.createElement(Ne, ke({}, t, { intl: this.props.intl, key: e, onClose: this._createCloseHandler(e) }))) ); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(Pe, "propTypes", { intl: u.intlShape.isRequired, items: l.a.arrayOf(l.a.shape({ name: l.a.string.isRequired, toastProps: l.a.shape({ type: l.a.string.isRequired, link: l.a.string, header: l.a.string, message: l.a.string.isRequired }).isRequired })).isRequired, clearToast: l.a.func.isRequired, }); class De extends c.Component { render() { return c.createElement(Pe, { intl: this.props.intl, items: this.props.items, clearToast: this.props.clearToast }); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(De, "propTypes", { intl: u.intlShape.isRequired, clearToast: l.a.func.isRequired, items: l.a.arrayOf(l.a.shape({ name: l.a.string.isRequired, toastProps: l.a.shape({ type: l.a.string.isRequired, link: l.a.string, header: l.a.string, message: l.a.string.isRequired }).isRequired })).isRequired, }); var Le = Object(m.connect)( (e, t) => ({ items: e.toast.items }), (e) => ({ clearToast: (t) => { e(Object(q.a)(t)); }, }) )(Object(u.injectIntl)(De)); i(650), i(651); class Me extends c.Component { componentDidUpdate(e) { if (this.props.location !== e.location) { const e = X.a.findDOMNode(this); e instanceof Element && (e.scrollTop = 0); } } render() { const { location: e, contentClass: t } = this.props; return c.createElement( "div", { "data-testid": "cf45a2bf-efcd-40b6-9d74-0ea00f0ddab8", className: "app" }, c.createElement(de, { location: e }), c.createElement(ve, null), c.createElement( "div", { "data-testid": "affb039c-7bd1-4af7-ab29-894c542cfe7e", className: t }, c.createElement("div", { "data-testid": "1fefe302-3d07-4899-8ea3-db115acb38f5", className: "container" }, c.createElement(ee.a, { logError: h.default.logFatal }, this.props.children)) ), c.createElement(Le, null), c.createElement(Ae, null), c.createElement(M, null) ); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(Me, "propTypes", { children: l.a.element.isRequired, location: l.a.object.isRequired, contentClass: l.a.string.isRequired }); var ze = i(190), Ue = i(129), Ve = i(21), Ge = i(45), je = i(46), We = i(521), Fe = i(201), qe = i(56); function xe(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function Be(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? xe(Object(i), !0).forEach(function (t) { He(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : xe(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function He(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const Ke = Object(u.defineMessages)({ firmwareUpdateTitle: { id: "app_container_firmware_update_banner_title", defaultMessage: "Firmware Update In Progress" }, firmwareUpdateMessage: { id: "app_container_firmware_update_banner_message", defaultMessage: "Leave installation and wiring undisturbed and remain on this page until update is complete." }, engineeringModeTitle: { id: "app_container_engineering_mode_title", defaultMessage: "Tesla Service Mode" }, engineeringModeMessage: { id: "app_container_engineering_mode_banner_message", defaultMessage: "Tesla Service Mode requires no authentication. Please 'Stop System' if you are making operational changes. Before closing the browser, leave the System in an acceptable state. Please close the browser when completed since this mode requires no authentication.", }, sitemasterRunningTitle: { id: "app_container_sitemaster_running_banner_title", defaultMessage: "System Running" }, sitemasterMessage: { id: "app_container_sitemaster_message_title", defaultMessage: "The system is currently running. In order to view the status of the battery blocks, the system must be shut down. You can stop the system from the home page.", }, sitemasterPowerSupplyModeTitle: { id: "app_container_sitemaster_power_supply_mode_banner_title", defaultMessage: "Grid Forming Mode" }, sitemasterPowerSupplyModeMessage: { id: "app_container_sitemaster_power_supply_mode_banner_message", defaultMessage: "Battery producing AC voltage to power devices for pairing and configuration. Button to stop system on landing page.", }, }); class Ye extends c.Component { constructor(e) { super(e), He(this, "_handleLogin", this._handleLogin.bind(this)), He(this, "_startToggleAuth", this._startToggleAuth.bind(this)), (this.state = { canShowEngineeringMode: !0 }); } componentWillMount() { this.props.initializeConfig(), this.props.fetchSupportsToggleAuth(), this.props.isResi && (this.fetchSupportsToggleAuthInterval = window.setInterval(this.props.fetchSupportsToggleAuth, 1e4)); } componentDidMount() { this._checkAuthentication(), this._checkFirmwareUpdate(), this.props.fetchSitemasterSettings(), this.props.fetchInstallationProblems(), this.props.requestSitemasterStatusThunk(), (this.requestSitemasterStatusThunk = setInterval(this.props.requestSitemasterStatusThunk, 1e4)), (this.fetchInstallationProblemsInterval = setInterval(this.props.fetchInstallationProblems, 5e3)), this._checkSitemasterStatus(); } componentDidUpdate(e, t) { e.hash && e.hash !== this.props.hash && window.location.reload(); const { isResi: i, bootstrapped: n } = this.props; i && e && e.isResi && n && clearInterval(this.requestSitemasterStatusThunk), this._checkSitemasterStatus(e), this._checkAuthentication(e), this._checkFirmwareUpdate(e), this._showEngineeringBanner(), this.props.currentlyDisplayedModalType === y.b && Object(Ve.isAuthenticated)(this.props.authentication, this.props.error.items) && (this.props.clearErrors(), this.props.destroyModal(y.b)); } componentWillUnmount() { const { isResi: e } = this.props; e || clearInterval(this.requestSitemasterStatusThunk), window.clearInterval(this.fetchSupportsToggleAuthInterval), window.clearInterval(this.fetchInstallationProblemsInterval); } render() { return this.props.persisted && this.props.bootstrapped ? Object(Ve.isAuthenticated)(this.props.authentication, this.props.error.items) || y.i.includes(this.props.location.pathname) ? c.createElement(Me, { location: this.props.location, contentClass: this._getClassName(this.props.location.pathname) }, this.props.children) : a()(this.props, (e) => e.children.props.route.path) && "*" === this.props.children.props.route.path ? c.createElement( "div", { "data-testid": "9de6fd35-133d-4513-9f1a-364c2b331ece", className: "app" }, c.createElement("div", { "data-testid": "66e6becb-36d0-4f96-ba5a-e61318e964d9", className: "container" }, this.props.children) ) : c.createElement(M, null) : null; } componentWillReceiveProps(e) { const { resetNavigation: t, resetHeader: i, clearErrors: n, hideModal: r, location: a, authentication: o, clearToasts: s } = e; if ( (this.props.location.pathname !== a.pathname && this.props.fetchSitemasterSettings(), this.props.authentication.lastLoginAt !== o.lastLoginAt && null !== o.lastLoginAt && p.browserHistory.push(a), this.props.location.pathname !== a.pathname) ) { if (this.props.location.pathname.indexOf("network") > -1 && a.pathname.indexOf("network") > -1) return void n(); n(), t(), i(), s(), r(); } } _checkAuthentication(e, t) { const { showModal: i, authentication: n, location: r, intl: a, changeUsername: o, error: s, persisted: _, bootstrapped: l, getLoginHeaderView: d, handleChangeLoginModal: u, isResi: m, cancelPendingToggleAuth: g, deviceType: w, tegType: v, } = this.props, { selectedLoginType: f } = n; _ && l && (!Object(Ve.isCustomer)(n, s.items) || y.g.includes(r.pathname) ? Object(Ve.isAuthenticated)(n, s.items) || y.i.includes(r.pathname) || (y.h.includes(r.pathname) && e && e.authentication.lastLoginAt !== n.lastLoginAt && null === n.lastLoginAt) || ("pvinverter" !== v ? (Object(Ve.hasExpiredSession)(s.items) && (Object(Ge.a)("AuthCookie"), this.props.resetAuthentication()), i( y.b, { modalClass: "modal-login", centered: !0, showCancel: !1, fadeIn: !1, bannerView: w !== qe.DEVICE_TYPE.GW1 && c.createElement(Fe.UpgradeBannerView, null), headerView: d(f), onUnmount: this.props.cancelPendingToggleAuth, contentView: c.createElement(ze.a, { intl: a, username: n.username, selectedLoginType: n.selectedLoginType, toggleAuthSupported: n.toggleAuthSupported, changeUsername: o, changeLogin: u, handleSubmit: this._handleLogin, loginType: n.loginType, isFetching: n.isFetching, startToggleAuth: this._startToggleAuth, cancelPendingToggleAuth: g, waitForToggle: n.waitForToggle, showSubmit: !0, useShowPasswordIcon: !0, isResi: m, }), }, { backdrop: "static", keyboard: !1 } )) : p.browserHistory.push("/upgrade")) : this._replaceRoute("/")); } async _startToggleAuth() { try { await this.props.startToggleAuth(), this.props.handleCheckForToggle(); } catch (e) {} } _checkFirmwareUpdate(e) { const { persisted: t, bootstrapped: i, destroyBanner: n, location: r, system: o, authentication: s, error: _, isResi: l } = this.props; t && i && Object(Ve.isInstaller)(s, _.items) && (!a()(e, (e) => e.persisted) && t && o.isFirmwareUpdating ? this._showFirmwareUpdateBanner() : e && (!e.system.isFirmwareUpdating && o.isFirmwareUpdating ? this._showFirmwareUpdateBanner() : e.system.isFirmwareUpdating && !o.isFirmwareUpdating && n("FIRMWARE_UPDATE_BANNER")), !o.isFirmwareUpdating || -1 !== r.pathname.indexOf("batteries") || (y.i.includes(r.pathname) && l) || this._replaceRoute("/batteries")); } _checkSitemasterStatus(e) { const { destroyBanner: t, sitemasterStatus: i, isResi: n, powerSupplyMode: r } = this.props, a = s()(window.location.pathname, "/batteries"); n || (i && a ? this._showSitemasterRunningBanner() : e && e.sitemasterStatus && !i && t("SITEMASTER_RUNNING_BANNER")), r && e && !e.powerSupplyMode ? this._showSitemasterRunningInPowerSupplyModeBanner() : !r && e && e.powerSupplyMode && t("SITEMASTER_POWER_SUPPLY_MODE_BANNER"); } _replaceRoute(e) { p.browserHistory.replace(e); } _getClassName(e) { let t = "core-layout__viewport"; return e.indexOf("wizard") > -1 ? (t += " wizard-container no-padding") : e.indexOf("success") > -1 && (t += " success-container no-padding"), t; } _showFirmwareUpdateBanner() { this.props.showBanner({ name: "FIRMWARE_UPDATE_BANNER", priority: 0, title: this.props.intl.formatMessage(Ke.firmwareUpdateTitle), message: this.props.intl.formatMessage(Ke.firmwareUpdateMessage) }); } _showEngineeringBanner() { Object(Ve.isEngineer)(this.props.authentication) && this.state.canShowEngineeringMode && (this.props.showBanner({ name: "ENGINEERING_MODE_BANNER", priority: 0, title: this.props.intl.formatMessage(Ke.engineeringModeTitle), message: this.props.intl.formatMessage(Ke.engineeringModeMessage) }), this.setState({ canShowEngineeringMode: !1 })); } _showSitemasterRunningInPowerSupplyModeBanner() { this.props.showBanner({ name: "SITEMASTER_POWER_SUPPLY_MODE_BANNER", priority: 0, title: this.props.intl.formatMessage(Ke.sitemasterPowerSupplyModeTitle), message: this.props.intl.formatMessage(Ke.sitemasterPowerSupplyModeMessage), }); } _showSitemasterRunningBanner() { this.props.showBanner({ name: "SITEMASTER_RUNNING_BANNER", priority: 0, title: this.props.intl.formatMessage(Ke.sitemasterRunningTitle), message: this.props.intl.formatMessage(Ke.sitemasterMessage) }); } async _handleLogin(e, t, i) { try { await this.props.login(e, t, i, this.props.isResi), this.props.clearErrors(), this.props.destroyModal(y.b); } catch (e) {} } } He( Ye, "propTypes", Be( Be({}, Ue.a), {}, { getLoginHeaderView: l.a.func.isRequired, handleChangeLoginModal: l.a.func.isRequired, authentication: l.a.shape({ lastLoginAt: l.a.number, loginType: l.a.oneOf(Object.values(y.c)).isRequired, username: l.a.string.isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, toggleAuthSupported: l.a.bool.isRequired, waitForToggle: l.a.bool, }).isRequired, system: l.a.shape({ isFirmwareUpdating: l.a.bool.isRequired }).isRequired, location: l.a.shape({ pathname: l.a.string.isRequired }).isRequired, persisted: l.a.bool.isRequired, bootstrapped: l.a.bool.isRequired, resetNavigation: l.a.func.isRequired, resetHeader: l.a.func.isRequired, clearErrors: l.a.func.isRequired, clearToasts: l.a.func.isRequired, showModal: l.a.func.isRequired, hideModal: l.a.func.isRequired, updateModal: l.a.func.isRequired, destroyModal: l.a.func.isRequired, showBanner: l.a.func.isRequired, destroyBanner: l.a.func.isRequired, destroyBanners: l.a.func.isRequired, changeUsername: l.a.func.isRequired, login: l.a.func.isRequired, toggleAuthLogin: l.a.func.isRequired, fetchSupportsToggleAuth: l.a.func.isRequired, fetchInstallationProblems: l.a.func.isRequired, resetAuthentication: l.a.func.isRequired, error: l.a.shape({ items: l.a.array.isRequired }).isRequired, children: l.a.shape({ props: l.a.shape({ route: l.a.shape({ path: l.a.string }).isRequired }).isRequired }).isRequired, initializeConfig: l.a.func.isRequired, isResi: l.a.bool.isRequired, powerSupplyMode: l.a.bool, deviceType: l.a.oneOf(Object.values(qe.DEVICE_TYPE)), tegType: l.a.string, } ) ); var Qe = Object(m.connect)( (e, t) => { const { authentication: i, configuration: n, system: r, error: a, meterValidation: o, sitemaster: s } = e, { location: _ } = t, { deviceType: l, tegType: c } = n; return { location: _, authentication: i, system: r, hash: n.hash, persisted: n.persisted, bootstrapped: n.bootstrapped, isResi: Object(je.isResiGateway)(l), sitemasterStatus: o.running, powerSupplyMode: s.powerSupplyMode, error: a, errors: a.items, currentlyDisplayedModalType: e.modal && e.modal.modalType, deviceType: l, tegType: c, }; }, (e) => Be( Be( { initializeConfig: () => { e(Object(x.initializeConfig)()); }, resetNavigation: () => { e(Object(z.resetNavigation)()); }, resetHeader: () => { e(Object(U.resetHeader)()); }, clearErrors: () => { e(Object(V.clearErrors)()); }, clearToasts: () => { e(Object(q.b)()); }, changeUsername: (t) => { e(Object(B.e)(t)); }, changeSelectedLoginType: (t) => { e(Object(B.d)(t)); }, login: (t, i, n, r) => e(Object(B.h)(t, i, n, r)), startToggleAuth: () => e(Object(B.l)()), cancelPendingToggleAuth: () => { e(Object(B.a)()); }, toggleAuthLogin: (t, i) => e(Object(B.m)(t, i)), fetchSupportsToggleAuth: () => e(Object(B.f)()), resetAuthentication: () => e(Object(B.j)()), fetchSitemasterSettings: () => e(Object(H.a)()), fetchInstallationProblems: () => e(Z()), requestSitemasterStatusThunk: () => Object(We.requestSitemasterStatusThunk)()(e), }, Object(g.b)(w, e) ), Object(g.b)(n, e) ) )(Object(u.injectIntl)(Object(Ue.b)(Ye))), Ze = i(88), Je = i(27), Xe = i.n(Je), $e = i(77), et = i(8); i(740); function tt() { return (tt = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function it(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function nt(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? it(Object(i), !0).forEach(function (t) { rt(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : it(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function rt(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class at extends c.Component { render() { const { type: e, iconSize: t, borderWidth: i, iconLabelView: n, innerIconView: r, active: a } = this.props; let o = { width: t + "px", height: t + "px" }, s = "icon-container", _ = nt({ borderRadius: t / 2 + "px", borderWidth: i + "px" }, this._getIconContainerStyle()); return ( a || (s += " default-icon-container"), c.createElement( "div", { "data-testid": "1e9f3f58-18a4-4933-a2e6-e26582c1109b", className: "energy-icon" }, this._getIconLabel(e, n), c.createElement( "div", { "data-testid": "5fd94db1-03cb-418d-8ef0-91e16704bac8", className: s, style: _ }, c.createElement("div", { "data-testid": "f87a63ec-a496-4056-aaaa-c4c37486423f", className: "centered", style: o }, this._getIconImage(e, a), r) ) ) ); } _getIconImage(e, t) { if (!this.props.showIconImage) return null; let n = { src: null, style: this.props.iconStyle }; switch (e) { case et.h.SOLAR: n.src = i(t ? 741 : 742); break; case et.h.GRID: n.src = i(t ? 743 : 744); break; case et.h.USAGE: n.src = i(t ? 745 : 746); } return null == n.src ? null : c.createElement("img", tt({ "data-testid": "e21bc9b3-167e-4c14-b7ac-c833260bcc6b" }, n)); } _getIconLabel(e, t) { let i = null; return this.props.showIconLabel && (i = t || c.createElement("p", { "data-testid": "0ba3f4bb-f54f-45a3-8419-41d74f7f53cd", className: "icon-text" }, e)), i; } _getIconContainerStyle() { let e = this.props.iconContainerStyle || {}; return this.props.active || (e = nt(nt({}, e), {}, { borderColor: this.props.inactiveColor })), e; } } rt(at, "propTypes", { type: l.a.oneOf(Object.values(et.h)).isRequired, iconSize: l.a.number.isRequired, borderWidth: l.a.number.isRequired, innerIconView: l.a.element, iconLabelView: l.a.element, active: l.a.bool.isRequired, inactiveColor: l.a.string.isRequired, showIconImage: l.a.bool.isRequired, showIconLabel: l.a.bool.isRequired, iconStyle: l.a.object, iconContainerStyle: l.a.object, }), rt(at, "defaultProps", { iconSize: 50, borderWidth: 1, innerIconView: null, iconLabelView: null, active: !1, inactiveColor: "gray", showIconImage: !0, showIconLabel: !1 }); i(747); class ot extends c.Component { render() { return this.props.active && this.props.gridServicesActive ? c.createElement( "div", { "data-testid": "918f2708-5178-458c-b545-f7e5048b9c40", className: "grid-services" }, c.createElement("span", { "data-testid": "a3a492e5-2c43-48bd-bd7e-0e3d6efa4c56", className: "circle" }), c.createElement( "span", { "data-testid": "2b90b745-997b-4c72-b0bb-66a025cee7b1", className: "grid-services-text" }, c.createElement(u.FormattedMessage, { id: "grid_services_view_grid_services", defaultMessage: "Grid Services" }) ) ) : null; } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(ot, "propTypes", { active: l.a.bool.isRequired, gridServicesActive: l.a.bool }); var st = i(151), _t = i(59), lt = i(12), ct = i(13), dt = i(269), ut = i.n(dt), mt = i(263), pt = i.n(mt); i(795); function gt() { return (gt = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function wt(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function vt(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? wt(Object(i), !0).forEach(function (t) { ft(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : wt(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function ft(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const ht = [et.h.SOLAR, et.h.BATTERY, et.h.GRID, et.h.USAGE], Et = Object(u.defineMessages)({ gridButtonSpinnerAltLabel: { id: "power_flow_view_grid_spinner_alt_label", defaultMessage: "System Transitioning" } }); class bt extends c.Component { static getActiveIcons(e) { const { activeTypes: t, loadPower: i, gridPower: n, solarPower: r, batteryPower: a, gridStatus: o, units: s, precision: _, showNegative: l, correctNegative: c, correctLoadPower: d } = e; if (0 === t.length) return []; const u = bt.getDisplayPowers(i, r, a, n, o, s, _, l, c, d), m = t.filter((e) => { switch (e) { case et.h.SOLAR: return u[et.h.SOLAR] > 0 && u.adjusted > 0; case et.h.BATTERY: return 0 !== u[et.h.BATTERY]; case et.h.GRID: return o !== ct.e.ISLANDED && 0 !== u[et.h.GRID]; default: return !1; } }); return t.includes(et.h.USAGE) && null != i && ((d && 0 !== Number(Object(_t.a)(u[et.h.USAGE], _)) && u[et.h.USAGE] > 0) || (!d && u[et.h.USAGE] > 0)) && m.push(et.h.USAGE), 1 === m.length ? [] : m; } static getDisplayPowers(e, t, i, n, r, a, o, s, _, l) { const c = { USAGE: 0, SOLAR: 0, BATTERY: 0, GRID: 0, adjusted: 0 }; return ( null != t && (c.adjusted = t), null != e && e < 0 && _ && (c.adjusted += Math.abs(e)), (c[et.h.SOLAR] = bt.getDisplayValue(c.adjusted, a, o, _, s)), (c[et.h.BATTERY] = bt.getDisplayValue(i, a, o, !1, s)), r !== ct.e.ISLANDED && (c[et.h.GRID] = bt.getDisplayValue(n, a, o, !1, s)), l ? ((c[et.h.USAGE] += c[et.h.SOLAR] * (c.adjusted < 0 && !s ? -1 : 1)), (c[et.h.USAGE] += c[et.h.BATTERY] * (null != i && i < 0 && !s ? -1 : 1)), r !== ct.e.ISLANDED && (c[et.h.USAGE] += c[et.h.GRID] * (null != n && n < 0 && !s ? -1 : 1)), (c[et.h.USAGE] = c[et.h.USAGE] < 0 && !s ? 0 : Number(Object(_t.a)(c[et.h.USAGE], o)))) : (c[et.h.USAGE] = bt.getDisplayValue(e, a, o, _, s)), c ); } static getDisplayValue(e, t, i, n = !1, r = !1) { if (null == e || (n && e < 0)) return 0; const a = Math.abs(e); return a > lt.METER_POWER_NOISE ? Number(Object(st.c)(r ? e : a, t, i).split(" ")[0]) : 0; } constructor(e) { super(e), ft(this, "_handleSitemanagerStartStopClick", this._handleSitemanagerStartStopClick.bind(this)), ft(this, "_handleIslandingClick", this._handleIslandingClick.bind(this)), (this.state = { activeIcons: [], colors: { batteryToHome: et.c, batteryToGrid: et.c, gridToHome: et.d, gridToBattery: et.d, solarToBattery: et.f, solarToGrid: et.f, solarToHome: et.f } }); } componentWillMount() { this.setState({ activeIcons: bt.getActiveIcons(this.props) }); } componentWillReceiveProps(e) { this.setState({ activeIcons: bt.getActiveIcons(e) }); } render() { const { gridWidth: e, gridHeight: t, activeTypes: i, activeGlowRadius: n, indicatorRadius: r, indicatorGlowRadius: a, indicatorAnimationTimer: o, energyIconDiameter: s, energyIconBorderWidth: _, showPowerwall: l, showCompletePowerwall: d, sitemasterRunning: u, authenticated: m, lineSpacing: p, lineRadius: g, lineWidth: w, labelMargin: v, labelHeight: f, labelWidth: h, customLabels: E, iconStyle: b, iconContainerStyle: y, showLabels: S, handleInactiveLabelClick: R, handleNegativeLabelClick: T, showNegative: A, correctNegative: C, correctLoadPower: I, showZero: O, showIcons: N, inactiveColor: k, customIcons: P, availableTypes: D, units: L, precision: M, containerStyle: z, style: U, isResi: V, compact: G, criticalInstallationProblems: j, } = this.props, { batteryPower: W, solarPower: F, loadPower: q, gridPower: x, gridStatus: B, gridServicesActive: H, soe: K } = this.props, { activeIcons: Y, colors: Q } = this.state, Z = 0 === i.length, J = e / 2, X = t / 2, $ = D.includes(et.h.SOLAR), ee = D.includes(et.h.USAGE), te = D.includes(et.h.GRID), ie = bt.getDisplayPowers(q, F, W, x, B, L, M, A, C, I), ne = Y.includes(et.h.BATTERY), re = Y.includes(et.h.USAGE), ae = Y.includes(et.h.SOLAR), oe = Y.includes(et.h.GRID), se = te && ne && W > 0 && x < 0 && 1e3 * (ie[et.h.BATTERY] - ie[et.h.USAGE]) >= bt.DISCHARGE_THRESHOLD ? c.createElement("use", { id: "battery-to-grid", xlinkHref: "#curvedArrow", stroke: "url(#greenGrayGradient)", fill: Q.batteryToGrid, transform: `translate(${-1 * p + e} ${X / 2 + p}) scale(-1 1)` }) : null, _e = ee && ne && re && W > 0 ? c.createElement("use", { id: "battery-to-home", xlinkHref: "#curvedArrow", stroke: "url(#greenBlueGradient)", fill: Q.batteryToHome, x: p, y: X / 2 + p }) : null, le = te && oe && ne && x > 0 && W < 0 && ie[et.h.GRID] > ie[et.h.USAGE] ? c.createElement("use", { id: "grid-to-battery", xlinkHref: "#curvedArrowMirror", stroke: "url(#grayGreenGradient)", fill: Q.gridToBattery, x: -1 * p, y: p }) : null, ce = $ && te && ae && oe && x < 0 ? c.createElement("use", { id: "solar-to-grid", xlinkHref: "#curvedArrow", stroke: "url(#yellowGrayGradient)", fill: Q.solarToGrid, transform: `rotate(180 ${J} ${X})`, x: 1 * p, y: X / 2 + p }) : null, de = $ && ee && ae && re && ie.adjusted > 0 && !((ie[et.h.SOLAR] === ie[et.h.BATTERY] * (A ? -1 : 1) && ie[et.h.USAGE] === ie[et.h.GRID]) || (ie[et.h.SOLAR] === ie[et.h.GRID] * (A ? -1 : 1) && ie[et.h.BATTERY] === ie[et.h.USAGE])) ? c.createElement("use", { id: "solar-to-home", xlinkHref: "#curvedArrow", stroke: "url(#blueYellowGradient)", fill: Q.solarToHome, transform: `translate(${p} ${0.75 * t + -1 * p}) scale(1 -1)` }) : null; let ue = null, me = null, pe = null; Z ? ((ue = c.createElement("use", { id: "grid-to-home-inactive", xlinkHref: "#horizontalArrow", stroke: "gray", strokeDasharray: "2,4" })), (me = c.createElement("use", { id: "solar-to-battery-inactive", xlinkHref: "#verticalArrow", stroke: "gray", strokeDasharray: "2,4" }))) : ((ue = te && ee && oe && re && x > 0 ? c.createElement("use", { id: "grid-to-home", xlinkHref: "#horizontalArrow", stroke: "url(#grayBlueGradient)", fill: Q.gridToHome }) : null), (me = $ && ae && ne && ie.adjusted > 0 && W < 0 ? c.createElement("use", { id: "solar-to-battery", xlinkHref: "#verticalArrow", stroke: "url(#yellowGreenGradient)", fill: Q.solarToBattery }) : null)); const ge = Z ? 0 : r, we = Z ? 0 : a, ve = c.createElement("div", { "data-testid": "7edf03b3-a222-4ebe-b757-5a4af34484bc", style: { width: s + 2 * _, height: s + 2 * _ } }), fe = N ? c.createElement(at, { type: et.h.SOLAR, active: ae, iconSize: s, borderWidth: _, showIconImage: P && null == P[et.h.SOLAR], innerIconView: null != P ? P[et.h.SOLAR] : null, inactiveColor: k, iconStyle: b, iconContainerStyle: vt(vt({}, y), {}, { borderColor: et.f }), }) : ve, he = N ? c.createElement(at, { type: et.h.GRID, active: oe, iconSize: s, borderWidth: _, showIconImage: P && null == P[et.h.GRID], innerIconView: null != P ? P[et.h.GRID] : null, inactiveColor: k, iconStyle: b, iconContainerStyle: vt(vt({}, y), {}, { borderColor: et.d }), }) : ve, Ee = N ? c.createElement(at, { type: et.h.USAGE, active: re, iconSize: s, borderWidth: _, showIconImage: P && null == P[et.h.USAGE], innerIconView: null != P ? P[et.h.USAGE] : null, inactiveColor: k, iconStyle: b, iconContainerStyle: vt(vt({}, y), {}, { borderColor: et.g }), }) : ve, be = { cx: 0, cy: 0, r: ge, strokeOpacity: 0 }, ye = { cx: 0, cy: 0, r: we, fillOpacity: 0.2, strokeOpacity: 0 }, Se = 0 === Y.length && ($ || (te && ee)) ? c.createElement("g", { stroke: et.e, strokeWidth: w, fill: "none" }, c.createElement("use", { xlinkHref: $ ? "#verticalPath" : "#halfVerticalPath" })) : null, Re = 0 === Y.length && te && ee ? c.createElement("g", { stroke: et.e, strokeWidth: w, fill: "none" }, c.createElement("use", { xlinkHref: "#horizontalPath" })) : null; let Te = { className: this._getPowerFlowGridClassName(d, u, m, H) }; null != z && (Te.style = z), N || Z || null == W || 0 === W || (pe = c.createElement("use", { xlinkHref: "#halfVerticalArrow", stroke: et.c, fill: et.c })); const Ae = l ? this._getPowerwall(d, s, _, b, K, u, Z, V) : c.createElement( "div", { "data-testid": "c52444f1-a739-4789-998a-87f84a3625ad", className: "center-align" }, c.createElement(at, { type: et.h.BATTERY, active: ne, iconSize: s, borderWidth: _, showIconImage: P && null == P[et.h.BATTERY], innerIconView: null != P ? P[et.h.BATTERY] : null, inactiveColor: k, iconStyle: b, iconContainerStyle: vt(vt({}, y), {}, { borderColor: et.c }), }) ); return c.createElement( "div", gt({ "data-testid": "a9f4d12a-b2bc-4fb1-98d1-ba2246341d1a" }, Te), c.createElement( "div", { "data-testid": "7b3807df-ad55-4238-87d9-afc5737194aa", className: "power-flow", style: U }, this._getActiveGlowIcons(Y, e, t, s, _, n, v, f, l, A), this._getPowerLabels(i, D, S, O, e, t, s, _, n, v, f, h, E, l, d, ie[et.h.USAGE], ie[et.h.GRID], ie[et.h.SOLAR], ie[et.h.BATTERY], A, L, R, T), c.createElement( "div", { "data-testid": "05dafaf8-fbb8-4519-8bc2-6578daea3b19", className: "inner-container", style: { marginTop: n + f + v } }, c.createElement("div", { "data-testid": "1202100e-7a76-4479-a383-6b49dfec3fe9", className: "center-align" }, fe), c.createElement( "div", { "data-testid": "060d9163-49c8-4cdf-a925-bf845b874ef2", className: "grid-row-container" }, he, c.createElement( "svg", { width: e, height: t, viewBox: `0 0 ${e} ${t}` }, c.createElement( "defs", null, et.k, et.l, et.i, et.j, et.a, et.p, et.o, c.createElement( "g", { id: "curvedArrow", strokeWidth: w }, c.createElement("path", { id: "curvedPath", d: `M ${J} ${0.75 * t}\n l 0 -${X - g}\n a ${g},${g} 0 0 1 ${g},-${g}\n L ${e} ${0.25 * t}`, fill: "none", }), c.createElement( "circle", gt({ "data-testid": "903be15b-24d0-4bc0-8231-33ba2a61fb5d" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#curvedPath" })) ), c.createElement( "circle", gt({ "data-testid": "3aa17112-9f15-48d0-8ba5-7c8371e54eab" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#curvedPath" })) ) ), c.createElement( "g", { id: "curvedArrowMirror", strokeWidth: w }, c.createElement("path", { id: "curvedPathMirror", d: `M 0 ${X}\n l ${J - g} 0\n a -${g},-${g} 0 0 1 ${g},${g}\n L ${J} ${t}`, fill: "none", }), c.createElement( "circle", gt({ "data-testid": "c488bfac-1dfc-49ae-b3c8-fa1933114c23" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#curvedPathMirror" })) ), c.createElement( "circle", gt({ "data-testid": "ba7fb58a-0b65-4f1c-ac4b-ba2e8fb7e571" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#curvedPathMirror" })) ) ), c.createElement( "g", { id: "horizontalArrow", strokeWidth: w }, c.createElement("path", { id: "horizontalPath", d: `M 0 ${X}\n L ${e} ${X}`, fill: "none" }), c.createElement( "circle", gt({ "data-testid": "9ebc49f0-40e3-43f4-9f52-a0e5adcfe894" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#horizontalPath" })) ), c.createElement( "circle", gt({ "data-testid": "3300d987-ec99-4ea1-ada6-bde6ec36dfa7" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#horizontalPath" })) ) ), c.createElement( "g", { id: "verticalArrow", strokeWidth: w }, c.createElement("path", { id: "verticalPath", d: `M ${J} 0\n l 0 ${t}`, fill: "none" }), c.createElement( "circle", gt({ "data-testid": "c4ec1b16-3575-4b16-b872-60500079629b" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#verticalPath" })) ), c.createElement( "circle", gt({ "data-testid": "c4a076c4-5485-4fc2-86b3-ad8ee26be9c6" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#verticalPath" })) ) ), c.createElement( "g", { id: "halfVerticalArrow", strokeWidth: w }, c.createElement("path", { id: "halfVerticalPath", d: `M ${J} ${X}\n l 0 ${t}`, fill: "none" }), c.createElement( "circle", gt({ "data-testid": "0ccc289b-a06d-4325-8b3e-6efb792b404b" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#halfVerticalPath" })) ), c.createElement( "circle", gt({ "data-testid": "e337a015-54b6-4cd4-87dd-83c3c8c30314" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#halfVerticalPath" })) ) ) ), _e, se, ue, le, me, ce, de, Se, Re, pe ), Ee ), Ae, !G && c.createElement(ot, { intl: this.props.intl, active: u, gridServicesActive: H }), this._getSitemasterControl() ), this._getIslanded(B, e, t, w, s, _, n, v, f) ) ); } _getPowerFlowGridClassName(e, t, i, n) { let r = "power-flow-grid"; return e && (r += " complete"), this.props.compact && (r += " compact"), i && (r += " sitemaster"), t && ((r += " active"), n && !this.props.compact && (r += " services")), r; } _getActiveGlowIcons(e, t, i, n, r, a, o, s, _, l) { let d = [], u = n / 2, m = i / 2, p = o + s; return ( e .filter((e) => { switch (e) { case et.h.USAGE: return !1; case et.h.SOLAR: return !l || this.props.solarPower > 0; case et.h.BATTERY: return !l || this.props.batteryPower > 0; case et.h.GRID: return !l || this.props.gridPower > 0; default: return !1; } }) .forEach((e, o) => { let s = {}, l = { width: n + 2 * r, height: n + 2 * r, borderRadius: u + a, borderWidth: a }; switch (e) { case et.h.SOLAR: (s.top = p), (s.borderColor = et.f), (s.left = 0), (s.right = 0); break; case et.h.GRID: (s.top = u + m + r + p), (s.right = t + 2 * u + 2 * r), (s.borderColor = et.d), (s.left = 0); break; case et.h.BATTERY: (s.top = n + i + 2 * r + p), (s.borderColor = et.c), (s.left = 0), (s.right = 0); } (_ && ![et.h.SOLAR, et.h.GRID].includes(e)) || d.push(c.createElement("div", { "data-testid": "ff98e7cc-920d-4090-9053-b554d054b987", key: o, className: "glow-container", style: vt(vt({}, l), s) })); }), d ); } _getPowerLabels(e, t, n, r, a, o, s, _, l, d, u, m, p, g, w, v, f, h, E, b, y, S, R) { if (!n) return []; const T = d + u; return ht.map((n, u) => { let b = null, A = null, C = p && p[n] ? p[n] : null, I = { width: m }; switch (n) { case et.h.SOLAR: (b = this.props.solarPower && h), (I.top = 0), (I.left = 0), (I.right = 0), (I.color = et.f); break; case et.h.GRID: (b = this.props.gridPower && f), (I.top = g ? 0.5 * s + 0.5 * o + 2 * _ : 1.5 * s + 0.5 * o + 3 * _ + T + l + d), (I.left = 0), (I.right = a + s + 2 * _), (I.color = et.d); break; case et.h.BATTERY: (b = this.props.batteryPower && E), g ? (I.top = o + T + s + 2 * _ + (w ? 108.5 : 19.5)) : ((I.top = o + T + 2 * s + 4 * _ + d + l), (I.color = et.c)), (I.left = 0), (I.right = 0); break; case et.h.USAGE: (b = this.props.loadPower && v), (I.top = g ? 0.5 * s + 0.5 * o + 2 * _ : 1.5 * s + 0.5 * o + 3 * _ + T + l + d), (I.left = a + s + 2 * _), (I.right = 0), (I.color = et.g); } const O = !t.includes(n), N = !e.includes(n); let k = null; O ? (k = c.createElement( "span", { "data-testid": "dd3afd47-058d-409f-a862-ca980813739a", id: "missing-meter-label", className: "delete-icon", onClick: () => { S && S(et.n[n], !0); }, }, "×" )) : N && (k = c.createElement("img", { "data-testid": "ef571495-5054-451e-909f-0eb988f9552e", id: "inactive-image-label", className: "info sm hand label-image", src: n === et.h.BATTERY ? i(576) : i(298), onClick: () => { S && S(et.n[n]); }, alt: "Label Inactive", })); const P = n === et.h.SOLAR, D = P && y === lt.PowerUnits.WATTS ? -20 : 0, L = (P || n === et.h.USAGE) && null != b && b < D ? c.createElement("img", { "data-testid": "9f44e874-0b91-4867-920c-5b3fce1648f3", id: "negative-image-label", className: "caution sm hand label-image", src: i(581), onClick: () => { R && R(et.n[n]); }, alt: "Label Negative", }) : null; return ( null != b && (r || (!r && 0 !== b)) && (A = c.createElement("p", { "data-testid": "4c6aadb3-7661-4d7f-b1ff-d5a0571fac60" }, L, k, `${null == k ? b + " " : ""}${O ? "" : y}`)), c.createElement("div", { "data-testid": "ec7d6a6d-b6d2-411c-a535-c052c00baf62", key: u, className: "label-container " + (N && !O ? "label-inactive" : ""), style: I }, C, A) ); }); } _getPowerwall(e, t, n, r, a, o, s, _) { let l = null, d = null, u = null; if (null != a && (0 !== a || !s)) { const i = 22, n = 2, r = e ? 191 : 172, s = e ? 267 : 94, _ = e ? 212 : 94, l = e ? 172 : 157; (d = c.createElement( "svg", { className: "powerwall-soe", width: r, height: s, viewBox: `0 0 ${r} ${s}` }, c.createElement("rect", { x: l, y: n, width: "5", height: _, style: { strokeWidth: "1px", stroke: "gray", fill: "none" } }), c.createElement("rect", { x: l, y: n + (_ * (100 - a)) / 100, width: "5", height: (_ * a) / 100, style: { fill: et.c } }) )), (u = c.createElement( "div", { "data-testid": "234320a0-eab5-4528-bc42-aab6c7282f13", className: "label-container soe-label", style: { top: Math.max(0, n + (_ * (100 - a)) / 100 - i / 2), left: e ? 0.5 * this.props.gridWidth - t + 191 : r + (0.5 * this.props.gridWidth - t) + 12, color: o ? "white" : "black" }, }, Object(_t.a)(a, 0), "%" )); } return ( (l = e ? c.createElement("img", { "data-testid": "edc861a1-c692-487b-970c-16ca01bb74db", src: i(_ ? 584 : 796), style: { height: "267px", width: "191px" } }) : c.createElement("img", { "data-testid": "b3372156-8a9e-4d17-9721-fcc5891d1074", src: i(797), style: { height: "94px", width: "172px" } })), c.createElement("div", { "data-testid": "03852a2e-1a99-4ed3-98e7-a98e292646eb", className: "center-align position-relative" }, u, d, l) ); } _getIslanded(e, t, i, n, r, a, o, s, _) { if (e !== ct.e.ISLANDED && e !== ct.e.TRANSITION_TO_GRID) return null; const l = r + 2 * a; return c.createElement( "div", { "data-testid": "4ad39542-2910-4a3b-b987-2c25190ea97e", className: "islanded-container", style: { top: 0.5 * r + 0.5 * i + a + o + s + _, left: 0, right: t + r + 2 * a, width: l, height: l } }, c.createElement( "svg", { width: l, height: l }, c.createElement("g", null, c.createElement("line", { x1: "0", y1: "0", x2: l, y2: l, stroke: et.b, strokeWidth: n }), c.createElement("line", { x1: l, y1: "0", x2: "0", y2: l, stroke: et.b, strokeWidth: n })) ) ); } _getSitemasterControl() { const { isResi: e, gridStatus: t, sitemasterRunning: i, authenticated: n, compact: r } = this.props; if (!n) return null; let a, o = !i || !t, s = null, _ = !1; if (e) switch (t) { case ct.e.CONNECTED: case null: case void 0: (_ = !0), (s = c.createElement(u.FormattedMessage, { id: "power_flow_view_go_off_grid", defaultMessage: "GO OFF GRID" })); break; case ct.e.ISLANDED: (_ = !1), (s = c.createElement(u.FormattedMessage, { id: "power_flow_view_go_on_grid", defaultMessage: "GO ON GRID" })); break; case ct.e.TRANSITION_TO_GRID: case ct.e.ISLAND_READY: default: s = c.createElement("img", { className: "spinner", src: ut.a, height: 20, alt: Et.gridButtonSpinnerAltLabel }); } return ( (a = i ? c.createElement( "button", { type: "button", className: "btn btn-action btn-sitemaster center-block btn-stop", onClick: this._handleSitemanagerStartStopClick }, c.createElement(u.FormattedMessage, { id: "power_flow_view_stop_system", defaultMessage: "STOP SYSTEM" }) ) : c.createElement( "button", { type: "button", className: "btn btn-action btn-sitemaster center-block btn-start", onClick: this._handleSitemanagerStartStopClick }, c.createElement(u.FormattedMessage, { id: "power_flow_view_start_system", defaultMessage: "START SYSTEM" }) )), this.props.criticalInstallationProblems.length > 0 ? c.createElement( "div", null, this.props.criticalInstallationProblems.map((e) => c.createElement(pt.a, { problem: e })), i && a ) : c.createElement( "div", { className: r ? "compact-btn-row" : "" }, a, e && c.createElement( "div", null, c.createElement("button", { type: "button", className: "btn btn-action btn-sitemaster center-block " + (_ ? "btn-stop" : "btn-start"), onClick: this._handleIslandingClick, disabled: o }, s), o && !i && !r && c.createElement( "small", { className: "text-muted disabled-explanation" }, c.createElement(u.FormattedMessage, { id: "power_flow_view_grid_button_disabled_reason", defaultMessage: "System must be started in order to go off grid." }) ) ) ) ); } _handleSitemanagerStartStopClick(e) { e.preventDefault(), this.props.handleStartStopSitemanager && this.props.handleStartStopSitemanager(); } _handleIslandingClick(e) { e.preventDefault(); const { gridStatus: t } = this.props; t === ct.e.CONNECTED ? this.props.handleGoOffGrid && this.props.handleGoOffGrid() : t === ct.e.ISLANDED && this.props.handleReconnectToGrid && this.props.handleReconnectToGrid(); } } ft(bt, "updatablePropTypes", { activeTypes: l.a.arrayOf(l.a.oneOf(ht)).isRequired, availableTypes: l.a.arrayOf(l.a.oneOf(ht)).isRequired, loadPower: l.a.number, solarPower: l.a.number.isRequired, batteryPower: l.a.number.isRequired, gridPower: l.a.number.isRequired, gridStatus: l.a.string, gridServicesActive: l.a.bool.isRequired, soe: l.a.number, }), ft( bt, "propTypes", vt( vt({}, bt.updatablePropTypes), {}, { intl: u.intlShape, gridWidth: l.a.number.isRequired, gridHeight: l.a.number.isRequired, activeGlowRadius: l.a.number.isRequired, lineSpacing: l.a.number.isRequired, lineRadius: l.a.number.isRequired, lineWidth: l.a.number.isRequired, indicatorAnimationTimer: l.a.number.isRequired, indicatorRadius: l.a.number.isRequired, indicatorGlowRadius: l.a.number.isRequired, showPowerwall: l.a.bool.isRequired, showCompletePowerwall: l.a.bool.isRequired, sitemasterRunning: l.a.bool.isRequired, authenticated: l.a.bool.isRequired, handleStartStopSitemanager: l.a.func, handleGoOffGrid: l.a.func, handleReconnectToGrid: l.a.func, handleInactiveLabelClick: l.a.func, handleNegativeLabelClick: l.a.func, energyIconDiameter: l.a.number.isRequired, energyIconBorderWidth: l.a.number.isRequired, showLabels: l.a.bool.isRequired, showNegative: l.a.bool.isRequired, correctNegative: l.a.bool.isRequired, correctLoadPower: l.a.bool.isRequired, showZero: l.a.bool.isRequired, showIcons: l.a.bool.isRequired, inactiveColor: l.a.string, units: l.a.oneOf(Object.values(lt.PowerUnits)).isRequired, precision: l.a.number.isRequired, labelMargin: l.a.number.isRequired, labelHeight: l.a.number.isRequired, labelWidth: l.a.number.isRequired, customLabels: l.a.shape({ [et.h.SOLAR]: l.a.element, [et.h.GRID]: l.a.element, [et.h.BATTERY]: l.a.element, [et.h.USAGE]: l.a.element }), customIcons: l.a.shape({ [et.h.SOLAR]: l.a.element, [et.h.GRID]: l.a.element, [et.h.BATTERY]: l.a.element, [et.h.USAGE]: l.a.element }), iconStyle: l.a.object, iconContainerStyle: l.a.object.isRequired, containerStyle: l.a.object, style: l.a.object, criticalInstallationProblems: l.a.array, } ) ), ft(bt, "defaultProps", { activeTypes: ht, availableTypes: ht, gridWidth: Math.min(screen.width / 2, 250), gridHeight: 100, activeGlowRadius: 5, lineSpacing: 3, lineRadius: 5, lineWidth: 1, indicatorAnimationTimer: 1e3, indicatorRadius: 1.5, indicatorGlowRadius: 7, showPowerwall: !0, showCompletePowerwall: !1, energyIconDiameter: 50, energyIconBorderWidth: 1, showLabels: !0, showNegative: !0, correctNegative: !1, correctLoadPower: !0, showZero: !0, showIcons: !0, units: lt.PowerUnits.KILOWATTS, precision: 1, labelMargin: 15, labelHeight: 15, labelWidth: 80, iconContainerStyle: { borderStyle: "dotted" }, }), ft(bt, "DISCHARGE_THRESHOLD", 200); i(798); function yt(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function St(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? yt(Object(i), !0).forEach(function (t) { Rt(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : yt(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function Rt(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } function Tt(e) {} function At() { fetch(Y.a.api.uri + "/autoconfig/cancel", { method: "POST", credentials: Y.a.credentials, body: "" }) .then(Q.checkStatus) .catch(Tt); } const Ct = "not_applicable", It = "starting", Ot = "no_powerwall", Nt = "no_islanding_controller", kt = "pending", Pt = "no_internet", Dt = "automatic_retry", Lt = "mandatory_update", Mt = "missing_installation_info", zt = "incomplete", Ut = "complete", Vt = "cancelled", Gt = "determining_on_grid", jt = "timeout", Wt = "disabled"; const Ft = "", qt = "available", xt = { status: It, running: !1, retry_possible: !1, have_registered: !1, have_gridcode: !1, have_timezone: !1, grid_availability: Ft }; function Bt(e) { let [t, i] = Object(c.useState)(xt); Object(c.useEffect)(() => { let e, n = !0; if ( !(function (e) { switch (e) { case Ct: case Ut: case Vt: return !0; default: return !1; } })(t.status) ) return ( (function r() { fetch(Y.a.api.uri + "/autoconfig/status", { method: "GET", credentials: Y.a.credentials }) .then(Q.checkStatus) .then((e) => e.json()) .then((a) => { t.status === Lt && a.status !== Lt && window.location.reload(), i(a), n && (e = setTimeout(r, 1e3)); }) .catch((i) => { t.status === Lt && i && i.response && 403 === i.response.status && window.location.reload(), n && (e = setTimeout(r, 2e3)); }); })(), () => { clearTimeout(e), (n = !1); } ); }, [t.status]); let n = t.status; if (Wt === n) return null; let r = d.a.createElement("button", { onClick: () => e.handleRunWizard() }, d.a.createElement(u.FormattedMessage, { id: "auto_config_run_wizard_button_text", defaultMessage: "Run the Wizard" })), a = d.a.createElement( "button", { onClick: () => { fetch(Y.a.api.uri + "/autoconfig/retry", { method: "POST", credentials: Y.a.credentials, body: "" }) .then(Q.checkStatus) .catch(Tt); }, }, d.a.createElement(u.FormattedMessage, { id: "auto_config_retry_button_label", defaultMessage: "Retry" }) ); const o = () => { e.sitemasterRunning ? e.showModal("SITEMASTER_MODAL", { modalClass: "modal-error modal-sitemaster", size: "lg", centered: !0, showCancel: !1, showErrors: !1, fadeIn: !1, headerView: d.a.createElement( "h2", { "data-testid": "3cb8e199-a3c5-47fe-a3cd-5b7f8a6d4d87", className: "modal-title" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_stop_system_modal_title", defaultMessage: "Cannot start automatic setup" }) ), contentView: d.a.createElement(u.FormattedMessage, { id: "auto_config_stop_system_modal_message", defaultMessage: "Automatic setup process cannot run while the system is running. Stop the system and try again." }), footerView: d.a.createElement( "button", { "data-testid": "0d17fb7b-9813-4837-8d29-5fcc9849f5fc", className: "btn btn-link btn-close center-block", "data-dismiss": "modal" }, d.a.createElement(u.FormattedMessage, te.buttons.CLOSE) ), }) : fetch(Y.a.api.uri + "/autoconfig/run", { method: "POST", credentials: Y.a.credentials, body: "" }) .then(Q.checkStatus) .catch(Tt) .then(() => { i(St(St({}, t), {}, { status: It })); }); }; let s = d.a.createElement("button", { onClick: () => o() }, d.a.createElement(u.FormattedMessage, { id: "auto_config_run_button_label", defaultMessage: "Set Up Powerwall Automatically" })); function _() { i(St(St({}, t), {}, { status: Ct })), At(); } return d.a.createElement( "div", { className: "auto-config" }, d.a.createElement("div", { className: "auto-config-title" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_section_title", defaultMessage: "Automatic Powerwall Setup" })), d.a.createElement( "div", { className: "auto-config-state" }, (function (e) { switch (e) { case It: case kt: return d.a.createElement(Ht, null); case Ut: return d.a.createElement(Kt, { dismiss: _ }); case Pt: return d.a.createElement(Yt, { wizardButton: r, retryButton: a }); case Dt: return d.a.createElement(Qt, { wizardButton: r }); case Lt: return d.a.createElement(Zt, null); case Mt: return d.a.createElement(Jt, { wizardButton: r, retryButton: a }); case zt: return t.have_registered && t.have_gridcode && t.have_timezone ? t.grid_availability === Ft ? d.a.createElement(ii, null) : d.a.createElement(ti, null) : d.a.createElement(Xt, { progress: t, wizardButton: r }); case Ot: return d.a.createElement(ni, null); case Nt: return d.a.createElement($t, null); case Gt: return d.a.createElement(ei, null); case jt: return d.a.createElement(ai, { runButton: s }); case Vt: return d.a.createElement(oi, { runButton: s }); case Ct: return d.a.createElement(si, { runButton: s }); default: return null; } })(n) ) ); } function Ht() { return d.a.createElement( "div", { className: "auto-config-pending" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_in_progress", defaultMessage: "In progress" }), d.a.createElement("span", { className: "auto-config-throbber" }, ".....") ); } function Kt({ dismiss: e }) { return d.a.createElement( "div", { className: "auto-config-complete" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_complete", defaultMessage: "Successfully completed" }), d.a.createElement("div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_check_system_and_summary", defaultMessage: "Check the System and Summary pages." })), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement("button", { onClick: () => e(), className: "auto-config-done-button" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_done_button_text", defaultMessage: "Done" })) ) ); } function Yt(e) { const t = d.a.createElement(p.Link, { to: "network" }, d.a.createElement("button", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_network_button_text", defaultMessage: "Setup the Network" }))); return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_no_network", defaultMessage: "Not Connected to Tesla" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_no_network_retry", defaultMessage: "{networkLink} to enable automatic Powerwall setup and then {retryButton}", values: { networkLink: t, retryButton: e.retryButton }, }) ), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_no_network_wizard", defaultMessage: "Or {wizardButton} for manual Powerwall setup.", values: { wizardButton: e.wizardButton } }) ) ); } function Qt(e) { const t = d.a.createElement(p.Link, { to: "network" }, d.a.createElement("button", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_check_network_button", defaultMessage: "Check the network and enable wifi" }))); return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_retrying", defaultMessage: "Retrying failed network request" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_retry", defaultMessage: "{networkLink} if the problem persists", values: { networkLink: t } }) ), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_retry_wizard", defaultMessage: "Or {wizardButton} for manual Powerwall setup.", values: { wizardButton: e.wizardButton } }) ) ); } function Zt() { return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_updating", defaultMessage: "Software update required" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_updating", defaultMessage: "A software update is required before automatic Powerwall setup can begin. The update will be downloaded and applied automatically. You may need to re-connect to Powerwall's WiFi network afterward.", }) ) ); } function Jt(e) { return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_lookup_failed", defaultMessage: "Serial Number Lookup Failed" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_lookup_failed_retry", defaultMessage: "Scan the serial number sticker into Bolt to enable automatic Powerwall setup, and then {retryButton}", values: { retryButton: e.retryButton }, }) ), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_lookup_failed_wizard", defaultMessage: "Or {wizardButton} for manual Powerwall setup.", values: { wizardButton: e.wizardButton } }) ) ); } function Xt(e) { let { progress: t, wizardButton: i } = e, n = d.a.createElement( p.Link, { to: "legal" }, d.a.createElement("button", { onClick: () => At() }, d.a.createElement(u.FormattedMessage, { id: "auto_config_registration_button_text", defaultMessage: "Enter Customer Information" })) ); return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_missing_information", defaultMessage: "Missing Information" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_missing_info_1", defaultMessage: "Automatic Powerwall setup failed because the following information was missing:" }), d.a.createElement( "ol", null, !t.have_registered && d.a.createElement("li", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_missing_registration", defaultMessage: "Customer information for product registration" })), !t.have_gridcode && d.a.createElement("li", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_missing_gridcode", defaultMessage: "Grid code for the customer site" })), !t.have_timezone && d.a.createElement("li", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_missing_timezone", defaultMessage: "Timezone at the customer site" })), t.grid_availability !== qt && d.a.createElement("li", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_missing_grid", defaultMessage: "Grid for the customer site" })) ) ), d.a.createElement( "div", { className: "auto-config-action" }, t.have_gridcode && t.have_timezone ? d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_missing_info_3", defaultMessage: "{registrationButton} manually.", values: { registrationButton: n } }) : d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_missing_info_2", defaultMessage: "{wizardButton} to enter it manually.", values: { wizardButton: e.wizardButton } }) ) ); } function $t() { return d.a.createElement( "div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_finding_contactor_controller", defaultMessage: "Finding Contactor Controller..." }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_finding_contactor_controller", defaultMessage: "If this message persists for more than 3 minutes, check the wiring to the Backup Switch or Gateway.", }) ) ); } function ei() { return d.a.createElement( "div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_determining_on_grid", defaultMessage: "Determining grid connection..." }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_determining_on_grid", defaultMessage: "If this message persists for more than 3 minutes, check the wiring to the Backup Switch or Gateway." }) ) ); } function ti() { return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_no_grid_detected", defaultMessage: "No grid detected." }), d.a.createElement("div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_no_grid_detected", defaultMessage: "Check wiring and breakers before starting system." })) ); } function ii() { return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_cannot_determine_grid_connection", defaultMessage: "Could not determine grid connection." }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_cannot_determine_grid_connection", defaultMessage: "Check wiring to the Backup Switch or Gateway before starting system." }) ) ); } function ni() { return d.a.createElement( "div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_finding_powerwalls", defaultMessage: "Finding Powerwalls..." }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_finding_powerwalls", defaultMessage: "If this message persists for more than 3 minutes, verify Powerwall wiring." }) ) ); } function ri({ runButton: e }) { return d.a.createElement("div", { className: "auto-config-action" }, e); } function ai({ runButton: e }) { return d.a.createElement("div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_timeout", defaultMessage: "Automatic setup has timed out. You can try again:" }), d.a.createElement(ri, { runButton: e })); } function oi({ runButton: e }) { return d.a.createElement("div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_cancelled", defaultMessage: "Automatic setup was cancelled. You can try again:" }), d.a.createElement(ri, { runButton: e })); } function si({ runButton: e }) { return d.a.createElement( "div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_not_applicable", defaultMessage: "Automatic setup is not needed or has already been run. You can run it again:" }), d.a.createElement(ri, { runButton: e }) ); } function _i({ leader: e }) { return d.a.createElement( "div", { className: "auto-config" }, d.a.createElement("div", { className: "auto-config-title" }, d.a.createElement(u.FormattedMessage, { id: "follower_powerwall_title", defaultMessage: "Follower Powerwall" })), d.a.createElement("div", { className: "auto-config-state" }, d.a.createElement(u.FormattedMessage, { id: "follower_powerwall_message", defaultMessage: "This Powerwall is controlled by {leader}", values: { leader: e } })) ); } var li = i(42), ci = i(44), di = i(212), ui = i(192), mi = i(67); i(800); function pi() { return (pi = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function gi(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function wi(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const vi = [ { title: "networkTitle", id: "network-menu-item", link: "/network" }, { title: "modbusTitle", id: "modbus-menu-item", link: "/modbus", resi: !1 }, { title: "registrationTitle", id: "registration-menu-item", link: "/legal", resi: !0 }, { title: "summaryTitle", id: "summary-menu-item", link: "/summary", resi: !0 }, { title: "meterValidationTitle", id: "meter-validation-menu-item", link: "/open-loop-meter-validation", resi: !1 }, { title: "updateTitle", id: "update-menu-item", link: "/update", onlyVisibleTo: y.d }, { title: "clientProtocolsTitle", id: "client_protocols_menu_title", link: "/client-protocols", resi: !1 }, { title: "networkSwitchTitle", id: "network-switch-menu-item", link: "/network-switch", resi: !1 }, { title: "passwordGenerateTitle", id: "password-generate-menu-item", link: "/password-generate", resi: !1 }, { title: "componentsTitle", id: "component-menu-item", link: "/components", resi: !1 }, ], fi = { KIOSK: { mode: y.c.KIOSK }, INSTALLER: { mode: y.c.INSTALLER } }; function hi() { let e = window.location; e.assign(`${e.protocol}//${e.hostname}/monitor`); } const Ei = Object(u.defineMessages)({ complete: { id: "overview_menu_registration_complete", defaultMessage: "Complete" }, connected: { id: "overview_menu_network_connected", defaultMessage: "Connected" }, controlTitle: { id: "overview_menu_control_title", defaultMessage: "Control" }, diagnosticsTitle: { id: "overview_menu_diagnostics_title", defaultMessage: "Diagnostics" }, event: { id: "overview_menu_view_alerts_event", defaultMessage: "Event" }, events: { id: "overview_menu_view_alerts_events", defaultMessage: "Events" }, incomplete: { id: "overview_menu_registration_incomplete", defaultMessage: "Incomplete" }, inverterTitle: { id: "overview_menu_view_inverter_title", defaultMessage: "Inverter test" }, networkTitle: { id: "overview_menu_view_network_title", defaultMessage: "Network" }, noConnection: { id: "overview_menu_network_no_connection", defaultMessage: "No Connection" }, pending: { id: "overview_menu_registration_pending", defaultMessage: "Pending internet connection" }, registrationTitle: { id: "overview_menu_view_registration_title", defaultMessage: "Registration" }, securityTitle: { id: "overview_menu_security_title", defaultMessage: "Change or reset password" }, settingsTitle: { id: "overview_menu_settings_title", defaultMessage: "Settings" }, summaryTitle: { id: "overview_menu_summary_title", defaultMessage: "Summary" }, systemTitle: { id: "overview_menu_system_title", defaultMessage: "System" }, testTitle: { id: "overview_menu_view_test_title", defaultMessage: "Self test" }, meterValidationTitle: { id: "overview_meter_validation_title", defaultMessage: "Meter Validation" }, modbusTitle: { id: "overview_menu_modbus_title", defaultMessage: "Modbus" }, updateTitle: { id: "overview_menu_update_title", defaultMessage: "Software Update" }, clientProtocolsTitle: { id: "client_protocols_menu_title", defaultMessage: "Client Protocols" }, networkSwitchTitle: { id: "network-switch-menu-item", defaultMessage: "Network Switches" }, passwordGenerateTitle: { id: "password_generate_menu_title", defaultMessage: "Change Password" }, componentsTitle: { id: "component-menu-title", defaultMessage: "Components" }, }); class bi extends c.Component { _isInstaller() { const { authentication: e, errors: t } = this.props; return Object(Ve.isInstaller)(e, t) || Object(Ve.isEngineer)(e); } _isAuthenticated() { const { authentication: e, errors: t } = this.props; return Object(Ve.isAuthenticated)(e, t); } render() { return c.createElement("ul", { className: "overview-menu menu-items" }, this._renderSystemMenuItem(), this._renderKioskMenuItems(), this._renderInstallerMenuItems(), this._renderCustomerMenuItems()); } _renderSystemMenuItem() { let { installationProblems: e, isResi: t, canReboot: i } = this.props; if (!t || !this._isInstaller()) return null; const n = c.createElement(u.FormattedMessage, Ei.systemTitle, (e) => c.createElement("h4", { className: "title" }, e)); let r = null, a = []; return ( Array.isArray(e) && (a = e .map((e) => ne.installationProblemTitles[e]) .filter((e) => !!e) .map((e) => c.createElement("div", { key: e.id }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, e)))), i === li.a.blockUpdate && a.push(c.createElement("div", { key: i }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, Ti.updating))), a.length > 0 && (r = c.createElement("p", { className: "subtitle" }, a)), c.createElement(mi.a, { title: n, subtitle: r, clickElementProps: this._getMenuItemLinkProps("/system") }) ); } _getMenuItemLinkProps(e, t = {}, i = {}) { return (function (e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? gi(Object(i), !0).forEach(function (t) { wi(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : gi(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; })({ to: { pathname: e, query: t } }, i); } _getSubtitle(e) { const { intl: t, network: i, registration: n, isUpdateRequired: r, hasNetworkConnection: a } = this.props; switch (e) { case "networkTitle": return this._isAuthenticated() ? a ? c.createElement(u.FormattedMessage, Ei.connected) : c.createElement("span", null, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, Ei.noConnection)) : null; case "registrationTitle": return this._getRegistrationConfiguration(n); case "updateTitle": return r ? t.formatMessage(ci.c[ci.b.REQUIRED]) : null; default: return null; } } _renderKioskMenuItems() { const { kioskMode: e, menuItems: t } = this.props; return t ? c.createElement( c.Fragment, null, t.map(({ title: t, id: i, link: n }) => { const r = this._getSubtitle(t); return c.createElement(mi.a, { key: i, title: c.createElement("h4", { "data-testid": "546b4fb6-9436-4a32-a226-ee9648b3b6b3", className: "title" }, this.props.intl.formatMessage(Ei[t])), subtitle: c.createElement("p", { "data-testid": "9b617380-260c-40b7-9b0d-b98d77cba834", className: "subtitle" }, r), clickElementProps: this._getMenuItemLinkProps(n, e ? fi.KIOSK : void 0, { id: i }), }); }) ) : null; } _renderCustomerMenuItems() { if (!this._isAuthenticated() || !this.props.isResi) return null; const { kioskMode: e } = this.props; let t = {}; return ( (t = e ? (e && this._isInstaller() ? fi.INSTALLER : fi.KIOSK) : void 0), c.createElement( c.Fragment, null, c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "1e573050-9a78-43cc-bbe0-8a0bf847244e", className: "title" }, this.props.intl.formatMessage(Ei.securityTitle)), clickElementProps: this._getMenuItemLinkProps("/password", t, { id: "password-menu-item" }), }) ) ); } _renderInstallerMenuItems() { if (!this._isInstaller()) return null; const { alerts: e, grid: t, kioskMode: i, isResi: n } = this.props; return c.createElement( c.Fragment, null, this._getAlerts(e, t, i), this._getInverterSelfTest(t, i), !n && c.createElement(mi.a, { title: c.createElement("h4", { className: "title" }, c.createElement(u.FormattedMessage, pi({ tagName: "div" }, Ei.settingsTitle))), clickElementProps: this._getMenuItemLinkProps("/settings", i ? fi.KIOSK : void 0, { id: "settings-menu-item" }), }), !n && c.createElement(mi.a, { id: "control-menu-item", title: c.createElement("h4", { "data-testid": "9ad0ff83-1794-45ed-b1ab-820cf8dfd0f3", className: "title" }, this.props.intl.formatMessage(Ei.controlTitle)), onClick: hi, }), c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "53c5d702-1b35-4825-83c2-83915a33a8e3", className: "title" }, this.props.intl.formatMessage(Ei.diagnosticsTitle)), clickElementProps: this._getMenuItemLinkProps("/diagnostics", i ? fi.KIOSK : void 0, { id: "diagnostics-menu-item" }), }) ); } _getInverterSelfTest(e, t) { return Object(di.c)(e.config.country, e.config.grid_code) ? c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "f9bcd285-cc16-420c-88a9-4f23886fea95", className: "title" }, this.props.intl.formatMessage(Ei.inverterTitle)), clickElementProps: this._getMenuItemLinkProps("/test/inverter", t ? fi.KIOSK : void 0, { id: "inverter-self-test-menu-item" }), }) : null; } _getAlerts(e, t, i) { if (!Object(di.b)(t.config.country, t.config.grid_code)) return null; let n = this.props.intl.formatMessage(1 === e.length ? Ei.event : Ei.events); return c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "b88f5980-3a17-4b07-8f32-94492079a6b4", className: "title" }, c.createElement(u.FormattedMessage, te.titles.alerts)), subtitle: c.createElement("p", { "data-testid": "5d72bdb5-4515-4038-beb5-fed6ec51d901", className: "subtitle" }, `${e.length} ${n}`), clickElementProps: this._getMenuItemLinkProps("/alert", i ? fi.KIOSK : void 0, { id: "alerts-menu-item" }), }); } _getRegistration(e, t) { return Object(ui.a)(e) ? null : c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "343ca1b8-377e-4c1f-b807-7c2c5f409999", className: "title" }, this.props.intl.formatMessage(Ei.registrationTitle)), subtitle: c.createElement("p", { "data-testid": "097d8494-86b7-4764-8819-08d97a9dd064", className: "subtitle" }, this._getRegistrationConfiguration(e)), clickElementProps: this._getMenuItemLinkProps("/legal", t ? fi.KIOSK : void 0, { id: "registration-menu-item" }), }); } _getRegistrationConfiguration(e) { return e.timedOut ? this.props.intl.formatMessage(Ei.pending) : this.props.intl.formatMessage(Ei.incomplete); } } wi(bi, "propTypes", { alerts: l.a.arrayOf(l.a.object).isRequired, authentication: l.a.object.isRequired, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, grid: l.a.object.isRequired, intl: u.intlShape.isRequired, isResi: l.a.bool.isRequired, kioskMode: l.a.bool.isRequired, menuItems: l.a.arrayOf(l.a.object).isRequired, network: l.a.object.isRequired, registration: l.a.shape({ timedOut: l.a.bool.isRequired, registered: l.a.bool.isRequired }).isRequired, sitemasterRunning: l.a.bool.isRequired, isUpdateRequired: l.a.bool.isRequired, hasNetworkConnection: l.a.bool.isRequired, installationProblems: l.a.array.isRequired, canReboot: l.a.string.isRequired, }), wi(bi, "defaultProps", { kioskMode: !1 }); i(590); function yi(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const Si = new Date(0).getTime(), Ri = l.a.shape({ instant_power: l.a.number.isRequired, last_communication_time: l.a.string }).isRequired, Ti = Object(u.defineMessages)({ connected: { id: "system_overview_connected", defaultMessage: "Connected To Tesla" }, disconnected: { id: "system_overview_disconnected", defaultMessage: "Not Connected To Tesla" }, scanning: { id: "system_overview_scanning", defaultMessage: "Scanning for devices..." }, updating: { id: "system_overview_updating", defaultMessage: "Updating devices..." }, siteController: { id: "system_overview_site_controller", defaultMessage: "Site Controller" }, followerPowerwall: { id: "system_overview_follower", defaultMessage: "Follower Powerwall" }, }); class Ai extends c.Component { constructor(...e) { super(...e), yi(this, "_handleInactiveLabelClick", this._handleInactiveLabelClick.bind(this)); } render() { const { siteName: e, gridStatus: t, gridServicesActive: i, soe: n, handleStartStopSitemanager: r, handleGoOffGrid: o, handleReconnectToGrid: s, handleNegativeLabelClick: _, sitemasterRunning: l, authenticated: d, meter: m, showCompletePowerwall: p, connectedToTesla: g, canReboot: w, isResi: v, isTeslaUser: f, leader: h, criticalInstallationProblems: E, } = this.props; let b = "power-flow-header"; l || (b += " inactive"); const y = []; return ( Xe.a.each(m.aggregates, (e, t) => { null != e.last_communication_time && y.push(et.m[t]); }), c.createElement( "div", { className: "system" }, c.createElement( "div", { className: b }, d ? c.createElement("span", null, this._getSiteName(e), c.createElement(Ci, { isResi: v, connectedToTesla: g, canReboot: w })) : c.createElement("p", { className: "name" }, c.createElement(u.FormattedMessage, { id: "system_overview_login_required", defaultMessage: "Login Required To View System Operation" })) ), c.createElement(bt, { intl: this.props.intl, activeTypes: l ? this._getActiveMeterTypes(m) : [], availableTypes: l ? y : void 0, showCompletePowerwall: p, sitemasterRunning: l, authenticated: d, handleStartStopSitemanager: r, handleGoOffGrid: o, handleReconnectToGrid: s, handleInactiveLabelClick: this._handleInactiveLabelClick, handleNegativeLabelClick: _, showLabels: l, labelHeight: 14, labelWidth: 120, loadPower: a()(m, (e) => e.aggregates.load.instant_power) || 0, solarPower: a()(m, (e) => e.aggregates.solar.instant_power) || 0, batteryPower: a()(m, (e) => e.aggregates.battery.instant_power) || 0, gridPower: a()(m, (e) => e.aggregates.site.instant_power) || 0, correctLoadPower: !1, gridStatus: t, gridServicesActive: i, soe: n, isResi: v, compact: v, criticalInstallationProblems: E, }), !v && this.props.additionalView, v && !h && f && 0 === E.length && c.createElement(Bt, { showModal: this.props.showModal, handleRunWizard: this.props.handleRunWizard, sitemasterRunning: l }), v && h && c.createElement(_i, { leader: h }), c.createElement(bi, this.props), v && this.props.additionalView ) ); } _getSiteName(e) { if (null == e) return null; let t; return (t = this.props.isResi ? (this.props.leader ? this.props.intl.formatMessage(Ti.followerPowerwall) : e) : this.props.intl.formatMessage(Ti.siteController)), c.createElement("p", { className: "name" }, t); } _getActiveMeterTypes(e) { const t = []; return ( null != e.lastUpdatedAt && null != e.lastMeterReadingAt && e.lastMeterReadingAt > Si && Date.now() - e.lastUpdatedAt < 6e4 && Xe.a.each(e.aggregates, (i, n) => { e.lastMeterReadingAt - (null != i.last_communication_time ? Date.parse(i.last_communication_time) : 0) >= 6e4 || t.push(et.m[n]); }), t ); } _handleInactiveLabelClick(e, t = !1) { if (!this.props.handleInactiveLabelClick) return; let i = null; const n = a()(this.props, (t) => t.meter.aggregates[e].last_communication_time); null != n && Date.parse(n) > Si && (i = new Date(n)), this.props.handleInactiveLabelClick(e, null != i ? i.toLocaleTimeString() + ", " + i.toLocaleDateString() : "", t); } } function Ci(e) { const { isResi: t, connectedToTesla: i, canReboot: n } = e; return t ? n === li.a.blockUpdate || n === li.a.updating ? c.createElement("p", { className: "name updating" }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, Ti.updating)) : n === li.a.enumeration ? c.createElement("p", { className: "name scanning" }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, Ti.scanning)) : i ? c.createElement("p", { className: "name connected" }, c.createElement(u.FormattedMessage, Ti.connected)) : c.createElement("p", { className: "name not-connected" }, c.createElement(u.FormattedMessage, Ti.disconnected)) : null; } yi(Ai, "propTypes", { intl: u.intlShape.isRequired, siteName: l.a.string, gridStatus: l.a.string, gridServicesActive: l.a.bool.isRequired, soe: l.a.number, sitemasterRunning: l.a.bool.isRequired, authenticated: l.a.bool.isRequired, connectedToTesla: l.a.bool, meter: l.a.shape({ isFetching: l.a.bool.isRequired, lastUpdatedAt: l.a.number, lastMeterReadingAt: l.a.number, aggregates: l.a.shape({ site: Ri, solar: Ri, battery: Ri, load: Ri }).isRequired }).isRequired, handleStartStopSitemanager: l.a.func, handleGoOffGrid: l.a.func, handleReconnectToGrid: l.a.func, handleInactiveLabelClick: l.a.func, handleNegativeLabelClick: l.a.func, handleRunWizard: l.a.func, showModal: l.a.func, showCompletePowerwall: l.a.bool.isRequired, additionalView: l.a.element, isResi: l.a.bool.isRequired, isTeslaUser: l.a.bool.isRequired, leader: l.a.string, isUpdateRequired: l.a.bool.isRequired, criticalInstallationProblems: l.a.array.isRequired, }), yi(Ai, "defaultProps", { sitemasterRunning: !0, showCompletePowerwall: !1, connectedToTesla: !1, authenticated: !1 }); i(801); var Ii = i(456), Oi = i.n(Ii); function Ni() { return (Ni = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function ki(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function Pi(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? ki(Object(i), !0).forEach(function (t) { Di(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : ki(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function Di(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const Li = Object(u.defineMessages)({ wizard: { id: "home_view_run_wizard", defaultMessage: "RUN WIZARD" }, login: { id: "home_view_login", defaultMessage: "LOGIN" }, logout: { id: "home_view_logout", defaultMessage: "LOGOUT" }, downloadLogs: { id: "home_view_download_logs", defaultMessage: "DOWNLOAD LOGS" }, }); class Mi extends c.Component { constructor(...e) { super(...e), Di(this, "_handleClick", this._handleClick.bind(this)), Di(this, "_handleLogin", this._handleLogin.bind(this)), Di(this, "_handleLogout", this._handleLogout.bind(this)); } render() { const { sitemaster: e, settings: t, grid: i, powerwall: n, authentication: r, errors: a, version: o, showInactiveMeterModal: s, showNegativeMeterModal: _, handleStartStopSitemanager: l, handleGoOffGrid: d, handleReconnectToGrid: m, handleRunWizard: g, isResi: w, } = this.props, v = Object(Ve.isAuthenticated)(r, a), f = Pi( Pi({}, this.props), {}, { showCompletePowerwall: !w, kioskMode: !0, siteName: t.siteName, gridStatus: i.status, gridServicesActive: i.servicesActive, soe: n.soe, connectedToTesla: e.connectedToTesla, canReboot: e.canReboot, additionalView: this._getKioskLinkView(r, a), sitemasterRunning: !!e.running || !!e.powerSupplyMode, authenticated: v, isResi: w, isTeslaUser: Object(Ve.isTeslaUser)(r), } ); return c.createElement( "div", { "data-testid": "10bb1320-6523-4802-8d64-c2150467d3fe", className: "home" }, c.createElement(Ai, Ni({ handleStartStopSitemanager: l, handleGoOffGrid: d, handleReconnectToGrid: m, handleInactiveLabelClick: s, handleNegativeLabelClick: _, handleRunWizard: g }, f)), c.createElement( "div", { className: "row compliance-row" }, c.createElement(p.Link, { id: "compliance", to: "/compliance", className: "btn btn-link col-xs-6" }, c.createElement(u.FormattedMessage, { id: "home_view_compliance", defaultMessage: "COMPLIANCE" })) ), w && v && Object(Ve.isInstaller)(r, a) && c.createElement( "button", { "data-testid": "6bddfb5b-37e0-475a-8662-14b95e5417c6", type: "button", className: "btn-link download-logo-button", onClick: this.props.handleDownloadLogs }, c.createElement("img", { "data-testid": "57bbe4d7-c7f4-44c6-9873-47c74ff50792", className: "align-image-right", src: Oi.a, alt: "Download Button" }), this.props.intl.formatMessage(Li.downloadLogs) ), c.createElement(Re, { cancel: { buttonClass: "btn-text text-center", text: o } }) ); } _getKioskLinkView(e, t) { return Object(Ve.isInstaller)(e, t) || Object(Ve.isEngineer)(e) ? c.createElement( "div", { className: "row navigation-row" }, 0 === this.props.criticalInstallationProblems.length && c.createElement("a", { id: "run-wizard", className: "btn btn-link col-xs-6", onClick: this._handleClick, title: "Run Wizard" }, this.props.intl.formatMessage(Li.wizard)), !Object(Ve.isEngineer)(e) && c.createElement("a", { id: "logout", className: "btn btn-link col-xs-6", onClick: this._handleLogout, title: "Logout" }, this.props.intl.formatMessage(Li.logout)) ) : Object(Ve.isCustomer)(e, t) ? c.createElement( "a", { "data-testid": "c8439a4e-a6e2-4e1f-b8ba-b3149bc3474e", id: "logout", className: "btn btn-link center-block", onClick: this._handleLogout, title: "Logout" }, this.props.intl.formatMessage(Li.logout) ) : c.createElement("a", { "data-testid": "5ef23ffb-009d-47f0-ae67-2b7b232b7826", id: "login", className: "btn btn-link center-block", onClick: this._handleLogin, title: "Login" }, this.props.intl.formatMessage(Li.login)); } _handleClick(e) { e.preventDefault(), e.stopPropagation(), this.props.handleRunWizard && this.props.handleRunWizard(e); } _handleLogin(e) { e.preventDefault(), e.stopPropagation(), this.props.handleLogin && this.props.handleLogin(e); } _handleLogout(e) { e.preventDefault(), e.stopPropagation(), this.props.handleLogout && this.props.handleLogout(e); } } Di(Mi, "propTypes", { intl: u.intlShape.isRequired, handleRunWizard: l.a.func, handleLogin: l.a.func, handleLogout: l.a.func, handleSitemaster: l.a.func, handleGoOffGrid: l.a.func, handleReconnectToGrid: l.a.func, handleDownloadLogs: l.a.func.isRequired, showInactiveMeterModal: l.a.func, showNegativeMeterModal: l.a.func, authentication: l.a.object.isRequired, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, settings: l.a.shape({ siteName: l.a.string }).isRequired, sitemaster: l.a.shape({ running: l.a.bool, connectedToTesla: l.a.bool, powerSupplyMode: l.a.bool }).isRequired, grid: l.a.shape({ codes: l.a.object.isRequired, status: l.a.string, servicesActive: l.a.bool.isRequired }).isRequired, powerwall: l.a.shape({ soe: l.a.number }).isRequired, version: l.a.string.isRequired, isResi: l.a.bool.isRequired, isUpdateRequired: l.a.bool.isRequired, criticalInstallationProblems: l.a.array.isRequired, }); var zi = i(558), Ui = i(561), Vi = i.n(Ui), Gi = i(562), ji = i.n(Gi), Wi = i(563), Fi = i.n(Wi), qi = i(564), xi = i.n(qi), Bi = i(565), Hi = i.n(Bi); i(820); var Ki = () => { const [e, t] = c.useState(0); return c.createElement( "div", { className: "soft-blocker-container" }, c.createElement( "div", { className: "carousel-display-container" }, c.createElement("div", { className: "carousel-toggle-left", onClick: () => { t(e > 0 ? e - 1 : 2); }, }), c.createElement("div", { className: "carousel-toggle-right", onClick: () => { t(e < 2 ? e + 1 : 0); }, }), c.createElement("img", { src: Vi.a, hidden: 0 !== e }), c.createElement("img", { src: ji.a, hidden: 1 !== e }), c.createElement("img", { src: Fi.a, hidden: 2 !== e }) ), c.createElement( "div", { className: "carousel-menu-container" }, c.createElement( "div", { className: "menu-carousel-tabs" }, [0, 1, 2].map((i) => c.createElement("img", { src: e === i ? xi.a : Hi.a, onClick: () => t(i) })) ), c.createElement(u.FormattedMessage, { tagName: "h3", id: "menu-switch-to-tesla-pros-title", defaultMessage: "Switch to Tesla Pros for a better commissioning experience" }), c.createElement(u.FormattedMessage, { tagName: "p", id: "menu-switch-tesla-pros-reason", defaultMessage: "The current experience is no longer supported" }), c.createElement("button", { className: "button-continue", onClick: () => p.browserHistory.push("/upgrade") }, c.createElement(u.FormattedMessage, zi.buttons.CONTINUE)) ) ); }, Yi = i(458), Qi = i(272), Zi = i(276), Ji = i(208), Xi = i(152), $i = i(284), en = i(279), tn = i(277), nn = i(285), rn = i(522); i(821); class an extends c.Component { constructor(...e) { super(...e), (function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(this, "state", { isChecked: !1 }); } render() { const { isSystemRunning: e, requiresConfirmation: t, onClick: i } = this.props; let n = !0; return ( e && t && !this.state.isChecked && (n = !1), c.createElement( "div", null, t && e && c.createElement( "div", { className: "row" }, c.createElement( "div", { className: "col-xs-12 confirm-checkbox" }, c.createElement( "label", { className: "checkbox-inline" }, c.createElement("input", { className: "confirm-checkbox-input", type: "checkbox", checked: this.state.isChecked, onChange: (e) => { this.setState({ isChecked: e.target.checked }); }, }), c.createElement(u.FormattedMessage, oe.inputMessages.confirm) ) ) ), c.createElement( "div", { className: "row" }, c.createElement("div", { className: "col-xs-6" }, c.createElement("button", { className: "btn btn-link btn-close", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CANCEL))), c.createElement( "div", { className: "col-xs-6" }, c.createElement( "button", { disabled: !n, className: "btn btn-link btn-error", onClick: () => i() }, e ? c.createElement(u.FormattedMessage, En.stopSystemButton) : c.createElement(u.FormattedMessage, En.startSystemButton) ) ) ) ) ); } } var on = i(207), sn = i(274), _n = i.n(sn), ln = i(278), cn = i(199), dn = i(566); const un = Object(on.a)(ln.isResiSelector, dn.registrationSelector, cn.loginTypeSelector, (e, t, i) => _n()(vi, (n, r) => ((Object(ui.a)(t) && "registrationTitle" === r.title) || (Array.isArray(r.onlyVisibleTo) && !r.onlyVisibleTo.includes(i)) || (void 0 !== r.resi && e !== r.resi) || n.push(r), n), []) ); var mn = Object(on.b)({ menuItems: un }), pn = i(210), gn = i(567); function wn(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function vn(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? wn(Object(i), !0).forEach(function (t) { hn(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : wn(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function fn() { return (fn = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function hn(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const En = Object(u.defineMessages)({ startPowerwall: { id: "home_container_start_powerwall", defaultMessage: "Start System" }, stopPowerwall: { id: "home_container_stop_powerwall", defaultMessage: "Stop System" }, stopSystemButton: { id: "home_container_stop_system_button", defaultMessage: "STOP SYSTEM" }, startSystemButton: { id: "home_container_start_system_button", defaultMessage: "START SYSTEM" }, errorPowerwall: { id: "home_container_powerwall_error", defaultMessage: "Powerwall System Error" }, siteControllerError: { id: "home_container_site_controller_error", defaultMessage: "Site Controller System Error" }, login: { id: "home_container_login_required", defaultMessage: "Login Required" }, inactiveMeter: { id: "home_container_inactive_meter", defaultMessage: "Stale Meter Data" }, positivePowerMeter: { id: "home_container_positive_meter", defaultMessage: "Warning: {type} meter may be configured incorrectly" }, missingMeter: { id: "home_container_missing_meter", defaultMessage: "Meter is Missing" }, downloadAllLogs: { id: "home_view_download_all_logs", defaultMessage: "Download All Logs" }, caution: { id: "home_container_caution", defaultMessage: "⚠️ Caution" }, }); class bn extends c.Component { constructor(...e) { super(...e), hn(this, "state", { togglingSitemaster: !1, showSoftBlocker: this.props.isResi && this.props.deviceType !== qe.DEVICE_TYPE.GW1 && !this.props.skipSoftBlocker && "unblocked" !== p.browserHistory.getCurrentLocation().state, }), hn(this, "_loginViewJsx", null), hn(this, "_handleReset", this._handleReset.bind(this)), hn(this, "_handleRunWizard", this._handleRunWizard.bind(this)), hn(this, "_handleLogin", this._handleLogin.bind(this)), hn(this, "_handleChangeUsername", this._handleChangeUsername.bind(this)), hn(this, "_handleLogout", this._handleLogout.bind(this)), hn(this, "_showLoginModal", this._showLoginModal.bind(this)), hn(this, "_showInactiveMeterModal", this._showInactiveMeterModal.bind(this)), hn(this, "_showNegativeMeterModal", this._showNegativeMeterModal.bind(this)), hn(this, "_handleStartStopSitemanager", this._handleStartStopSitemanager.bind(this)), hn(this, "_handleGoOffGrid", this._handleGoOffGrid.bind(this)), hn(this, "_handleReconnectToGrid", this._handleReconnectToGrid.bind(this)), hn(this, "_handleStartOrStopSitemaster", this._handleStartOrStopSitemaster.bind(this)), hn(this, "_handleDownloadLogs", this._handleDownloadLogs.bind(this)), hn(this, "_handleTriggerDownloadLogs", this._handleTriggerDownloadLogs.bind(this)), hn(this, "_startToggleAuth", this._startToggleAuth.bind(this)), hn(this, "_queryTimeoutId", null); } startQuerying() { const e = () => { try { this.props.fetchSitemasterSettings && this.props.fetchSitemasterSettings(), this.props.getMeterAggregates && this.props.getMeterAggregates(), this.props.getSOE && this.props.getSOE(), this.props.getGridStatus && this.props.getGridStatus(), this.props.fetchPowerwalls && this.props.fetchPowerwalls(!0); } catch (e) {} this._queryTimeoutId = setTimeout(e, 2500); }; (() => { try { this.props.testAndCheckFirmwareUpdateUrgency && this.props.testAndCheckFirmwareUpdateUrgency(), this.props.getSiteName && this.props.getSiteName(), this.props.getRegistration && this.props.getRegistration(), this.props.fetchAlerts && this.props.fetchAlerts(), this.props.fetchNetworks && this.props.fetchNetworks(), !this.props.fetchSiteInfo || (this.props.grid && this.props.grid.config && this.props.grid.config.grid_code) || this.props.fetchSiteInfo(); } catch (e) {} })(), (this._queryTimeoutId = setTimeout(e, 0)); } stopQuerying() { this.isQuerying() && (clearTimeout(this._queryTimeoutId), (this._queryTimeoutId = null)); } isQuerying() { return null !== this._queryTimeoutId; } componentWillMount() { this.props.initializeConfig(); } componentDidMount() { Object(Ve.isAuthenticated)(this.props.authentication, this.props.errors) ? (this.startQuerying(), this.state.showSoftBlocker && this.setState({ showSoftBlocker: !1 })) : this._showLoginModal(); } componentDidUpdate(e) { Object(Ve.isAuthenticated)(this.props.authentication, this.props.errors) ? (this.isQuerying() || this.startQuerying(), this.state.showSoftBlocker && this.setState({ showSoftBlocker: !1 })) : (this.stopQuerying(), this._showLoginModal()); } componentWillReceiveProps(e) { let t = {}; this.props.sitemaster.running !== e.sitemaster.running ? (e.destroyModal("SITEMASTER_MODAL"), (t.togglingSitemaster = !1)) : this.state.togglingSitemaster && !this.props.sitemaster.didInvalidate && e.sitemaster.didInvalidate && (this._showError(e), (t.togglingSitemaster = !1)), this.props.configuration.isFetching && !e.configuration.isFetching && (e.configuration.isNew ? Object(Ge.c)("Wizard", "0") : Object(Ge.a)("Wizard")), !this._loginViewJsx || (this.props.authentication.selectedLoginType === e.authentication.selectedLoginType && this.props.authentication.waitForToggle === e.authentication.waitForToggle) || this.props.updateModal(y.b, { contentView: c.cloneElement(this._loginViewJsx, { selectedLoginType: e.authentication.selectedLoginType, waitForToggle: e.authentication.waitForToggle }) }), !0 !== e.configuration.isNew || e.isResi || e.isTeslaUser ? Object(Je.isEmpty)(t) || this.setState(t) : this.props.replaceLocation(this._getNextRoute()); } render() { return this.state.showSoftBlocker ? c.createElement(Ki, null) : c.createElement( Mi, fn( { handleRunWizard: this._handleRunWizard, handleLogin: this._showLoginModal, handleLogout: this._handleLogout, handleStartStopSitemanager: this._handleStartStopSitemanager, handleGoOffGrid: this._handleGoOffGrid, handleReconnectToGrid: this._handleReconnectToGrid, handleDownloadLogs: this._handleDownloadLogs, showInactiveMeterModal: this._showInactiveMeterModal, showNegativeMeterModal: this._showNegativeMeterModal, version: this.props.configuration.version, criticalInstallationProblems: this.props.installationProblems.filter(ne.isCriticalProblem), }, this.props ) ); } componentWillUnmount() { this.stopQuerying(), (this._loginViewJsx = null); } async _startToggleAuth() { try { await this.props.startToggleAuth(), this.props.handleCheckForToggle(); } catch (e) {} } _getNextRoute(e = !1) { return e && (Object(Ve.isInstaller)(this.props.authentication, this.props.errors) || Object(Ve.isEngineer)(this.props.authentication)) ? "/network" : "/wizard"; } _handleReset() { this.props.resetAll(); } _handleRunWizard(e) { if (!this.props.sitemaster.running) return Object(Ge.c)("Wizard", "true"), At(), void this.props.changeLocation(this._getNextRoute(!0)); let t = this.props.sitemaster && this.props.sitemaster.canReboot !== li.a.yes; this.props.showModal("SITEMASTER_MODAL", { modalClass: "modal-error", size: this.props.isResi ? "lg" : "md", centered: !0, showCancel: !1, showErrors: !1, headerView: c.createElement( "div", { "data-testid": "ee013d3c-5f64-4a08-9ee1-8cfef8d373c8", className: "sitemaster-modal-title" }, c.createElement("h2", { "data-testid": "65ffbbc0-6fc0-4d77-aab5-3247ee8c870f", className: "modal-title" }, this.props.intl.formatMessage(En.stopPowerwall)), c.createElement( "div", { "data-testid": "85e994c6-8a69-401a-b0b6-7a7bd451f6ad", className: "login-warning" }, this.props.hasSolarPowerwall && c.createElement(Sn, null), t && c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_sitemaster_header_warning_wizard", defaultMessage: '{warning} This system is in a state where Tesla does not recommend stopping it. Reason: "{reason}"', values: { warning: c.createElement("span", { "data-testid": "8312d88c-6f91-44ce-9ad9-4ec7f8265f70", className: "bold" }, this.props.intl.formatMessage(oe.warnings.caution), ":"), reason: c.createElement(pn.a, { messages: oe.canRebootMessages, id: this.props.sitemaster.canReboot }), }, }), c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_sitemaster_confirm_wizard", defaultMessage: "Run Wizard requires the system to be stopped. Proceed and stop the system?" }) ) ), footerView: c.createElement(an, { isSystemRunning: this.props.sitemaster && this.props.sitemaster.running, requiresConfirmation: t, onClick: (e) => { this.props.sitemaster.running && this._handleStartOrStopSitemaster(e), Object(Ge.c)("Wizard", "true"), At(), this.props.changeLocation(this._getNextRoute(!0)); }, }), }); } _showLoginModal() { const { showModal: e, authentication: t, intl: i, getLoginHeaderView: n, isResi: r, deviceType: a, tegType: o } = this.props, { selectedLoginType: s } = t; "pvinverter" !== o ? ((this._loginViewJsx = c.createElement(ze.a, { intl: i, loginType: t.loginType, selectedLoginType: t.selectedLoginType, toggleAuthSupported: t.toggleAuthSupported, username: t.username, changeUsername: this._handleChangeUsername, changeLogin: this.props.handleChangeLoginModal, handleSubmit: this._handleLogin, isFetching: t.isFetching, showSubmit: !0, useShowPasswordIcon: !0, isResi: r, startToggleAuth: this._startToggleAuth, cancelPendingToggleAuth: this.props.cancelPendingToggleAuth, waitForToggle: t.waitForToggle, })), e(y.b, { modalClass: "modal-login", centered: !0, showCancel: !1, fadeIn: !1, bannerView: a !== qe.DEVICE_TYPE.GW1 && c.createElement(Fe.UpgradeBannerView, null), headerView: n(s), contentView: this._loginViewJsx, onUnmount: this.props.cancelPendingToggleAuth, })) : p.browserHistory.push("/upgrade"); } _showInactiveMeterModal(e, t, i) { this.props.showModal("INACTIVE_METER_MODAL", { modalClass: i ? "modal-error" : "modal-info", size: "lg", centered: !0, showCancel: !0, showErrors: !1, headerView: c.createElement("h2", { "data-testid": "5ecb34ba-a8e1-4b44-be93-3e4bee5f1f4e", className: "modal-title" }, this.props.intl.formatMessage(i ? En.missingMeter : En.inactiveMeter)), contentView: c.createElement( c.Fragment, null, c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_inactive_meter_description", defaultMessage: "Check {type} meter connection.", values: { type: Object($e.localizeWithFallback)(oe.meterAggregateTypeMessages[e], this.props.intl, e) }, }), "" !== t ? c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_inactive_meter_timestamp", defaultMessage: "Last meter reading at {timestamp}", values: { timestamp: t } }) : null ), footerView: c.createElement( "button", { "data-testid": "4a908f7c-be8b-4d6e-8cd1-b69423886cec", className: "btn btn-link btn-close center-block", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE) ), }); } _showNegativeMeterModal(e) { const t = c.createElement( "button", { "data-testid": "926975e4-cf3c-4ad8-8067-e01733981bb6", className: "btn btn-link btn-close center-block", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE) ); this.props.showModal("NEGATIVE_METER_MODAL", { modalClass: "modal-error", size: "lg", centered: !0, showCancel: !0, showErrors: !1, headerView: c.createElement( "h2", { "data-testid": "e25e5e87-b826-42da-abfb-69c31013937b", className: "modal-title" }, this.props.intl.formatMessage(En.positivePowerMeter, { type: Object($e.localizeWithFallback)(oe.meterAggregateTypeMessages[e], this.props.intl, e) }) ), contentView: c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_positive_meter_description", defaultMessage: "{type} meter requires both positive power and amperage to be configured correctly.", values: { type: Object($e.localizeWithFallback)(oe.meterAggregateTypeMessages[e], this.props.intl, e) }, }), footerView: Object(Ve.isInstaller)(this.props.authentication, this.props.errors) || Object(Ve.isEngineer)(this.props.authentication) ? c.createElement( "div", { "data-testid": "aa38075c-0229-4c75-a594-3d861c4647ae", className: "row" }, c.createElement("div", { "data-testid": "98becf9a-50b2-4a2f-b310-0deabfc03860", className: "col-xs-6" }, t), c.createElement( "div", { "data-testid": "73d97d52-ea03-4305-b580-3bae76a3ee13", className: "col-xs-6" }, c.createElement( "button", { "data-testid": "60616b44-f120-42bd-b974-96999b29010f", className: "btn btn-link btn-error center-block", onClick: () => { this.props.changeLocation("/cts"); }, }, this.props.intl.formatMessage(oe.modalMessages.reconfigure) ) ) ) : t, }); } _handleChangeUsername(e) { this.props.changeUsername(e), null != this._loginViewJsx && this.props.updateModal(y.b, { contentView: c.cloneElement(this._loginViewJsx, { username: e }) }); } async _handleLogin(e, t, i) { try { null != this._loginViewJsx && this.props.updateModal(y.b, { contentView: c.cloneElement(this._loginViewJsx, { username: e, isFetching: !0 }) }), await this.props.login(e, t, i, this.props.isResi), this.props.clearErrors(), this.props.destroyModal(y.b), this.props.fetchNetworks(), (this._loginViewJsx = null); } catch (t) { null != this._loginViewJsx && this.props.updateModal(y.b, { contentView: c.cloneElement(this._loginViewJsx, { username: e, isFetching: !1 }) }); } } _handleLogout() { this.props.logout(); } _showError(e) { const { intl: t, showModal: i, isResi: n, sitemaster: r } = e; let a = null; r.smStartError && (a = c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_powerwall_start_error", defaultMessage: "Unable to start system: {reason}", values: { reason: r.smStartError } })), i("SITEMASTER_MODAL", { modalClass: "modal-error modal-sitemaster", size: "lg", centered: !0, showCancel: !1, showErrors: !1, fadeIn: !1, headerView: c.createElement("h2", { "data-testid": "3cb8e199-a3c5-47fe-a3cd-5b7f8a6d4d87", className: "modal-title" }, t.formatMessage(n ? En.errorPowerwall : En.siteControllerError)), contentView: a, footerView: c.createElement( "button", { "data-testid": "0d17fb7b-9813-4837-8d29-5fcc9849f5fc", className: "btn btn-link btn-close center-block", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE) ), }); } _updateModalFooter(e) { this.props.updateModal(e, { footerView: c.createElement( "div", { "data-testid": "c8f5e267-65f1-4cab-8cad-6a60216c7bad", className: "row" }, c.createElement( "div", { "data-testid": "419df8a0-0a3b-45b6-a76d-c17587204911", className: "col-xs-6" }, c.createElement("button", { "data-testid": "2ceb55e2-f410-44e7-b2db-695d3b2185a6", className: "btn btn-link btn-close", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CANCEL)) ), c.createElement( "div", { "data-testid": "497a8bdf-e2ad-461f-b00f-36cd266f9f4a", className: "col-xs-6" }, c.createElement("img", { "data-testid": "c5e770bd-5d07-4e23-8a46-f66d9dfcfd6b", className: "spinner", src: i(271), alt: "Loading" }) ) ), }); } _handleStartStopSitemanager() { const e = this.props.sitemaster.running || this.props.sitemaster.powerSupplyMode; let t = this.props.intl.formatMessage(e ? En.stopPowerwall : En.startPowerwall) + "?", i = null, n = this.props.sitemaster && this.props.sitemaster.canReboot !== li.a.yes; e && (i = c.createElement( "div", { className: "login-warning" }, this.props.sitemaster.running && this.props.hasSolarPowerwall && c.createElement(yn, null), n && c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_sitemaster_header_warning_industrial", defaultMessage: '{warning} This system is in a state where Tesla does not recommend stopping it. Reason: "{reason}"', values: { warning: c.createElement("span", { className: "bold" }, this.props.intl.formatMessage(oe.warnings.caution), ":"), reason: c.createElement(pn.a, { messages: oe.canRebootMessages, id: this.props.sitemaster.canReboot }), }, }), c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_sitemaster_confirm_industrial", defaultMessage: "Are you sure you want to stop the system?" }) )), this.props.showModal("SITEMASTER_MODAL", { modalClass: "modal-error", size: this.props.isResi ? "lg" : "md", centered: !0, showCancel: !1, showErrors: !1, headerView: c.createElement("div", { className: "sitemaster-modal-title" }, c.createElement("h2", { className: "modal-title" }, t), i), footerView: c.createElement(an, { isSystemRunning: this.props.sitemaster && this.props.sitemaster.running, requiresConfirmation: n, onClick: this._handleStartOrStopSitemaster }), }); } _handleDownloadLogs() { let e = this.props.intl.formatMessage(En.downloadAllLogs) + "?"; this.props.showModal("DOWNLOAD_LOGS_MODAL", { modalClass: "modal-error", size: "md", centered: !0, showCancel: !1, showErrors: !1, headerView: c.createElement( "div", { "data-testid": "0a225d17-9dc8-4e45-9526-0fc41ddd3eab", className: "sitemaster-modal-title" }, c.createElement("h2", { "data-testid": "bf6e19d0-6ca5-481d-a938-dea0dae8538e", className: "modal-title" }, e), c.createElement( "ul", { "data-testid": "8c65331b-9e1b-40aa-8204-3f19bde8a4ae", className: "bullet-point" }, c.createElement( "li", { "data-testid": "9f3f748a-bf4a-420f-899c-fb7973b7df99", className: "pb-1" }, c.createElement(u.FormattedMessage, { id: "home_view_download_logs_description_one", defaultMessage: "This downloads a compressed set of system logs that can be helpful to diagnose operating system, software, and networking issues.", }) ), c.createElement( "li", { "data-testid": "1bc6bbdb-f1be-4cf6-8418-2c9a74c21b19", className: "pb-1" }, c.createElement(u.FormattedMessage, { id: "home_view_download_logs_description_two", defaultMessage: "This is especially useful when the Gateway cannot be connected to the network, and advanced troubleshooting is needed.", }) ), c.createElement( "li", { "data-testid": "28d0e870-5eae-48f2-aebc-f6252d952e4a", className: "pb-1" }, c.createElement(u.FormattedMessage, { id: "home_view_download_logs_description_three", defaultMessage: "Logs are signed and encrypted and should be sent to Tesla Energy Service for investigation." }) ) ) ), footerView: c.createElement( "div", { "data-testid": "7cd324b9-1299-4609-8dd1-80e3bf04f141", className: "row" }, c.createElement( "div", { "data-testid": "bfcec1a7-1b17-4bfb-bffc-7a886bd095a8", className: "col-xs-6" }, c.createElement("button", { "data-testid": "de30eaba-fd87-480f-b791-e9f29e0560c9", className: "btn btn-link btn-close", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CANCEL)) ), c.createElement( "div", { "data-testid": "9282c7ef-ced0-4b65-8b1f-cc112dc94e95", className: "col-xs-6" }, c.createElement( "button", { "data-testid": "89dddf55-3c14-475b-8837-dbb414c217d8", className: "btn btn-link btn-error", onClick: this._handleTriggerDownloadLogs }, this.props.intl.formatMessage(oe.modalMessages.yes) ) ) ), }); } _handleTriggerDownloadLogs() { const e = document.createElement("a"); (e.href = "/api/getlogs"), e.setAttribute("download", "tesla_config_logs.tgz"), e.click(), this.props.destroyModal("DOWNLOAD_LOGS_MODAL"); } _handleStartOrStopSitemaster() { (null == this.props.sitemaster.running && !this.props.sitemaster.powerSupplyMode) || this.state.togglingSitemaster ? this.props.destroyModal("SITEMASTER_MODAL") : (this._updateModalFooter("SITEMASTER_MODAL"), this.setState({ togglingSitemaster: !0 }, () => { this.props.sitemaster.running || this.props.sitemaster.powerSupplyMode ? this.props.stopSitemaster(!this.props.isResi) : this.props.startSitemaster(); })); } _handleGoOffGrid() { fetch(Y.a.api.uri + "/v2/islanding/mode", { credentials: Y.a.credentials, method: "POST", body: JSON.stringify({ island_mode: "intentional_reconnect_failsafe" }) }); } _handleReconnectToGrid() { fetch(Y.a.api.uri + "/v2/islanding/mode", { credentials: Y.a.credentials, method: "POST", body: JSON.stringify({ island_mode: "backup" }) }); } } function yn() { return c.createElement( "div", { style: { padding: 8 } }, c.createElement("h3", null, c.createElement(u.FormattedMessage, En.caution)), c.createElement("p", null, c.createElement(u.FormattedMessage, { id: "home_container_caution_deenergize", defaultMessage: "To safely de-energize the system turn all Powerwall switches OFF." })) ); } function Sn() { return c.createElement( "div", { style: { padding: 8 } }, c.createElement("h3", null, c.createElement(u.FormattedMessage, En.caution)), c.createElement("p", null, c.createElement(u.FormattedMessage, { id: "home_container_caution_energized", defaultMessage: "System may remain energized if solar strings are connected." })) ); } hn( bn, "propTypes", vn( vn({}, Ue.a), {}, { getLoginHeaderView: l.a.func.isRequired, handleChangeLoginModal: l.a.func.isRequired, replaceLocation: l.a.func.isRequired, changeLocation: l.a.func.isRequired, initializeConfig: l.a.func.isRequired, getSiteName: l.a.func.isRequired, showModal: l.a.func.isRequired, destroyModal: l.a.func.isRequired, clearErrors: l.a.func.isRequired, fetchAlerts: l.a.func.isRequired, fetchNetworks: l.a.func.isRequired, fetchPowerwalls: l.a.func.isRequired, fetchSiteInfo: l.a.func.isRequired, startToggleAuth: l.a.func.isRequired, cancelPendingToggleAuth: l.a.func.isRequired, fetchSitemasterSettings: l.a.func.isRequired, startSitemaster: l.a.func.isRequired, stopSitemaster: l.a.func.isRequired, getMeterAggregates: l.a.func.isRequired, getRegistration: l.a.func.isRequired, getSOE: l.a.func.isRequired, getGridStatus: l.a.func.isRequired, resetAll: l.a.func.isRequired, login: l.a.func.isRequired, logout: l.a.func.isRequired, changeUsername: l.a.func.isRequired, testAndCheckFirmwareUpdateUrgency: l.a.func.isRequired, authentication: l.a.shape({ loginType: l.a.oneOf(Object.values(y.c)).isRequired, username: l.a.string.isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, toggleAuthSupported: l.a.bool.isRequired, waitForToggle: l.a.bool, }).isRequired, errors: l.a.array.isRequired, configuration: l.a.shape({ isFetching: l.a.bool.isRequired, isNew: l.a.bool, version: l.a.string.isRequired, hash: l.a.string.isRequired }).isRequired, sitemaster: l.a.shape({ isFetching: l.a.bool.isRequired, didInvalidate: l.a.bool.isRequired, running: l.a.bool, powerSupplyMode: l.a.bool, smStartError: l.a.string }).isRequired, network: l.a.object.isRequired, meter: l.a.object.isRequired, grid: l.a.shape({ config: l.a.object.isRequired }).isRequired, powerwall: l.a.object.isRequired, settings: l.a.object.isRequired, registration: l.a.object.isRequired, alerts: l.a.array.isRequired, isResi: l.a.bool.isRequired, hasSolarPowerwall: l.a.bool.isRequired, isUpdateRequired: l.a.bool.isRequired, cellularDisabled: l.a.bool.isRequired, hasNetworkConnection: l.a.bool.isRequired, installationProblems: l.a.array.isRequired, deviceType: l.a.oneOf(Object.values(qe.DEVICE_TYPE)), tegType: l.a.string, } ) ); var Rn = { component: Object(m.connect)( (e) => { const { authentication: t, error: i, configuration: n, network: r, meter: a, grid: o, powerwall: s, settings: _, sitemaster: l, test: c, registration: d, update: u } = e, { deviceType: m, tegType: p } = n, g = Object(je.isResiGateway)(m), w = Object(se.leaderSelector)(e), v = Object(se.followersSelector)(e), f = Object(nn.hasSolarPowerwallSelector)(e), h = !!u && u.updateUrgency === ci.b.REQUIRED, E = Object(se.cellularDisabledSelector)(e), b = Object(gn.hasNetworkConnectionSelector)(e), y = Object(_e.b)(e); return vn( { authentication: t, errors: i.items, configuration: n, network: r, meter: a, grid: o, powerwall: s, settings: _, sitemaster: l, registration: d, alerts: c.alerts, isResi: g, isUpdateRequired: h, leader: w, followers: v, hasSolarPowerwall: f, cellularDisabled: E, hasNetworkConnection: b, installationProblems: y, deviceType: m, tegType: p, }, mn(e) ); }, (e) => vn( vn({}, Object(g.b)({ testAndCheckFirmwareUpdateUrgency: rn.b }, e)), {}, { replaceLocation: (t) => { e(Object(Ze.replace)(t)); }, changeLocation: (t) => { e(Object(Ze.push)(t)); }, initializeConfig: () => { e(Object(x.initializeConfig)()); }, showModal: (t, i, n) => { e(Object(w.showModal)(t, i, n)); }, updateModal: (t, i, n) => { e(Object(w.updateModal)(t, i, n)); }, destroyModal: (t) => { e(Object(w.destroyModal)(t)); }, getSiteName: () => { e(Object(Ji.getSiteName)()); }, clearErrors: () => { e(Object(V.clearErrors)()); }, changeUsername: (t) => { e(Object(B.e)(t)); }, login: (t, i, n, r) => e(Object(B.h)(t, i, n, r)), startToggleAuth: () => e(Object(B.l)()), toggleAuthLogin: (t, i) => e(Object(B.m)(t, i)), cancelPendingToggleAuth: () => { e(Object(B.a)()); }, logout: () => { e(Object(B.i)()); }, fetchSiteInfo: () => { e(Object(Ji.fetchSiteInfo)()); }, fetchSitemasterSettings: () => e(Object(H.a)()), changeSelectedLoginType: (t) => { e(Object(B.d)(t)); }, startSitemaster: () => { e(Object(H.c)()); }, stopSitemaster: (t) => { e(Object(H.d)({ forceStop: t })); }, fetchAlerts: () => { e(Object($i.fetchAlerts)()); }, getMeterAggregates: () => e(Object(Qi.getMeterAggregates)()), getRegistration: () => { e(Object(en.getRegistration)()); }, fetchNetworks: () => { e(Object(tn.fetchNetworks)()); }, fetchPowerwalls: (t) => { e(Object(Xi.fetchPowerwalls)(t)); }, getSOE: () => e(Object(Xi.getSOE)()), getGridStatus: () => e(Object(Zi.getGridStatus)()), resetAll: () => { e(Object(Yi.resetAll)()); }, } ) )(Object(u.injectIntl)(Object(Ue.b)(bn))), }, Tn = i(11), An = (e) => ({ path: "network", getComponent(t, n) { Promise.all([i.e(0), i.e(24)]) .then( ((t) => { const r = i(1256).default, a = i(567).default; Object(Tn.b)(e, { key: "network", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Cn = (e) => ({ path: "network/ethernet", getComponent(t, n) { Promise.all([i.e(0), i.e(24)]) .then( ((t) => { const r = i(1256).default, a = i(567).default; Object(Tn.b)(e, { key: "network", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), In = (e) => ({ path: "network/wifi", getComponent(t, n) { Promise.all([i.e(0), i.e(24)]) .then( ((t) => { const r = i(1256).default, a = i(567).default; Object(Tn.b)(e, { key: "network", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), On = (e) => ({ path: "meter", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(21)]) .then( ((t) => { const r = i(1261).default, a = i(1154).default, o = i(1089).default, s = i(1090).default, _ = i(533).default; Object(Tn.c)(e, [ { key: "meter", reducer: a }, { key: "grid", reducer: o }, { key: "battery", reducer: s }, { key: "sitemaster", reducer: _ }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Nn = function (e) { return { path: "components", getComponent(t, n) { i.e(12) .then( ((t) => { const r = i(1242).default, a = i(1099).default, o = i(1096).default; Object(Tn.c)(e, [ { key: "siteInfo", reducer: a }, { key: "settings", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }; }, kn = (e) => ({ path: "cts", getComponent(t, n) { Promise.all([i.e(1), i.e(14)]) .then( ((t) => { const r = i(1259).default, a = i(1119).default, o = i(1154).default, s = i(1096).default, _ = i(1089).default, l = i(1116).default, c = i(1148).default, d = i(533).default, u = i(285).default, m = i(60).default; Object(Tn.c)(e, [ { key: "test", reducer: a }, { key: "meter", reducer: o }, { key: "settings", reducer: s }, { key: "grid", reducer: _ }, { key: "solar", reducer: l }, { key: "generator", reducer: c }, { key: "sitemaster", reducer: d }, { key: "powerwall", reducer: u }, { key: "configuration", reducer: m }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Pn = (e) => ({ path: "timezone", getComponent(t, n) { i.e(35) .then( ((t) => { const r = i(1269).default, a = i(1096).default; Object(Tn.b)(e, { key: "settings", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Dn = (e) => ({ path: "grid", getComponent(t, n) { Promise.all([i.e(1), i.e(17)]) .then( ((t) => { const r = i(1243).default, a = i(1089).default, o = i(1154).default, s = i(285).default; Object(Tn.c)(e, [ { key: "grid", reducer: a }, { key: "meter", reducer: o }, { key: "powerwall", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Ln = (e) => ({ path: "batteries", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(3), i.e(5), i.e(28)]) .then( ((t) => { const r = i(1262).default, a = i(1090).default, o = i(1154).default, s = i(285).default, _ = i(1197).default; Object(Tn.c)(e, [ { key: "battery", reducer: a }, { key: "meter", reducer: o }, { key: "powerwall", reducer: s }, { key: "components", reducer: _ }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Mn = (e) => ({ path: "batteries", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(3), i.e(5)]) .then( ((t) => { const r = i(1262).default, a = i(1090).default, o = i(1154).default, s = i(285).default; Object(Tn.c)(e, [ { key: "battery", reducer: a }, { key: "meter", reducer: o }, { key: "powerwall", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), zn = (e) => ({ path: "generation", getComponent(t, n) { i.e(16) .then( ((t) => { const r = i(1257).default, a = i(1116).default, o = i(1148).default; Object(Tn.c)(e, [ { key: "solar", reducer: a }, { key: "generator", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Un = (e) => ({ path: "settings", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(2), i.e(4), i.e(32)]) .then( ((t) => { const r = i(1265).default, a = i(1096).default, o = i(1154).default, s = i(285).default, _ = i(1089).default, l = i(1116).default, c = i(1099).default, d = i(1090).default; Object(Tn.c)(e, [ { key: "settings", reducer: a }, { key: "meter", reducer: o }, { key: "powerwall", reducer: s }, { key: "grid", reducer: _ }, { key: "solar", reducer: l }, { key: "siteInfo", reducer: c }, { key: "battery", reducer: d }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Vn = (e) => ({ path: "test/inverter", getComponent(t, n) { i.e(19) .then( ((t) => { const r = i(1263).default, a = i(1119).default; Object(Tn.c)(e, [{ key: "test", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Gn = (e) => ({ path: "installation", getComponent(t, n) { i.e(18) .then( ((t) => { const r = i(1270).default, a = i(1132).default, o = i(1089).default, s = i(285).default; Object(Tn.c)(e, [ { key: "installation", reducer: a }, { key: "grid", reducer: o }, { key: "powerwall", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), jn = (e) => ({ path: "legal", getComponent(t, n) { Promise.all([i.e(1), i.e(6), i.e(20)]) .then( ((t) => { const r = i(1271).default, a = i(566).default, o = i(1154).default, s = i(1089).default, _ = i(285).default; Object(Tn.c)(e, [ { key: "registration", reducer: a }, { key: "meter", reducer: o }, { key: "grid", reducer: s }, { key: "powerwall", reducer: _ }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Wn = i(568), Fn = i.n(Wn), qn = (e) => ({ path: "registration", getComponent(t, n) { Promise.all([i.e(6), i.e(29)]) .then( ((t) => { const r = i(1244).default, a = i(566).default, o = i(1089).default; Object(Tn.c)(e, [ { key: "registration", reducer: a }, { key: "grid", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), xn = i(569), Bn = i.n(xn), Hn = (e) => ({ path: "password", getComponent(t, n) { Promise.all([i.e(0), i.e(30)]) .then( ((t) => { const r = i(1266).default, a = i(285).default; Object(Tn.c)(e, [{ key: "powerwall", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Kn = (e) => ({ path: "summary", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(3), i.e(34)]) .then( ((t) => { const r = i(1254).default, a = i(567).default, o = i(285).default, s = i(1096).default, _ = i(1089).default, l = i(60).default, c = i(1132).default, d = i(1099).default, u = i(1154).default, m = i(1197).default, p = i(1090).default; Object(Tn.c)(e, [ { key: "powerwall", reducer: o }, { key: "settings", reducer: s }, { key: "grid", reducer: _ }, { key: "network", reducer: a }, { key: "configuration", reducer: l }, { key: "installation", reducer: c }, { key: "siteInfo", reducer: d }, { key: "meter", reducer: u }, { key: "installation", reducer: c }, { key: "components", reducer: m }, { key: "battery", reducer: p }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Yn = i(264), Qn = i.n(Yn), Zn = (e) => ({ path: "success", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(33)]) .then( ((t) => { const r = i(1272).default, a = i(566).default, o = i(1116).default, s = i(1148).default, _ = i(1154).default, l = i(285).default, c = i(1096).default, d = i(1132).default; Object(Tn.c)(e, [ { key: "registration", reducer: a }, { key: "solar", reducer: o }, { key: "generator", reducer: s }, { key: "meter", reducer: _ }, { key: "powerwall", reducer: l }, { key: "settings", reducer: c }, { key: "installation", reducer: d }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Jn = (e) => ({ path: "alert", getComponent(t, n) { i.e(8) .then( ((t) => { const r = i(1245).default, a = i(1119).default; Object(Tn.c)(e, [{ key: "test", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Xn = (e) => ({ path: "diagnostics", getComponent(t, n) { Promise.all([i.e(0), i.e(15)]) .then( ((t) => { const r = i(1258).default, a = i(1246).default, o = i(566).default; Object(Tn.c)(e, [ { key: "diagnostic", reducer: a }, { key: "registration", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), $n = (e) => ({ path: "phase", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(27)]) .then( ((t) => { const r = i(1264).default, a = i(285).default, o = i(1089).default, s = i(1154).default; Object(Tn.c)(e, [ { key: "powerwall", reducer: a }, { key: "grid", reducer: o }, { key: "meter", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), er = (e) => ({ path: "control", getComponent(t, n) { Promise.all([i.e(0), i.e(2), i.e(13)]) .then( ((t) => { const r = i(1273).default, a = i(1104).default; Object(Tn.b)(e, { key: "control", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), tr = (e) => ({ path: "advanced-settings", getComponent(t, n) { Promise.all([i.e(0), i.e(2), i.e(4), i.e(7)]) .then( ((t) => { const r = i(1267).default, a = i(1099).default, o = i(1096).default; Object(Tn.c)(e, [ { key: "siteInfo", reducer: a }, { key: "settings", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), ir = (e) => ({ path: "meter-validation", getComponent(t, n) { Promise.all([i.e(0), i.e(2), i.e(22)]) .then( ((t) => { const r = i(1253).default, a = i(1104).default, o = i(1229).default, s = i(280).default; Object(Tn.c)(e, [ { key: "control", reducer: a }, { key: "metrics", reducer: o }, { key: "meterValidation", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), nr = (e) => ({ path: "modbus", getComponent(t, n) { Promise.all([i.e(0), i.e(23)]) .then( ((t) => { const r = i(1255).default, a = i(278).default; Object(Tn.b)(e, { key: "modbus", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), rr = (e) => ({ path: "client-protocols", getComponent(t, n) { i.e(10) .then( ((t) => { const r = i(1274).default, a = i(567).default, o = i(60).default; Object(Tn.c)(e, [ { key: "network", reducer: a }, { key: "configuration", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), ar = (e) => ({ path: "open-loop-meter-validation", getComponent(t, n) { Promise.all([i.e(1), i.e(26)]) .then( ((t) => { const r = i(1248).default, a = i(1154).default, o = i(60).default, s = i(199).default, _ = i(291).default; Object(Tn.c)(e, [ { key: "meter", reducer: a }, { key: "configuration", reducer: o }, { key: "authentication", reducer: s }, { key: "error", reducer: _ }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), or = (e) => ({ path: "self-test-log-viewer", getComponent(t, n) { i.e(31) .then( ((t) => { const r = i(1249).default, a = i(60).default; Object(Tn.c)(e, [{ key: "configuration", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), sr = (e) => ({ path: "network-switch", getComponent(t, n) { Promise.all([i.e(0), i.e(25)]) .then( ((t) => { const r = i(1250).default, a = i(60).default; Object(Tn.c)(e, [{ key: "configuration", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), _r = i(286), lr = i.n(_r); i.d(t, "createRoutes", function () { return cr; }); const cr = (e) => ({ path: "/", component: Qe, getIndexRoute(t, n) { Promise.all([i.e(1), i.e(39)]) .then( ((t) => { const r = i(567).default, a = i(1154).default, o = i(1089).default, s = i(285).default, _ = i(1116).default, l = i(1096).default, c = i(533).default, d = i(1119).default, u = i(566).default; Object(Tn.c)(e, [ { key: "network", reducer: r }, { key: "meter", reducer: a }, { key: "grid", reducer: o }, { key: "powerwall", reducer: s }, { key: "solar", reducer: _ }, { key: "settings", reducer: l }, { key: "sitemaster", reducer: c }, { key: "test", reducer: d }, { key: "registration", reducer: u }, ]), n(null, Rn); }).bind(null, i) ) .catch(i.oe); }, getChildRoutes(t, n) { Promise.resolve() .then( ((t) => { n(null, [ { path: "wizard", getComponent(e, t) { i.e(38) .then( ((e) => { const n = i(1268).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, An(e), Cn(e), In(e), { path: "update", getComponent(e, t) { i.e(36) .then( ((e) => { const n = i(1260).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, On(e), Nn(e), kn(e), Pn(e), Dn(e), { path: "password-generate", getComponent(e, t) { t(null, Fn.a); }, }, $n(e), Ln(e), { path: "powerwall", getComponent(e, t) { Promise.all([i.e(0), i.e(1), i.e(3), i.e(5), i.e(28)]) .then( ((e) => { const n = i(1247).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, Mn(e), zn(e), Un(e), Vn(e), Xn(e), Gn(e), jn(e), qn(e), Hn(e), Kn(e), { path: "system", getComponent(e, t) { t(null, Qn.a); }, }, { path: "service", getComponent(e, t) { t(null, Bn.a); }, }, Zn(e), Jn(e), er(e), tr(e), ir(e), nr(e), rr(e), ar(e), or(e), sr(e), { path: "compliance", getComponent(e, t) { i.e(11) .then( ((e) => { const n = i(1251).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, { path: "upgrade", getComponent(e, t) { i.e(37) .then( ((e) => { const n = i(1252).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, { path: "*", component: lr.a }, ]); }).bind(null, i) ) .catch(i.oe); }, }); t.default = cr; }, function (e, t, i) { "use strict"; i.r(t); i(592), i(593); var n = i(1), r = i(20), a = i.n(r), o = i(17), s = i(35), _ = i(3), l = i(529), c = i(88), d = i(49), u = i(268), m = i(531), p = i.n(m), g = i(2); const w = ({ dispatch: e }) => (t) => e( (function (e = "/") { return { type: g.LOCATION_CHANGE, payload: e }; })(t) ); var v = i(532), f = i.n(v); function h(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class E { static GlobalInstance() { return E._sharedInstance || new E(); } constructor(e) { return null === E._sharedInstance && ((E._sharedInstance = this), (this.persist = e)), E.GlobalInstance(); } purge(e) { this.persist && this.persist.purge(e); } rehydrate(e, t) { this.persist && this.persist.rehydrate(e, t); } } h(E, "_sharedInstance", null), h(E, "config", { whitelist: ["authentication"], storage: f.a }); var b = i(11), y = (i(14), i(45)), S = i(534), R = i.n(S), T = i(535), A = i.n(T), C = i(536), I = i.n(C), O = i(537), N = i.n(O), k = i(538), P = i.n(k), D = i(539), L = i.n(D), M = i(540), z = i.n(M), U = i(541), V = i(542), G = i(543), j = i(544), W = i(545), F = i(546), q = i(547), x = i(548), B = i(549), H = i(550), K = i(551), Y = i(552), Q = i(553); function Z(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function J(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? Z(Object(i), !0).forEach(function (t) { X(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : Z(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function X(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } Object(_.addLocaleData)([...R.a, ...A.a, ...I.a, ...N.a, ...P.a, ...L.a, ...z.a]); const $ = { en: q, de: J(J({}, U), x), it: J(J({}, V), B), es: J(J({}, G), H), nl: J(J({}, j), K), fr: J(J({}, W), Y), ja: J(J({}, F), Q) }; const ee = window.__INITIAL_STATE__ || {}; delete window.__INITIAL_STATE__; const te = ((e = {}) => { const t = [p.a, Object(c.routerMiddleware)(o.browserHistory)]; let i = d.d; const n = Object(d.e)(Object(b.a)(), e, i(Object(d.a)(...t), Object(u.a)())); return (n.asyncReducers = {}), (n.unsubscribeHistory = o.browserHistory.listen(w(n))), new E(Object(u.b)(n, E.config)), n; })(ee); const ie = document.getElementById("root"); var ne; (ne = () => { const e = i(1049).default(te), t = n.createElement(s.Provider, { store: te }, n.createElement(l.TranslationsProvider, { translations: $, override: Object(y.b)("Locale") }, n.createElement(o.Router, { history: o.browserHistory, children: e }))); a.a.render(t, ie); }), window.intl ? ne() : Promise.all([i.e(0), i.e(40)]) .then( ((e) => { i(1075), i(1076), i(1077), i(1078), i(1079), i(1080), i(1081), i(1082), ne(); }).bind(null, i) ) .catch(i.oe); }, ]); ================================================ FILE: proxy/web/viz-static/black.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Black customization"); triggerOnMutation(formatPowerwallForBlack); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForBlack() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "black", }); $('.power-flow-grid.active').css({ "background-color": "#000", }); } ================================================ FILE: proxy/web/viz-static/clear.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Clear customization"); triggerOnMutation(formatPowerwallForClear); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForClear() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "transparent", }); $('.power-flow-grid.active').css({ "background-color": "transparent", }); } ================================================ FILE: proxy/web/viz-static/dakboard.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Dakboard customization"); triggerOnMutation(formatPowerwallForDakboard); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForDakboard() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "black", }); $('.power-flow-grid.active').css({ "background-color": "#000", }); } ================================================ FILE: proxy/web/viz-static/grafana-dark.js ================================================ 'use strict' // Grafana Dark Theme // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Grafana customization"); triggerOnMutation(formatPowerwallForGrafana); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForGrafana() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "#111217", }); $('.power-flow-grid.active').css({ "background-color": "#111217", }); } ================================================ FILE: proxy/web/viz-static/grafana.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Grafana customization"); triggerOnMutation(formatPowerwallForGrafana); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForGrafana() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "#161719", }); $('.power-flow-grid.active').css({ "background-color": "#161719", }); } ================================================ FILE: proxy/web/viz-static/solar.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying SolarOnly customization"); triggerOnMutation(formatPowerwallForSolar); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForSolar() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn, .powerwall-soe, .soe-label').hide(); // Hide Powerwall image var imgElement = document.querySelector('[data-testid="b3372156-8a9e-4d17-9721-fcc5891d1074"]'); if (imgElement) { imgElement.style.display = 'none'; } // Hide the Powerwall text const divs = document.querySelectorAll('[data-testid="ec7d6a6d-b6d2-411c-a535-c052c00baf62"]'); divs.forEach(div => { if (div.style.width === '120px' && div.style.top === '200.5px' && div.style.left === '0px' && div.style.right === '0px') { const paragraph = div.querySelector('p[data-testid="4c6aadb3-7661-4d7f-b1ff-d5a0571fac60"]'); if (paragraph) { paragraph.style.display = 'none'; } } }); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "transparent", }); $('.power-flow-grid.active').css({ "background-color": "transparent", }); } ================================================ FILE: proxy/web/viz-static/vendor.js ================================================ /*! For license information please see vendor.17c71172308436a079d1.js.LICENSE */ (window.webpackJsonp = window.webpackJsonp || []).push([ [0], [ function (e, t, n) { e.exports = n(601)(); }, function (e, t, n) { "use strict"; e.exports = n(594); }, , function (e, t, n) { "use strict"; n.r(t); var r = n(528), o = n.n(r), a = n(89), i = n.n(a), s = n(131), u = n.n(s), c = n(0), l = n.n(c), d = n(1), f = n.n(d), p = n(196), h = n.n(p), m = n(19), M = n.n(m); function y(e) { return JSON.stringify( e.map(function (e) { return e && "object" == typeof e ? ((t = e), Object.keys(t) .sort() .map(function (e) { var n; return ((n = {})[e] = t[e]), n; })) : e; var t; }) ); } var v = function (e, t) { return ( void 0 === t && (t = {}), function () { for (var n, r = [], o = 0; o < arguments.length; o++) r[o] = arguments[o]; var a = y(r), i = a && t[a]; return i || ((i = new ((n = e).bind.apply(n, [void 0].concat(r)))()), a && (t[a] = i)), i; } ); }; n.d(t, "addLocaleData", function () { return g; }), n.d(t, "intlShape", function () { return X; }), n.d(t, "injectIntl", function () { return se; }), n.d(t, "defineMessages", function () { return ue; }), n.d(t, "IntlProvider", function () { return we; }), n.d(t, "FormattedDate", function () { return Te; }), n.d(t, "FormattedTime", function () { return ke; }), n.d(t, "FormattedRelative", function () { return Oe; }), n.d(t, "FormattedNumber", function () { return Se; }), n.d(t, "FormattedPlural", function () { return ze; }), n.d(t, "FormattedMessage", function () { return xe; }), n.d(t, "FormattedHTMLMessage", function () { return De; }); var b = { locale: "en", pluralRuleFunction: function (e, t) { var n = String(e).split("."), r = !n[1], o = Number(n[0]) == e, a = o && n[0].slice(-1), i = o && n[0].slice(-2); return t ? (1 == a && 11 != i ? "one" : 2 == a && 12 != i ? "two" : 3 == a && 13 != i ? "few" : "other") : 1 == e && r ? "one" : "other"; }, fields: { year: { displayName: "year", relative: { 0: "this year", 1: "next year", "-1": "last year" }, relativeTime: { future: { one: "in {0} year", other: "in {0} years" }, past: { one: "{0} year ago", other: "{0} years ago" } }, }, month: { displayName: "month", relative: { 0: "this month", 1: "next month", "-1": "last month" }, relativeTime: { future: { one: "in {0} month", other: "in {0} months" }, past: { one: "{0} month ago", other: "{0} months ago" } }, }, day: { displayName: "day", relative: { 0: "today", 1: "tomorrow", "-1": "yesterday" }, relativeTime: { future: { one: "in {0} day", other: "in {0} days" }, past: { one: "{0} day ago", other: "{0} days ago" } } }, hour: { displayName: "hour", relative: { 0: "this hour" }, relativeTime: { future: { one: "in {0} hour", other: "in {0} hours" }, past: { one: "{0} hour ago", other: "{0} hours ago" } } }, minute: { displayName: "minute", relative: { 0: "this minute" }, relativeTime: { future: { one: "in {0} minute", other: "in {0} minutes" }, past: { one: "{0} minute ago", other: "{0} minutes ago" } } }, second: { displayName: "second", relative: { 0: "now" }, relativeTime: { future: { one: "in {0} second", other: "in {0} seconds" }, past: { one: "{0} second ago", other: "{0} seconds ago" } } }, }, }; function g() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = Array.isArray(e) ? e : [e]; t.forEach(function (e) { e && e.locale && (i.a.__addLocaleData(e), u.a.__addLocaleData(e)); }); } function _(e) { var t = e && e.toLowerCase(); return !(!i.a.__localeData__[t] || !u.a.__localeData__[t]); } var A = "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; }, L = ((function () { function e(e) { this.value = e; } function t(t) { var n, r; function o(n, r) { try { var i = t[n](r), s = i.value; s instanceof e ? Promise.resolve(s.value).then( function (e) { o("next", e); }, function (e) { o("throw", e); } ) : a(i.done ? "return" : "normal", i.value); } catch (e) { a("throw", e); } } function a(e, t) { switch (e) { case "return": n.resolve({ value: t, done: !0 }); break; case "throw": n.reject(t); break; default: n.resolve({ value: t, done: !1 }); } (n = n.next) ? o(n.key, n.arg) : (r = null); } (this._invoke = function (e, t) { return new Promise(function (a, i) { var s = { key: e, arg: t, resolve: a, reject: i, next: null }; r ? (r = r.next = s) : ((n = r = s), o(e, t)); }); }), "function" != typeof t.return && (this.return = void 0); } "function" == typeof Symbol && Symbol.asyncIterator && (t.prototype[Symbol.asyncIterator] = function () { return this; }), (t.prototype.next = function (e) { return this._invoke("next", e); }), (t.prototype.throw = function (e) { return this._invoke("throw", e); }), (t.prototype.return = function (e) { return this._invoke("return", e); }); })(), function (e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); }), w = (function () { function e(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; (r.enumerable = r.enumerable || !1), (r.configurable = !0), "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); } } return function (t, n, r) { return n && e(t.prototype, n), r && e(t, r), t; }; })(), T = function (e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = n), e; }, k = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, O = function (e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); (e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } })), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : (e.__proto__ = t)); }, S = function (e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || ("object" != typeof t && "function" != typeof t) ? e : t; }, z = function (e) { if (Array.isArray(e)) { for (var t = 0, n = Array(e.length); t < e.length; t++) n[t] = e[t]; return n; } return Array.from(e); }, E = l.a.bool, x = l.a.number, D = l.a.string, N = l.a.func, j = l.a.object, C = l.a.oneOf, P = l.a.shape, Y = l.a.any, W = l.a.oneOfType, q = C(["best fit", "lookup"]), B = C(["narrow", "short", "long"]), R = C(["numeric", "2-digit"]), F = N.isRequired, H = { locale: D, timeZone: D, formats: j, messages: j, textComponent: Y, defaultLocale: D, defaultFormats: j, onError: N }, I = { formatDate: F, formatTime: F, formatRelative: F, formatNumber: F, formatPlural: F, formatMessage: F, formatHTMLMessage: F }, X = P(k({}, H, I, { formatters: j, now: F })), K = (D.isRequired, W([D, j]), { localeMatcher: q, formatMatcher: C(["basic", "best fit"]), timeZone: D, hour12: E, weekday: B, era: B, year: R, month: C(["numeric", "2-digit", "narrow", "short", "long"]), day: R, hour: R, minute: R, second: R, timeZoneName: C(["short", "long"]), }), U = { localeMatcher: q, style: C(["decimal", "currency", "percent"]), currency: D, currencyDisplay: C(["symbol", "code", "name"]), useGrouping: E, minimumIntegerDigits: x, minimumFractionDigits: x, maximumFractionDigits: x, minimumSignificantDigits: x, maximumSignificantDigits: x, }, J = { style: C(["best fit", "numeric"]), units: C(["second", "minute", "hour", "day", "month", "year", "second-short", "minute-short", "hour-short", "day-short", "month-short", "year-short"]) }, V = { style: C(["cardinal", "ordinal"]) }, G = Object.keys(H), $ = { "&": "&", ">": ">", "<": "<", '"': """, "'": "'" }, Q = /[&><"']/g; function Z(e) { return ("" + e).replace(Q, function (e) { return $[e]; }); } function ee(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; return t.reduce(function (t, r) { return e.hasOwnProperty(r) ? (t[r] = e[r]) : n.hasOwnProperty(r) && (t[r] = n[r]), t; }, {}); } function te() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = e.intl; M()(t, "[React Intl] Could not find required `intl` object. needs to exist in the component ancestry."); } function ne(e, t) { if (e === t) return !0; if ("object" !== (void 0 === e ? "undefined" : A(e)) || null === e || "object" !== (void 0 === t ? "undefined" : A(t)) || null === t) return !1; var n = Object.keys(e), r = Object.keys(t); if (n.length !== r.length) return !1; for (var o = Object.prototype.hasOwnProperty.bind(t), a = 0; a < n.length; a++) if (!o(n[a]) || e[n[a]] !== t[n[a]]) return !1; return !0; } function re(e, t, n) { var r = e.props, o = e.state, a = e.context, i = void 0 === a ? {} : a, s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, u = i.intl, c = void 0 === u ? {} : u, l = s.intl, d = void 0 === l ? {} : l; return !ne(t, r) || !ne(n, o) || !(d === c || ne(ee(d, G), ee(c, G))); } function oe(e, t) { return "[React Intl] " + e + (t ? "\n" + t : ""); } function ae(e) { 0; } function ie(e) { return e.displayName || e.name || "Component"; } function se(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.intlPropName, r = void 0 === n ? "intl" : n, o = t.withRef, a = void 0 !== o && o, i = (function (t) { function n(e, t) { L(this, n); var r = S(this, (n.__proto__ || Object.getPrototypeOf(n)).call(this, e, t)); return te(t), r; } return ( O(n, t), w(n, [ { key: "getWrappedInstance", value: function () { return M()(a, "[React Intl] To access the wrapped instance, the `{withRef: true}` option must be set when calling: `injectIntl()`"), this._wrappedInstance; }, }, { key: "render", value: function () { var t = this; return f.a.createElement( e, k({}, this.props, T({}, r, this.context.intl), { ref: a ? function (e) { return (t._wrappedInstance = e); } : null, }) ); }, }, ]), n ); })(d.Component); return (i.displayName = "InjectIntl(" + ie(e) + ")"), (i.contextTypes = { intl: X }), (i.WrappedComponent = e), h()(i, e); } function ue(e) { return e; } function ce(e) { return i.a.prototype._resolveLocale(e); } function le(e) { return i.a.prototype._findPluralRuleFunction(e); } var de = function e(t) { var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; L(this, e); var r = "ordinal" === n.style, o = le(ce(t)); this.format = function (e) { return o(e, r); }; }, fe = Object.keys(K), pe = Object.keys(U), he = Object.keys(J), me = Object.keys(V), Me = { second: 60, minute: 60, hour: 24, day: 30, month: 12 }; function ye(e) { var t = u.a.thresholds; (t.second = e.second), (t.minute = e.minute), (t.hour = e.hour), (t.day = e.day), (t.month = e.month), (t["second-short"] = e["second-short"]), (t["minute-short"] = e["minute-short"]), (t["hour-short"] = e["hour-short"]), (t["day-short"] = e["day-short"]), (t["month-short"] = e["month-short"]); } function ve(e, t, n, r) { var o = e && e[t] && e[t][n]; if (o) return o; r(oe("No " + t + " format named: " + n)); } function be(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = e.messages, s = e.defaultLocale, u = e.defaultFormats, c = n.id, l = n.defaultMessage; M()(c, "[React Intl] An `id` must be provided to format a message."); var d = i && i[c], f = Object.keys(r).length > 0; if (!f) return d || l || c; var p = void 0, h = e.onError || ae; if (d) try { var m = t.getMessageFormat(d, o, a); p = m.format(r); } catch (e) { h(oe('Error formatting message: "' + c + '" for locale: "' + o + '"' + (l ? ", using default message as fallback." : ""), e)); } else (!l || (o && o.toLowerCase() !== s.toLowerCase())) && h(oe('Missing message: "' + c + '" for locale: "' + o + '"' + (l ? ", using default message as fallback." : ""))); if (!p && l) try { var y = t.getMessageFormat(l, s, u); p = y.format(r); } catch (e) { h(oe('Error formatting the default message for: "' + c + '"', e)); } return p || h(oe('Cannot format message: "' + c + '", using message ' + (d || l ? "source" : "id") + " as fallback.")), p || d || l || c; } var ge = Object.freeze({ formatDate: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = e.timeZone, s = r.format, u = e.onError || ae, c = new Date(n), l = k({}, i && { timeZone: i }, s && ve(a, "date", s, u)), d = ee(r, fe, l); try { return t.getDateTimeFormat(o, d).format(c); } catch (e) { u(oe("Error formatting date.", e)); } return String(c); }, formatTime: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = e.timeZone, s = r.format, u = e.onError || ae, c = new Date(n), l = k({}, i && { timeZone: i }, s && ve(a, "time", s, u)), d = ee(r, fe, l); d.hour || d.minute || d.second || (d = k({}, d, { hour: "numeric", minute: "numeric" })); try { return t.getDateTimeFormat(o, d).format(c); } catch (e) { u(oe("Error formatting time.", e)); } return String(c); }, formatRelative: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = r.format, s = e.onError || ae, c = new Date(n), l = new Date(r.now), d = i && ve(a, "relative", i, s), f = ee(r, he, d), p = k({}, u.a.thresholds); ye(Me); try { return t.getRelativeFormat(o, f).format(c, { now: isFinite(l) ? l : t.now() }); } catch (e) { s(oe("Error formatting relative time.", e)); } finally { ye(p); } return String(c); }, formatNumber: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = r.format, s = e.onError || ae, u = i && ve(a, "number", i, s), c = ee(r, pe, u); try { return t.getNumberFormat(o, c).format(n); } catch (e) { s(oe("Error formatting number.", e)); } return String(n); }, formatPlural: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = ee(r, me), i = e.onError || ae; try { return t.getPluralFormat(o, a).format(n); } catch (e) { i(oe("Error formatting plural.", e)); } return "other"; }, formatMessage: be, formatHTMLMessage: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = Object.keys(r).reduce(function (e, t) { var n = r[t]; return (e[t] = "string" == typeof n ? Z(n) : n), e; }, {}); return be(e, t, n, o); }, }), _e = Object.keys(H), Ae = Object.keys(I), Le = { formats: {}, messages: {}, timeZone: null, textComponent: "span", defaultLocale: "en", defaultFormats: {}, onError: ae }, we = (function (e) { function t(e) { var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); M()( "undefined" != typeof Intl, "[React Intl] The `Intl` APIs must be available in the runtime, and do not appear to be built-in. An `Intl` polyfill should be loaded.\nSee: http://formatjs.io/guides/runtime-environments/" ); var o = n.intl, a = void 0; a = isFinite(e.initialNow) ? Number(e.initialNow) : o ? o.now() : Date.now(); var s = o || {}, c = s.formatters, l = void 0 === c ? { getDateTimeFormat: v(Intl.DateTimeFormat), getNumberFormat: v(Intl.NumberFormat), getMessageFormat: v(i.a), getRelativeFormat: v(u.a), getPluralFormat: v(de) } : c; return ( (r.state = k({}, l, { now: function () { return r._didDisplay ? Date.now() : a; }, })), r ); } return ( O(t, e), w(t, [ { key: "getConfig", value: function () { var e = this.context.intl, t = ee(this.props, _e, e); for (var n in Le) void 0 === t[n] && (t[n] = Le[n]); if ( !(function (e) { for (var t = (e || "").split("-"); t.length > 0; ) { if (_(t.join("-"))) return !0; t.pop(); } return !1; })(t.locale) ) { var r = t, o = r.locale, a = r.defaultLocale, i = r.defaultFormats; (0, r.onError)(oe('Missing locale data for locale: "' + o + '". Using default locale: "' + a + '" as fallback.')), (t = k({}, t, { locale: a, formats: i, messages: Le.messages })); } return t; }, }, { key: "getBoundFormatFns", value: function (e, t) { return Ae.reduce(function (n, r) { return (n[r] = ge[r].bind(null, e, t)), n; }, {}); }, }, { key: "getChildContext", value: function () { var e = this.getConfig(), t = this.getBoundFormatFns(e, this.state), n = this.state, r = n.now, o = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(n, ["now"]); return { intl: k({}, e, t, { formatters: o, now: r }) }; }, }, { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "componentDidMount", value: function () { this._didDisplay = !0; }, }, { key: "render", value: function () { return d.Children.only(this.props.children); }, }, ]), t ); })(d.Component); (we.displayName = "IntlProvider"), (we.contextTypes = { intl: X }), (we.childContextTypes = { intl: X.isRequired }); var Te = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatDate, n = e.textComponent, r = this.props, o = r.value, a = r.children, i = t(o, this.props); return "function" == typeof a ? a(i) : f.a.createElement(n, null, i); }, }, ]), t ); })(d.Component); (Te.displayName = "FormattedDate"), (Te.contextTypes = { intl: X }); var ke = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatTime, n = e.textComponent, r = this.props, o = r.value, a = r.children, i = t(o, this.props); return "function" == typeof a ? a(i) : f.a.createElement(n, null, i); }, }, ]), t ); })(d.Component); (ke.displayName = "FormattedTime"), (ke.contextTypes = { intl: X }); var Oe = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); te(n); var o = isFinite(e.initialNow) ? Number(e.initialNow) : n.intl.now(); return (r.state = { now: o }), r; } return ( O(t, e), w(t, [ { key: "scheduleNextUpdate", value: function (e, t) { var n = this; clearTimeout(this._timer); var r = e.value, o = e.units, a = e.updateInterval, i = new Date(r).getTime(); if (a && isFinite(i)) { var s = i - t.now, u = (function (e) { switch (e) { case "second": return 1e3; case "minute": return 6e4; case "hour": return 36e5; case "day": return 864e5; default: return 2147483647; } })( o || (function (e) { var t = Math.abs(e); return t < 6e4 ? "second" : t < 36e5 ? "minute" : t < 864e5 ? "hour" : "day"; })(s) ), c = Math.abs(s % u), l = s < 0 ? Math.max(a, u - c) : Math.max(a, c); this._timer = setTimeout(function () { n.setState({ now: n.context.intl.now() }); }, l); } }, }, { key: "componentDidMount", value: function () { this.scheduleNextUpdate(this.props, this.state); }, }, { key: "componentWillReceiveProps", value: function (e) { (function (e, t) { if (e === t) return !0; var n = new Date(e).getTime(), r = new Date(t).getTime(); return isFinite(n) && isFinite(r) && n === r; })(e.value, this.props.value) || this.setState({ now: this.context.intl.now() }); }, }, { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "componentWillUpdate", value: function (e, t) { this.scheduleNextUpdate(e, t); }, }, { key: "componentWillUnmount", value: function () { clearTimeout(this._timer); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatRelative, n = e.textComponent, r = this.props, o = r.value, a = r.children, i = t(o, k({}, this.props, this.state)); return "function" == typeof a ? a(i) : f.a.createElement(n, null, i); }, }, ]), t ); })(d.Component); (Oe.displayName = "FormattedRelative"), (Oe.contextTypes = { intl: X }), (Oe.defaultProps = { updateInterval: 1e4 }); var Se = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatNumber, n = e.textComponent, r = this.props, o = r.value, a = r.children, i = t(o, this.props); return "function" == typeof a ? a(i) : f.a.createElement(n, null, i); }, }, ]), t ); })(d.Component); (Se.displayName = "FormattedNumber"), (Se.contextTypes = { intl: X }); var ze = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatPlural, n = e.textComponent, r = this.props, o = r.value, a = r.other, i = r.children, s = t(o, this.props), u = this.props[s] || a; return "function" == typeof i ? i(u) : f.a.createElement(n, null, u); }, }, ]), t ); })(d.Component); (ze.displayName = "FormattedPlural"), (ze.contextTypes = { intl: X }), (ze.defaultProps = { style: "cardinal" }); var Ee = function (e, t) { return be({}, { getMessageFormat: v(i.a) }, e, t); }, xe = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return e.defaultMessage || te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function (e) { var t = this.props.values, n = e.values; if (!ne(n, t)) return !0; for (var r = k({}, e, { values: t }), o = arguments.length, a = Array(o > 1 ? o - 1 : 0), i = 1; i < o; i++) a[i - 1] = arguments[i]; return re.apply(void 0, [this, r].concat(a)); }, }, { key: "render", value: function () { var e, t = this.context.intl || {}, n = t.formatMessage, r = void 0 === n ? Ee : n, o = t.textComponent, a = void 0 === o ? "span" : o, i = this.props, s = i.id, u = i.description, c = i.defaultMessage, l = i.values, f = i.tagName, p = void 0 === f ? a : f, h = i.children, m = void 0, M = void 0, y = void 0; if (l && Object.keys(l).length > 0) { var v = Math.floor(1099511627776 * Math.random()).toString(16), b = ((e = 0), function () { return "ELEMENT-" + v + "-" + (e += 1); }); (m = "@__" + v + "__@"), (M = {}), (y = {}), Object.keys(l).forEach(function (e) { var t = l[e]; if (Object(d.isValidElement)(t)) { var n = b(); (M[e] = m + n + m), (y[n] = t); } else M[e] = t; }); } var g = r({ id: s, description: u, defaultMessage: c }, M || l), _ = void 0; return ( (_ = y && Object.keys(y).length > 0 ? g .split(m) .filter(function (e) { return !!e; }) .map(function (e) { return y[e] || e; }) : [g]), "function" == typeof h ? h.apply(void 0, z(_)) : d.createElement.apply(void 0, [p, null].concat(z(_))) ); }, }, ]), t ); })(d.Component); (xe.displayName = "FormattedMessage"), (xe.contextTypes = { intl: X }), (xe.defaultProps = { values: {} }); var De = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function (e) { var t = this.props.values, n = e.values; if (!ne(n, t)) return !0; for (var r = k({}, e, { values: t }), o = arguments.length, a = Array(o > 1 ? o - 1 : 0), i = 1; i < o; i++) a[i - 1] = arguments[i]; return re.apply(void 0, [this, r].concat(a)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatHTMLMessage, n = e.textComponent, r = this.props, o = r.id, a = r.description, i = r.defaultMessage, s = r.values, u = r.tagName, c = void 0 === u ? n : u, l = r.children, d = t({ id: o, description: a, defaultMessage: i }, s); if ("function" == typeof l) return l(d); var p = { __html: d }; return f.a.createElement(c, { dangerouslySetInnerHTML: p }); }, }, ]), t ); })(d.Component); (De.displayName = "FormattedHTMLMessage"), (De.contextTypes = { intl: X }), (De.defaultProps = { values: {} }), g(b), g(o.a); }, , , , , , function (e, t, n) { (function (e) { e.exports = (function () { "use strict"; var t, r; function o() { return t.apply(null, arguments); } function a(e) { return e instanceof Array || "[object Array]" === Object.prototype.toString.call(e); } function i(e) { return null != e && "[object Object]" === Object.prototype.toString.call(e); } function s(e) { return void 0 === e; } function u(e) { return "number" == typeof e || "[object Number]" === Object.prototype.toString.call(e); } function c(e) { return e instanceof Date || "[object Date]" === Object.prototype.toString.call(e); } function l(e, t) { var n, r = []; for (n = 0; n < e.length; ++n) r.push(t(e[n], n)); return r; } function d(e, t) { return Object.prototype.hasOwnProperty.call(e, t); } function f(e, t) { for (var n in t) d(t, n) && (e[n] = t[n]); return d(t, "toString") && (e.toString = t.toString), d(t, "valueOf") && (e.valueOf = t.valueOf), e; } function p(e, t, n, r) { return wt(e, t, n, r, !0).utc(); } function h(e) { return ( null == e._pf && (e._pf = { empty: !1, unusedTokens: [], unusedInput: [], overflow: -2, charsLeftOver: 0, nullInput: !1, invalidMonth: null, invalidFormat: !1, userInvalidated: !1, iso: !1, parsedDateParts: [], meridiem: null, rfc2822: !1, weekdayMismatch: !1, }), e._pf ); } function m(e) { if (null == e._isValid) { var t = h(e), n = r.call(t.parsedDateParts, function (e) { return null != e; }), o = !isNaN(e._d.getTime()) && t.overflow < 0 && !t.empty && !t.invalidMonth && !t.invalidWeekday && !t.weekdayMismatch && !t.nullInput && !t.invalidFormat && !t.userInvalidated && (!t.meridiem || (t.meridiem && n)); if ((e._strict && (o = o && 0 === t.charsLeftOver && 0 === t.unusedTokens.length && void 0 === t.bigHour), null != Object.isFrozen && Object.isFrozen(e))) return o; e._isValid = o; } return e._isValid; } function M(e) { var t = p(NaN); return null != e ? f(h(t), e) : (h(t).userInvalidated = !0), t; } r = Array.prototype.some ? Array.prototype.some : function (e) { for (var t = Object(this), n = t.length >>> 0, r = 0; r < n; r++) if (r in t && e.call(this, t[r], r, t)) return !0; return !1; }; var y = (o.momentProperties = []); function v(e, t) { var n, r, o; if ( (s(t._isAMomentObject) || (e._isAMomentObject = t._isAMomentObject), s(t._i) || (e._i = t._i), s(t._f) || (e._f = t._f), s(t._l) || (e._l = t._l), s(t._strict) || (e._strict = t._strict), s(t._tzm) || (e._tzm = t._tzm), s(t._isUTC) || (e._isUTC = t._isUTC), s(t._offset) || (e._offset = t._offset), s(t._pf) || (e._pf = h(t)), s(t._locale) || (e._locale = t._locale), y.length > 0) ) for (n = 0; n < y.length; n++) s((o = t[(r = y[n])])) || (e[r] = o); return e; } var b = !1; function g(e) { v(this, e), (this._d = new Date(null != e._d ? e._d.getTime() : NaN)), this.isValid() || (this._d = new Date(NaN)), !1 === b && ((b = !0), o.updateOffset(this), (b = !1)); } function _(e) { return e instanceof g || (null != e && null != e._isAMomentObject); } function A(e) { return e < 0 ? Math.ceil(e) || 0 : Math.floor(e); } function L(e) { var t = +e, n = 0; return 0 !== t && isFinite(t) && (n = A(t)), n; } function w(e, t, n) { var r, o = Math.min(e.length, t.length), a = Math.abs(e.length - t.length), i = 0; for (r = 0; r < o; r++) ((n && e[r] !== t[r]) || (!n && L(e[r]) !== L(t[r]))) && i++; return i + a; } function T(e) { !1 === o.suppressDeprecationWarnings && "undefined" != typeof console && console.warn && console.warn("Deprecation warning: " + e); } function k(e, t) { var n = !0; return f(function () { if ((null != o.deprecationHandler && o.deprecationHandler(null, e), n)) { for (var r, a = [], i = 0; i < arguments.length; i++) { if (((r = ""), "object" == typeof arguments[i])) { for (var s in ((r += "\n[" + i + "] "), arguments[0])) r += s + ": " + arguments[0][s] + ", "; r = r.slice(0, -2); } else r = arguments[i]; a.push(r); } T(e + "\nArguments: " + Array.prototype.slice.call(a).join("") + "\n" + new Error().stack), (n = !1); } return t.apply(this, arguments); }, t); } var O, S = {}; function z(e, t) { null != o.deprecationHandler && o.deprecationHandler(e, t), S[e] || (T(t), (S[e] = !0)); } function E(e) { return e instanceof Function || "[object Function]" === Object.prototype.toString.call(e); } function x(e, t) { var n, r = f({}, e); for (n in t) d(t, n) && (i(e[n]) && i(t[n]) ? ((r[n] = {}), f(r[n], e[n]), f(r[n], t[n])) : null != t[n] ? (r[n] = t[n]) : delete r[n]); for (n in e) d(e, n) && !d(t, n) && i(e[n]) && (r[n] = f({}, r[n])); return r; } function D(e) { null != e && this.set(e); } (o.suppressDeprecationWarnings = !1), (o.deprecationHandler = null), (O = Object.keys ? Object.keys : function (e) { var t, n = []; for (t in e) d(e, t) && n.push(t); return n; }); var N = {}; function j(e, t) { var n = e.toLowerCase(); N[n] = N[n + "s"] = N[t] = e; } function C(e) { return "string" == typeof e ? N[e] || N[e.toLowerCase()] : void 0; } function P(e) { var t, n, r = {}; for (n in e) d(e, n) && (t = C(n)) && (r[t] = e[n]); return r; } var Y = {}; function W(e, t) { Y[e] = t; } function q(e, t, n) { var r = "" + Math.abs(e), o = t - r.length; return (e >= 0 ? (n ? "+" : "") : "-") + Math.pow(10, Math.max(0, o)).toString().substr(1) + r; } var B = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, R = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, F = {}, H = {}; function I(e, t, n, r) { var o = r; "string" == typeof r && (o = function () { return this[r](); }), e && (H[e] = o), t && (H[t[0]] = function () { return q(o.apply(this, arguments), t[1], t[2]); }), n && (H[n] = function () { return this.localeData().ordinal(o.apply(this, arguments), e); }); } function X(e, t) { return e.isValid() ? ((t = K(t, e.localeData())), (F[t] = F[t] || (function (e) { var t, n, r, o = e.match(B); for (t = 0, n = o.length; t < n; t++) H[o[t]] ? (o[t] = H[o[t]]) : (o[t] = (r = o[t]).match(/\[[\s\S]/) ? r.replace(/^\[|\]$/g, "") : r.replace(/\\/g, "")); return function (t) { var r, a = ""; for (r = 0; r < n; r++) a += E(o[r]) ? o[r].call(t, e) : o[r]; return a; }; })(t)), F[t](e)) : e.localeData().invalidDate(); } function K(e, t) { var n = 5; function r(e) { return t.longDateFormat(e) || e; } for (R.lastIndex = 0; n >= 0 && R.test(e); ) (e = e.replace(R, r)), (R.lastIndex = 0), (n -= 1); return e; } var U = /\d/, J = /\d\d/, V = /\d{3}/, G = /\d{4}/, $ = /[+-]?\d{6}/, Q = /\d\d?/, Z = /\d\d\d\d?/, ee = /\d\d\d\d\d\d?/, te = /\d{1,3}/, ne = /\d{1,4}/, re = /[+-]?\d{1,6}/, oe = /\d+/, ae = /[+-]?\d+/, ie = /Z|[+-]\d\d:?\d\d/gi, se = /Z|[+-]\d\d(?::?\d\d)?/gi, ue = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, ce = {}; function le(e, t, n) { ce[e] = E(t) ? t : function (e, r) { return e && n ? n : t; }; } function de(e, t) { return d(ce, e) ? ce[e](t._strict, t._locale) : new RegExp( fe( e.replace("\\", "").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (e, t, n, r, o) { return t || n || r || o; }) ) ); } function fe(e) { return e.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); } var pe = {}; function he(e, t) { var n, r = t; for ( "string" == typeof e && (e = [e]), u(t) && (r = function (e, n) { n[t] = L(e); }), n = 0; n < e.length; n++ ) pe[e[n]] = r; } function me(e, t) { he(e, function (e, n, r, o) { (r._w = r._w || {}), t(e, r._w, r, o); }); } function Me(e, t, n) { null != t && d(pe, e) && pe[e](t, n._a, n, e); } function ye(e) { return ve(e) ? 366 : 365; } function ve(e) { return (e % 4 == 0 && e % 100 != 0) || e % 400 == 0; } I("Y", 0, 0, function () { var e = this.year(); return e <= 9999 ? "" + e : "+" + e; }), I(0, ["YY", 2], 0, function () { return this.year() % 100; }), I(0, ["YYYY", 4], 0, "year"), I(0, ["YYYYY", 5], 0, "year"), I(0, ["YYYYYY", 6, !0], 0, "year"), j("year", "y"), W("year", 1), le("Y", ae), le("YY", Q, J), le("YYYY", ne, G), le("YYYYY", re, $), le("YYYYYY", re, $), he(["YYYYY", "YYYYYY"], 0), he("YYYY", function (e, t) { t[0] = 2 === e.length ? o.parseTwoDigitYear(e) : L(e); }), he("YY", function (e, t) { t[0] = o.parseTwoDigitYear(e); }), he("Y", function (e, t) { t[0] = parseInt(e, 10); }), (o.parseTwoDigitYear = function (e) { return L(e) + (L(e) > 68 ? 1900 : 2e3); }); var be, ge = _e("FullYear", !0); function _e(e, t) { return function (n) { return null != n ? (Le(this, e, n), o.updateOffset(this, t), this) : Ae(this, e); }; } function Ae(e, t) { return e.isValid() ? e._d["get" + (e._isUTC ? "UTC" : "") + t]() : NaN; } function Le(e, t, n) { e.isValid() && !isNaN(n) && ("FullYear" === t && ve(e.year()) && 1 === e.month() && 29 === e.date() ? e._d["set" + (e._isUTC ? "UTC" : "") + t](n, e.month(), we(n, e.month())) : e._d["set" + (e._isUTC ? "UTC" : "") + t](n)); } function we(e, t) { if (isNaN(e) || isNaN(t)) return NaN; var n, r = ((t % (n = 12)) + n) % n; return (e += (t - r) / 12), 1 === r ? (ve(e) ? 29 : 28) : 31 - ((r % 7) % 2); } (be = Array.prototype.indexOf ? Array.prototype.indexOf : function (e) { var t; for (t = 0; t < this.length; ++t) if (this[t] === e) return t; return -1; }), I("M", ["MM", 2], "Mo", function () { return this.month() + 1; }), I("MMM", 0, 0, function (e) { return this.localeData().monthsShort(this, e); }), I("MMMM", 0, 0, function (e) { return this.localeData().months(this, e); }), j("month", "M"), W("month", 8), le("M", Q), le("MM", Q, J), le("MMM", function (e, t) { return t.monthsShortRegex(e); }), le("MMMM", function (e, t) { return t.monthsRegex(e); }), he(["M", "MM"], function (e, t) { t[1] = L(e) - 1; }), he(["MMM", "MMMM"], function (e, t, n, r) { var o = n._locale.monthsParse(e, r, n._strict); null != o ? (t[1] = o) : (h(n).invalidMonth = e); }); var Te = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, ke = "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), Oe = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"); function Se(e, t, n) { var r, o, a, i = e.toLocaleLowerCase(); if (!this._monthsParse) for (this._monthsParse = [], this._longMonthsParse = [], this._shortMonthsParse = [], r = 0; r < 12; ++r) (a = p([2e3, r])), (this._shortMonthsParse[r] = this.monthsShort(a, "").toLocaleLowerCase()), (this._longMonthsParse[r] = this.months(a, "").toLocaleLowerCase()); return n ? "MMM" === t ? -1 !== (o = be.call(this._shortMonthsParse, i)) ? o : null : -1 !== (o = be.call(this._longMonthsParse, i)) ? o : null : "MMM" === t ? -1 !== (o = be.call(this._shortMonthsParse, i)) || -1 !== (o = be.call(this._longMonthsParse, i)) ? o : null : -1 !== (o = be.call(this._longMonthsParse, i)) || -1 !== (o = be.call(this._shortMonthsParse, i)) ? o : null; } function ze(e, t) { var n; if (!e.isValid()) return e; if ("string" == typeof t) if (/^\d+$/.test(t)) t = L(t); else if (!u((t = e.localeData().monthsParse(t)))) return e; return (n = Math.min(e.date(), we(e.year(), t))), e._d["set" + (e._isUTC ? "UTC" : "") + "Month"](t, n), e; } function Ee(e) { return null != e ? (ze(this, e), o.updateOffset(this, !0), this) : Ae(this, "Month"); } var xe = ue, De = ue; function Ne() { function e(e, t) { return t.length - e.length; } var t, n, r = [], o = [], a = []; for (t = 0; t < 12; t++) (n = p([2e3, t])), r.push(this.monthsShort(n, "")), o.push(this.months(n, "")), a.push(this.months(n, "")), a.push(this.monthsShort(n, "")); for (r.sort(e), o.sort(e), a.sort(e), t = 0; t < 12; t++) (r[t] = fe(r[t])), (o[t] = fe(o[t])); for (t = 0; t < 24; t++) a[t] = fe(a[t]); (this._monthsRegex = new RegExp("^(" + a.join("|") + ")", "i")), (this._monthsShortRegex = this._monthsRegex), (this._monthsStrictRegex = new RegExp("^(" + o.join("|") + ")", "i")), (this._monthsShortStrictRegex = new RegExp("^(" + r.join("|") + ")", "i")); } function je(e, t, n, r, o, a, i) { var s; return e < 100 && e >= 0 ? ((s = new Date(e + 400, t, n, r, o, a, i)), isFinite(s.getFullYear()) && s.setFullYear(e)) : (s = new Date(e, t, n, r, o, a, i)), s; } function Ce(e) { var t; if (e < 100 && e >= 0) { var n = Array.prototype.slice.call(arguments); (n[0] = e + 400), (t = new Date(Date.UTC.apply(null, n))), isFinite(t.getUTCFullYear()) && t.setUTCFullYear(e); } else t = new Date(Date.UTC.apply(null, arguments)); return t; } function Pe(e, t, n) { var r = 7 + t - n; return (-(7 + Ce(e, 0, r).getUTCDay() - t) % 7) + r - 1; } function Ye(e, t, n, r, o) { var a, i, s = 1 + 7 * (t - 1) + ((7 + n - r) % 7) + Pe(e, r, o); return s <= 0 ? (i = ye((a = e - 1)) + s) : s > ye(e) ? ((a = e + 1), (i = s - ye(e))) : ((a = e), (i = s)), { year: a, dayOfYear: i }; } function We(e, t, n) { var r, o, a = Pe(e.year(), t, n), i = Math.floor((e.dayOfYear() - a - 1) / 7) + 1; return i < 1 ? (r = i + qe((o = e.year() - 1), t, n)) : i > qe(e.year(), t, n) ? ((r = i - qe(e.year(), t, n)), (o = e.year() + 1)) : ((o = e.year()), (r = i)), { week: r, year: o }; } function qe(e, t, n) { var r = Pe(e, t, n), o = Pe(e + 1, t, n); return (ye(e) - r + o) / 7; } function Be(e, t) { return e.slice(t, 7).concat(e.slice(0, t)); } I("w", ["ww", 2], "wo", "week"), I("W", ["WW", 2], "Wo", "isoWeek"), j("week", "w"), j("isoWeek", "W"), W("week", 5), W("isoWeek", 5), le("w", Q), le("ww", Q, J), le("W", Q), le("WW", Q, J), me(["w", "ww", "W", "WW"], function (e, t, n, r) { t[r.substr(0, 1)] = L(e); }), I("d", 0, "do", "day"), I("dd", 0, 0, function (e) { return this.localeData().weekdaysMin(this, e); }), I("ddd", 0, 0, function (e) { return this.localeData().weekdaysShort(this, e); }), I("dddd", 0, 0, function (e) { return this.localeData().weekdays(this, e); }), I("e", 0, 0, "weekday"), I("E", 0, 0, "isoWeekday"), j("day", "d"), j("weekday", "e"), j("isoWeekday", "E"), W("day", 11), W("weekday", 11), W("isoWeekday", 11), le("d", Q), le("e", Q), le("E", Q), le("dd", function (e, t) { return t.weekdaysMinRegex(e); }), le("ddd", function (e, t) { return t.weekdaysShortRegex(e); }), le("dddd", function (e, t) { return t.weekdaysRegex(e); }), me(["dd", "ddd", "dddd"], function (e, t, n, r) { var o = n._locale.weekdaysParse(e, r, n._strict); null != o ? (t.d = o) : (h(n).invalidWeekday = e); }), me(["d", "e", "E"], function (e, t, n, r) { t[r] = L(e); }); var Re = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), Fe = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), He = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"); function Ie(e, t, n) { var r, o, a, i = e.toLocaleLowerCase(); if (!this._weekdaysParse) for (this._weekdaysParse = [], this._shortWeekdaysParse = [], this._minWeekdaysParse = [], r = 0; r < 7; ++r) (a = p([2e3, 1]).day(r)), (this._minWeekdaysParse[r] = this.weekdaysMin(a, "").toLocaleLowerCase()), (this._shortWeekdaysParse[r] = this.weekdaysShort(a, "").toLocaleLowerCase()), (this._weekdaysParse[r] = this.weekdays(a, "").toLocaleLowerCase()); return n ? "dddd" === t ? -1 !== (o = be.call(this._weekdaysParse, i)) ? o : null : "ddd" === t ? -1 !== (o = be.call(this._shortWeekdaysParse, i)) ? o : null : -1 !== (o = be.call(this._minWeekdaysParse, i)) ? o : null : "dddd" === t ? -1 !== (o = be.call(this._weekdaysParse, i)) || -1 !== (o = be.call(this._shortWeekdaysParse, i)) || -1 !== (o = be.call(this._minWeekdaysParse, i)) ? o : null : "ddd" === t ? -1 !== (o = be.call(this._shortWeekdaysParse, i)) || -1 !== (o = be.call(this._weekdaysParse, i)) || -1 !== (o = be.call(this._minWeekdaysParse, i)) ? o : null : -1 !== (o = be.call(this._minWeekdaysParse, i)) || -1 !== (o = be.call(this._weekdaysParse, i)) || -1 !== (o = be.call(this._shortWeekdaysParse, i)) ? o : null; } var Xe = ue, Ke = ue, Ue = ue; function Je() { function e(e, t) { return t.length - e.length; } var t, n, r, o, a, i = [], s = [], u = [], c = []; for (t = 0; t < 7; t++) (n = p([2e3, 1]).day(t)), (r = this.weekdaysMin(n, "")), (o = this.weekdaysShort(n, "")), (a = this.weekdays(n, "")), i.push(r), s.push(o), u.push(a), c.push(r), c.push(o), c.push(a); for (i.sort(e), s.sort(e), u.sort(e), c.sort(e), t = 0; t < 7; t++) (s[t] = fe(s[t])), (u[t] = fe(u[t])), (c[t] = fe(c[t])); (this._weekdaysRegex = new RegExp("^(" + c.join("|") + ")", "i")), (this._weekdaysShortRegex = this._weekdaysRegex), (this._weekdaysMinRegex = this._weekdaysRegex), (this._weekdaysStrictRegex = new RegExp("^(" + u.join("|") + ")", "i")), (this._weekdaysShortStrictRegex = new RegExp("^(" + s.join("|") + ")", "i")), (this._weekdaysMinStrictRegex = new RegExp("^(" + i.join("|") + ")", "i")); } function Ve() { return this.hours() % 12 || 12; } function Ge(e, t) { I(e, 0, 0, function () { return this.localeData().meridiem(this.hours(), this.minutes(), t); }); } function $e(e, t) { return t._meridiemParse; } I("H", ["HH", 2], 0, "hour"), I("h", ["hh", 2], 0, Ve), I("k", ["kk", 2], 0, function () { return this.hours() || 24; }), I("hmm", 0, 0, function () { return "" + Ve.apply(this) + q(this.minutes(), 2); }), I("hmmss", 0, 0, function () { return "" + Ve.apply(this) + q(this.minutes(), 2) + q(this.seconds(), 2); }), I("Hmm", 0, 0, function () { return "" + this.hours() + q(this.minutes(), 2); }), I("Hmmss", 0, 0, function () { return "" + this.hours() + q(this.minutes(), 2) + q(this.seconds(), 2); }), Ge("a", !0), Ge("A", !1), j("hour", "h"), W("hour", 13), le("a", $e), le("A", $e), le("H", Q), le("h", Q), le("k", Q), le("HH", Q, J), le("hh", Q, J), le("kk", Q, J), le("hmm", Z), le("hmmss", ee), le("Hmm", Z), le("Hmmss", ee), he(["H", "HH"], 3), he(["k", "kk"], function (e, t, n) { var r = L(e); t[3] = 24 === r ? 0 : r; }), he(["a", "A"], function (e, t, n) { (n._isPm = n._locale.isPM(e)), (n._meridiem = e); }), he(["h", "hh"], function (e, t, n) { (t[3] = L(e)), (h(n).bigHour = !0); }), he("hmm", function (e, t, n) { var r = e.length - 2; (t[3] = L(e.substr(0, r))), (t[4] = L(e.substr(r))), (h(n).bigHour = !0); }), he("hmmss", function (e, t, n) { var r = e.length - 4, o = e.length - 2; (t[3] = L(e.substr(0, r))), (t[4] = L(e.substr(r, 2))), (t[5] = L(e.substr(o))), (h(n).bigHour = !0); }), he("Hmm", function (e, t, n) { var r = e.length - 2; (t[3] = L(e.substr(0, r))), (t[4] = L(e.substr(r))); }), he("Hmmss", function (e, t, n) { var r = e.length - 4, o = e.length - 2; (t[3] = L(e.substr(0, r))), (t[4] = L(e.substr(r, 2))), (t[5] = L(e.substr(o))); }); var Qe, Ze = _e("Hours", !0), et = { calendar: { sameDay: "[Today at] LT", nextDay: "[Tomorrow at] LT", nextWeek: "dddd [at] LT", lastDay: "[Yesterday at] LT", lastWeek: "[Last] dddd [at] LT", sameElse: "L" }, longDateFormat: { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }, invalidDate: "Invalid date", ordinal: "%d", dayOfMonthOrdinalParse: /\d{1,2}/, relativeTime: { future: "in %s", past: "%s ago", s: "a few seconds", ss: "%d seconds", m: "a minute", mm: "%d minutes", h: "an hour", hh: "%d hours", d: "a day", dd: "%d days", M: "a month", MM: "%d months", y: "a year", yy: "%d years", }, months: ke, monthsShort: Oe, week: { dow: 0, doy: 6 }, weekdays: Re, weekdaysMin: He, weekdaysShort: Fe, meridiemParse: /[ap]\.?m?\.?/i, }, tt = {}, nt = {}; function rt(e) { return e ? e.toLowerCase().replace("_", "-") : e; } function ot(t) { var r = null; if (!tt[t] && void 0 !== e && e && e.exports) try { (r = Qe._abbr), n(643)("./" + t), at(r); } catch (e) {} return tt[t]; } function at(e, t) { var n; return e && ((n = s(t) ? st(e) : it(e, t)) ? (Qe = n) : "undefined" != typeof console && console.warn && console.warn("Locale " + e + " not found. Did you forget to load it?")), Qe._abbr; } function it(e, t) { if (null !== t) { var n, r = et; if (((t.abbr = e), null != tt[e])) z( "defineLocaleOverride", "use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info." ), (r = tt[e]._config); else if (null != t.parentLocale) if (null != tt[t.parentLocale]) r = tt[t.parentLocale]._config; else { if (null == (n = ot(t.parentLocale))) return nt[t.parentLocale] || (nt[t.parentLocale] = []), nt[t.parentLocale].push({ name: e, config: t }), null; r = n._config; } return ( (tt[e] = new D(x(r, t))), nt[e] && nt[e].forEach(function (e) { it(e.name, e.config); }), at(e), tt[e] ); } return delete tt[e], null; } function st(e) { var t; if ((e && e._locale && e._locale._abbr && (e = e._locale._abbr), !e)) return Qe; if (!a(e)) { if ((t = ot(e))) return t; e = [e]; } return (function (e) { for (var t, n, r, o, a = 0; a < e.length; ) { for (t = (o = rt(e[a]).split("-")).length, n = (n = rt(e[a + 1])) ? n.split("-") : null; t > 0; ) { if ((r = ot(o.slice(0, t).join("-")))) return r; if (n && n.length >= t && w(o, n, !0) >= t - 1) break; t--; } a++; } return Qe; })(e); } function ut(e) { var t, n = e._a; return ( n && -2 === h(e).overflow && ((t = n[1] < 0 || n[1] > 11 ? 1 : n[2] < 1 || n[2] > we(n[0], n[1]) ? 2 : n[3] < 0 || n[3] > 24 || (24 === n[3] && (0 !== n[4] || 0 !== n[5] || 0 !== n[6])) ? 3 : n[4] < 0 || n[4] > 59 ? 4 : n[5] < 0 || n[5] > 59 ? 5 : n[6] < 0 || n[6] > 999 ? 6 : -1), h(e)._overflowDayOfYear && (t < 0 || t > 2) && (t = 2), h(e)._overflowWeeks && -1 === t && (t = 7), h(e)._overflowWeekday && -1 === t && (t = 8), (h(e).overflow = t)), e ); } function ct(e, t, n) { return null != e ? e : null != t ? t : n; } function lt(e) { var t, n, r, a, i, s = []; if (!e._d) { for ( r = (function (e) { var t = new Date(o.now()); return e._useUTC ? [t.getUTCFullYear(), t.getUTCMonth(), t.getUTCDate()] : [t.getFullYear(), t.getMonth(), t.getDate()]; })(e), e._w && null == e._a[2] && null == e._a[1] && (function (e) { var t, n, r, o, a, i, s, u; if (null != (t = e._w).GG || null != t.W || null != t.E) (a = 1), (i = 4), (n = ct(t.GG, e._a[0], We(Tt(), 1, 4).year)), (r = ct(t.W, 1)), ((o = ct(t.E, 1)) < 1 || o > 7) && (u = !0); else { (a = e._locale._week.dow), (i = e._locale._week.doy); var c = We(Tt(), a, i); (n = ct(t.gg, e._a[0], c.year)), (r = ct(t.w, c.week)), null != t.d ? ((o = t.d) < 0 || o > 6) && (u = !0) : null != t.e ? ((o = t.e + a), (t.e < 0 || t.e > 6) && (u = !0)) : (o = a); } r < 1 || r > qe(n, a, i) ? (h(e)._overflowWeeks = !0) : null != u ? (h(e)._overflowWeekday = !0) : ((s = Ye(n, r, o, a, i)), (e._a[0] = s.year), (e._dayOfYear = s.dayOfYear)); })(e), null != e._dayOfYear && ((i = ct(e._a[0], r[0])), (e._dayOfYear > ye(i) || 0 === e._dayOfYear) && (h(e)._overflowDayOfYear = !0), (n = Ce(i, 0, e._dayOfYear)), (e._a[1] = n.getUTCMonth()), (e._a[2] = n.getUTCDate())), t = 0; t < 3 && null == e._a[t]; ++t ) e._a[t] = s[t] = r[t]; for (; t < 7; t++) e._a[t] = s[t] = null == e._a[t] ? (2 === t ? 1 : 0) : e._a[t]; 24 === e._a[3] && 0 === e._a[4] && 0 === e._a[5] && 0 === e._a[6] && ((e._nextDay = !0), (e._a[3] = 0)), (e._d = (e._useUTC ? Ce : je).apply(null, s)), (a = e._useUTC ? e._d.getUTCDay() : e._d.getDay()), null != e._tzm && e._d.setUTCMinutes(e._d.getUTCMinutes() - e._tzm), e._nextDay && (e._a[3] = 24), e._w && void 0 !== e._w.d && e._w.d !== a && (h(e).weekdayMismatch = !0); } } var dt = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, ft = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, pt = /Z|[+-]\d\d(?::?\d\d)?/, ht = [ ["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/], ["YYYY-MM-DD", /\d{4}-\d\d-\d\d/], ["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/], ["GGGG-[W]WW", /\d{4}-W\d\d/, !1], ["YYYY-DDD", /\d{4}-\d{3}/], ["YYYY-MM", /\d{4}-\d\d/, !1], ["YYYYYYMMDD", /[+-]\d{10}/], ["YYYYMMDD", /\d{8}/], ["GGGG[W]WWE", /\d{4}W\d{3}/], ["GGGG[W]WW", /\d{4}W\d{2}/, !1], ["YYYYDDD", /\d{7}/], ], mt = [ ["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/], ["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/], ["HH:mm:ss", /\d\d:\d\d:\d\d/], ["HH:mm", /\d\d:\d\d/], ["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/], ["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/], ["HHmmss", /\d\d\d\d\d\d/], ["HHmm", /\d\d\d\d/], ["HH", /\d\d/], ], Mt = /^\/?Date\((\-?\d+)/i; function yt(e) { var t, n, r, o, a, i, s = e._i, u = dt.exec(s) || ft.exec(s); if (u) { for (h(e).iso = !0, t = 0, n = ht.length; t < n; t++) if (ht[t][1].exec(u[1])) { (o = ht[t][0]), (r = !1 !== ht[t][2]); break; } if (null == o) return void (e._isValid = !1); if (u[3]) { for (t = 0, n = mt.length; t < n; t++) if (mt[t][1].exec(u[3])) { a = (u[2] || " ") + mt[t][0]; break; } if (null == a) return void (e._isValid = !1); } if (!r && null != a) return void (e._isValid = !1); if (u[4]) { if (!pt.exec(u[4])) return void (e._isValid = !1); i = "Z"; } (e._f = o + (a || "") + (i || "")), At(e); } else e._isValid = !1; } var vt = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/; function bt(e) { var t = parseInt(e, 10); return t <= 49 ? 2e3 + t : t <= 999 ? 1900 + t : t; } var gt = { UT: 0, GMT: 0, EDT: -240, EST: -300, CDT: -300, CST: -360, MDT: -360, MST: -420, PDT: -420, PST: -480 }; function _t(e) { var t, n, r, o, a, i, s, u = vt.exec( e._i .replace(/\([^)]*\)|[\n\t]/g, " ") .replace(/(\s\s+)/g, " ") .replace(/^\s\s*/, "") .replace(/\s\s*$/, "") ); if (u) { var c = ((t = u[4]), (n = u[3]), (r = u[2]), (o = u[5]), (a = u[6]), (i = u[7]), (s = [bt(t), Oe.indexOf(n), parseInt(r, 10), parseInt(o, 10), parseInt(a, 10)]), i && s.push(parseInt(i, 10)), s); if ( !(function (e, t, n) { return !e || Fe.indexOf(e) === new Date(t[0], t[1], t[2]).getDay() || ((h(n).weekdayMismatch = !0), (n._isValid = !1), !1); })(u[1], c, e) ) return; (e._a = c), (e._tzm = (function (e, t, n) { if (e) return gt[e]; if (t) return 0; var r = parseInt(n, 10), o = r % 100; return ((r - o) / 100) * 60 + o; })(u[8], u[9], u[10])), (e._d = Ce.apply(null, e._a)), e._d.setUTCMinutes(e._d.getUTCMinutes() - e._tzm), (h(e).rfc2822 = !0); } else e._isValid = !1; } function At(e) { if (e._f !== o.ISO_8601) if (e._f !== o.RFC_2822) { (e._a = []), (h(e).empty = !0); var t, n, r, a, i, s = "" + e._i, u = s.length, c = 0; for (r = K(e._f, e._locale).match(B) || [], t = 0; t < r.length; t++) (a = r[t]), (n = (s.match(de(a, e)) || [])[0]) && ((i = s.substr(0, s.indexOf(n))).length > 0 && h(e).unusedInput.push(i), (s = s.slice(s.indexOf(n) + n.length)), (c += n.length)), H[a] ? (n ? (h(e).empty = !1) : h(e).unusedTokens.push(a), Me(a, n, e)) : e._strict && !n && h(e).unusedTokens.push(a); (h(e).charsLeftOver = u - c), s.length > 0 && h(e).unusedInput.push(s), e._a[3] <= 12 && !0 === h(e).bigHour && e._a[3] > 0 && (h(e).bigHour = void 0), (h(e).parsedDateParts = e._a.slice(0)), (h(e).meridiem = e._meridiem), (e._a[3] = (function (e, t, n) { var r; return null == n ? t : null != e.meridiemHour ? e.meridiemHour(t, n) : null != e.isPM ? ((r = e.isPM(n)) && t < 12 && (t += 12), r || 12 !== t || (t = 0), t) : t; })(e._locale, e._a[3], e._meridiem)), lt(e), ut(e); } else _t(e); else yt(e); } function Lt(e) { var t = e._i, n = e._f; return ( (e._locale = e._locale || st(e._l)), null === t || (void 0 === n && "" === t) ? M({ nullInput: !0 }) : ("string" == typeof t && (e._i = t = e._locale.preparse(t)), _(t) ? new g(ut(t)) : (c(t) ? (e._d = t) : a(n) ? (function (e) { var t, n, r, o, a; if (0 === e._f.length) return (h(e).invalidFormat = !0), void (e._d = new Date(NaN)); for (o = 0; o < e._f.length; o++) (a = 0), (t = v({}, e)), null != e._useUTC && (t._useUTC = e._useUTC), (t._f = e._f[o]), At(t), m(t) && ((a += h(t).charsLeftOver), (a += 10 * h(t).unusedTokens.length), (h(t).score = a), (null == r || a < r) && ((r = a), (n = t))); f(e, n || t); })(e) : n ? At(e) : (function (e) { var t = e._i; s(t) ? (e._d = new Date(o.now())) : c(t) ? (e._d = new Date(t.valueOf())) : "string" == typeof t ? (function (e) { var t = Mt.exec(e._i); null === t ? (yt(e), !1 === e._isValid && (delete e._isValid, _t(e), !1 === e._isValid && (delete e._isValid, o.createFromInputFallback(e)))) : (e._d = new Date(+t[1])); })(e) : a(t) ? ((e._a = l(t.slice(0), function (e) { return parseInt(e, 10); })), lt(e)) : i(t) ? (function (e) { if (!e._d) { var t = P(e._i); (e._a = l([t.year, t.month, t.day || t.date, t.hour, t.minute, t.second, t.millisecond], function (e) { return e && parseInt(e, 10); })), lt(e); } })(e) : u(t) ? (e._d = new Date(t)) : o.createFromInputFallback(e); })(e), m(e) || (e._d = null), e)) ); } function wt(e, t, n, r, o) { var s, u = {}; return ( (!0 !== n && !1 !== n) || ((r = n), (n = void 0)), ((i(e) && (function (e) { if (Object.getOwnPropertyNames) return 0 === Object.getOwnPropertyNames(e).length; var t; for (t in e) if (e.hasOwnProperty(t)) return !1; return !0; })(e)) || (a(e) && 0 === e.length)) && (e = void 0), (u._isAMomentObject = !0), (u._useUTC = u._isUTC = o), (u._l = n), (u._i = e), (u._f = t), (u._strict = r), (s = new g(ut(Lt(u))))._nextDay && (s.add(1, "d"), (s._nextDay = void 0)), s ); } function Tt(e, t, n, r) { return wt(e, t, n, r, !1); } (o.createFromInputFallback = k( "value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.", function (e) { e._d = new Date(e._i + (e._useUTC ? " UTC" : "")); } )), (o.ISO_8601 = function () {}), (o.RFC_2822 = function () {}); var kt = k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/", function () { var e = Tt.apply(null, arguments); return this.isValid() && e.isValid() ? (e < this ? this : e) : M(); }), Ot = k("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/", function () { var e = Tt.apply(null, arguments); return this.isValid() && e.isValid() ? (e > this ? this : e) : M(); }); function St(e, t) { var n, r; if ((1 === t.length && a(t[0]) && (t = t[0]), !t.length)) return Tt(); for (n = t[0], r = 1; r < t.length; ++r) (t[r].isValid() && !t[r][e](n)) || (n = t[r]); return n; } var zt = ["year", "quarter", "month", "week", "day", "hour", "minute", "second", "millisecond"]; function Et(e) { var t = P(e), n = t.year || 0, r = t.quarter || 0, o = t.month || 0, a = t.week || t.isoWeek || 0, i = t.day || 0, s = t.hour || 0, u = t.minute || 0, c = t.second || 0, l = t.millisecond || 0; (this._isValid = (function (e) { for (var t in e) if (-1 === be.call(zt, t) || (null != e[t] && isNaN(e[t]))) return !1; for (var n = !1, r = 0; r < zt.length; ++r) if (e[zt[r]]) { if (n) return !1; parseFloat(e[zt[r]]) !== L(e[zt[r]]) && (n = !0); } return !0; })(t)), (this._milliseconds = +l + 1e3 * c + 6e4 * u + 1e3 * s * 60 * 60), (this._days = +i + 7 * a), (this._months = +o + 3 * r + 12 * n), (this._data = {}), (this._locale = st()), this._bubble(); } function xt(e) { return e instanceof Et; } function Dt(e) { return e < 0 ? -1 * Math.round(-1 * e) : Math.round(e); } function Nt(e, t) { I(e, 0, 0, function () { var e = this.utcOffset(), n = "+"; return e < 0 && ((e = -e), (n = "-")), n + q(~~(e / 60), 2) + t + q(~~e % 60, 2); }); } Nt("Z", ":"), Nt("ZZ", ""), le("Z", se), le("ZZ", se), he(["Z", "ZZ"], function (e, t, n) { (n._useUTC = !0), (n._tzm = Ct(se, e)); }); var jt = /([\+\-]|\d\d)/gi; function Ct(e, t) { var n = (t || "").match(e); if (null === n) return null; var r = ((n[n.length - 1] || []) + "").match(jt) || ["-", 0, 0], o = 60 * r[1] + L(r[2]); return 0 === o ? 0 : "+" === r[0] ? o : -o; } function Pt(e, t) { var n, r; return t._isUTC ? ((n = t.clone()), (r = (_(e) || c(e) ? e.valueOf() : Tt(e).valueOf()) - n.valueOf()), n._d.setTime(n._d.valueOf() + r), o.updateOffset(n, !1), n) : Tt(e).local(); } function Yt(e) { return 15 * -Math.round(e._d.getTimezoneOffset() / 15); } function Wt() { return !!this.isValid() && this._isUTC && 0 === this._offset; } o.updateOffset = function () {}; var qt = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/, Bt = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; function Rt(e, t) { var n, r, o, a, i, s, c = e, l = null; return ( xt(e) ? (c = { ms: e._milliseconds, d: e._days, M: e._months }) : u(e) ? ((c = {}), t ? (c[t] = e) : (c.milliseconds = e)) : (l = qt.exec(e)) ? ((n = "-" === l[1] ? -1 : 1), (c = { y: 0, d: L(l[2]) * n, h: L(l[3]) * n, m: L(l[4]) * n, s: L(l[5]) * n, ms: L(Dt(1e3 * l[6])) * n })) : (l = Bt.exec(e)) ? ((n = "-" === l[1] ? -1 : 1), (c = { y: Ft(l[2], n), M: Ft(l[3], n), w: Ft(l[4], n), d: Ft(l[5], n), h: Ft(l[6], n), m: Ft(l[7], n), s: Ft(l[8], n) })) : null == c ? (c = {}) : "object" == typeof c && ("from" in c || "to" in c) && ((a = Tt(c.from)), (i = Tt(c.to)), (o = a.isValid() && i.isValid() ? ((i = Pt(i, a)), a.isBefore(i) ? (s = Ht(a, i)) : (((s = Ht(i, a)).milliseconds = -s.milliseconds), (s.months = -s.months)), s) : { milliseconds: 0, months: 0 }), ((c = {}).ms = o.milliseconds), (c.M = o.months)), (r = new Et(c)), xt(e) && d(e, "_locale") && (r._locale = e._locale), r ); } function Ft(e, t) { var n = e && parseFloat(e.replace(",", ".")); return (isNaN(n) ? 0 : n) * t; } function Ht(e, t) { var n = {}; return (n.months = t.month() - e.month() + 12 * (t.year() - e.year())), e.clone().add(n.months, "M").isAfter(t) && --n.months, (n.milliseconds = +t - +e.clone().add(n.months, "M")), n; } function It(e, t) { return function (n, r) { var o; return ( null === r || isNaN(+r) || (z(t, "moment()." + t + "(period, number) is deprecated. Please use moment()." + t + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."), (o = n), (n = r), (r = o)), Xt(this, Rt((n = "string" == typeof n ? +n : n), r), e), this ); }; } function Xt(e, t, n, r) { var a = t._milliseconds, i = Dt(t._days), s = Dt(t._months); e.isValid() && ((r = null == r || r), s && ze(e, Ae(e, "Month") + s * n), i && Le(e, "Date", Ae(e, "Date") + i * n), a && e._d.setTime(e._d.valueOf() + a * n), r && o.updateOffset(e, i || s)); } (Rt.fn = Et.prototype), (Rt.invalid = function () { return Rt(NaN); }); var Kt = It(1, "add"), Ut = It(-1, "subtract"); function Jt(e, t) { var n = 12 * (t.year() - e.year()) + (t.month() - e.month()), r = e.clone().add(n, "months"); return -(n + (t - r < 0 ? (t - r) / (r - e.clone().add(n - 1, "months")) : (t - r) / (e.clone().add(n + 1, "months") - r))) || 0; } function Vt(e) { var t; return void 0 === e ? this._locale._abbr : (null != (t = st(e)) && (this._locale = t), this); } (o.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ"), (o.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]"); var Gt = k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.", function (e) { return void 0 === e ? this.localeData() : this.locale(e); }); function $t() { return this._locale; } function Qt(e, t) { return ((e % t) + t) % t; } function Zt(e, t, n) { return e < 100 && e >= 0 ? new Date(e + 400, t, n) - 126227808e5 : new Date(e, t, n).valueOf(); } function en(e, t, n) { return e < 100 && e >= 0 ? Date.UTC(e + 400, t, n) - 126227808e5 : Date.UTC(e, t, n); } function tn(e, t) { I(0, [e, e.length], 0, t); } function nn(e, t, n, r, o) { var a; return null == e ? We(this, r, o).year : (t > (a = qe(e, r, o)) && (t = a), rn.call(this, e, t, n, r, o)); } function rn(e, t, n, r, o) { var a = Ye(e, t, n, r, o), i = Ce(a.year, 0, a.dayOfYear); return this.year(i.getUTCFullYear()), this.month(i.getUTCMonth()), this.date(i.getUTCDate()), this; } I(0, ["gg", 2], 0, function () { return this.weekYear() % 100; }), I(0, ["GG", 2], 0, function () { return this.isoWeekYear() % 100; }), tn("gggg", "weekYear"), tn("ggggg", "weekYear"), tn("GGGG", "isoWeekYear"), tn("GGGGG", "isoWeekYear"), j("weekYear", "gg"), j("isoWeekYear", "GG"), W("weekYear", 1), W("isoWeekYear", 1), le("G", ae), le("g", ae), le("GG", Q, J), le("gg", Q, J), le("GGGG", ne, G), le("gggg", ne, G), le("GGGGG", re, $), le("ggggg", re, $), me(["gggg", "ggggg", "GGGG", "GGGGG"], function (e, t, n, r) { t[r.substr(0, 2)] = L(e); }), me(["gg", "GG"], function (e, t, n, r) { t[r] = o.parseTwoDigitYear(e); }), I("Q", 0, "Qo", "quarter"), j("quarter", "Q"), W("quarter", 7), le("Q", U), he("Q", function (e, t) { t[1] = 3 * (L(e) - 1); }), I("D", ["DD", 2], "Do", "date"), j("date", "D"), W("date", 9), le("D", Q), le("DD", Q, J), le("Do", function (e, t) { return e ? t._dayOfMonthOrdinalParse || t._ordinalParse : t._dayOfMonthOrdinalParseLenient; }), he(["D", "DD"], 2), he("Do", function (e, t) { t[2] = L(e.match(Q)[0]); }); var on = _e("Date", !0); I("DDD", ["DDDD", 3], "DDDo", "dayOfYear"), j("dayOfYear", "DDD"), W("dayOfYear", 4), le("DDD", te), le("DDDD", V), he(["DDD", "DDDD"], function (e, t, n) { n._dayOfYear = L(e); }), I("m", ["mm", 2], 0, "minute"), j("minute", "m"), W("minute", 14), le("m", Q), le("mm", Q, J), he(["m", "mm"], 4); var an = _e("Minutes", !1); I("s", ["ss", 2], 0, "second"), j("second", "s"), W("second", 15), le("s", Q), le("ss", Q, J), he(["s", "ss"], 5); var sn, un = _e("Seconds", !1); for ( I("S", 0, 0, function () { return ~~(this.millisecond() / 100); }), I(0, ["SS", 2], 0, function () { return ~~(this.millisecond() / 10); }), I(0, ["SSS", 3], 0, "millisecond"), I(0, ["SSSS", 4], 0, function () { return 10 * this.millisecond(); }), I(0, ["SSSSS", 5], 0, function () { return 100 * this.millisecond(); }), I(0, ["SSSSSS", 6], 0, function () { return 1e3 * this.millisecond(); }), I(0, ["SSSSSSS", 7], 0, function () { return 1e4 * this.millisecond(); }), I(0, ["SSSSSSSS", 8], 0, function () { return 1e5 * this.millisecond(); }), I(0, ["SSSSSSSSS", 9], 0, function () { return 1e6 * this.millisecond(); }), j("millisecond", "ms"), W("millisecond", 16), le("S", te, U), le("SS", te, J), le("SSS", te, V), sn = "SSSS"; sn.length <= 9; sn += "S" ) le(sn, oe); function cn(e, t) { t[6] = L(1e3 * ("0." + e)); } for (sn = "S"; sn.length <= 9; sn += "S") he(sn, cn); var ln = _e("Milliseconds", !1); I("z", 0, 0, "zoneAbbr"), I("zz", 0, 0, "zoneName"); var dn = g.prototype; function fn(e) { return e; } (dn.add = Kt), (dn.calendar = function (e, t) { var n = e || Tt(), r = Pt(n, this).startOf("day"), a = o.calendarFormat(this, r) || "sameElse", i = t && (E(t[a]) ? t[a].call(this, n) : t[a]); return this.format(i || this.localeData().calendar(a, this, Tt(n))); }), (dn.clone = function () { return new g(this); }), (dn.diff = function (e, t, n) { var r, o, a; if (!this.isValid()) return NaN; if (!(r = Pt(e, this)).isValid()) return NaN; switch (((o = 6e4 * (r.utcOffset() - this.utcOffset())), (t = C(t)))) { case "year": a = Jt(this, r) / 12; break; case "month": a = Jt(this, r); break; case "quarter": a = Jt(this, r) / 3; break; case "second": a = (this - r) / 1e3; break; case "minute": a = (this - r) / 6e4; break; case "hour": a = (this - r) / 36e5; break; case "day": a = (this - r - o) / 864e5; break; case "week": a = (this - r - o) / 6048e5; break; default: a = this - r; } return n ? a : A(a); }), (dn.endOf = function (e) { var t; if (void 0 === (e = C(e)) || "millisecond" === e || !this.isValid()) return this; var n = this._isUTC ? en : Zt; switch (e) { case "year": t = n(this.year() + 1, 0, 1) - 1; break; case "quarter": t = n(this.year(), this.month() - (this.month() % 3) + 3, 1) - 1; break; case "month": t = n(this.year(), this.month() + 1, 1) - 1; break; case "week": t = n(this.year(), this.month(), this.date() - this.weekday() + 7) - 1; break; case "isoWeek": t = n(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1; break; case "day": case "date": t = n(this.year(), this.month(), this.date() + 1) - 1; break; case "hour": (t = this._d.valueOf()), (t += 36e5 - Qt(t + (this._isUTC ? 0 : 6e4 * this.utcOffset()), 36e5) - 1); break; case "minute": (t = this._d.valueOf()), (t += 6e4 - Qt(t, 6e4) - 1); break; case "second": (t = this._d.valueOf()), (t += 1e3 - Qt(t, 1e3) - 1); } return this._d.setTime(t), o.updateOffset(this, !0), this; }), (dn.format = function (e) { e || (e = this.isUtc() ? o.defaultFormatUtc : o.defaultFormat); var t = X(this, e); return this.localeData().postformat(t); }), (dn.from = function (e, t) { return this.isValid() && ((_(e) && e.isValid()) || Tt(e).isValid()) ? Rt({ to: this, from: e }).locale(this.locale()).humanize(!t) : this.localeData().invalidDate(); }), (dn.fromNow = function (e) { return this.from(Tt(), e); }), (dn.to = function (e, t) { return this.isValid() && ((_(e) && e.isValid()) || Tt(e).isValid()) ? Rt({ from: this, to: e }).locale(this.locale()).humanize(!t) : this.localeData().invalidDate(); }), (dn.toNow = function (e) { return this.to(Tt(), e); }), (dn.get = function (e) { return E(this[(e = C(e))]) ? this[e]() : this; }), (dn.invalidAt = function () { return h(this).overflow; }), (dn.isAfter = function (e, t) { var n = _(e) ? e : Tt(e); return !(!this.isValid() || !n.isValid()) && ("millisecond" === (t = C(t) || "millisecond") ? this.valueOf() > n.valueOf() : n.valueOf() < this.clone().startOf(t).valueOf()); }), (dn.isBefore = function (e, t) { var n = _(e) ? e : Tt(e); return !(!this.isValid() || !n.isValid()) && ("millisecond" === (t = C(t) || "millisecond") ? this.valueOf() < n.valueOf() : this.clone().endOf(t).valueOf() < n.valueOf()); }), (dn.isBetween = function (e, t, n, r) { var o = _(e) ? e : Tt(e), a = _(t) ? t : Tt(t); return !!(this.isValid() && o.isValid() && a.isValid()) && ("(" === (r = r || "()")[0] ? this.isAfter(o, n) : !this.isBefore(o, n)) && (")" === r[1] ? this.isBefore(a, n) : !this.isAfter(a, n)); }), (dn.isSame = function (e, t) { var n, r = _(e) ? e : Tt(e); return ( !(!this.isValid() || !r.isValid()) && ("millisecond" === (t = C(t) || "millisecond") ? this.valueOf() === r.valueOf() : ((n = r.valueOf()), this.clone().startOf(t).valueOf() <= n && n <= this.clone().endOf(t).valueOf())) ); }), (dn.isSameOrAfter = function (e, t) { return this.isSame(e, t) || this.isAfter(e, t); }), (dn.isSameOrBefore = function (e, t) { return this.isSame(e, t) || this.isBefore(e, t); }), (dn.isValid = function () { return m(this); }), (dn.lang = Gt), (dn.locale = Vt), (dn.localeData = $t), (dn.max = Ot), (dn.min = kt), (dn.parsingFlags = function () { return f({}, h(this)); }), (dn.set = function (e, t) { if ("object" == typeof e) for ( var n = (function (e) { var t = []; for (var n in e) t.push({ unit: n, priority: Y[n] }); return ( t.sort(function (e, t) { return e.priority - t.priority; }), t ); })((e = P(e))), r = 0; r < n.length; r++ ) this[n[r].unit](e[n[r].unit]); else if (E(this[(e = C(e))])) return this[e](t); return this; }), (dn.startOf = function (e) { var t; if (void 0 === (e = C(e)) || "millisecond" === e || !this.isValid()) return this; var n = this._isUTC ? en : Zt; switch (e) { case "year": t = n(this.year(), 0, 1); break; case "quarter": t = n(this.year(), this.month() - (this.month() % 3), 1); break; case "month": t = n(this.year(), this.month(), 1); break; case "week": t = n(this.year(), this.month(), this.date() - this.weekday()); break; case "isoWeek": t = n(this.year(), this.month(), this.date() - (this.isoWeekday() - 1)); break; case "day": case "date": t = n(this.year(), this.month(), this.date()); break; case "hour": (t = this._d.valueOf()), (t -= Qt(t + (this._isUTC ? 0 : 6e4 * this.utcOffset()), 36e5)); break; case "minute": (t = this._d.valueOf()), (t -= Qt(t, 6e4)); break; case "second": (t = this._d.valueOf()), (t -= Qt(t, 1e3)); } return this._d.setTime(t), o.updateOffset(this, !0), this; }), (dn.subtract = Ut), (dn.toArray = function () { var e = this; return [e.year(), e.month(), e.date(), e.hour(), e.minute(), e.second(), e.millisecond()]; }), (dn.toObject = function () { var e = this; return { years: e.year(), months: e.month(), date: e.date(), hours: e.hours(), minutes: e.minutes(), seconds: e.seconds(), milliseconds: e.milliseconds() }; }), (dn.toDate = function () { return new Date(this.valueOf()); }), (dn.toISOString = function (e) { if (!this.isValid()) return null; var t = !0 !== e, n = t ? this.clone().utc() : this; return n.year() < 0 || n.year() > 9999 ? X(n, t ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ") : E(Date.prototype.toISOString) ? t ? this.toDate().toISOString() : new Date(this.valueOf() + 60 * this.utcOffset() * 1e3).toISOString().replace("Z", X(n, "Z")) : X(n, t ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ"); }), (dn.inspect = function () { if (!this.isValid()) return "moment.invalid(/* " + this._i + " */)"; var e = "moment", t = ""; this.isLocal() || ((e = 0 === this.utcOffset() ? "moment.utc" : "moment.parseZone"), (t = "Z")); var n = "[" + e + '("]', r = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY", o = t + '[")]'; return this.format(n + r + "-MM-DD[T]HH:mm:ss.SSS" + o); }), (dn.toJSON = function () { return this.isValid() ? this.toISOString() : null; }), (dn.toString = function () { return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); }), (dn.unix = function () { return Math.floor(this.valueOf() / 1e3); }), (dn.valueOf = function () { return this._d.valueOf() - 6e4 * (this._offset || 0); }), (dn.creationData = function () { return { input: this._i, format: this._f, locale: this._locale, isUTC: this._isUTC, strict: this._strict }; }), (dn.year = ge), (dn.isLeapYear = function () { return ve(this.year()); }), (dn.weekYear = function (e) { return nn.call(this, e, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy); }), (dn.isoWeekYear = function (e) { return nn.call(this, e, this.isoWeek(), this.isoWeekday(), 1, 4); }), (dn.quarter = dn.quarters = function (e) { return null == e ? Math.ceil((this.month() + 1) / 3) : this.month(3 * (e - 1) + (this.month() % 3)); }), (dn.month = Ee), (dn.daysInMonth = function () { return we(this.year(), this.month()); }), (dn.week = dn.weeks = function (e) { var t = this.localeData().week(this); return null == e ? t : this.add(7 * (e - t), "d"); }), (dn.isoWeek = dn.isoWeeks = function (e) { var t = We(this, 1, 4).week; return null == e ? t : this.add(7 * (e - t), "d"); }), (dn.weeksInYear = function () { var e = this.localeData()._week; return qe(this.year(), e.dow, e.doy); }), (dn.isoWeeksInYear = function () { return qe(this.year(), 1, 4); }), (dn.date = on), (dn.day = dn.days = function (e) { if (!this.isValid()) return null != e ? this : NaN; var t = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); return null != e ? ((e = (function (e, t) { return "string" != typeof e ? e : isNaN(e) ? ("number" == typeof (e = t.weekdaysParse(e)) ? e : null) : parseInt(e, 10); })(e, this.localeData())), this.add(e - t, "d")) : t; }), (dn.weekday = function (e) { if (!this.isValid()) return null != e ? this : NaN; var t = (this.day() + 7 - this.localeData()._week.dow) % 7; return null == e ? t : this.add(e - t, "d"); }), (dn.isoWeekday = function (e) { if (!this.isValid()) return null != e ? this : NaN; if (null != e) { var t = (function (e, t) { return "string" == typeof e ? t.weekdaysParse(e) % 7 || 7 : isNaN(e) ? null : e; })(e, this.localeData()); return this.day(this.day() % 7 ? t : t - 7); } return this.day() || 7; }), (dn.dayOfYear = function (e) { var t = Math.round((this.clone().startOf("day") - this.clone().startOf("year")) / 864e5) + 1; return null == e ? t : this.add(e - t, "d"); }), (dn.hour = dn.hours = Ze), (dn.minute = dn.minutes = an), (dn.second = dn.seconds = un), (dn.millisecond = dn.milliseconds = ln), (dn.utcOffset = function (e, t, n) { var r, a = this._offset || 0; if (!this.isValid()) return null != e ? this : NaN; if (null != e) { if ("string" == typeof e) { if (null === (e = Ct(se, e))) return this; } else Math.abs(e) < 16 && !n && (e *= 60); return ( !this._isUTC && t && (r = Yt(this)), (this._offset = e), (this._isUTC = !0), null != r && this.add(r, "m"), a !== e && (!t || this._changeInProgress ? Xt(this, Rt(e - a, "m"), 1, !1) : this._changeInProgress || ((this._changeInProgress = !0), o.updateOffset(this, !0), (this._changeInProgress = null))), this ); } return this._isUTC ? a : Yt(this); }), (dn.utc = function (e) { return this.utcOffset(0, e); }), (dn.local = function (e) { return this._isUTC && (this.utcOffset(0, e), (this._isUTC = !1), e && this.subtract(Yt(this), "m")), this; }), (dn.parseZone = function () { if (null != this._tzm) this.utcOffset(this._tzm, !1, !0); else if ("string" == typeof this._i) { var e = Ct(ie, this._i); null != e ? this.utcOffset(e) : this.utcOffset(0, !0); } return this; }), (dn.hasAlignedHourOffset = function (e) { return !!this.isValid() && ((e = e ? Tt(e).utcOffset() : 0), (this.utcOffset() - e) % 60 == 0); }), (dn.isDST = function () { return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset(); }), (dn.isLocal = function () { return !!this.isValid() && !this._isUTC; }), (dn.isUtcOffset = function () { return !!this.isValid() && this._isUTC; }), (dn.isUtc = Wt), (dn.isUTC = Wt), (dn.zoneAbbr = function () { return this._isUTC ? "UTC" : ""; }), (dn.zoneName = function () { return this._isUTC ? "Coordinated Universal Time" : ""; }), (dn.dates = k("dates accessor is deprecated. Use date instead.", on)), (dn.months = k("months accessor is deprecated. Use month instead", Ee)), (dn.years = k("years accessor is deprecated. Use year instead", ge)), (dn.zone = k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/", function (e, t) { return null != e ? ("string" != typeof e && (e = -e), this.utcOffset(e, t), this) : -this.utcOffset(); })), (dn.isDSTShifted = k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information", function () { if (!s(this._isDSTShifted)) return this._isDSTShifted; var e = {}; if ((v(e, this), (e = Lt(e))._a)) { var t = e._isUTC ? p(e._a) : Tt(e._a); this._isDSTShifted = this.isValid() && w(e._a, t.toArray()) > 0; } else this._isDSTShifted = !1; return this._isDSTShifted; })); var pn = D.prototype; function hn(e, t, n, r) { var o = st(), a = p().set(r, t); return o[n](a, e); } function mn(e, t, n) { if ((u(e) && ((t = e), (e = void 0)), (e = e || ""), null != t)) return hn(e, t, n, "month"); var r, o = []; for (r = 0; r < 12; r++) o[r] = hn(e, r, n, "month"); return o; } function Mn(e, t, n, r) { "boolean" == typeof e ? (u(t) && ((n = t), (t = void 0)), (t = t || "")) : ((n = t = e), (e = !1), u(t) && ((n = t), (t = void 0)), (t = t || "")); var o, a = st(), i = e ? a._week.dow : 0; if (null != n) return hn(t, (n + i) % 7, r, "day"); var s = []; for (o = 0; o < 7; o++) s[o] = hn(t, (o + i) % 7, r, "day"); return s; } (pn.calendar = function (e, t, n) { var r = this._calendar[e] || this._calendar.sameElse; return E(r) ? r.call(t, n) : r; }), (pn.longDateFormat = function (e) { var t = this._longDateFormat[e], n = this._longDateFormat[e.toUpperCase()]; return t || !n ? t : ((this._longDateFormat[e] = n.replace(/MMMM|MM|DD|dddd/g, function (e) { return e.slice(1); })), this._longDateFormat[e]); }), (pn.invalidDate = function () { return this._invalidDate; }), (pn.ordinal = function (e) { return this._ordinal.replace("%d", e); }), (pn.preparse = fn), (pn.postformat = fn), (pn.relativeTime = function (e, t, n, r) { var o = this._relativeTime[n]; return E(o) ? o(e, t, n, r) : o.replace(/%d/i, e); }), (pn.pastFuture = function (e, t) { var n = this._relativeTime[e > 0 ? "future" : "past"]; return E(n) ? n(t) : n.replace(/%s/i, t); }), (pn.set = function (e) { var t, n; for (n in e) E((t = e[n])) ? (this[n] = t) : (this["_" + n] = t); (this._config = e), (this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source)); }), (pn.months = function (e, t) { return e ? (a(this._months) ? this._months[e.month()] : this._months[(this._months.isFormat || Te).test(t) ? "format" : "standalone"][e.month()]) : a(this._months) ? this._months : this._months.standalone; }), (pn.monthsShort = function (e, t) { return e ? (a(this._monthsShort) ? this._monthsShort[e.month()] : this._monthsShort[Te.test(t) ? "format" : "standalone"][e.month()]) : a(this._monthsShort) ? this._monthsShort : this._monthsShort.standalone; }), (pn.monthsParse = function (e, t, n) { var r, o, a; if (this._monthsParseExact) return Se.call(this, e, t, n); for (this._monthsParse || ((this._monthsParse = []), (this._longMonthsParse = []), (this._shortMonthsParse = [])), r = 0; r < 12; r++) { if ( ((o = p([2e3, r])), n && !this._longMonthsParse[r] && ((this._longMonthsParse[r] = new RegExp("^" + this.months(o, "").replace(".", "") + "$", "i")), (this._shortMonthsParse[r] = new RegExp("^" + this.monthsShort(o, "").replace(".", "") + "$", "i"))), n || this._monthsParse[r] || ((a = "^" + this.months(o, "") + "|^" + this.monthsShort(o, "")), (this._monthsParse[r] = new RegExp(a.replace(".", ""), "i"))), n && "MMMM" === t && this._longMonthsParse[r].test(e)) ) return r; if (n && "MMM" === t && this._shortMonthsParse[r].test(e)) return r; if (!n && this._monthsParse[r].test(e)) return r; } }), (pn.monthsRegex = function (e) { return this._monthsParseExact ? (d(this, "_monthsRegex") || Ne.call(this), e ? this._monthsStrictRegex : this._monthsRegex) : (d(this, "_monthsRegex") || (this._monthsRegex = De), this._monthsStrictRegex && e ? this._monthsStrictRegex : this._monthsRegex); }), (pn.monthsShortRegex = function (e) { return this._monthsParseExact ? (d(this, "_monthsRegex") || Ne.call(this), e ? this._monthsShortStrictRegex : this._monthsShortRegex) : (d(this, "_monthsShortRegex") || (this._monthsShortRegex = xe), this._monthsShortStrictRegex && e ? this._monthsShortStrictRegex : this._monthsShortRegex); }), (pn.week = function (e) { return We(e, this._week.dow, this._week.doy).week; }), (pn.firstDayOfYear = function () { return this._week.doy; }), (pn.firstDayOfWeek = function () { return this._week.dow; }), (pn.weekdays = function (e, t) { var n = a(this._weekdays) ? this._weekdays : this._weekdays[e && !0 !== e && this._weekdays.isFormat.test(t) ? "format" : "standalone"]; return !0 === e ? Be(n, this._week.dow) : e ? n[e.day()] : n; }), (pn.weekdaysMin = function (e) { return !0 === e ? Be(this._weekdaysMin, this._week.dow) : e ? this._weekdaysMin[e.day()] : this._weekdaysMin; }), (pn.weekdaysShort = function (e) { return !0 === e ? Be(this._weekdaysShort, this._week.dow) : e ? this._weekdaysShort[e.day()] : this._weekdaysShort; }), (pn.weekdaysParse = function (e, t, n) { var r, o, a; if (this._weekdaysParseExact) return Ie.call(this, e, t, n); for (this._weekdaysParse || ((this._weekdaysParse = []), (this._minWeekdaysParse = []), (this._shortWeekdaysParse = []), (this._fullWeekdaysParse = [])), r = 0; r < 7; r++) { if ( ((o = p([2e3, 1]).day(r)), n && !this._fullWeekdaysParse[r] && ((this._fullWeekdaysParse[r] = new RegExp("^" + this.weekdays(o, "").replace(".", "\\.?") + "$", "i")), (this._shortWeekdaysParse[r] = new RegExp("^" + this.weekdaysShort(o, "").replace(".", "\\.?") + "$", "i")), (this._minWeekdaysParse[r] = new RegExp("^" + this.weekdaysMin(o, "").replace(".", "\\.?") + "$", "i"))), this._weekdaysParse[r] || ((a = "^" + this.weekdays(o, "") + "|^" + this.weekdaysShort(o, "") + "|^" + this.weekdaysMin(o, "")), (this._weekdaysParse[r] = new RegExp(a.replace(".", ""), "i"))), n && "dddd" === t && this._fullWeekdaysParse[r].test(e)) ) return r; if (n && "ddd" === t && this._shortWeekdaysParse[r].test(e)) return r; if (n && "dd" === t && this._minWeekdaysParse[r].test(e)) return r; if (!n && this._weekdaysParse[r].test(e)) return r; } }), (pn.weekdaysRegex = function (e) { return this._weekdaysParseExact ? (d(this, "_weekdaysRegex") || Je.call(this), e ? this._weekdaysStrictRegex : this._weekdaysRegex) : (d(this, "_weekdaysRegex") || (this._weekdaysRegex = Xe), this._weekdaysStrictRegex && e ? this._weekdaysStrictRegex : this._weekdaysRegex); }), (pn.weekdaysShortRegex = function (e) { return this._weekdaysParseExact ? (d(this, "_weekdaysRegex") || Je.call(this), e ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex) : (d(this, "_weekdaysShortRegex") || (this._weekdaysShortRegex = Ke), this._weekdaysShortStrictRegex && e ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex); }), (pn.weekdaysMinRegex = function (e) { return this._weekdaysParseExact ? (d(this, "_weekdaysRegex") || Je.call(this), e ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex) : (d(this, "_weekdaysMinRegex") || (this._weekdaysMinRegex = Ue), this._weekdaysMinStrictRegex && e ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex); }), (pn.isPM = function (e) { return "p" === (e + "").toLowerCase().charAt(0); }), (pn.meridiem = function (e, t, n) { return e > 11 ? (n ? "pm" : "PM") : n ? "am" : "AM"; }), at("en", { dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal: function (e) { var t = e % 10; return e + (1 === L((e % 100) / 10) ? "th" : 1 === t ? "st" : 2 === t ? "nd" : 3 === t ? "rd" : "th"); }, }), (o.lang = k("moment.lang is deprecated. Use moment.locale instead.", at)), (o.langData = k("moment.langData is deprecated. Use moment.localeData instead.", st)); var yn = Math.abs; function vn(e, t, n, r) { var o = Rt(t, n); return (e._milliseconds += r * o._milliseconds), (e._days += r * o._days), (e._months += r * o._months), e._bubble(); } function bn(e) { return e < 0 ? Math.floor(e) : Math.ceil(e); } function gn(e) { return (4800 * e) / 146097; } function _n(e) { return (146097 * e) / 4800; } function An(e) { return function () { return this.as(e); }; } var Ln = An("ms"), wn = An("s"), Tn = An("m"), kn = An("h"), On = An("d"), Sn = An("w"), zn = An("M"), En = An("Q"), xn = An("y"); function Dn(e) { return function () { return this.isValid() ? this._data[e] : NaN; }; } var Nn = Dn("milliseconds"), jn = Dn("seconds"), Cn = Dn("minutes"), Pn = Dn("hours"), Yn = Dn("days"), Wn = Dn("months"), qn = Dn("years"), Bn = Math.round, Rn = { ss: 44, s: 45, m: 45, h: 22, d: 26, M: 11 }; function Fn(e, t, n, r, o) { return o.relativeTime(t || 1, !!n, e, r); } var Hn = Math.abs; function In(e) { return (e > 0) - (e < 0) || +e; } function Xn() { if (!this.isValid()) return this.localeData().invalidDate(); var e, t, n = Hn(this._milliseconds) / 1e3, r = Hn(this._days), o = Hn(this._months); (e = A(n / 60)), (t = A(e / 60)), (n %= 60), (e %= 60); var a = A(o / 12), i = (o %= 12), s = r, u = t, c = e, l = n ? n.toFixed(3).replace(/\.?0+$/, "") : "", d = this.asSeconds(); if (!d) return "P0D"; var f = d < 0 ? "-" : "", p = In(this._months) !== In(d) ? "-" : "", h = In(this._days) !== In(d) ? "-" : "", m = In(this._milliseconds) !== In(d) ? "-" : ""; return f + "P" + (a ? p + a + "Y" : "") + (i ? p + i + "M" : "") + (s ? h + s + "D" : "") + (u || c || l ? "T" : "") + (u ? m + u + "H" : "") + (c ? m + c + "M" : "") + (l ? m + l + "S" : ""); } var Kn = Et.prototype; return ( (Kn.isValid = function () { return this._isValid; }), (Kn.abs = function () { var e = this._data; return ( (this._milliseconds = yn(this._milliseconds)), (this._days = yn(this._days)), (this._months = yn(this._months)), (e.milliseconds = yn(e.milliseconds)), (e.seconds = yn(e.seconds)), (e.minutes = yn(e.minutes)), (e.hours = yn(e.hours)), (e.months = yn(e.months)), (e.years = yn(e.years)), this ); }), (Kn.add = function (e, t) { return vn(this, e, t, 1); }), (Kn.subtract = function (e, t) { return vn(this, e, t, -1); }), (Kn.as = function (e) { if (!this.isValid()) return NaN; var t, n, r = this._milliseconds; if ("month" === (e = C(e)) || "quarter" === e || "year" === e) switch (((t = this._days + r / 864e5), (n = this._months + gn(t)), e)) { case "month": return n; case "quarter": return n / 3; case "year": return n / 12; } else switch (((t = this._days + Math.round(_n(this._months))), e)) { case "week": return t / 7 + r / 6048e5; case "day": return t + r / 864e5; case "hour": return 24 * t + r / 36e5; case "minute": return 1440 * t + r / 6e4; case "second": return 86400 * t + r / 1e3; case "millisecond": return Math.floor(864e5 * t) + r; default: throw new Error("Unknown unit " + e); } }), (Kn.asMilliseconds = Ln), (Kn.asSeconds = wn), (Kn.asMinutes = Tn), (Kn.asHours = kn), (Kn.asDays = On), (Kn.asWeeks = Sn), (Kn.asMonths = zn), (Kn.asQuarters = En), (Kn.asYears = xn), (Kn.valueOf = function () { return this.isValid() ? this._milliseconds + 864e5 * this._days + (this._months % 12) * 2592e6 + 31536e6 * L(this._months / 12) : NaN; }), (Kn._bubble = function () { var e, t, n, r, o, a = this._milliseconds, i = this._days, s = this._months, u = this._data; return ( (a >= 0 && i >= 0 && s >= 0) || (a <= 0 && i <= 0 && s <= 0) || ((a += 864e5 * bn(_n(s) + i)), (i = 0), (s = 0)), (u.milliseconds = a % 1e3), (e = A(a / 1e3)), (u.seconds = e % 60), (t = A(e / 60)), (u.minutes = t % 60), (n = A(t / 60)), (u.hours = n % 24), (i += A(n / 24)), (o = A(gn(i))), (s += o), (i -= bn(_n(o))), (r = A(s / 12)), (s %= 12), (u.days = i), (u.months = s), (u.years = r), this ); }), (Kn.clone = function () { return Rt(this); }), (Kn.get = function (e) { return (e = C(e)), this.isValid() ? this[e + "s"]() : NaN; }), (Kn.milliseconds = Nn), (Kn.seconds = jn), (Kn.minutes = Cn), (Kn.hours = Pn), (Kn.days = Yn), (Kn.weeks = function () { return A(this.days() / 7); }), (Kn.months = Wn), (Kn.years = qn), (Kn.humanize = function (e) { if (!this.isValid()) return this.localeData().invalidDate(); var t = this.localeData(), n = (function (e, t, n) { var r = Rt(e).abs(), o = Bn(r.as("s")), a = Bn(r.as("m")), i = Bn(r.as("h")), s = Bn(r.as("d")), u = Bn(r.as("M")), c = Bn(r.as("y")), l = (o <= Rn.ss && ["s", o]) || (o < Rn.s && ["ss", o]) || (a <= 1 && ["m"]) || (a < Rn.m && ["mm", a]) || (i <= 1 && ["h"]) || (i < Rn.h && ["hh", i]) || (s <= 1 && ["d"]) || (s < Rn.d && ["dd", s]) || (u <= 1 && ["M"]) || (u < Rn.M && ["MM", u]) || (c <= 1 && ["y"]) || ["yy", c]; return (l[2] = t), (l[3] = +e > 0), (l[4] = n), Fn.apply(null, l); })(this, !e, t); return e && (n = t.pastFuture(+this, n)), t.postformat(n); }), (Kn.toISOString = Xn), (Kn.toString = Xn), (Kn.toJSON = Xn), (Kn.locale = Vt), (Kn.localeData = $t), (Kn.toIsoString = k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", Xn)), (Kn.lang = Gt), I("X", 0, 0, "unix"), I("x", 0, 0, "valueOf"), le("x", ae), le("X", /[+-]?\d+(\.\d{1,3})?/), he("X", function (e, t, n) { n._d = new Date(1e3 * parseFloat(e, 10)); }), he("x", function (e, t, n) { n._d = new Date(L(e)); }), (o.version = "2.24.0"), (t = Tt), (o.fn = dn), (o.min = function () { var e = [].slice.call(arguments, 0); return St("isBefore", e); }), (o.max = function () { var e = [].slice.call(arguments, 0); return St("isAfter", e); }), (o.now = function () { return Date.now ? Date.now() : +new Date(); }), (o.utc = p), (o.unix = function (e) { return Tt(1e3 * e); }), (o.months = function (e, t) { return mn(e, t, "months"); }), (o.isDate = c), (o.locale = at), (o.invalid = M), (o.duration = Rt), (o.isMoment = _), (o.weekdays = function (e, t, n) { return Mn(e, t, n, "weekdays"); }), (o.parseZone = function () { return Tt.apply(null, arguments).parseZone(); }), (o.localeData = st), (o.isDuration = xt), (o.monthsShort = function (e, t) { return mn(e, t, "monthsShort"); }), (o.weekdaysMin = function (e, t, n) { return Mn(e, t, n, "weekdaysMin"); }), (o.defineLocale = it), (o.updateLocale = function (e, t) { if (null != t) { var n, r, o = et; null != (r = ot(e)) && (o = r._config), (t = x(o, t)), ((n = new D(t)).parentLocale = tt[e]), (tt[e] = n), at(e); } else null != tt[e] && (null != tt[e].parentLocale ? (tt[e] = tt[e].parentLocale) : null != tt[e] && delete tt[e]); return tt[e]; }), (o.locales = function () { return O(tt); }), (o.weekdaysShort = function (e, t, n) { return Mn(e, t, n, "weekdaysShort"); }), (o.normalizeUnits = C), (o.relativeTimeRounding = function (e) { return void 0 === e ? Bn : "function" == typeof e && ((Bn = e), !0); }), (o.relativeTimeThreshold = function (e, t) { return void 0 !== Rn[e] && (void 0 === t ? Rn[e] : ((Rn[e] = t), "s" === e && (Rn.ss = t - 1), !0)); }), (o.calendarFormat = function (e, t) { var n = e.diff(t, "days", !0); return n < -6 ? "sameElse" : n < -1 ? "lastWeek" : n < 0 ? "lastDay" : n < 1 ? "sameDay" : n < 2 ? "nextDay" : n < 7 ? "nextWeek" : "sameElse"; }), (o.prototype = dn), (o.HTML5_FMT = { DATETIME_LOCAL: "YYYY-MM-DDTHH:mm", DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss", DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS", DATE: "YYYY-MM-DD", TIME: "HH:mm", TIME_SECONDS: "HH:mm:ss", TIME_MS: "HH:mm:ss.SSS", WEEK: "GGGG-[W]WW", MONTH: "YYYY-MM", }), o ); })(); }.call(this, n(79)(e))); }, , , , , , , function (e, t, n) { "use strict"; t.__esModule = !0; var r, o = n(994), a = (r = o) && r.__esModule ? r : { default: r }; t.default = a.default || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; }, function (e, t, n) { "use strict"; n.r(t); var r = n(19), o = n.n(r), a = n(1), i = n.n(a), s = n(38), u = n.n(s), c = n(0), l = n.n(c); n(73); function d(e) { return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } var f = Object.create(null); function p(e) { return ( f[e] || (f[e] = (function (e) { for (var t = "", n = [], r = [], o = void 0, a = 0, i = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)|\\\(|\\\)/g; (o = i.exec(e)); ) o.index !== a && (r.push(e.slice(a, o.index)), (t += d(e.slice(a, o.index)))), o[1] ? ((t += "([^/]+)"), n.push(o[1])) : "**" === o[0] ? ((t += "(.*)"), n.push("splat")) : "*" === o[0] ? ((t += "(.*?)"), n.push("splat")) : "(" === o[0] ? (t += "(?:") : ")" === o[0] ? (t += ")?") : "\\(" === o[0] ? (t += "\\(") : "\\)" === o[0] && (t += "\\)"), r.push(o[0]), (a = i.lastIndex); return a !== e.length && (r.push(e.slice(a, e.length)), (t += d(e.slice(a, e.length)))), { pattern: e, regexpSource: t, paramNames: n, tokens: r }; })(e)), f[e] ); } function h(e, t) { "/" !== e.charAt(0) && (e = "/" + e); var n = p(e), r = n.regexpSource, o = n.paramNames, a = n.tokens; "/" !== e.charAt(e.length - 1) && (r += "/?"), "*" === a[a.length - 1] && (r += "$"); var i = t.match(new RegExp("^" + r, "i")); if (null == i) return null; var s = i[0], u = t.substr(s.length); if (u) { if ("/" !== s.charAt(s.length - 1)) return null; u = "/" + u; } return { remainingPathname: u, paramNames: o, paramValues: i.slice(1).map(function (e) { return e && decodeURIComponent(e); }), }; } function m(e) { return p(e).paramNames; } function M(e, t) { t = t || {}; for (var n = p(e).tokens, r = 0, a = "", i = 0, s = [], u = void 0, c = void 0, l = 0, d = n.length; l < d; ++l) if ("*" === (u = n[l]) || "**" === u) null != (c = Array.isArray(t.splat) ? t.splat[i++] : t.splat) || r > 0 || o()(!1), null != c && (a += encodeURI(c)); else if ("(" === u) (s[r] = ""), (r += 1); else if (")" === u) { var f = s.pop(); (r -= 1) ? (s[r - 1] += f) : (a += f); } else if ("\\(" === u) a += "("; else if ("\\)" === u) a += ")"; else if (":" === u.charAt(0)) if ((null != (c = t[u.substring(1)]) || r > 0 || o()(!1), null == c)) { if (r) { s[r - 1] = ""; for (var h = n.indexOf(u), m = n.slice(h, n.length), M = -1, y = 0; y < m.length; y++) if (")" == m[y]) { M = y; break; } M > 0 || o()(!1), (l = h + M - 1); } } else r ? (s[r - 1] += encodeURIComponent(c)) : (a += encodeURIComponent(c)); else r ? (s[r - 1] += u) : (a += u); return r <= 0 || o()(!1), a.replace(/\/+/g, "/"); } var y = function (e, t) { var n = e && e.routes, r = t.routes, o = void 0, a = void 0, i = void 0; if (n) { var s = !1; (o = n.filter(function (n) { if (s) return !0; var o = -1 === r.indexOf(n) || (function (e, t, n) { return ( !!e.path && m(e.path).some(function (e) { return t.params[e] !== n.params[e]; }) ); })(n, e, t); return o && (s = !0), o; })).reverse(), (i = []), (a = []), r.forEach(function (e) { var t = -1 === n.indexOf(e), r = -1 !== o.indexOf(e); t || r ? i.push(e) : a.push(e); }); } else (o = []), (a = []), (i = r); return { leaveRoutes: o, changeRoutes: a, enterRoutes: i }; }; function v(e, t, n) { var r = 0, o = !1, a = !1, i = !1, s = void 0; function u() { (o = !0), a ? (s = [].concat(Array.prototype.slice.call(arguments))) : n.apply(this, arguments); } !(function c() { if (!o && ((i = !0), !a)) { for (a = !0; !o && r < e && i; ) (i = !1), t.call(this, r++, c, u); (a = !1), o ? n.apply(this, s) : r >= e && i && ((o = !0), n()); } })(); } function b(e, t, n) { var r = e.length, o = []; if (0 === r) return n(null, o); var a = !1, i = 0; e.forEach(function (e, s) { t(e, s, function (e, t) { !(function (e, t, s) { a || (t ? ((a = !0), n(t)) : ((o[e] = s), (a = ++i === r) && n(null, o))); })(s, e, t); }); }); } var g = function e() { var t = this; !(function (e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); })(this, e), (this.hooks = []), (this.add = function (e) { return t.hooks.push(e); }), (this.remove = function (e) { return (t.hooks = t.hooks.filter(function (t) { return t !== e; })); }), (this.has = function (e) { return -1 !== t.hooks.indexOf(e); }), (this.clear = function () { return (t.hooks = []); }); }; function _() { var e = new g(), t = new g(); function n(e, t, n, r) { var o = e.length < n, a = function () { for (var n = arguments.length, r = Array(n), a = 0; a < n; a++) r[a] = arguments[a]; if ((e.apply(t, r), o)) { var i = r[r.length - 1]; i(); } }; return r.add(a), a; } function r(e, t, n) { if (e) { var r = void 0; v( e, function (e, n, a) { t(e, o, function (e) { e || r ? a(e, r) : n(); }); }, n ); } else n(); function o(e) { r = e; } } return { runEnterHooks: function (t, o, a) { e.clear(); var i = (function (t) { return t.reduce(function (t, r) { return r.onEnter && t.push(n(r.onEnter, r, 3, e)), t; }, []); })(t); return r( i.length, function (t, n, r) { i[t](o, n, function () { e.has(i[t]) && (r.apply(void 0, arguments), e.remove(i[t])); }); }, a ); }, runChangeHooks: function (e, o, a, i) { t.clear(); var s = (function (e) { return e.reduce(function (e, r) { return r.onChange && e.push(n(r.onChange, r, 4, t)), e; }, []); })(e); return r( s.length, function (e, n, r) { s[e](o, a, n, function () { t.has(s[e]) && (r.apply(void 0, arguments), t.remove(s[e])); }); }, i ); }, runLeaveHooks: function (e, t) { for (var n = 0, r = e.length; n < r; ++n) e[n].onLeave && e[n].onLeave.call(e[n], t); }, }; } var A = "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; }; function L(e, t) { return null == t ? null == e : null == e || (function e(t, n) { if (t == n) return !0; if (null == t || null == n) return !1; if (Array.isArray(t)) return ( Array.isArray(n) && t.length === n.length && t.every(function (t, r) { return e(t, n[r]); }) ); if ("object" === (void 0 === t ? "undefined" : A(t))) { for (var r in t) if (Object.prototype.hasOwnProperty.call(t, r)) if (void 0 === t[r]) { if (void 0 !== n[r]) return !1; } else { if (!Object.prototype.hasOwnProperty.call(n, r)) return !1; if (!e(t[r], n[r])) return !1; } return !0; } return String(t) === String(n); })(e, t); } function w(e, t, n, r, o) { var a = e.pathname, i = e.query; return ( null != n && ("/" !== a.charAt(0) && (a = "/" + a), !!( (function (e, t) { return "/" !== t.charAt(0) && (t = "/" + t), "/" !== e.charAt(e.length - 1) && (e += "/"), "/" !== t.charAt(t.length - 1) && (t += "/"), t === e; })(a, n.pathname) || (!t && (function (e, t, n) { for (var r = e, o = [], a = [], i = 0, s = t.length; i < s; ++i) { var u = t[i].path || ""; if (("/" === u.charAt(0) && ((r = e), (o = []), (a = [])), null !== r && u)) { var c = h(u, r); if ((c ? ((r = c.remainingPathname), (o = [].concat(o, c.paramNames)), (a = [].concat(a, c.paramValues))) : (r = null), "" === r)) return o.every(function (e, t) { return String(a[t]) === String(n[e]); }); } } return !1; })(a, r, o)) ) && L(i, n.query)) ); } function T(e) { return e && "function" == typeof e.then; } var k = function (e, t) { b( e.routes, function (t, n, r) { !(function (e, t, n) { if (t.component || t.components) n(null, t.component || t.components); else { var r = t.getComponent || t.getComponents; if (r) { var o = r.call(t, e, n); T(o) && o.then(function (e) { return n(null, e); }, n); } else n(); } })(e, t, r); }, t ); }, O = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function S(e) { return null == e || i.a.isValidElement(e); } function z(e) { return S(e) || (Array.isArray(e) && e.every(S)); } function E(e) { var t, n, r = e.type, o = ((t = r.defaultProps), (n = e.props), O({}, t, n)); if (o.children) { var a = x(o.children, o); a.length && (o.childRoutes = a), delete o.children; } return o; } function x(e, t) { var n = []; return ( i.a.Children.forEach(e, function (e) { if (i.a.isValidElement(e)) if (e.type.createRouteFromReactElement) { var r = e.type.createRouteFromReactElement(e, t); r && n.push(r); } else n.push(E(e)); }), n ); } function D(e) { return z(e) ? (e = x(e)) : e && !Array.isArray(e) && (e = [e]), e; } var N = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function j(e, t, n, r, o) { if (e.childRoutes) return [null, e.childRoutes]; if (!e.getChildRoutes) return []; var a = !0, i = void 0, s = { location: t, params: C(n, r) }, u = e.getChildRoutes(s, function (e, t) { (t = !e && D(t)), a ? (i = [e, t]) : o(e, t); }); return ( T(u) && u.then(function (e) { return o(null, D(e)); }, o), (a = !1), i ); } function C(e, t) { return (function (e, t, n) { return t.reduce(function (e, t, r) { var o = n && n[r]; return Array.isArray(e[t]) ? e[t].push(o) : (e[t] = t in e ? [e[t], o] : o), e; }, e); })({}, e, t); } function P(e, t, n, r, o, a) { var i = e.path || ""; if (("/" === i.charAt(0) && ((n = t.pathname), (r = []), (o = [])), null !== n && i)) { try { var s = h(i, n); s ? ((n = s.remainingPathname), (r = [].concat(r, s.paramNames)), (o = [].concat(o, s.paramValues))) : (n = null); } catch (e) { a(e); } if ("" === n) { var u = { routes: [e], params: C(r, o) }; return void (function e(t, n, r, o, a) { if (t.indexRoute) a(null, t.indexRoute); else if (t.getIndexRoute) { var i = { location: n, params: C(r, o) }, s = t.getIndexRoute(i, function (e, t) { a(e, !e && D(t)[0]); }); T(s) && s.then(function (e) { return a(null, D(e)[0]); }, a); } else if (t.childRoutes || t.getChildRoutes) { var u = function (t, i) { if (t) a(t); else { var s = i.filter(function (e) { return !e.path; }); v( s.length, function (t, a, i) { e(s[t], n, r, o, function (e, n) { if (e || n) { var r = [s[t]].concat(Array.isArray(n) ? n : [n]); i(e, r); } else a(); }); }, function (e, t) { a(null, t); } ); } }, c = j(t, n, r, o, u); c && u.apply(void 0, c); } else a(); })(e, t, r, o, function (e, t) { if (e) a(e); else { var n; if (Array.isArray(t)) (n = u.routes).push.apply(n, t); else t && u.routes.push(t); a(null, u); } }); } } if (null != n || e.childRoutes) { var c = function (i, s) { i ? a(i) : s ? Y( s, t, function (t, n) { t ? a(t) : n ? (n.routes.unshift(e), a(null, n)) : a(); }, n, r, o ) : a(); }, l = j(e, t, r, o, c); l && c.apply(void 0, l); } else a(); } function Y(e, t, n, r) { var o = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : [], a = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : []; void 0 === r && ("/" !== t.pathname.charAt(0) && (t = N({}, t, { pathname: "/" + t.pathname })), (r = t.pathname)), v( e.length, function (n, i, s) { P(e[n], t, r, o, a, function (e, t) { e || t ? s(e, t) : i(); }); }, n ); } var W = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function q(e) { for (var t in e) if (Object.prototype.hasOwnProperty.call(e, t)) return !0; return !1; } function B(e, t) { var n = {}, r = _(), o = r.runEnterHooks, a = r.runChangeHooks, i = r.runLeaveHooks; var s = void 0; function u(e, n) { s && s.location === e ? c(s, n) : Y(t, e, function (t, r) { t ? n(t) : r ? c(W({}, r, { location: e }), n) : n(); }); } function c(e, t) { var r = y(n, e), s = r.leaveRoutes, u = r.changeRoutes, c = r.enterRoutes; function l(r, o) { if (r || o) return d(r, o); k(e, function (r, o) { r ? t(r) : t(null, null, (n = W({}, e, { components: o }))); }); } function d(e, n) { e ? t(e) : t(null, n); } i(s, n), s .filter(function (e) { return -1 === c.indexOf(e); }) .forEach(b), a(u, n, e, function (t, n) { if (t || n) return d(t, n); o(c, e, l); }); } var l = 1; function d(e) { var t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return e.__id__ || (t && (e.__id__ = l++)); } var f = Object.create(null); function p(e) { return e .map(function (e) { return f[d(e)]; }) .filter(function (e) { return e; }); } function h(e, r) { Y(t, e, function (t, o) { if (null != o) { s = W({}, o, { location: e }); for (var a = p(y(n, s).leaveRoutes), i = void 0, u = 0, c = a.length; null == i && u < c; ++u) i = a[u](e); r(i); } else r(); }); } function m() { if (n.routes) { for (var e = p(n.routes), t = void 0, r = 0, o = e.length; "string" != typeof t && r < o; ++r) t = e[r](); return t; } } var M = void 0, v = void 0; function b(e) { var t = d(e); t && (delete f[t], q(f) || (M && (M(), (M = null)), v && (v(), (v = null)))); } return { isActive: function (t, r) { return w((t = e.createLocation(t)), r, n.location, n.routes, n.params); }, match: u, listenBeforeLeavingRoute: function (t, n) { var r = !q(f), o = d(t, !0); return ( (f[o] = n), r && ((M = e.listenBefore(h)), e.listenBeforeUnload && (v = e.listenBeforeUnload(m))), function () { b(t); } ); }, listen: function (t) { function r(r) { n.location === r ? t(null, n) : u(r, function (n, r, o) { n ? t(n) : r ? e.replace(r) : o && t(null, o); }); } var o = e.listen(r); return n.location ? t(null, n) : r(e.getCurrentLocation()), o; }, }; } function R(e, t, n) { if (e[t]) return new Error("<" + n + '> should not have a "' + t + '" prop'); } Object(c.shape)({ listen: c.func.isRequired, push: c.func.isRequired, replace: c.func.isRequired, go: c.func.isRequired, goBack: c.func.isRequired, goForward: c.func.isRequired }); var F = Object(c.oneOfType)([c.func, c.string]), H = Object(c.oneOfType)([F, c.object]), I = Object(c.oneOfType)([c.object, c.element]), X = Object(c.oneOfType)([I, Object(c.arrayOf)(I)]); var K = function (e, t) { var n = {}; return e.path ? (m(e.path).forEach(function (e) { Object.prototype.hasOwnProperty.call(t, e) && (n[e] = t[e]); }), n) : n; }, U = l.a.shape({ subscribe: l.a.func.isRequired, eventIndex: l.a.number.isRequired }); function J(e) { return "@@contextSubscriber/" + e; } function V(e) { var t, n, r = J(e), o = r + "/lastRenderedEventIndex", a = r + "/handleContextUpdate", i = r + "/unsubscribe"; return ( ((n = { contextTypes: ((t = {}), (t[r] = U), t), getInitialState: function () { var e; return this.context[r] ? (((e = {})[o] = this.context[r].eventIndex), e) : {}; }, componentDidMount: function () { this.context[r] && (this[i] = this.context[r].subscribe(this[a])); }, componentWillReceiveProps: function () { var e; this.context[r] && this.setState((((e = {})[o] = this.context[r].eventIndex), e)); }, componentWillUnmount: function () { this[i] && (this[i](), (this[i] = null)); }, })[a] = function (e) { var t; e !== this.state[o] && this.setState((((t = {})[o] = e), t)); }), n ); } var G, $, Q, Z, ee, te, ne, re = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, oe = "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; }, ae = u()({ displayName: "RouterContext", mixins: [ ((G = "router"), (Z = J(G)), (ee = Z + "/listeners"), (te = Z + "/eventIndex"), (ne = Z + "/subscribe"), ((Q = { childContextTypes: (($ = {}), ($[Z] = U.isRequired), $), getChildContext: function () { var e; return ((e = {})[Z] = { eventIndex: this[te], subscribe: this[ne] }), e; }, componentWillMount: function () { (this[ee] = []), (this[te] = 0); }, componentWillReceiveProps: function () { this[te]++; }, componentDidUpdate: function () { var e = this; this[ee].forEach(function (t) { return t(e[te]); }); }, })[ne] = function (e) { var t = this; return ( this[ee].push(e), function () { t[ee] = t[ee].filter(function (t) { return t !== e; }); } ); }), Q), ], propTypes: { router: c.object.isRequired, location: c.object.isRequired, routes: c.array.isRequired, params: c.object.isRequired, components: c.array.isRequired, createElement: c.func.isRequired }, getDefaultProps: function () { return { createElement: i.a.createElement }; }, childContextTypes: { router: c.object.isRequired }, getChildContext: function () { return { router: this.props.router }; }, createElement: function (e, t) { return null == e ? null : this.props.createElement(e, t); }, render: function () { var e = this, t = this.props, n = t.location, r = t.routes, a = t.params, s = t.components, u = t.router, c = null; return ( s && (c = s.reduceRight(function (t, o, i) { if (null == o) return t; var s = r[i], c = K(s, a), l = { location: n, params: a, route: s, router: u, routeParams: c, routes: r }; if (z(t)) l.children = t; else if (t) for (var d in t) Object.prototype.hasOwnProperty.call(t, d) && (l[d] = t[d]); if ("object" === (void 0 === o ? "undefined" : oe(o))) { var f = {}; for (var p in o) Object.prototype.hasOwnProperty.call(o, p) && (f[p] = e.createElement(o[p], re({ key: p }, l))); return f; } return e.createElement(o, l); }, c)), null === c || !1 === c || i.a.isValidElement(c) || o()(!1), c ); }, }), ie = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function se(e, t, n) { return ue(ie({}, e, { setRouteLeaveHook: t.listenBeforeLeavingRoute, isActive: t.isActive }), n); } function ue(e, t) { var n = t.location, r = t.params, o = t.routes; return (e.location = n), (e.params = r), (e.routes = o), e; } var ce = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; var le = { history: c.object, children: X, routes: X, render: c.func, createElement: c.func, onError: c.func, onUpdate: c.func, matchContext: c.object }, de = u()({ displayName: "Router", propTypes: le, getDefaultProps: function () { return { render: function (e) { return i.a.createElement(ae, e); }, }; }, getInitialState: function () { return { location: null, routes: null, params: null, components: null }; }, handleError: function (e) { if (!this.props.onError) throw e; this.props.onError.call(this, e); }, createRouterObject: function (e) { var t = this.props.matchContext; return t ? t.router : se(this.props.history, this.transitionManager, e); }, createTransitionManager: function () { var e = this.props.matchContext; if (e) return e.transitionManager; var t = this.props.history, n = this.props, r = n.routes, a = n.children; return t.getCurrentLocation || o()(!1), B(t, D(r || a)); }, componentWillMount: function () { var e = this; (this.transitionManager = this.createTransitionManager()), (this.router = this.createRouterObject(this.state)), (this._unlisten = this.transitionManager.listen(function (t, n) { t ? e.handleError(t) : (ue(e.router, n), e.setState(n, e.props.onUpdate)); })); }, componentWillReceiveProps: function (e) {}, componentWillUnmount: function () { this._unlisten && this._unlisten(); }, render: function () { var e = this.state, t = e.location, n = e.routes, r = e.params, o = e.components, a = this.props, i = a.createElement, s = a.render, u = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(a, ["createElement", "render"]); return null == t ? null : (Object.keys(le).forEach(function (e) { return delete u[e]; }), s(ce({}, u, { router: this.router, location: t, routes: n, params: r, components: o, createElement: i }))); }, }), fe = Object(c.shape)({ push: c.func.isRequired, replace: c.func.isRequired, go: c.func.isRequired, goBack: c.func.isRequired, goForward: c.func.isRequired, setRouteLeaveHook: c.func.isRequired, isActive: c.func.isRequired, }), pe = Object(c.shape)({ pathname: c.string.isRequired, search: c.string.isRequired, state: c.object, action: c.string.isRequired, key: c.string }), he = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function me(e, t) { return "function" == typeof e ? e(t.location) : e; } var Me = u()({ displayName: "Link", mixins: [V("router")], contextTypes: { router: fe }, propTypes: { to: Object(c.oneOfType)([c.string, c.object, c.func]), activeStyle: c.object, activeClassName: c.string, onlyActiveOnIndex: c.bool.isRequired, onClick: c.func, target: c.string }, getDefaultProps: function () { return { onlyActiveOnIndex: !1, style: {} }; }, handleClick: function (e) { if ((this.props.onClick && this.props.onClick(e), !e.defaultPrevented)) { var t = this.context.router; t || o()(!1), !(function (e) { return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey); })(e) && (function (e) { return 0 === e.button; })(e) && (this.props.target || (e.preventDefault(), t.push(me(this.props.to, t)))); } }, render: function () { var e = this.props, t = e.to, n = e.activeClassName, r = e.activeStyle, o = e.onlyActiveOnIndex, a = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(e, ["to", "activeClassName", "activeStyle", "onlyActiveOnIndex"]), s = this.context.router; if (s) { if (!t) return i.a.createElement("a", a); var u = me(t, s); (a.href = s.createHref(u)), (n || (null != r && !(function (e) { for (var t in e) if (Object.prototype.hasOwnProperty.call(e, t)) return !1; return !0; })(r))) && s.isActive(u, o) && (n && (a.className ? (a.className += " " + n) : (a.className = n)), r && (a.style = he({}, a.style, r))); } return i.a.createElement("a", he({}, a, { onClick: this.handleClick })); }, }), ye = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, ve = u()({ displayName: "IndexLink", render: function () { return i.a.createElement(Me, ye({}, this.props, { onlyActiveOnIndex: !0 })); }, }), be = n(523), ge = n.n(be), _e = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function Ae(e, t) { var n = t && t.withRef, r = u()({ displayName: "WithRouter", mixins: [V("router")], contextTypes: { router: fe }, propTypes: { router: fe }, getWrappedInstance: function () { return n || o()(!1), this.wrappedInstance; }, render: function () { var t = this, r = this.props.router || this.context.router; if (!r) return i.a.createElement(e, this.props); var o = r.params, a = r.location, s = r.routes, u = _e({}, this.props, { router: r, params: o, location: a, routes: s }); return ( n && (u.ref = function (e) { t.wrappedInstance = e; }), i.a.createElement(e, u) ); }, }); return ( (r.displayName = "withRouter(" + (function (e) { return e.displayName || e.name || "Component"; })(e) + ")"), (r.WrappedComponent = e), ge()(r, e) ); } var Le = u()({ displayName: "Redirect", statics: { createRouteFromReactElement: function (e) { var t = E(e); return ( t.from && (t.path = t.from), (t.onEnter = function (e, n) { var r = e.location, o = e.params, a = void 0; if ("/" === t.to.charAt(0)) a = M(t.to, o); else if (t.to) { var i = e.routes.indexOf(t); a = M(Le.getRoutePattern(e.routes, i - 1).replace(/\/*$/, "/") + t.to, o); } else a = r.pathname; n({ pathname: a, query: t.query || r.query, state: t.state || r.state }); }), t ); }, getRoutePattern: function (e, t) { for (var n = "", r = t; r >= 0; r--) { var o = e[r].path || ""; if (((n = o.replace(/\/*$/, "/") + n), 0 === o.indexOf("/"))) break; } return "/" + n; }, }, propTypes: { path: c.string, from: c.string, to: c.string.isRequired, query: c.object, state: c.object, onEnter: R, children: R }, render: function () { o()(!1); }, }), we = Le, Te = u()({ displayName: "IndexRedirect", statics: { createRouteFromReactElement: function (e, t) { t && (t.indexRoute = we.createRouteFromReactElement(e)); }, }, propTypes: { to: c.string.isRequired, query: c.object, state: c.object, onEnter: R, children: R }, render: function () { o()(!1); }, }), ke = u()({ displayName: "IndexRoute", statics: { createRouteFromReactElement: function (e, t) { t && (t.indexRoute = E(e)); }, }, propTypes: { path: R, component: F, components: H, getComponent: c.func, getComponents: c.func }, render: function () { o()(!1); }, }), Oe = u()({ displayName: "Route", statics: { createRouteFromReactElement: E }, propTypes: { path: c.string, component: F, components: H, getComponent: c.func, getComponents: c.func }, render: function () { o()(!1); }, }), Se = n(148), ze = n(194), Ee = n.n(ze), xe = n(195), De = n.n(xe), Ne = n(524), je = n.n(Ne); function Ce(e) { var t = je()(e); return Ee()( De()(function () { return t; }) )(e); } var Pe = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; var Ye = function (e, t) { var n = e.history, r = e.routes, a = e.location, i = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(e, ["history", "routes", "location"]); n || a || o()(!1); var s = B((n = n || Ce(i)), D(r)); (a = a ? n.createLocation(a) : n.getCurrentLocation()), s.match(a, function (e, r, o) { var a = void 0; if (o) { var i = se(n, s, o); a = Pe({}, o, { router: i, matchContext: { transitionManager: s, router: i } }); } t(e, r && n.createLocation(r, Se.REPLACE), a); }); }; function We(e) { return function (t) { return Ee()(De()(e))(t); }; } var qe = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, Be = function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; var r = t .map(function (e) { return e.renderRouterContext; }) .filter(Boolean), o = t .map(function (e) { return e.renderRouteComponent; }) .filter(Boolean), s = function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : a.createElement; return function (t, n) { return o.reduceRight(function (e, t) { return t(e, n); }, e(t, n)); }; }; return function (e) { return r.reduceRight(function (t, n) { return n(t, e); }, i.a.createElement(ae, qe({}, e, { createElement: s(e.createElement) }))); }; }, Re = n(525), Fe = n.n(Re), He = !("undefined" == typeof window || !window.document || !window.document.createElement); function Ie(e) { var t = void 0; return He && (t = We(e)()), t; } var Xe = Ie(Fe.a), Ke = n(526), Ue = Ie(n.n(Ke).a); n.d(t, "Router", function () { return de; }), n.d(t, "Link", function () { return Me; }), n.d(t, "IndexLink", function () { return ve; }), n.d(t, "withRouter", function () { return Ae; }), n.d(t, "IndexRedirect", function () { return Te; }), n.d(t, "IndexRoute", function () { return ke; }), n.d(t, "Redirect", function () { return we; }), n.d(t, "Route", function () { return Oe; }), n.d(t, "createRoutes", function () { return D; }), n.d(t, "RouterContext", function () { return ae; }), n.d(t, "locationShape", function () { return pe; }), n.d(t, "routerShape", function () { return fe; }), n.d(t, "match", function () { return Ye; }), n.d(t, "useRouterHistory", function () { return We; }), n.d(t, "formatPattern", function () { return M; }), n.d(t, "applyRouterMiddleware", function () { return Be; }), n.d(t, "browserHistory", function () { return Xe; }), n.d(t, "hashHistory", function () { return Ue; }), n.d(t, "createMemoryHistory", function () { return Ce; }); }, function (e, t, n) { "use strict"; function r(e, t) { try { return t(e); } catch (e) { if (e instanceof TypeError) { if (o.test(e)) return null; if (a.test(e)) return; } throw e; } } var o = /^null | null$|^[^(]* null /, a = /^undefined | undefined$|^[^(]* undefined /; (r.default = r), (e.exports = r); }, function (e, t, n) { "use strict"; e.exports = function (e, t, n, r, o, a, i, s) { if (!e) { var u; if (void 0 === t) u = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings."); else { var c = [n, r, o, a, i, s], l = 0; (u = new Error( t.replace(/%s/g, function () { return c[l++]; }) )).name = "Invariant Violation"; } throw ((u.framesToPop = 1), u); } }; }, function (e, t, n) { "use strict"; !(function e() { if ("undefined" != typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" == typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE) { 0; try { __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e); } catch (e) { console.error(e); } } })(), (e.exports = n(595)); }, , , function (e, t, n) { "use strict"; t.__esModule = !0; var r, o = n(193), a = (r = o) && r.__esModule ? r : { default: r }; t.default = function (e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || ("object" !== (void 0 === t ? "undefined" : (0, a.default)(t)) && "function" != typeof t) ? e : t; }; }, function (e, t, n) { "use strict"; (t.__esModule = !0), (t.default = function (e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); }); }, function (e, t, n) { "use strict"; t.__esModule = !0; var r = i(n(1023)), o = i(n(1027)), a = i(n(193)); function i(e) { return e && e.__esModule ? e : { default: e }; } t.default = function (e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (void 0 === t ? "undefined" : (0, a.default)(t))); (e.prototype = (0, o.default)(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } })), t && (r.default ? (0, r.default)(e, t) : (e.__proto__ = t)); }; }, , function (e, t, n) { (function (e, r) { var o; (function () { var a = "Expected a function", i = "__lodash_placeholder__", s = [ ["ary", 128], ["bind", 1], ["bindKey", 2], ["curry", 8], ["curryRight", 16], ["flip", 512], ["partial", 32], ["partialRight", 64], ["rearg", 256], ], u = "[object Arguments]", c = "[object Array]", l = "[object Boolean]", d = "[object Date]", f = "[object Error]", p = "[object Function]", h = "[object GeneratorFunction]", m = "[object Map]", M = "[object Number]", y = "[object Object]", v = "[object RegExp]", b = "[object Set]", g = "[object String]", _ = "[object Symbol]", A = "[object WeakMap]", L = "[object ArrayBuffer]", w = "[object DataView]", T = "[object Float32Array]", k = "[object Float64Array]", O = "[object Int8Array]", S = "[object Int16Array]", z = "[object Int32Array]", E = "[object Uint8Array]", x = "[object Uint16Array]", D = "[object Uint32Array]", N = /\b__p \+= '';/g, j = /\b(__p \+=) '' \+/g, C = /(__e\(.*?\)|\b__t\)) \+\n'';/g, P = /&(?:amp|lt|gt|quot|#39);/g, Y = /[&<>"']/g, W = RegExp(P.source), q = RegExp(Y.source), B = /<%-([\s\S]+?)%>/g, R = /<%([\s\S]+?)%>/g, F = /<%=([\s\S]+?)%>/g, H = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, I = /^\w*$/, X = /^\./, K = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, U = /[\\^$.*+?()[\]{}|]/g, J = RegExp(U.source), V = /^\s+|\s+$/g, G = /^\s+/, $ = /\s+$/, Q = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, Z = /\{\n\/\* \[wrapped with (.+)\] \*/, ee = /,? & /, te = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g, ne = /\\(\\)?/g, re = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, oe = /\w*$/, ae = /^[-+]0x[0-9a-f]+$/i, ie = /^0b[01]+$/i, se = /^\[object .+?Constructor\]$/, ue = /^0o[0-7]+$/i, ce = /^(?:0|[1-9]\d*)$/, le = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g, de = /($^)/, fe = /['\n\r\u2028\u2029\\]/g, pe = "\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff", he = "\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", me = "[\\ud800-\\udfff]", Me = "[" + he + "]", ye = "[" + pe + "]", ve = "\\d+", be = "[\\u2700-\\u27bf]", ge = "[a-z\\xdf-\\xf6\\xf8-\\xff]", _e = "[^\\ud800-\\udfff" + he + ve + "\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]", Ae = "\\ud83c[\\udffb-\\udfff]", Le = "[^\\ud800-\\udfff]", we = "(?:\\ud83c[\\udde6-\\uddff]){2}", Te = "[\\ud800-\\udbff][\\udc00-\\udfff]", ke = "[A-Z\\xc0-\\xd6\\xd8-\\xde]", Oe = "(?:" + ge + "|" + _e + ")", Se = "(?:" + ke + "|" + _e + ")", ze = "(?:" + ye + "|" + Ae + ")" + "?", Ee = "[\\ufe0e\\ufe0f]?" + ze + ("(?:\\u200d(?:" + [Le, we, Te].join("|") + ")[\\ufe0e\\ufe0f]?" + ze + ")*"), xe = "(?:" + [be, we, Te].join("|") + ")" + Ee, De = "(?:" + [Le + ye + "?", ye, we, Te, me].join("|") + ")", Ne = RegExp("['’]", "g"), je = RegExp(ye, "g"), Ce = RegExp(Ae + "(?=" + Ae + ")|" + De + Ee, "g"), Pe = RegExp( [ ke + "?" + ge + "+(?:['’](?:d|ll|m|re|s|t|ve))?(?=" + [Me, ke, "$"].join("|") + ")", Se + "+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=" + [Me, ke + Oe, "$"].join("|") + ")", ke + "?" + Oe + "+(?:['’](?:d|ll|m|re|s|t|ve))?", ke + "+(?:['’](?:D|LL|M|RE|S|T|VE))?", "\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)", "\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)", ve, xe, ].join("|"), "g" ), Ye = RegExp("[\\u200d\\ud800-\\udfff" + pe + "\\ufe0e\\ufe0f]"), We = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/, qe = [ "Array", "Buffer", "DataView", "Date", "Error", "Float32Array", "Float64Array", "Function", "Int8Array", "Int16Array", "Int32Array", "Map", "Math", "Object", "Promise", "RegExp", "Set", "String", "Symbol", "TypeError", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "WeakMap", "_", "clearTimeout", "isFinite", "parseInt", "setTimeout", ], Be = -1, Re = {}; (Re[T] = Re[k] = Re[O] = Re[S] = Re[z] = Re[E] = Re["[object Uint8ClampedArray]"] = Re[x] = Re[D] = !0), (Re[u] = Re[c] = Re[L] = Re[l] = Re[w] = Re[d] = Re[f] = Re[p] = Re[m] = Re[M] = Re[y] = Re[v] = Re[b] = Re[g] = Re[A] = !1); var Fe = {}; (Fe[u] = Fe[c] = Fe[L] = Fe[w] = Fe[l] = Fe[d] = Fe[T] = Fe[k] = Fe[O] = Fe[S] = Fe[z] = Fe[m] = Fe[M] = Fe[y] = Fe[v] = Fe[b] = Fe[g] = Fe[_] = Fe[E] = Fe["[object Uint8ClampedArray]"] = Fe[x] = Fe[D] = !0), (Fe[f] = Fe[p] = Fe[A] = !1); var He = { "\\": "\\", "'": "'", "\n": "n", "\r": "r", "\u2028": "u2028", "\u2029": "u2029" }, Ie = parseFloat, Xe = parseInt, Ke = "object" == typeof e && e && e.Object === Object && e, Ue = "object" == typeof self && self && self.Object === Object && self, Je = Ke || Ue || Function("return this")(), Ve = t && !t.nodeType && t, Ge = Ve && "object" == typeof r && r && !r.nodeType && r, $e = Ge && Ge.exports === Ve, Qe = $e && Ke.process, Ze = (function () { try { return Qe && Qe.binding && Qe.binding("util"); } catch (e) {} })(), et = Ze && Ze.isArrayBuffer, tt = Ze && Ze.isDate, nt = Ze && Ze.isMap, rt = Ze && Ze.isRegExp, ot = Ze && Ze.isSet, at = Ze && Ze.isTypedArray; function it(e, t) { return e.set(t[0], t[1]), e; } function st(e, t) { return e.add(t), e; } function ut(e, t, n) { switch (n.length) { case 0: return e.call(t); case 1: return e.call(t, n[0]); case 2: return e.call(t, n[0], n[1]); case 3: return e.call(t, n[0], n[1], n[2]); } return e.apply(t, n); } function ct(e, t, n, r) { for (var o = -1, a = null == e ? 0 : e.length; ++o < a; ) { var i = e[o]; t(r, i, n(i), e); } return r; } function lt(e, t) { for (var n = -1, r = null == e ? 0 : e.length; ++n < r && !1 !== t(e[n], n, e); ); return e; } function dt(e, t) { for (var n = null == e ? 0 : e.length; n-- && !1 !== t(e[n], n, e); ); return e; } function ft(e, t) { for (var n = -1, r = null == e ? 0 : e.length; ++n < r; ) if (!t(e[n], n, e)) return !1; return !0; } function pt(e, t) { for (var n = -1, r = null == e ? 0 : e.length, o = 0, a = []; ++n < r; ) { var i = e[n]; t(i, n, e) && (a[o++] = i); } return a; } function ht(e, t) { return !!(null == e ? 0 : e.length) && wt(e, t, 0) > -1; } function mt(e, t, n) { for (var r = -1, o = null == e ? 0 : e.length; ++r < o; ) if (n(t, e[r])) return !0; return !1; } function Mt(e, t) { for (var n = -1, r = null == e ? 0 : e.length, o = Array(r); ++n < r; ) o[n] = t(e[n], n, e); return o; } function yt(e, t) { for (var n = -1, r = t.length, o = e.length; ++n < r; ) e[o + n] = t[n]; return e; } function vt(e, t, n, r) { var o = -1, a = null == e ? 0 : e.length; for (r && a && (n = e[++o]); ++o < a; ) n = t(n, e[o], o, e); return n; } function bt(e, t, n, r) { var o = null == e ? 0 : e.length; for (r && o && (n = e[--o]); o--; ) n = t(n, e[o], o, e); return n; } function gt(e, t) { for (var n = -1, r = null == e ? 0 : e.length; ++n < r; ) if (t(e[n], n, e)) return !0; return !1; } var _t = St("length"); function At(e, t, n) { var r; return ( n(e, function (e, n, o) { if (t(e, n, o)) return (r = n), !1; }), r ); } function Lt(e, t, n, r) { for (var o = e.length, a = n + (r ? 1 : -1); r ? a-- : ++a < o; ) if (t(e[a], a, e)) return a; return -1; } function wt(e, t, n) { return t == t ? (function (e, t, n) { var r = n - 1, o = e.length; for (; ++r < o; ) if (e[r] === t) return r; return -1; })(e, t, n) : Lt(e, kt, n); } function Tt(e, t, n, r) { for (var o = n - 1, a = e.length; ++o < a; ) if (r(e[o], t)) return o; return -1; } function kt(e) { return e != e; } function Ot(e, t) { var n = null == e ? 0 : e.length; return n ? xt(e, t) / n : NaN; } function St(e) { return function (t) { return null == t ? void 0 : t[e]; }; } function zt(e) { return function (t) { return null == e ? void 0 : e[t]; }; } function Et(e, t, n, r, o) { return ( o(e, function (e, o, a) { n = r ? ((r = !1), e) : t(n, e, o, a); }), n ); } function xt(e, t) { for (var n, r = -1, o = e.length; ++r < o; ) { var a = t(e[r]); void 0 !== a && (n = void 0 === n ? a : n + a); } return n; } function Dt(e, t) { for (var n = -1, r = Array(e); ++n < e; ) r[n] = t(n); return r; } function Nt(e) { return function (t) { return e(t); }; } function jt(e, t) { return Mt(t, function (t) { return e[t]; }); } function Ct(e, t) { return e.has(t); } function Pt(e, t) { for (var n = -1, r = e.length; ++n < r && wt(t, e[n], 0) > -1; ); return n; } function Yt(e, t) { for (var n = e.length; n-- && wt(t, e[n], 0) > -1; ); return n; } function Wt(e, t) { for (var n = e.length, r = 0; n--; ) e[n] === t && ++r; return r; } var qt = zt({ À: "A", Á: "A", Â: "A", Ã: "A", Ä: "A", Å: "A", à: "a", á: "a", â: "a", ã: "a", ä: "a", å: "a", Ç: "C", ç: "c", Ð: "D", ð: "d", È: "E", É: "E", Ê: "E", Ë: "E", è: "e", é: "e", ê: "e", ë: "e", Ì: "I", Í: "I", Î: "I", Ï: "I", ì: "i", í: "i", î: "i", ï: "i", Ñ: "N", ñ: "n", Ò: "O", Ó: "O", Ô: "O", Õ: "O", Ö: "O", Ø: "O", ò: "o", ó: "o", ô: "o", õ: "o", ö: "o", ø: "o", Ù: "U", Ú: "U", Û: "U", Ü: "U", ù: "u", ú: "u", û: "u", ü: "u", Ý: "Y", ý: "y", ÿ: "y", Æ: "Ae", æ: "ae", Þ: "Th", þ: "th", ß: "ss", Ā: "A", Ă: "A", Ą: "A", ā: "a", ă: "a", ą: "a", Ć: "C", Ĉ: "C", Ċ: "C", Č: "C", ć: "c", ĉ: "c", ċ: "c", č: "c", Ď: "D", Đ: "D", ď: "d", đ: "d", Ē: "E", Ĕ: "E", Ė: "E", Ę: "E", Ě: "E", ē: "e", ĕ: "e", ė: "e", ę: "e", ě: "e", Ĝ: "G", Ğ: "G", Ġ: "G", Ģ: "G", ĝ: "g", ğ: "g", ġ: "g", ģ: "g", Ĥ: "H", Ħ: "H", ĥ: "h", ħ: "h", Ĩ: "I", Ī: "I", Ĭ: "I", Į: "I", İ: "I", ĩ: "i", ī: "i", ĭ: "i", į: "i", ı: "i", Ĵ: "J", ĵ: "j", Ķ: "K", ķ: "k", ĸ: "k", Ĺ: "L", Ļ: "L", Ľ: "L", Ŀ: "L", Ł: "L", ĺ: "l", ļ: "l", ľ: "l", ŀ: "l", ł: "l", Ń: "N", Ņ: "N", Ň: "N", Ŋ: "N", ń: "n", ņ: "n", ň: "n", ŋ: "n", Ō: "O", Ŏ: "O", Ő: "O", ō: "o", ŏ: "o", ő: "o", Ŕ: "R", Ŗ: "R", Ř: "R", ŕ: "r", ŗ: "r", ř: "r", Ś: "S", Ŝ: "S", Ş: "S", Š: "S", ś: "s", ŝ: "s", ş: "s", š: "s", Ţ: "T", Ť: "T", Ŧ: "T", ţ: "t", ť: "t", ŧ: "t", Ũ: "U", Ū: "U", Ŭ: "U", Ů: "U", Ű: "U", Ų: "U", ũ: "u", ū: "u", ŭ: "u", ů: "u", ű: "u", ų: "u", Ŵ: "W", ŵ: "w", Ŷ: "Y", ŷ: "y", Ÿ: "Y", Ź: "Z", Ż: "Z", Ž: "Z", ź: "z", ż: "z", ž: "z", IJ: "IJ", ij: "ij", Œ: "Oe", œ: "oe", ʼn: "'n", ſ: "s", }), Bt = zt({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }); function Rt(e) { return "\\" + He[e]; } function Ft(e) { return Ye.test(e); } function Ht(e) { var t = -1, n = Array(e.size); return ( e.forEach(function (e, r) { n[++t] = [r, e]; }), n ); } function It(e, t) { return function (n) { return e(t(n)); }; } function Xt(e, t) { for (var n = -1, r = e.length, o = 0, a = []; ++n < r; ) { var s = e[n]; (s !== t && s !== i) || ((e[n] = i), (a[o++] = n)); } return a; } function Kt(e) { var t = -1, n = Array(e.size); return ( e.forEach(function (e) { n[++t] = e; }), n ); } function Ut(e) { var t = -1, n = Array(e.size); return ( e.forEach(function (e) { n[++t] = [e, e]; }), n ); } function Jt(e) { return Ft(e) ? (function (e) { var t = (Ce.lastIndex = 0); for (; Ce.test(e); ) ++t; return t; })(e) : _t(e); } function Vt(e) { return Ft(e) ? (function (e) { return e.match(Ce) || []; })(e) : (function (e) { return e.split(""); })(e); } var Gt = zt({ "&": "&", "<": "<", ">": ">", """: '"', "'": "'" }); var $t = (function e(t) { var n, r = (t = null == t ? Je : $t.defaults(Je.Object(), t, $t.pick(Je, qe))).Array, o = t.Date, pe = t.Error, he = t.Function, me = t.Math, Me = t.Object, ye = t.RegExp, ve = t.String, be = t.TypeError, ge = r.prototype, _e = he.prototype, Ae = Me.prototype, Le = t["__core-js_shared__"], we = _e.toString, Te = Ae.hasOwnProperty, ke = 0, Oe = (n = /[^.]+$/.exec((Le && Le.keys && Le.keys.IE_PROTO) || "")) ? "Symbol(src)_1." + n : "", Se = Ae.toString, ze = we.call(Me), Ee = Je._, xe = ye( "^" + we .call(Te) .replace(U, "\\$&") .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ), De = $e ? t.Buffer : void 0, Ce = t.Symbol, Ye = t.Uint8Array, He = De ? De.allocUnsafe : void 0, Ke = It(Me.getPrototypeOf, Me), Ue = Me.create, Ve = Ae.propertyIsEnumerable, Ge = ge.splice, Qe = Ce ? Ce.isConcatSpreadable : void 0, Ze = Ce ? Ce.iterator : void 0, _t = Ce ? Ce.toStringTag : void 0, zt = (function () { try { var e = ra(Me, "defineProperty"); return e({}, "", {}), e; } catch (e) {} })(), Qt = t.clearTimeout !== Je.clearTimeout && t.clearTimeout, Zt = o && o.now !== Je.Date.now && o.now, en = t.setTimeout !== Je.setTimeout && t.setTimeout, tn = me.ceil, nn = me.floor, rn = Me.getOwnPropertySymbols, on = De ? De.isBuffer : void 0, an = t.isFinite, sn = ge.join, un = It(Me.keys, Me), cn = me.max, ln = me.min, dn = o.now, fn = t.parseInt, pn = me.random, hn = ge.reverse, mn = ra(t, "DataView"), Mn = ra(t, "Map"), yn = ra(t, "Promise"), vn = ra(t, "Set"), bn = ra(t, "WeakMap"), gn = ra(Me, "create"), _n = bn && new bn(), An = {}, Ln = za(mn), wn = za(Mn), Tn = za(yn), kn = za(vn), On = za(bn), Sn = Ce ? Ce.prototype : void 0, zn = Sn ? Sn.valueOf : void 0, En = Sn ? Sn.toString : void 0; function xn(e) { if (Ki(e) && !Ci(e) && !(e instanceof Cn)) { if (e instanceof jn) return e; if (Te.call(e, "__wrapped__")) return Ea(e); } return new jn(e); } var Dn = (function () { function e() {} return function (t) { if (!Xi(t)) return {}; if (Ue) return Ue(t); e.prototype = t; var n = new e(); return (e.prototype = void 0), n; }; })(); function Nn() {} function jn(e, t) { (this.__wrapped__ = e), (this.__actions__ = []), (this.__chain__ = !!t), (this.__index__ = 0), (this.__values__ = void 0); } function Cn(e) { (this.__wrapped__ = e), (this.__actions__ = []), (this.__dir__ = 1), (this.__filtered__ = !1), (this.__iteratees__ = []), (this.__takeCount__ = 4294967295), (this.__views__ = []); } function Pn(e) { var t = -1, n = null == e ? 0 : e.length; for (this.clear(); ++t < n; ) { var r = e[t]; this.set(r[0], r[1]); } } function Yn(e) { var t = -1, n = null == e ? 0 : e.length; for (this.clear(); ++t < n; ) { var r = e[t]; this.set(r[0], r[1]); } } function Wn(e) { var t = -1, n = null == e ? 0 : e.length; for (this.clear(); ++t < n; ) { var r = e[t]; this.set(r[0], r[1]); } } function qn(e) { var t = -1, n = null == e ? 0 : e.length; for (this.__data__ = new Wn(); ++t < n; ) this.add(e[t]); } function Bn(e) { var t = (this.__data__ = new Yn(e)); this.size = t.size; } function Rn(e, t) { var n = Ci(e), r = !n && ji(e), o = !n && !r && qi(e), a = !n && !r && !o && es(e), i = n || r || o || a, s = i ? Dt(e.length, ve) : [], u = s.length; for (var c in e) (!t && !Te.call(e, c)) || (i && ("length" == c || (o && ("offset" == c || "parent" == c)) || (a && ("buffer" == c || "byteLength" == c || "byteOffset" == c)) || la(c, u))) || s.push(c); return s; } function Fn(e) { var t = e.length; return t ? e[qr(0, t - 1)] : void 0; } function Hn(e, t) { return ka(_o(e), Qn(t, 0, e.length)); } function In(e) { return ka(_o(e)); } function Xn(e, t, n) { ((void 0 !== n && !xi(e[t], n)) || (void 0 === n && !(t in e))) && Gn(e, t, n); } function Kn(e, t, n) { var r = e[t]; (Te.call(e, t) && xi(r, n) && (void 0 !== n || t in e)) || Gn(e, t, n); } function Un(e, t) { for (var n = e.length; n--; ) if (xi(e[n][0], t)) return n; return -1; } function Jn(e, t, n, r) { return ( rr(e, function (e, o, a) { t(r, e, n(e), a); }), r ); } function Vn(e, t) { return e && Ao(t, As(t), e); } function Gn(e, t, n) { "__proto__" == t && zt ? zt(e, t, { configurable: !0, enumerable: !0, value: n, writable: !0 }) : (e[t] = n); } function $n(e, t) { for (var n = -1, o = t.length, a = r(o), i = null == e; ++n < o; ) a[n] = i ? void 0 : ys(e, t[n]); return a; } function Qn(e, t, n) { return e == e && (void 0 !== n && (e = e <= n ? e : n), void 0 !== t && (e = e >= t ? e : t)), e; } function Zn(e, t, n, r, o, a) { var i, s = 1 & t, c = 2 & t, f = 4 & t; if ((n && (i = o ? n(e, r, o, a) : n(e)), void 0 !== i)) return i; if (!Xi(e)) return e; var A = Ci(e); if (A) { if ( ((i = (function (e) { var t = e.length, n = e.constructor(t); t && "string" == typeof e[0] && Te.call(e, "index") && ((n.index = e.index), (n.input = e.input)); return n; })(e)), !s) ) return _o(e, i); } else { var N = ia(e), j = N == p || N == h; if (qi(e)) return mo(e, s); if (N == y || N == u || (j && !o)) { if (((i = c || j ? {} : ua(e)), !s)) return c ? (function (e, t) { return Ao(e, aa(e), t); })( e, (function (e, t) { return e && Ao(t, Ls(t), e); })(i, e) ) : (function (e, t) { return Ao(e, oa(e), t); })(e, Vn(i, e)); } else { if (!Fe[N]) return o ? e : {}; i = (function (e, t, n, r) { var o = e.constructor; switch (t) { case L: return Mo(e); case l: case d: return new o(+e); case w: return (function (e, t) { var n = t ? Mo(e.buffer) : e.buffer; return new e.constructor(n, e.byteOffset, e.byteLength); })(e, r); case T: case k: case O: case S: case z: case E: case "[object Uint8ClampedArray]": case x: case D: return yo(e, r); case m: return (function (e, t, n) { return vt(t ? n(Ht(e), 1) : Ht(e), it, new e.constructor()); })(e, r, n); case M: case g: return new o(e); case v: return (function (e) { var t = new e.constructor(e.source, oe.exec(e)); return (t.lastIndex = e.lastIndex), t; })(e); case b: return (function (e, t, n) { return vt(t ? n(Kt(e), 1) : Kt(e), st, new e.constructor()); })(e, r, n); case _: return (a = e), zn ? Me(zn.call(a)) : {}; } var a; })(e, N, Zn, s); } } a || (a = new Bn()); var C = a.get(e); if (C) return C; a.set(e, i); var P = A ? void 0 : (f ? (c ? Go : Vo) : c ? Ls : As)(e); return ( lt(P || e, function (r, o) { P && (r = e[(o = r)]), Kn(i, o, Zn(r, t, n, o, e, a)); }), i ); } function er(e, t, n) { var r = n.length; if (null == e) return !r; for (e = Me(e); r--; ) { var o = n[r], a = t[o], i = e[o]; if ((void 0 === i && !(o in e)) || !a(i)) return !1; } return !0; } function tr(e, t, n) { if ("function" != typeof e) throw new be(a); return Aa(function () { e.apply(void 0, n); }, t); } function nr(e, t, n, r) { var o = -1, a = ht, i = !0, s = e.length, u = [], c = t.length; if (!s) return u; n && (t = Mt(t, Nt(n))), r ? ((a = mt), (i = !1)) : t.length >= 200 && ((a = Ct), (i = !1), (t = new qn(t))); e: for (; ++o < s; ) { var l = e[o], d = null == n ? l : n(l); if (((l = r || 0 !== l ? l : 0), i && d == d)) { for (var f = c; f--; ) if (t[f] === d) continue e; u.push(l); } else a(t, d, r) || u.push(l); } return u; } (xn.templateSettings = { escape: B, evaluate: R, interpolate: F, variable: "", imports: { _: xn } }), (xn.prototype = Nn.prototype), (xn.prototype.constructor = xn), (jn.prototype = Dn(Nn.prototype)), (jn.prototype.constructor = jn), (Cn.prototype = Dn(Nn.prototype)), (Cn.prototype.constructor = Cn), (Pn.prototype.clear = function () { (this.__data__ = gn ? gn(null) : {}), (this.size = 0); }), (Pn.prototype.delete = function (e) { var t = this.has(e) && delete this.__data__[e]; return (this.size -= t ? 1 : 0), t; }), (Pn.prototype.get = function (e) { var t = this.__data__; if (gn) { var n = t[e]; return "__lodash_hash_undefined__" === n ? void 0 : n; } return Te.call(t, e) ? t[e] : void 0; }), (Pn.prototype.has = function (e) { var t = this.__data__; return gn ? void 0 !== t[e] : Te.call(t, e); }), (Pn.prototype.set = function (e, t) { var n = this.__data__; return (this.size += this.has(e) ? 0 : 1), (n[e] = gn && void 0 === t ? "__lodash_hash_undefined__" : t), this; }), (Yn.prototype.clear = function () { (this.__data__ = []), (this.size = 0); }), (Yn.prototype.delete = function (e) { var t = this.__data__, n = Un(t, e); return !(n < 0) && (n == t.length - 1 ? t.pop() : Ge.call(t, n, 1), --this.size, !0); }), (Yn.prototype.get = function (e) { var t = this.__data__, n = Un(t, e); return n < 0 ? void 0 : t[n][1]; }), (Yn.prototype.has = function (e) { return Un(this.__data__, e) > -1; }), (Yn.prototype.set = function (e, t) { var n = this.__data__, r = Un(n, e); return r < 0 ? (++this.size, n.push([e, t])) : (n[r][1] = t), this; }), (Wn.prototype.clear = function () { (this.size = 0), (this.__data__ = { hash: new Pn(), map: new (Mn || Yn)(), string: new Pn() }); }), (Wn.prototype.delete = function (e) { var t = ta(this, e).delete(e); return (this.size -= t ? 1 : 0), t; }), (Wn.prototype.get = function (e) { return ta(this, e).get(e); }), (Wn.prototype.has = function (e) { return ta(this, e).has(e); }), (Wn.prototype.set = function (e, t) { var n = ta(this, e), r = n.size; return n.set(e, t), (this.size += n.size == r ? 0 : 1), this; }), (qn.prototype.add = qn.prototype.push = function (e) { return this.__data__.set(e, "__lodash_hash_undefined__"), this; }), (qn.prototype.has = function (e) { return this.__data__.has(e); }), (Bn.prototype.clear = function () { (this.__data__ = new Yn()), (this.size = 0); }), (Bn.prototype.delete = function (e) { var t = this.__data__, n = t.delete(e); return (this.size = t.size), n; }), (Bn.prototype.get = function (e) { return this.__data__.get(e); }), (Bn.prototype.has = function (e) { return this.__data__.has(e); }), (Bn.prototype.set = function (e, t) { var n = this.__data__; if (n instanceof Yn) { var r = n.__data__; if (!Mn || r.length < 199) return r.push([e, t]), (this.size = ++n.size), this; n = this.__data__ = new Wn(r); } return n.set(e, t), (this.size = n.size), this; }); var rr = To(dr), or = To(fr, !0); function ar(e, t) { var n = !0; return ( rr(e, function (e, r, o) { return (n = !!t(e, r, o)); }), n ); } function ir(e, t, n) { for (var r = -1, o = e.length; ++r < o; ) { var a = e[r], i = t(a); if (null != i && (void 0 === s ? i == i && !Zi(i) : n(i, s))) var s = i, u = a; } return u; } function sr(e, t) { var n = []; return ( rr(e, function (e, r, o) { t(e, r, o) && n.push(e); }), n ); } function ur(e, t, n, r, o) { var a = -1, i = e.length; for (n || (n = ca), o || (o = []); ++a < i; ) { var s = e[a]; t > 0 && n(s) ? (t > 1 ? ur(s, t - 1, n, r, o) : yt(o, s)) : r || (o[o.length] = s); } return o; } var cr = ko(), lr = ko(!0); function dr(e, t) { return e && cr(e, t, As); } function fr(e, t) { return e && lr(e, t, As); } function pr(e, t) { return pt(t, function (t) { return Fi(e[t]); }); } function hr(e, t) { for (var n = 0, r = (t = lo(t, e)).length; null != e && n < r; ) e = e[Sa(t[n++])]; return n && n == r ? e : void 0; } function mr(e, t, n) { var r = t(e); return Ci(e) ? r : yt(r, n(e)); } function Mr(e) { return null == e ? void 0 === e ? "[object Undefined]" : "[object Null]" : _t && _t in Me(e) ? (function (e) { var t = Te.call(e, _t), n = e[_t]; try { e[_t] = void 0; var r = !0; } catch (e) {} var o = Se.call(e); r && (t ? (e[_t] = n) : delete e[_t]); return o; })(e) : (function (e) { return Se.call(e); })(e); } function yr(e, t) { return e > t; } function vr(e, t) { return null != e && Te.call(e, t); } function br(e, t) { return null != e && t in Me(e); } function gr(e, t, n) { for (var o = n ? mt : ht, a = e[0].length, i = e.length, s = i, u = r(i), c = 1 / 0, l = []; s--; ) { var d = e[s]; s && t && (d = Mt(d, Nt(t))), (c = ln(d.length, c)), (u[s] = !n && (t || (a >= 120 && d.length >= 120)) ? new qn(s && d) : void 0); } d = e[0]; var f = -1, p = u[0]; e: for (; ++f < a && l.length < c; ) { var h = d[f], m = t ? t(h) : h; if (((h = n || 0 !== h ? h : 0), !(p ? Ct(p, m) : o(l, m, n)))) { for (s = i; --s; ) { var M = u[s]; if (!(M ? Ct(M, m) : o(e[s], m, n))) continue e; } p && p.push(m), l.push(h); } } return l; } function _r(e, t, n) { var r = null == (e = ba(e, (t = lo(t, e)))) ? e : e[Sa(Ra(t))]; return null == r ? void 0 : ut(r, e, n); } function Ar(e) { return Ki(e) && Mr(e) == u; } function Lr(e, t, n, r, o) { return ( e === t || (null == e || null == t || (!Ki(e) && !Ki(t)) ? e != e && t != t : (function (e, t, n, r, o, a) { var i = Ci(e), s = Ci(t), p = i ? c : ia(e), h = s ? c : ia(t), A = (p = p == u ? y : p) == y, T = (h = h == u ? y : h) == y, k = p == h; if (k && qi(e)) { if (!qi(t)) return !1; (i = !0), (A = !1); } if (k && !A) return ( a || (a = new Bn()), i || es(e) ? Uo(e, t, n, r, o, a) : (function (e, t, n, r, o, a, i) { switch (n) { case w: if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset) return !1; (e = e.buffer), (t = t.buffer); case L: return !(e.byteLength != t.byteLength || !a(new Ye(e), new Ye(t))); case l: case d: case M: return xi(+e, +t); case f: return e.name == t.name && e.message == t.message; case v: case g: return e == t + ""; case m: var s = Ht; case b: var u = 1 & r; if ((s || (s = Kt), e.size != t.size && !u)) return !1; var c = i.get(e); if (c) return c == t; (r |= 2), i.set(e, t); var p = Uo(s(e), s(t), r, o, a, i); return i.delete(e), p; case _: if (zn) return zn.call(e) == zn.call(t); } return !1; })(e, t, p, n, r, o, a) ); if (!(1 & n)) { var O = A && Te.call(e, "__wrapped__"), S = T && Te.call(t, "__wrapped__"); if (O || S) { var z = O ? e.value() : e, E = S ? t.value() : t; return a || (a = new Bn()), o(z, E, n, r, a); } } if (!k) return !1; return ( a || (a = new Bn()), (function (e, t, n, r, o, a) { var i = 1 & n, s = Vo(e), u = s.length, c = Vo(t).length; if (u != c && !i) return !1; var l = u; for (; l--; ) { var d = s[l]; if (!(i ? d in t : Te.call(t, d))) return !1; } var f = a.get(e); if (f && a.get(t)) return f == t; var p = !0; a.set(e, t), a.set(t, e); var h = i; for (; ++l < u; ) { d = s[l]; var m = e[d], M = t[d]; if (r) var y = i ? r(M, m, d, t, e, a) : r(m, M, d, e, t, a); if (!(void 0 === y ? m === M || o(m, M, n, r, a) : y)) { p = !1; break; } h || (h = "constructor" == d); } if (p && !h) { var v = e.constructor, b = t.constructor; v == b || !("constructor" in e) || !("constructor" in t) || ("function" == typeof v && v instanceof v && "function" == typeof b && b instanceof b) || (p = !1); } return a.delete(e), a.delete(t), p; })(e, t, n, r, o, a) ); })(e, t, n, r, Lr, o)) ); } function wr(e, t, n, r) { var o = n.length, a = o, i = !r; if (null == e) return !a; for (e = Me(e); o--; ) { var s = n[o]; if (i && s[2] ? s[1] !== e[s[0]] : !(s[0] in e)) return !1; } for (; ++o < a; ) { var u = (s = n[o])[0], c = e[u], l = s[1]; if (i && s[2]) { if (void 0 === c && !(u in e)) return !1; } else { var d = new Bn(); if (r) var f = r(c, l, u, e, t, d); if (!(void 0 === f ? Lr(l, c, 3, r, d) : f)) return !1; } } return !0; } function Tr(e) { return !(!Xi(e) || ((t = e), Oe && Oe in t)) && (Fi(e) ? xe : se).test(za(e)); var t; } function kr(e) { return "function" == typeof e ? e : null == e ? Js : "object" == typeof e ? (Ci(e) ? Dr(e[0], e[1]) : xr(e)) : ru(e); } function Or(e) { if (!ma(e)) return un(e); var t = []; for (var n in Me(e)) Te.call(e, n) && "constructor" != n && t.push(n); return t; } function Sr(e) { if (!Xi(e)) return (function (e) { var t = []; if (null != e) for (var n in Me(e)) t.push(n); return t; })(e); var t = ma(e), n = []; for (var r in e) ("constructor" != r || (!t && Te.call(e, r))) && n.push(r); return n; } function zr(e, t) { return e < t; } function Er(e, t) { var n = -1, o = Yi(e) ? r(e.length) : []; return ( rr(e, function (e, r, a) { o[++n] = t(e, r, a); }), o ); } function xr(e) { var t = na(e); return 1 == t.length && t[0][2] ? ya(t[0][0], t[0][1]) : function (n) { return n === e || wr(n, e, t); }; } function Dr(e, t) { return fa(e) && Ma(t) ? ya(Sa(e), t) : function (n) { var r = ys(n, e); return void 0 === r && r === t ? vs(n, e) : Lr(t, r, 3); }; } function Nr(e, t, n, r, o) { e !== t && cr( t, function (a, i) { if (Xi(a)) o || (o = new Bn()), (function (e, t, n, r, o, a, i) { var s = e[n], u = t[n], c = i.get(u); if (c) return void Xn(e, n, c); var l = a ? a(s, u, n + "", e, t, i) : void 0, d = void 0 === l; if (d) { var f = Ci(u), p = !f && qi(u), h = !f && !p && es(u); (l = u), f || p || h ? Ci(s) ? (l = s) : Wi(s) ? (l = _o(s)) : p ? ((d = !1), (l = mo(u, !0))) : h ? ((d = !1), (l = yo(u, !0))) : (l = []) : Vi(u) || ji(u) ? ((l = s), ji(s) ? (l = us(s)) : (!Xi(s) || (r && Fi(s))) && (l = ua(u))) : (d = !1); } d && (i.set(u, l), o(l, u, r, a, i), i.delete(u)); Xn(e, n, l); })(e, t, i, n, Nr, r, o); else { var s = r ? r(e[i], a, i + "", e, t, o) : void 0; void 0 === s && (s = a), Xn(e, i, s); } }, Ls ); } function jr(e, t) { var n = e.length; if (n) return la((t += t < 0 ? n : 0), n) ? e[t] : void 0; } function Cr(e, t, n) { var r = -1; return ( (t = Mt(t.length ? t : [Js], Nt(ea()))), (function (e, t) { var n = e.length; for (e.sort(t); n--; ) e[n] = e[n].value; return e; })( Er(e, function (e, n, o) { return { criteria: Mt(t, function (t) { return t(e); }), index: ++r, value: e, }; }), function (e, t) { return (function (e, t, n) { var r = -1, o = e.criteria, a = t.criteria, i = o.length, s = n.length; for (; ++r < i; ) { var u = vo(o[r], a[r]); if (u) { if (r >= s) return u; var c = n[r]; return u * ("desc" == c ? -1 : 1); } } return e.index - t.index; })(e, t, n); } ) ); } function Pr(e, t, n) { for (var r = -1, o = t.length, a = {}; ++r < o; ) { var i = t[r], s = hr(e, i); n(s, i) && Ir(a, lo(i, e), s); } return a; } function Yr(e, t, n, r) { var o = r ? Tt : wt, a = -1, i = t.length, s = e; for (e === t && (t = _o(t)), n && (s = Mt(e, Nt(n))); ++a < i; ) for (var u = 0, c = t[a], l = n ? n(c) : c; (u = o(s, l, u, r)) > -1; ) s !== e && Ge.call(s, u, 1), Ge.call(e, u, 1); return e; } function Wr(e, t) { for (var n = e ? t.length : 0, r = n - 1; n--; ) { var o = t[n]; if (n == r || o !== a) { var a = o; la(o) ? Ge.call(e, o, 1) : no(e, o); } } return e; } function qr(e, t) { return e + nn(pn() * (t - e + 1)); } function Br(e, t) { var n = ""; if (!e || t < 1 || t > 9007199254740991) return n; do { t % 2 && (n += e), (t = nn(t / 2)) && (e += e); } while (t); return n; } function Rr(e, t) { return La(va(e, t, Js), e + ""); } function Fr(e) { return Fn(xs(e)); } function Hr(e, t) { var n = xs(e); return ka(n, Qn(t, 0, n.length)); } function Ir(e, t, n, r) { if (!Xi(e)) return e; for (var o = -1, a = (t = lo(t, e)).length, i = a - 1, s = e; null != s && ++o < a; ) { var u = Sa(t[o]), c = n; if (o != i) { var l = s[u]; void 0 === (c = r ? r(l, u, s) : void 0) && (c = Xi(l) ? l : la(t[o + 1]) ? [] : {}); } Kn(s, u, c), (s = s[u]); } return e; } var Xr = _n ? function (e, t) { return _n.set(e, t), e; } : Js, Kr = zt ? function (e, t) { return zt(e, "toString", { configurable: !0, enumerable: !1, value: Xs(t), writable: !0 }); } : Js; function Ur(e) { return ka(xs(e)); } function Jr(e, t, n) { var o = -1, a = e.length; t < 0 && (t = -t > a ? 0 : a + t), (n = n > a ? a : n) < 0 && (n += a), (a = t > n ? 0 : (n - t) >>> 0), (t >>>= 0); for (var i = r(a); ++o < a; ) i[o] = e[o + t]; return i; } function Vr(e, t) { var n; return ( rr(e, function (e, r, o) { return !(n = t(e, r, o)); }), !!n ); } function Gr(e, t, n) { var r = 0, o = null == e ? r : e.length; if ("number" == typeof t && t == t && o <= 2147483647) { for (; r < o; ) { var a = (r + o) >>> 1, i = e[a]; null !== i && !Zi(i) && (n ? i <= t : i < t) ? (r = a + 1) : (o = a); } return o; } return $r(e, t, Js, n); } function $r(e, t, n, r) { t = n(t); for (var o = 0, a = null == e ? 0 : e.length, i = t != t, s = null === t, u = Zi(t), c = void 0 === t; o < a; ) { var l = nn((o + a) / 2), d = n(e[l]), f = void 0 !== d, p = null === d, h = d == d, m = Zi(d); if (i) var M = r || h; else M = c ? h && (r || f) : s ? h && f && (r || !p) : u ? h && f && !p && (r || !m) : !p && !m && (r ? d <= t : d < t); M ? (o = l + 1) : (a = l); } return ln(a, 4294967294); } function Qr(e, t) { for (var n = -1, r = e.length, o = 0, a = []; ++n < r; ) { var i = e[n], s = t ? t(i) : i; if (!n || !xi(s, u)) { var u = s; a[o++] = 0 === i ? 0 : i; } } return a; } function Zr(e) { return "number" == typeof e ? e : Zi(e) ? NaN : +e; } function eo(e) { if ("string" == typeof e) return e; if (Ci(e)) return Mt(e, eo) + ""; if (Zi(e)) return En ? En.call(e) : ""; var t = e + ""; return "0" == t && 1 / e == -1 / 0 ? "-0" : t; } function to(e, t, n) { var r = -1, o = ht, a = e.length, i = !0, s = [], u = s; if (n) (i = !1), (o = mt); else if (a >= 200) { var c = t ? null : Ro(e); if (c) return Kt(c); (i = !1), (o = Ct), (u = new qn()); } else u = t ? [] : s; e: for (; ++r < a; ) { var l = e[r], d = t ? t(l) : l; if (((l = n || 0 !== l ? l : 0), i && d == d)) { for (var f = u.length; f--; ) if (u[f] === d) continue e; t && u.push(d), s.push(l); } else o(u, d, n) || (u !== s && u.push(d), s.push(l)); } return s; } function no(e, t) { return null == (e = ba(e, (t = lo(t, e)))) || delete e[Sa(Ra(t))]; } function ro(e, t, n, r) { return Ir(e, t, n(hr(e, t)), r); } function oo(e, t, n, r) { for (var o = e.length, a = r ? o : -1; (r ? a-- : ++a < o) && t(e[a], a, e); ); return n ? Jr(e, r ? 0 : a, r ? a + 1 : o) : Jr(e, r ? a + 1 : 0, r ? o : a); } function ao(e, t) { var n = e; return ( n instanceof Cn && (n = n.value()), vt( t, function (e, t) { return t.func.apply(t.thisArg, yt([e], t.args)); }, n ) ); } function io(e, t, n) { var o = e.length; if (o < 2) return o ? to(e[0]) : []; for (var a = -1, i = r(o); ++a < o; ) for (var s = e[a], u = -1; ++u < o; ) u != a && (i[a] = nr(i[a] || s, e[u], t, n)); return to(ur(i, 1), t, n); } function so(e, t, n) { for (var r = -1, o = e.length, a = t.length, i = {}; ++r < o; ) { var s = r < a ? t[r] : void 0; n(i, e[r], s); } return i; } function uo(e) { return Wi(e) ? e : []; } function co(e) { return "function" == typeof e ? e : Js; } function lo(e, t) { return Ci(e) ? e : fa(e, t) ? [e] : Oa(cs(e)); } var fo = Rr; function po(e, t, n) { var r = e.length; return (n = void 0 === n ? r : n), !t && n >= r ? e : Jr(e, t, n); } var ho = Qt || function (e) { return Je.clearTimeout(e); }; function mo(e, t) { if (t) return e.slice(); var n = e.length, r = He ? He(n) : new e.constructor(n); return e.copy(r), r; } function Mo(e) { var t = new e.constructor(e.byteLength); return new Ye(t).set(new Ye(e)), t; } function yo(e, t) { var n = t ? Mo(e.buffer) : e.buffer; return new e.constructor(n, e.byteOffset, e.length); } function vo(e, t) { if (e !== t) { var n = void 0 !== e, r = null === e, o = e == e, a = Zi(e), i = void 0 !== t, s = null === t, u = t == t, c = Zi(t); if ((!s && !c && !a && e > t) || (a && i && u && !s && !c) || (r && i && u) || (!n && u) || !o) return 1; if ((!r && !a && !c && e < t) || (c && n && o && !r && !a) || (s && n && o) || (!i && o) || !u) return -1; } return 0; } function bo(e, t, n, o) { for (var a = -1, i = e.length, s = n.length, u = -1, c = t.length, l = cn(i - s, 0), d = r(c + l), f = !o; ++u < c; ) d[u] = t[u]; for (; ++a < s; ) (f || a < i) && (d[n[a]] = e[a]); for (; l--; ) d[u++] = e[a++]; return d; } function go(e, t, n, o) { for (var a = -1, i = e.length, s = -1, u = n.length, c = -1, l = t.length, d = cn(i - u, 0), f = r(d + l), p = !o; ++a < d; ) f[a] = e[a]; for (var h = a; ++c < l; ) f[h + c] = t[c]; for (; ++s < u; ) (p || a < i) && (f[h + n[s]] = e[a++]); return f; } function _o(e, t) { var n = -1, o = e.length; for (t || (t = r(o)); ++n < o; ) t[n] = e[n]; return t; } function Ao(e, t, n, r) { var o = !n; n || (n = {}); for (var a = -1, i = t.length; ++a < i; ) { var s = t[a], u = r ? r(n[s], e[s], s, n, e) : void 0; void 0 === u && (u = e[s]), o ? Gn(n, s, u) : Kn(n, s, u); } return n; } function Lo(e, t) { return function (n, r) { var o = Ci(n) ? ct : Jn, a = t ? t() : {}; return o(n, e, ea(r, 2), a); }; } function wo(e) { return Rr(function (t, n) { var r = -1, o = n.length, a = o > 1 ? n[o - 1] : void 0, i = o > 2 ? n[2] : void 0; for (a = e.length > 3 && "function" == typeof a ? (o--, a) : void 0, i && da(n[0], n[1], i) && ((a = o < 3 ? void 0 : a), (o = 1)), t = Me(t); ++r < o; ) { var s = n[r]; s && e(t, s, r, a); } return t; }); } function To(e, t) { return function (n, r) { if (null == n) return n; if (!Yi(n)) return e(n, r); for (var o = n.length, a = t ? o : -1, i = Me(n); (t ? a-- : ++a < o) && !1 !== r(i[a], a, i); ); return n; }; } function ko(e) { return function (t, n, r) { for (var o = -1, a = Me(t), i = r(t), s = i.length; s--; ) { var u = i[e ? s : ++o]; if (!1 === n(a[u], u, a)) break; } return t; }; } function Oo(e) { return function (t) { var n = Ft((t = cs(t))) ? Vt(t) : void 0, r = n ? n[0] : t.charAt(0), o = n ? po(n, 1).join("") : t.slice(1); return r[e]() + o; }; } function So(e) { return function (t) { return vt(Fs(js(t).replace(Ne, "")), e, ""); }; } function zo(e) { return function () { var t = arguments; switch (t.length) { case 0: return new e(); case 1: return new e(t[0]); case 2: return new e(t[0], t[1]); case 3: return new e(t[0], t[1], t[2]); case 4: return new e(t[0], t[1], t[2], t[3]); case 5: return new e(t[0], t[1], t[2], t[3], t[4]); case 6: return new e(t[0], t[1], t[2], t[3], t[4], t[5]); case 7: return new e(t[0], t[1], t[2], t[3], t[4], t[5], t[6]); } var n = Dn(e.prototype), r = e.apply(n, t); return Xi(r) ? r : n; }; } function Eo(e) { return function (t, n, r) { var o = Me(t); if (!Yi(t)) { var a = ea(n, 3); (t = As(t)), (n = function (e) { return a(o[e], e, o); }); } var i = e(t, n, r); return i > -1 ? o[a ? t[i] : i] : void 0; }; } function xo(e) { return Jo(function (t) { var n = t.length, r = n, o = jn.prototype.thru; for (e && t.reverse(); r--; ) { var i = t[r]; if ("function" != typeof i) throw new be(a); if (o && !s && "wrapper" == Qo(i)) var s = new jn([], !0); } for (r = s ? r : n; ++r < n; ) { var u = Qo((i = t[r])), c = "wrapper" == u ? $o(i) : void 0; s = c && pa(c[0]) && 424 == c[1] && !c[4].length && 1 == c[9] ? s[Qo(c[0])].apply(s, c[3]) : 1 == i.length && pa(i) ? s[u]() : s.thru(i); } return function () { var e = arguments, r = e[0]; if (s && 1 == e.length && Ci(r)) return s.plant(r).value(); for (var o = 0, a = n ? t[o].apply(this, e) : r; ++o < n; ) a = t[o].call(this, a); return a; }; }); } function Do(e, t, n, o, a, i, s, u, c, l) { var d = 128 & t, f = 1 & t, p = 2 & t, h = 24 & t, m = 512 & t, M = p ? void 0 : zo(e); return function y() { for (var v = arguments.length, b = r(v), g = v; g--; ) b[g] = arguments[g]; if (h) var _ = Zo(y), A = Wt(b, _); if ((o && (b = bo(b, o, a, h)), i && (b = go(b, i, s, h)), (v -= A), h && v < l)) { var L = Xt(b, _); return qo(e, t, Do, y.placeholder, n, b, L, u, c, l - v); } var w = f ? n : this, T = p ? w[e] : e; return (v = b.length), u ? (b = ga(b, u)) : m && v > 1 && b.reverse(), d && c < v && (b.length = c), this && this !== Je && this instanceof y && (T = M || zo(T)), T.apply(w, b); }; } function No(e, t) { return function (n, r) { return (function (e, t, n, r) { return ( dr(e, function (e, o, a) { t(r, n(e), o, a); }), r ); })(n, e, t(r), {}); }; } function jo(e, t) { return function (n, r) { var o; if (void 0 === n && void 0 === r) return t; if ((void 0 !== n && (o = n), void 0 !== r)) { if (void 0 === o) return r; "string" == typeof n || "string" == typeof r ? ((n = eo(n)), (r = eo(r))) : ((n = Zr(n)), (r = Zr(r))), (o = e(n, r)); } return o; }; } function Co(e) { return Jo(function (t) { return ( (t = Mt(t, Nt(ea()))), Rr(function (n) { var r = this; return e(t, function (e) { return ut(e, r, n); }); }) ); }); } function Po(e, t) { var n = (t = void 0 === t ? " " : eo(t)).length; if (n < 2) return n ? Br(t, e) : t; var r = Br(t, tn(e / Jt(t))); return Ft(t) ? po(Vt(r), 0, e).join("") : r.slice(0, e); } function Yo(e) { return function (t, n, o) { return ( o && "number" != typeof o && da(t, n, o) && (n = o = void 0), (t = os(t)), void 0 === n ? ((n = t), (t = 0)) : (n = os(n)), (function (e, t, n, o) { for (var a = -1, i = cn(tn((t - e) / (n || 1)), 0), s = r(i); i--; ) (s[o ? i : ++a] = e), (e += n); return s; })(t, n, (o = void 0 === o ? (t < n ? 1 : -1) : os(o)), e) ); }; } function Wo(e) { return function (t, n) { return ("string" == typeof t && "string" == typeof n) || ((t = ss(t)), (n = ss(n))), e(t, n); }; } function qo(e, t, n, r, o, a, i, s, u, c) { var l = 8 & t; (t |= l ? 32 : 64), 4 & (t &= ~(l ? 64 : 32)) || (t &= -4); var d = [e, t, o, l ? a : void 0, l ? i : void 0, l ? void 0 : a, l ? void 0 : i, s, u, c], f = n.apply(void 0, d); return pa(e) && _a(f, d), (f.placeholder = r), wa(f, e, t); } function Bo(e) { var t = me[e]; return function (e, n) { if (((e = ss(e)), (n = null == n ? 0 : ln(as(n), 292)))) { var r = (cs(e) + "e").split("e"); return +((r = (cs(t(r[0] + "e" + (+r[1] + n))) + "e").split("e"))[0] + "e" + (+r[1] - n)); } return t(e); }; } var Ro = vn && 1 / Kt(new vn([, -0]))[1] == 1 / 0 ? function (e) { return new vn(e); } : Zs; function Fo(e) { return function (t) { var n = ia(t); return n == m ? Ht(t) : n == b ? Ut(t) : (function (e, t) { return Mt(t, function (t) { return [t, e[t]]; }); })(t, e(t)); }; } function Ho(e, t, n, o, s, u, c, l) { var d = 2 & t; if (!d && "function" != typeof e) throw new be(a); var f = o ? o.length : 0; if ((f || ((t &= -97), (o = s = void 0)), (c = void 0 === c ? c : cn(as(c), 0)), (l = void 0 === l ? l : as(l)), (f -= s ? s.length : 0), 64 & t)) { var p = o, h = s; o = s = void 0; } var m = d ? void 0 : $o(e), M = [e, t, n, o, s, p, h, u, c, l]; if ( (m && (function (e, t) { var n = e[1], r = t[1], o = n | r, a = o < 131, s = (128 == r && 8 == n) || (128 == r && 256 == n && e[7].length <= t[8]) || (384 == r && t[7].length <= t[8] && 8 == n); if (!a && !s) return e; 1 & r && ((e[2] = t[2]), (o |= 1 & n ? 0 : 4)); var u = t[3]; if (u) { var c = e[3]; (e[3] = c ? bo(c, u, t[4]) : u), (e[4] = c ? Xt(e[3], i) : t[4]); } (u = t[5]) && ((c = e[5]), (e[5] = c ? go(c, u, t[6]) : u), (e[6] = c ? Xt(e[5], i) : t[6])); (u = t[7]) && (e[7] = u); 128 & r && (e[8] = null == e[8] ? t[8] : ln(e[8], t[8])); null == e[9] && (e[9] = t[9]); (e[0] = t[0]), (e[1] = o); })(M, m), (e = M[0]), (t = M[1]), (n = M[2]), (o = M[3]), (s = M[4]), !(l = M[9] = void 0 === M[9] ? (d ? 0 : e.length) : cn(M[9] - f, 0)) && 24 & t && (t &= -25), t && 1 != t) ) y = 8 == t || 16 == t ? (function (e, t, n) { var o = zo(e); return function a() { for (var i = arguments.length, s = r(i), u = i, c = Zo(a); u--; ) s[u] = arguments[u]; var l = i < 3 && s[0] !== c && s[i - 1] !== c ? [] : Xt(s, c); if ((i -= l.length) < n) return qo(e, t, Do, a.placeholder, void 0, s, l, void 0, void 0, n - i); var d = this && this !== Je && this instanceof a ? o : e; return ut(d, this, s); }; })(e, t, l) : (32 != t && 33 != t) || s.length ? Do.apply(void 0, M) : (function (e, t, n, o) { var a = 1 & t, i = zo(e); return function t() { for (var s = -1, u = arguments.length, c = -1, l = o.length, d = r(l + u), f = this && this !== Je && this instanceof t ? i : e; ++c < l; ) d[c] = o[c]; for (; u--; ) d[c++] = arguments[++s]; return ut(f, a ? n : this, d); }; })(e, t, n, o); else var y = (function (e, t, n) { var r = 1 & t, o = zo(e); return function t() { var a = this && this !== Je && this instanceof t ? o : e; return a.apply(r ? n : this, arguments); }; })(e, t, n); return wa((m ? Xr : _a)(y, M), e, t); } function Io(e, t, n, r) { return void 0 === e || (xi(e, Ae[n]) && !Te.call(r, n)) ? t : e; } function Xo(e, t, n, r, o, a) { return Xi(e) && Xi(t) && (a.set(t, e), Nr(e, t, void 0, Xo, a), a.delete(t)), e; } function Ko(e) { return Vi(e) ? void 0 : e; } function Uo(e, t, n, r, o, a) { var i = 1 & n, s = e.length, u = t.length; if (s != u && !(i && u > s)) return !1; var c = a.get(e); if (c && a.get(t)) return c == t; var l = -1, d = !0, f = 2 & n ? new qn() : void 0; for (a.set(e, t), a.set(t, e); ++l < s; ) { var p = e[l], h = t[l]; if (r) var m = i ? r(h, p, l, t, e, a) : r(p, h, l, e, t, a); if (void 0 !== m) { if (m) continue; d = !1; break; } if (f) { if ( !gt(t, function (e, t) { if (!Ct(f, t) && (p === e || o(p, e, n, r, a))) return f.push(t); }) ) { d = !1; break; } } else if (p !== h && !o(p, h, n, r, a)) { d = !1; break; } } return a.delete(e), a.delete(t), d; } function Jo(e) { return La(va(e, void 0, Pa), e + ""); } function Vo(e) { return mr(e, As, oa); } function Go(e) { return mr(e, Ls, aa); } var $o = _n ? function (e) { return _n.get(e); } : Zs; function Qo(e) { for (var t = e.name + "", n = An[t], r = Te.call(An, t) ? n.length : 0; r--; ) { var o = n[r], a = o.func; if (null == a || a == e) return o.name; } return t; } function Zo(e) { return (Te.call(xn, "placeholder") ? xn : e).placeholder; } function ea() { var e = xn.iteratee || Vs; return (e = e === Vs ? kr : e), arguments.length ? e(arguments[0], arguments[1]) : e; } function ta(e, t) { var n, r, o = e.__data__; return ("string" == (r = typeof (n = t)) || "number" == r || "symbol" == r || "boolean" == r ? "__proto__" !== n : null === n) ? o["string" == typeof t ? "string" : "hash"] : o.map; } function na(e) { for (var t = As(e), n = t.length; n--; ) { var r = t[n], o = e[r]; t[n] = [r, o, Ma(o)]; } return t; } function ra(e, t) { var n = (function (e, t) { return null == e ? void 0 : e[t]; })(e, t); return Tr(n) ? n : void 0; } var oa = rn ? function (e) { return null == e ? [] : ((e = Me(e)), pt(rn(e), function (t) { return Ve.call(e, t); })); } : iu, aa = rn ? function (e) { for (var t = []; e; ) yt(t, oa(e)), (e = Ke(e)); return t; } : iu, ia = Mr; function sa(e, t, n) { for (var r = -1, o = (t = lo(t, e)).length, a = !1; ++r < o; ) { var i = Sa(t[r]); if (!(a = null != e && n(e, i))) break; e = e[i]; } return a || ++r != o ? a : !!(o = null == e ? 0 : e.length) && Ii(o) && la(i, o) && (Ci(e) || ji(e)); } function ua(e) { return "function" != typeof e.constructor || ma(e) ? {} : Dn(Ke(e)); } function ca(e) { return Ci(e) || ji(e) || !!(Qe && e && e[Qe]); } function la(e, t) { return !!(t = null == t ? 9007199254740991 : t) && ("number" == typeof e || ce.test(e)) && e > -1 && e % 1 == 0 && e < t; } function da(e, t, n) { if (!Xi(n)) return !1; var r = typeof t; return !!("number" == r ? Yi(n) && la(t, n.length) : "string" == r && t in n) && xi(n[t], e); } function fa(e, t) { if (Ci(e)) return !1; var n = typeof e; return !("number" != n && "symbol" != n && "boolean" != n && null != e && !Zi(e)) || I.test(e) || !H.test(e) || (null != t && e in Me(t)); } function pa(e) { var t = Qo(e), n = xn[t]; if ("function" != typeof n || !(t in Cn.prototype)) return !1; if (e === n) return !0; var r = $o(n); return !!r && e === r[0]; } ((mn && ia(new mn(new ArrayBuffer(1))) != w) || (Mn && ia(new Mn()) != m) || (yn && "[object Promise]" != ia(yn.resolve())) || (vn && ia(new vn()) != b) || (bn && ia(new bn()) != A)) && (ia = function (e) { var t = Mr(e), n = t == y ? e.constructor : void 0, r = n ? za(n) : ""; if (r) switch (r) { case Ln: return w; case wn: return m; case Tn: return "[object Promise]"; case kn: return b; case On: return A; } return t; }); var ha = Le ? Fi : su; function ma(e) { var t = e && e.constructor; return e === (("function" == typeof t && t.prototype) || Ae); } function Ma(e) { return e == e && !Xi(e); } function ya(e, t) { return function (n) { return null != n && n[e] === t && (void 0 !== t || e in Me(n)); }; } function va(e, t, n) { return ( (t = cn(void 0 === t ? e.length - 1 : t, 0)), function () { for (var o = arguments, a = -1, i = cn(o.length - t, 0), s = r(i); ++a < i; ) s[a] = o[t + a]; a = -1; for (var u = r(t + 1); ++a < t; ) u[a] = o[a]; return (u[t] = n(s)), ut(e, this, u); } ); } function ba(e, t) { return t.length < 2 ? e : hr(e, Jr(t, 0, -1)); } function ga(e, t) { for (var n = e.length, r = ln(t.length, n), o = _o(e); r--; ) { var a = t[r]; e[r] = la(a, n) ? o[a] : void 0; } return e; } var _a = Ta(Xr), Aa = en || function (e, t) { return Je.setTimeout(e, t); }, La = Ta(Kr); function wa(e, t, n) { var r = t + ""; return La( e, (function (e, t) { var n = t.length; if (!n) return e; var r = n - 1; return (t[r] = (n > 1 ? "& " : "") + t[r]), (t = t.join(n > 2 ? ", " : " ")), e.replace(Q, "{\n/* [wrapped with " + t + "] */\n"); })( r, (function (e, t) { return ( lt(s, function (n) { var r = "_." + n[0]; t & n[1] && !ht(e, r) && e.push(r); }), e.sort() ); })( (function (e) { var t = e.match(Z); return t ? t[1].split(ee) : []; })(r), n ) ) ); } function Ta(e) { var t = 0, n = 0; return function () { var r = dn(), o = 16 - (r - n); if (((n = r), o > 0)) { if (++t >= 800) return arguments[0]; } else t = 0; return e.apply(void 0, arguments); }; } function ka(e, t) { var n = -1, r = e.length, o = r - 1; for (t = void 0 === t ? r : t; ++n < t; ) { var a = qr(n, o), i = e[a]; (e[a] = e[n]), (e[n] = i); } return (e.length = t), e; } var Oa = (function (e) { var t = Ti(e, function (e) { return 500 === n.size && n.clear(), e; }), n = t.cache; return t; })(function (e) { var t = []; return ( X.test(e) && t.push(""), e.replace(K, function (e, n, r, o) { t.push(r ? o.replace(ne, "$1") : n || e); }), t ); }); function Sa(e) { if ("string" == typeof e || Zi(e)) return e; var t = e + ""; return "0" == t && 1 / e == -1 / 0 ? "-0" : t; } function za(e) { if (null != e) { try { return we.call(e); } catch (e) {} try { return e + ""; } catch (e) {} } return ""; } function Ea(e) { if (e instanceof Cn) return e.clone(); var t = new jn(e.__wrapped__, e.__chain__); return (t.__actions__ = _o(e.__actions__)), (t.__index__ = e.__index__), (t.__values__ = e.__values__), t; } var xa = Rr(function (e, t) { return Wi(e) ? nr(e, ur(t, 1, Wi, !0)) : []; }), Da = Rr(function (e, t) { var n = Ra(t); return Wi(n) && (n = void 0), Wi(e) ? nr(e, ur(t, 1, Wi, !0), ea(n, 2)) : []; }), Na = Rr(function (e, t) { var n = Ra(t); return Wi(n) && (n = void 0), Wi(e) ? nr(e, ur(t, 1, Wi, !0), void 0, n) : []; }); function ja(e, t, n) { var r = null == e ? 0 : e.length; if (!r) return -1; var o = null == n ? 0 : as(n); return o < 0 && (o = cn(r + o, 0)), Lt(e, ea(t, 3), o); } function Ca(e, t, n) { var r = null == e ? 0 : e.length; if (!r) return -1; var o = r - 1; return void 0 !== n && ((o = as(n)), (o = n < 0 ? cn(r + o, 0) : ln(o, r - 1))), Lt(e, ea(t, 3), o, !0); } function Pa(e) { return (null == e ? 0 : e.length) ? ur(e, 1) : []; } function Ya(e) { return e && e.length ? e[0] : void 0; } var Wa = Rr(function (e) { var t = Mt(e, uo); return t.length && t[0] === e[0] ? gr(t) : []; }), qa = Rr(function (e) { var t = Ra(e), n = Mt(e, uo); return t === Ra(n) ? (t = void 0) : n.pop(), n.length && n[0] === e[0] ? gr(n, ea(t, 2)) : []; }), Ba = Rr(function (e) { var t = Ra(e), n = Mt(e, uo); return (t = "function" == typeof t ? t : void 0) && n.pop(), n.length && n[0] === e[0] ? gr(n, void 0, t) : []; }); function Ra(e) { var t = null == e ? 0 : e.length; return t ? e[t - 1] : void 0; } var Fa = Rr(Ha); function Ha(e, t) { return e && e.length && t && t.length ? Yr(e, t) : e; } var Ia = Jo(function (e, t) { var n = null == e ? 0 : e.length, r = $n(e, t); return ( Wr( e, Mt(t, function (e) { return la(e, n) ? +e : e; }).sort(vo) ), r ); }); function Xa(e) { return null == e ? e : hn.call(e); } var Ka = Rr(function (e) { return to(ur(e, 1, Wi, !0)); }), Ua = Rr(function (e) { var t = Ra(e); return Wi(t) && (t = void 0), to(ur(e, 1, Wi, !0), ea(t, 2)); }), Ja = Rr(function (e) { var t = Ra(e); return (t = "function" == typeof t ? t : void 0), to(ur(e, 1, Wi, !0), void 0, t); }); function Va(e) { if (!e || !e.length) return []; var t = 0; return ( (e = pt(e, function (e) { if (Wi(e)) return (t = cn(e.length, t)), !0; })), Dt(t, function (t) { return Mt(e, St(t)); }) ); } function Ga(e, t) { if (!e || !e.length) return []; var n = Va(e); return null == t ? n : Mt(n, function (e) { return ut(t, void 0, e); }); } var $a = Rr(function (e, t) { return Wi(e) ? nr(e, t) : []; }), Qa = Rr(function (e) { return io(pt(e, Wi)); }), Za = Rr(function (e) { var t = Ra(e); return Wi(t) && (t = void 0), io(pt(e, Wi), ea(t, 2)); }), ei = Rr(function (e) { var t = Ra(e); return (t = "function" == typeof t ? t : void 0), io(pt(e, Wi), void 0, t); }), ti = Rr(Va); var ni = Rr(function (e) { var t = e.length, n = t > 1 ? e[t - 1] : void 0; return (n = "function" == typeof n ? (e.pop(), n) : void 0), Ga(e, n); }); function ri(e) { var t = xn(e); return (t.__chain__ = !0), t; } function oi(e, t) { return t(e); } var ai = Jo(function (e) { var t = e.length, n = t ? e[0] : 0, r = this.__wrapped__, o = function (t) { return $n(t, e); }; return !(t > 1 || this.__actions__.length) && r instanceof Cn && la(n) ? ((r = r.slice(n, +n + (t ? 1 : 0))).__actions__.push({ func: oi, args: [o], thisArg: void 0 }), new jn(r, this.__chain__).thru(function (e) { return t && !e.length && e.push(void 0), e; })) : this.thru(o); }); var ii = Lo(function (e, t, n) { Te.call(e, n) ? ++e[n] : Gn(e, n, 1); }); var si = Eo(ja), ui = Eo(Ca); function ci(e, t) { return (Ci(e) ? lt : rr)(e, ea(t, 3)); } function li(e, t) { return (Ci(e) ? dt : or)(e, ea(t, 3)); } var di = Lo(function (e, t, n) { Te.call(e, n) ? e[n].push(t) : Gn(e, n, [t]); }); var fi = Rr(function (e, t, n) { var o = -1, a = "function" == typeof t, i = Yi(e) ? r(e.length) : []; return ( rr(e, function (e) { i[++o] = a ? ut(t, e, n) : _r(e, t, n); }), i ); }), pi = Lo(function (e, t, n) { Gn(e, n, t); }); function hi(e, t) { return (Ci(e) ? Mt : Er)(e, ea(t, 3)); } var mi = Lo( function (e, t, n) { e[n ? 0 : 1].push(t); }, function () { return [[], []]; } ); var Mi = Rr(function (e, t) { if (null == e) return []; var n = t.length; return n > 1 && da(e, t[0], t[1]) ? (t = []) : n > 2 && da(t[0], t[1], t[2]) && (t = [t[0]]), Cr(e, ur(t, 1), []); }), yi = Zt || function () { return Je.Date.now(); }; function vi(e, t, n) { return (t = n ? void 0 : t), Ho(e, 128, void 0, void 0, void 0, void 0, (t = e && null == t ? e.length : t)); } function bi(e, t) { var n; if ("function" != typeof t) throw new be(a); return ( (e = as(e)), function () { return --e > 0 && (n = t.apply(this, arguments)), e <= 1 && (t = void 0), n; } ); } var gi = Rr(function (e, t, n) { var r = 1; if (n.length) { var o = Xt(n, Zo(gi)); r |= 32; } return Ho(e, r, t, n, o); }), _i = Rr(function (e, t, n) { var r = 3; if (n.length) { var o = Xt(n, Zo(_i)); r |= 32; } return Ho(t, r, e, n, o); }); function Ai(e, t, n) { var r, o, i, s, u, c, l = 0, d = !1, f = !1, p = !0; if ("function" != typeof e) throw new be(a); function h(t) { var n = r, a = o; return (r = o = void 0), (l = t), (s = e.apply(a, n)); } function m(e) { return (l = e), (u = Aa(y, t)), d ? h(e) : s; } function M(e) { var n = e - c; return void 0 === c || n >= t || n < 0 || (f && e - l >= i); } function y() { var e = yi(); if (M(e)) return v(e); u = Aa( y, (function (e) { var n = t - (e - c); return f ? ln(n, i - (e - l)) : n; })(e) ); } function v(e) { return (u = void 0), p && r ? h(e) : ((r = o = void 0), s); } function b() { var e = yi(), n = M(e); if (((r = arguments), (o = this), (c = e), n)) { if (void 0 === u) return m(c); if (f) return (u = Aa(y, t)), h(c); } return void 0 === u && (u = Aa(y, t)), s; } return ( (t = ss(t) || 0), Xi(n) && ((d = !!n.leading), (i = (f = "maxWait" in n) ? cn(ss(n.maxWait) || 0, t) : i), (p = "trailing" in n ? !!n.trailing : p)), (b.cancel = function () { void 0 !== u && ho(u), (l = 0), (r = c = o = u = void 0); }), (b.flush = function () { return void 0 === u ? s : v(yi()); }), b ); } var Li = Rr(function (e, t) { return tr(e, 1, t); }), wi = Rr(function (e, t, n) { return tr(e, ss(t) || 0, n); }); function Ti(e, t) { if ("function" != typeof e || (null != t && "function" != typeof t)) throw new be(a); var n = function () { var r = arguments, o = t ? t.apply(this, r) : r[0], a = n.cache; if (a.has(o)) return a.get(o); var i = e.apply(this, r); return (n.cache = a.set(o, i) || a), i; }; return (n.cache = new (Ti.Cache || Wn)()), n; } function ki(e) { if ("function" != typeof e) throw new be(a); return function () { var t = arguments; switch (t.length) { case 0: return !e.call(this); case 1: return !e.call(this, t[0]); case 2: return !e.call(this, t[0], t[1]); case 3: return !e.call(this, t[0], t[1], t[2]); } return !e.apply(this, t); }; } Ti.Cache = Wn; var Oi = fo(function (e, t) { var n = (t = 1 == t.length && Ci(t[0]) ? Mt(t[0], Nt(ea())) : Mt(ur(t, 1), Nt(ea()))).length; return Rr(function (r) { for (var o = -1, a = ln(r.length, n); ++o < a; ) r[o] = t[o].call(this, r[o]); return ut(e, this, r); }); }), Si = Rr(function (e, t) { return Ho(e, 32, void 0, t, Xt(t, Zo(Si))); }), zi = Rr(function (e, t) { return Ho(e, 64, void 0, t, Xt(t, Zo(zi))); }), Ei = Jo(function (e, t) { return Ho(e, 256, void 0, void 0, void 0, t); }); function xi(e, t) { return e === t || (e != e && t != t); } var Di = Wo(yr), Ni = Wo(function (e, t) { return e >= t; }), ji = Ar( (function () { return arguments; })() ) ? Ar : function (e) { return Ki(e) && Te.call(e, "callee") && !Ve.call(e, "callee"); }, Ci = r.isArray, Pi = et ? Nt(et) : function (e) { return Ki(e) && Mr(e) == L; }; function Yi(e) { return null != e && Ii(e.length) && !Fi(e); } function Wi(e) { return Ki(e) && Yi(e); } var qi = on || su, Bi = tt ? Nt(tt) : function (e) { return Ki(e) && Mr(e) == d; }; function Ri(e) { if (!Ki(e)) return !1; var t = Mr(e); return t == f || "[object DOMException]" == t || ("string" == typeof e.message && "string" == typeof e.name && !Vi(e)); } function Fi(e) { if (!Xi(e)) return !1; var t = Mr(e); return t == p || t == h || "[object AsyncFunction]" == t || "[object Proxy]" == t; } function Hi(e) { return "number" == typeof e && e == as(e); } function Ii(e) { return "number" == typeof e && e > -1 && e % 1 == 0 && e <= 9007199254740991; } function Xi(e) { var t = typeof e; return null != e && ("object" == t || "function" == t); } function Ki(e) { return null != e && "object" == typeof e; } var Ui = nt ? Nt(nt) : function (e) { return Ki(e) && ia(e) == m; }; function Ji(e) { return "number" == typeof e || (Ki(e) && Mr(e) == M); } function Vi(e) { if (!Ki(e) || Mr(e) != y) return !1; var t = Ke(e); if (null === t) return !0; var n = Te.call(t, "constructor") && t.constructor; return "function" == typeof n && n instanceof n && we.call(n) == ze; } var Gi = rt ? Nt(rt) : function (e) { return Ki(e) && Mr(e) == v; }; var $i = ot ? Nt(ot) : function (e) { return Ki(e) && ia(e) == b; }; function Qi(e) { return "string" == typeof e || (!Ci(e) && Ki(e) && Mr(e) == g); } function Zi(e) { return "symbol" == typeof e || (Ki(e) && Mr(e) == _); } var es = at ? Nt(at) : function (e) { return Ki(e) && Ii(e.length) && !!Re[Mr(e)]; }; var ts = Wo(zr), ns = Wo(function (e, t) { return e <= t; }); function rs(e) { if (!e) return []; if (Yi(e)) return Qi(e) ? Vt(e) : _o(e); if (Ze && e[Ze]) return (function (e) { for (var t, n = []; !(t = e.next()).done; ) n.push(t.value); return n; })(e[Ze]()); var t = ia(e); return (t == m ? Ht : t == b ? Kt : xs)(e); } function os(e) { return e ? ((e = ss(e)) === 1 / 0 || e === -1 / 0 ? 17976931348623157e292 * (e < 0 ? -1 : 1) : e == e ? e : 0) : 0 === e ? e : 0; } function as(e) { var t = os(e), n = t % 1; return t == t ? (n ? t - n : t) : 0; } function is(e) { return e ? Qn(as(e), 0, 4294967295) : 0; } function ss(e) { if ("number" == typeof e) return e; if (Zi(e)) return NaN; if (Xi(e)) { var t = "function" == typeof e.valueOf ? e.valueOf() : e; e = Xi(t) ? t + "" : t; } if ("string" != typeof e) return 0 === e ? e : +e; e = e.replace(V, ""); var n = ie.test(e); return n || ue.test(e) ? Xe(e.slice(2), n ? 2 : 8) : ae.test(e) ? NaN : +e; } function us(e) { return Ao(e, Ls(e)); } function cs(e) { return null == e ? "" : eo(e); } var ls = wo(function (e, t) { if (ma(t) || Yi(t)) Ao(t, As(t), e); else for (var n in t) Te.call(t, n) && Kn(e, n, t[n]); }), ds = wo(function (e, t) { Ao(t, Ls(t), e); }), fs = wo(function (e, t, n, r) { Ao(t, Ls(t), e, r); }), ps = wo(function (e, t, n, r) { Ao(t, As(t), e, r); }), hs = Jo($n); var ms = Rr(function (e) { return e.push(void 0, Io), ut(fs, void 0, e); }), Ms = Rr(function (e) { return e.push(void 0, Xo), ut(Ts, void 0, e); }); function ys(e, t, n) { var r = null == e ? void 0 : hr(e, t); return void 0 === r ? n : r; } function vs(e, t) { return null != e && sa(e, t, br); } var bs = No(function (e, t, n) { e[t] = n; }, Xs(Js)), gs = No(function (e, t, n) { Te.call(e, t) ? e[t].push(n) : (e[t] = [n]); }, ea), _s = Rr(_r); function As(e) { return Yi(e) ? Rn(e) : Or(e); } function Ls(e) { return Yi(e) ? Rn(e, !0) : Sr(e); } var ws = wo(function (e, t, n) { Nr(e, t, n); }), Ts = wo(function (e, t, n, r) { Nr(e, t, n, r); }), ks = Jo(function (e, t) { var n = {}; if (null == e) return n; var r = !1; (t = Mt(t, function (t) { return (t = lo(t, e)), r || (r = t.length > 1), t; })), Ao(e, Go(e), n), r && (n = Zn(n, 7, Ko)); for (var o = t.length; o--; ) no(n, t[o]); return n; }); var Os = Jo(function (e, t) { return null == e ? {} : (function (e, t) { return Pr(e, t, function (t, n) { return vs(e, n); }); })(e, t); }); function Ss(e, t) { if (null == e) return {}; var n = Mt(Go(e), function (e) { return [e]; }); return ( (t = ea(t)), Pr(e, n, function (e, n) { return t(e, n[0]); }) ); } var zs = Fo(As), Es = Fo(Ls); function xs(e) { return null == e ? [] : jt(e, As(e)); } var Ds = So(function (e, t, n) { return (t = t.toLowerCase()), e + (n ? Ns(t) : t); }); function Ns(e) { return Rs(cs(e).toLowerCase()); } function js(e) { return (e = cs(e)) && e.replace(le, qt).replace(je, ""); } var Cs = So(function (e, t, n) { return e + (n ? "-" : "") + t.toLowerCase(); }), Ps = So(function (e, t, n) { return e + (n ? " " : "") + t.toLowerCase(); }), Ys = Oo("toLowerCase"); var Ws = So(function (e, t, n) { return e + (n ? "_" : "") + t.toLowerCase(); }); var qs = So(function (e, t, n) { return e + (n ? " " : "") + Rs(t); }); var Bs = So(function (e, t, n) { return e + (n ? " " : "") + t.toUpperCase(); }), Rs = Oo("toUpperCase"); function Fs(e, t, n) { return ( (e = cs(e)), void 0 === (t = n ? void 0 : t) ? (function (e) { return We.test(e); })(e) ? (function (e) { return e.match(Pe) || []; })(e) : (function (e) { return e.match(te) || []; })(e) : e.match(t) || [] ); } var Hs = Rr(function (e, t) { try { return ut(e, void 0, t); } catch (e) { return Ri(e) ? e : new pe(e); } }), Is = Jo(function (e, t) { return ( lt(t, function (t) { (t = Sa(t)), Gn(e, t, gi(e[t], e)); }), e ); }); function Xs(e) { return function () { return e; }; } var Ks = xo(), Us = xo(!0); function Js(e) { return e; } function Vs(e) { return kr("function" == typeof e ? e : Zn(e, 1)); } var Gs = Rr(function (e, t) { return function (n) { return _r(n, e, t); }; }), $s = Rr(function (e, t) { return function (n) { return _r(e, n, t); }; }); function Qs(e, t, n) { var r = As(t), o = pr(t, r); null != n || (Xi(t) && (o.length || !r.length)) || ((n = t), (t = e), (e = this), (o = pr(t, As(t)))); var a = !(Xi(n) && "chain" in n && !n.chain), i = Fi(e); return ( lt(o, function (n) { var r = t[n]; (e[n] = r), i && (e.prototype[n] = function () { var t = this.__chain__; if (a || t) { var n = e(this.__wrapped__), o = (n.__actions__ = _o(this.__actions__)); return o.push({ func: r, args: arguments, thisArg: e }), (n.__chain__ = t), n; } return r.apply(e, yt([this.value()], arguments)); }); }), e ); } function Zs() {} var eu = Co(Mt), tu = Co(ft), nu = Co(gt); function ru(e) { return fa(e) ? St(Sa(e)) : (function (e) { return function (t) { return hr(t, e); }; })(e); } var ou = Yo(), au = Yo(!0); function iu() { return []; } function su() { return !1; } var uu = jo(function (e, t) { return e + t; }, 0), cu = Bo("ceil"), lu = jo(function (e, t) { return e / t; }, 1), du = Bo("floor"); var fu, pu = jo(function (e, t) { return e * t; }, 1), hu = Bo("round"), mu = jo(function (e, t) { return e - t; }, 0); return ( (xn.after = function (e, t) { if ("function" != typeof t) throw new be(a); return ( (e = as(e)), function () { if (--e < 1) return t.apply(this, arguments); } ); }), (xn.ary = vi), (xn.assign = ls), (xn.assignIn = ds), (xn.assignInWith = fs), (xn.assignWith = ps), (xn.at = hs), (xn.before = bi), (xn.bind = gi), (xn.bindAll = Is), (xn.bindKey = _i), (xn.castArray = function () { if (!arguments.length) return []; var e = arguments[0]; return Ci(e) ? e : [e]; }), (xn.chain = ri), (xn.chunk = function (e, t, n) { t = (n ? da(e, t, n) : void 0 === t) ? 1 : cn(as(t), 0); var o = null == e ? 0 : e.length; if (!o || t < 1) return []; for (var a = 0, i = 0, s = r(tn(o / t)); a < o; ) s[i++] = Jr(e, a, (a += t)); return s; }), (xn.compact = function (e) { for (var t = -1, n = null == e ? 0 : e.length, r = 0, o = []; ++t < n; ) { var a = e[t]; a && (o[r++] = a); } return o; }), (xn.concat = function () { var e = arguments.length; if (!e) return []; for (var t = r(e - 1), n = arguments[0], o = e; o--; ) t[o - 1] = arguments[o]; return yt(Ci(n) ? _o(n) : [n], ur(t, 1)); }), (xn.cond = function (e) { var t = null == e ? 0 : e.length, n = ea(); return ( (e = t ? Mt(e, function (e) { if ("function" != typeof e[1]) throw new be(a); return [n(e[0]), e[1]]; }) : []), Rr(function (n) { for (var r = -1; ++r < t; ) { var o = e[r]; if (ut(o[0], this, n)) return ut(o[1], this, n); } }) ); }), (xn.conforms = function (e) { return (function (e) { var t = As(e); return function (n) { return er(n, e, t); }; })(Zn(e, 1)); }), (xn.constant = Xs), (xn.countBy = ii), (xn.create = function (e, t) { var n = Dn(e); return null == t ? n : Vn(n, t); }), (xn.curry = function e(t, n, r) { var o = Ho(t, 8, void 0, void 0, void 0, void 0, void 0, (n = r ? void 0 : n)); return (o.placeholder = e.placeholder), o; }), (xn.curryRight = function e(t, n, r) { var o = Ho(t, 16, void 0, void 0, void 0, void 0, void 0, (n = r ? void 0 : n)); return (o.placeholder = e.placeholder), o; }), (xn.debounce = Ai), (xn.defaults = ms), (xn.defaultsDeep = Ms), (xn.defer = Li), (xn.delay = wi), (xn.difference = xa), (xn.differenceBy = Da), (xn.differenceWith = Na), (xn.drop = function (e, t, n) { var r = null == e ? 0 : e.length; return r ? Jr(e, (t = n || void 0 === t ? 1 : as(t)) < 0 ? 0 : t, r) : []; }), (xn.dropRight = function (e, t, n) { var r = null == e ? 0 : e.length; return r ? Jr(e, 0, (t = r - (t = n || void 0 === t ? 1 : as(t))) < 0 ? 0 : t) : []; }), (xn.dropRightWhile = function (e, t) { return e && e.length ? oo(e, ea(t, 3), !0, !0) : []; }), (xn.dropWhile = function (e, t) { return e && e.length ? oo(e, ea(t, 3), !0) : []; }), (xn.fill = function (e, t, n, r) { var o = null == e ? 0 : e.length; return o ? (n && "number" != typeof n && da(e, t, n) && ((n = 0), (r = o)), (function (e, t, n, r) { var o = e.length; for ((n = as(n)) < 0 && (n = -n > o ? 0 : o + n), (r = void 0 === r || r > o ? o : as(r)) < 0 && (r += o), r = n > r ? 0 : is(r); n < r; ) e[n++] = t; return e; })(e, t, n, r)) : []; }), (xn.filter = function (e, t) { return (Ci(e) ? pt : sr)(e, ea(t, 3)); }), (xn.flatMap = function (e, t) { return ur(hi(e, t), 1); }), (xn.flatMapDeep = function (e, t) { return ur(hi(e, t), 1 / 0); }), (xn.flatMapDepth = function (e, t, n) { return (n = void 0 === n ? 1 : as(n)), ur(hi(e, t), n); }), (xn.flatten = Pa), (xn.flattenDeep = function (e) { return (null == e ? 0 : e.length) ? ur(e, 1 / 0) : []; }), (xn.flattenDepth = function (e, t) { return (null == e ? 0 : e.length) ? ur(e, (t = void 0 === t ? 1 : as(t))) : []; }), (xn.flip = function (e) { return Ho(e, 512); }), (xn.flow = Ks), (xn.flowRight = Us), (xn.fromPairs = function (e) { for (var t = -1, n = null == e ? 0 : e.length, r = {}; ++t < n; ) { var o = e[t]; r[o[0]] = o[1]; } return r; }), (xn.functions = function (e) { return null == e ? [] : pr(e, As(e)); }), (xn.functionsIn = function (e) { return null == e ? [] : pr(e, Ls(e)); }), (xn.groupBy = di), (xn.initial = function (e) { return (null == e ? 0 : e.length) ? Jr(e, 0, -1) : []; }), (xn.intersection = Wa), (xn.intersectionBy = qa), (xn.intersectionWith = Ba), (xn.invert = bs), (xn.invertBy = gs), (xn.invokeMap = fi), (xn.iteratee = Vs), (xn.keyBy = pi), (xn.keys = As), (xn.keysIn = Ls), (xn.map = hi), (xn.mapKeys = function (e, t) { var n = {}; return ( (t = ea(t, 3)), dr(e, function (e, r, o) { Gn(n, t(e, r, o), e); }), n ); }), (xn.mapValues = function (e, t) { var n = {}; return ( (t = ea(t, 3)), dr(e, function (e, r, o) { Gn(n, r, t(e, r, o)); }), n ); }), (xn.matches = function (e) { return xr(Zn(e, 1)); }), (xn.matchesProperty = function (e, t) { return Dr(e, Zn(t, 1)); }), (xn.memoize = Ti), (xn.merge = ws), (xn.mergeWith = Ts), (xn.method = Gs), (xn.methodOf = $s), (xn.mixin = Qs), (xn.negate = ki), (xn.nthArg = function (e) { return ( (e = as(e)), Rr(function (t) { return jr(t, e); }) ); }), (xn.omit = ks), (xn.omitBy = function (e, t) { return Ss(e, ki(ea(t))); }), (xn.once = function (e) { return bi(2, e); }), (xn.orderBy = function (e, t, n, r) { return null == e ? [] : (Ci(t) || (t = null == t ? [] : [t]), Ci((n = r ? void 0 : n)) || (n = null == n ? [] : [n]), Cr(e, t, n)); }), (xn.over = eu), (xn.overArgs = Oi), (xn.overEvery = tu), (xn.overSome = nu), (xn.partial = Si), (xn.partialRight = zi), (xn.partition = mi), (xn.pick = Os), (xn.pickBy = Ss), (xn.property = ru), (xn.propertyOf = function (e) { return function (t) { return null == e ? void 0 : hr(e, t); }; }), (xn.pull = Fa), (xn.pullAll = Ha), (xn.pullAllBy = function (e, t, n) { return e && e.length && t && t.length ? Yr(e, t, ea(n, 2)) : e; }), (xn.pullAllWith = function (e, t, n) { return e && e.length && t && t.length ? Yr(e, t, void 0, n) : e; }), (xn.pullAt = Ia), (xn.range = ou), (xn.rangeRight = au), (xn.rearg = Ei), (xn.reject = function (e, t) { return (Ci(e) ? pt : sr)(e, ki(ea(t, 3))); }), (xn.remove = function (e, t) { var n = []; if (!e || !e.length) return n; var r = -1, o = [], a = e.length; for (t = ea(t, 3); ++r < a; ) { var i = e[r]; t(i, r, e) && (n.push(i), o.push(r)); } return Wr(e, o), n; }), (xn.rest = function (e, t) { if ("function" != typeof e) throw new be(a); return Rr(e, (t = void 0 === t ? t : as(t))); }), (xn.reverse = Xa), (xn.sampleSize = function (e, t, n) { return (t = (n ? da(e, t, n) : void 0 === t) ? 1 : as(t)), (Ci(e) ? Hn : Hr)(e, t); }), (xn.set = function (e, t, n) { return null == e ? e : Ir(e, t, n); }), (xn.setWith = function (e, t, n, r) { return (r = "function" == typeof r ? r : void 0), null == e ? e : Ir(e, t, n, r); }), (xn.shuffle = function (e) { return (Ci(e) ? In : Ur)(e); }), (xn.slice = function (e, t, n) { var r = null == e ? 0 : e.length; return r ? (n && "number" != typeof n && da(e, t, n) ? ((t = 0), (n = r)) : ((t = null == t ? 0 : as(t)), (n = void 0 === n ? r : as(n))), Jr(e, t, n)) : []; }), (xn.sortBy = Mi), (xn.sortedUniq = function (e) { return e && e.length ? Qr(e) : []; }), (xn.sortedUniqBy = function (e, t) { return e && e.length ? Qr(e, ea(t, 2)) : []; }), (xn.split = function (e, t, n) { return ( n && "number" != typeof n && da(e, t, n) && (t = n = void 0), (n = void 0 === n ? 4294967295 : n >>> 0) ? ((e = cs(e)) && ("string" == typeof t || (null != t && !Gi(t))) && !(t = eo(t)) && Ft(e) ? po(Vt(e), 0, n) : e.split(t, n)) : [] ); }), (xn.spread = function (e, t) { if ("function" != typeof e) throw new be(a); return ( (t = null == t ? 0 : cn(as(t), 0)), Rr(function (n) { var r = n[t], o = po(n, 0, t); return r && yt(o, r), ut(e, this, o); }) ); }), (xn.tail = function (e) { var t = null == e ? 0 : e.length; return t ? Jr(e, 1, t) : []; }), (xn.take = function (e, t, n) { return e && e.length ? Jr(e, 0, (t = n || void 0 === t ? 1 : as(t)) < 0 ? 0 : t) : []; }), (xn.takeRight = function (e, t, n) { var r = null == e ? 0 : e.length; return r ? Jr(e, (t = r - (t = n || void 0 === t ? 1 : as(t))) < 0 ? 0 : t, r) : []; }), (xn.takeRightWhile = function (e, t) { return e && e.length ? oo(e, ea(t, 3), !1, !0) : []; }), (xn.takeWhile = function (e, t) { return e && e.length ? oo(e, ea(t, 3)) : []; }), (xn.tap = function (e, t) { return t(e), e; }), (xn.throttle = function (e, t, n) { var r = !0, o = !0; if ("function" != typeof e) throw new be(a); return Xi(n) && ((r = "leading" in n ? !!n.leading : r), (o = "trailing" in n ? !!n.trailing : o)), Ai(e, t, { leading: r, maxWait: t, trailing: o }); }), (xn.thru = oi), (xn.toArray = rs), (xn.toPairs = zs), (xn.toPairsIn = Es), (xn.toPath = function (e) { return Ci(e) ? Mt(e, Sa) : Zi(e) ? [e] : _o(Oa(cs(e))); }), (xn.toPlainObject = us), (xn.transform = function (e, t, n) { var r = Ci(e), o = r || qi(e) || es(e); if (((t = ea(t, 4)), null == n)) { var a = e && e.constructor; n = o ? (r ? new a() : []) : Xi(e) && Fi(a) ? Dn(Ke(e)) : {}; } return ( (o ? lt : dr)(e, function (e, r, o) { return t(n, e, r, o); }), n ); }), (xn.unary = function (e) { return vi(e, 1); }), (xn.union = Ka), (xn.unionBy = Ua), (xn.unionWith = Ja), (xn.uniq = function (e) { return e && e.length ? to(e) : []; }), (xn.uniqBy = function (e, t) { return e && e.length ? to(e, ea(t, 2)) : []; }), (xn.uniqWith = function (e, t) { return (t = "function" == typeof t ? t : void 0), e && e.length ? to(e, void 0, t) : []; }), (xn.unset = function (e, t) { return null == e || no(e, t); }), (xn.unzip = Va), (xn.unzipWith = Ga), (xn.update = function (e, t, n) { return null == e ? e : ro(e, t, co(n)); }), (xn.updateWith = function (e, t, n, r) { return (r = "function" == typeof r ? r : void 0), null == e ? e : ro(e, t, co(n), r); }), (xn.values = xs), (xn.valuesIn = function (e) { return null == e ? [] : jt(e, Ls(e)); }), (xn.without = $a), (xn.words = Fs), (xn.wrap = function (e, t) { return Si(co(t), e); }), (xn.xor = Qa), (xn.xorBy = Za), (xn.xorWith = ei), (xn.zip = ti), (xn.zipObject = function (e, t) { return so(e || [], t || [], Kn); }), (xn.zipObjectDeep = function (e, t) { return so(e || [], t || [], Ir); }), (xn.zipWith = ni), (xn.entries = zs), (xn.entriesIn = Es), (xn.extend = ds), (xn.extendWith = fs), Qs(xn, xn), (xn.add = uu), (xn.attempt = Hs), (xn.camelCase = Ds), (xn.capitalize = Ns), (xn.ceil = cu), (xn.clamp = function (e, t, n) { return void 0 === n && ((n = t), (t = void 0)), void 0 !== n && (n = (n = ss(n)) == n ? n : 0), void 0 !== t && (t = (t = ss(t)) == t ? t : 0), Qn(ss(e), t, n); }), (xn.clone = function (e) { return Zn(e, 4); }), (xn.cloneDeep = function (e) { return Zn(e, 5); }), (xn.cloneDeepWith = function (e, t) { return Zn(e, 5, (t = "function" == typeof t ? t : void 0)); }), (xn.cloneWith = function (e, t) { return Zn(e, 4, (t = "function" == typeof t ? t : void 0)); }), (xn.conformsTo = function (e, t) { return null == t || er(e, t, As(t)); }), (xn.deburr = js), (xn.defaultTo = function (e, t) { return null == e || e != e ? t : e; }), (xn.divide = lu), (xn.endsWith = function (e, t, n) { (e = cs(e)), (t = eo(t)); var r = e.length, o = (n = void 0 === n ? r : Qn(as(n), 0, r)); return (n -= t.length) >= 0 && e.slice(n, o) == t; }), (xn.eq = xi), (xn.escape = function (e) { return (e = cs(e)) && q.test(e) ? e.replace(Y, Bt) : e; }), (xn.escapeRegExp = function (e) { return (e = cs(e)) && J.test(e) ? e.replace(U, "\\$&") : e; }), (xn.every = function (e, t, n) { var r = Ci(e) ? ft : ar; return n && da(e, t, n) && (t = void 0), r(e, ea(t, 3)); }), (xn.find = si), (xn.findIndex = ja), (xn.findKey = function (e, t) { return At(e, ea(t, 3), dr); }), (xn.findLast = ui), (xn.findLastIndex = Ca), (xn.findLastKey = function (e, t) { return At(e, ea(t, 3), fr); }), (xn.floor = du), (xn.forEach = ci), (xn.forEachRight = li), (xn.forIn = function (e, t) { return null == e ? e : cr(e, ea(t, 3), Ls); }), (xn.forInRight = function (e, t) { return null == e ? e : lr(e, ea(t, 3), Ls); }), (xn.forOwn = function (e, t) { return e && dr(e, ea(t, 3)); }), (xn.forOwnRight = function (e, t) { return e && fr(e, ea(t, 3)); }), (xn.get = ys), (xn.gt = Di), (xn.gte = Ni), (xn.has = function (e, t) { return null != e && sa(e, t, vr); }), (xn.hasIn = vs), (xn.head = Ya), (xn.identity = Js), (xn.includes = function (e, t, n, r) { (e = Yi(e) ? e : xs(e)), (n = n && !r ? as(n) : 0); var o = e.length; return n < 0 && (n = cn(o + n, 0)), Qi(e) ? n <= o && e.indexOf(t, n) > -1 : !!o && wt(e, t, n) > -1; }), (xn.indexOf = function (e, t, n) { var r = null == e ? 0 : e.length; if (!r) return -1; var o = null == n ? 0 : as(n); return o < 0 && (o = cn(r + o, 0)), wt(e, t, o); }), (xn.inRange = function (e, t, n) { return ( (t = os(t)), void 0 === n ? ((n = t), (t = 0)) : (n = os(n)), (function (e, t, n) { return e >= ln(t, n) && e < cn(t, n); })((e = ss(e)), t, n) ); }), (xn.invoke = _s), (xn.isArguments = ji), (xn.isArray = Ci), (xn.isArrayBuffer = Pi), (xn.isArrayLike = Yi), (xn.isArrayLikeObject = Wi), (xn.isBoolean = function (e) { return !0 === e || !1 === e || (Ki(e) && Mr(e) == l); }), (xn.isBuffer = qi), (xn.isDate = Bi), (xn.isElement = function (e) { return Ki(e) && 1 === e.nodeType && !Vi(e); }), (xn.isEmpty = function (e) { if (null == e) return !0; if (Yi(e) && (Ci(e) || "string" == typeof e || "function" == typeof e.splice || qi(e) || es(e) || ji(e))) return !e.length; var t = ia(e); if (t == m || t == b) return !e.size; if (ma(e)) return !Or(e).length; for (var n in e) if (Te.call(e, n)) return !1; return !0; }), (xn.isEqual = function (e, t) { return Lr(e, t); }), (xn.isEqualWith = function (e, t, n) { var r = (n = "function" == typeof n ? n : void 0) ? n(e, t) : void 0; return void 0 === r ? Lr(e, t, void 0, n) : !!r; }), (xn.isError = Ri), (xn.isFinite = function (e) { return "number" == typeof e && an(e); }), (xn.isFunction = Fi), (xn.isInteger = Hi), (xn.isLength = Ii), (xn.isMap = Ui), (xn.isMatch = function (e, t) { return e === t || wr(e, t, na(t)); }), (xn.isMatchWith = function (e, t, n) { return (n = "function" == typeof n ? n : void 0), wr(e, t, na(t), n); }), (xn.isNaN = function (e) { return Ji(e) && e != +e; }), (xn.isNative = function (e) { if (ha(e)) throw new pe("Unsupported core-js use. Try https://npms.io/search?q=ponyfill."); return Tr(e); }), (xn.isNil = function (e) { return null == e; }), (xn.isNull = function (e) { return null === e; }), (xn.isNumber = Ji), (xn.isObject = Xi), (xn.isObjectLike = Ki), (xn.isPlainObject = Vi), (xn.isRegExp = Gi), (xn.isSafeInteger = function (e) { return Hi(e) && e >= -9007199254740991 && e <= 9007199254740991; }), (xn.isSet = $i), (xn.isString = Qi), (xn.isSymbol = Zi), (xn.isTypedArray = es), (xn.isUndefined = function (e) { return void 0 === e; }), (xn.isWeakMap = function (e) { return Ki(e) && ia(e) == A; }), (xn.isWeakSet = function (e) { return Ki(e) && "[object WeakSet]" == Mr(e); }), (xn.join = function (e, t) { return null == e ? "" : sn.call(e, t); }), (xn.kebabCase = Cs), (xn.last = Ra), (xn.lastIndexOf = function (e, t, n) { var r = null == e ? 0 : e.length; if (!r) return -1; var o = r; return ( void 0 !== n && (o = (o = as(n)) < 0 ? cn(r + o, 0) : ln(o, r - 1)), t == t ? (function (e, t, n) { for (var r = n + 1; r--; ) if (e[r] === t) return r; return r; })(e, t, o) : Lt(e, kt, o, !0) ); }), (xn.lowerCase = Ps), (xn.lowerFirst = Ys), (xn.lt = ts), (xn.lte = ns), (xn.max = function (e) { return e && e.length ? ir(e, Js, yr) : void 0; }), (xn.maxBy = function (e, t) { return e && e.length ? ir(e, ea(t, 2), yr) : void 0; }), (xn.mean = function (e) { return Ot(e, Js); }), (xn.meanBy = function (e, t) { return Ot(e, ea(t, 2)); }), (xn.min = function (e) { return e && e.length ? ir(e, Js, zr) : void 0; }), (xn.minBy = function (e, t) { return e && e.length ? ir(e, ea(t, 2), zr) : void 0; }), (xn.stubArray = iu), (xn.stubFalse = su), (xn.stubObject = function () { return {}; }), (xn.stubString = function () { return ""; }), (xn.stubTrue = function () { return !0; }), (xn.multiply = pu), (xn.nth = function (e, t) { return e && e.length ? jr(e, as(t)) : void 0; }), (xn.noConflict = function () { return Je._ === this && (Je._ = Ee), this; }), (xn.noop = Zs), (xn.now = yi), (xn.pad = function (e, t, n) { e = cs(e); var r = (t = as(t)) ? Jt(e) : 0; if (!t || r >= t) return e; var o = (t - r) / 2; return Po(nn(o), n) + e + Po(tn(o), n); }), (xn.padEnd = function (e, t, n) { e = cs(e); var r = (t = as(t)) ? Jt(e) : 0; return t && r < t ? e + Po(t - r, n) : e; }), (xn.padStart = function (e, t, n) { e = cs(e); var r = (t = as(t)) ? Jt(e) : 0; return t && r < t ? Po(t - r, n) + e : e; }), (xn.parseInt = function (e, t, n) { return n || null == t ? (t = 0) : t && (t = +t), fn(cs(e).replace(G, ""), t || 0); }), (xn.random = function (e, t, n) { if ( (n && "boolean" != typeof n && da(e, t, n) && (t = n = void 0), void 0 === n && ("boolean" == typeof t ? ((n = t), (t = void 0)) : "boolean" == typeof e && ((n = e), (e = void 0))), void 0 === e && void 0 === t ? ((e = 0), (t = 1)) : ((e = os(e)), void 0 === t ? ((t = e), (e = 0)) : (t = os(t))), e > t) ) { var r = e; (e = t), (t = r); } if (n || e % 1 || t % 1) { var o = pn(); return ln(e + o * (t - e + Ie("1e-" + ((o + "").length - 1))), t); } return qr(e, t); }), (xn.reduce = function (e, t, n) { var r = Ci(e) ? vt : Et, o = arguments.length < 3; return r(e, ea(t, 4), n, o, rr); }), (xn.reduceRight = function (e, t, n) { var r = Ci(e) ? bt : Et, o = arguments.length < 3; return r(e, ea(t, 4), n, o, or); }), (xn.repeat = function (e, t, n) { return (t = (n ? da(e, t, n) : void 0 === t) ? 1 : as(t)), Br(cs(e), t); }), (xn.replace = function () { var e = arguments, t = cs(e[0]); return e.length < 3 ? t : t.replace(e[1], e[2]); }), (xn.result = function (e, t, n) { var r = -1, o = (t = lo(t, e)).length; for (o || ((o = 1), (e = void 0)); ++r < o; ) { var a = null == e ? void 0 : e[Sa(t[r])]; void 0 === a && ((r = o), (a = n)), (e = Fi(a) ? a.call(e) : a); } return e; }), (xn.round = hu), (xn.runInContext = e), (xn.sample = function (e) { return (Ci(e) ? Fn : Fr)(e); }), (xn.size = function (e) { if (null == e) return 0; if (Yi(e)) return Qi(e) ? Jt(e) : e.length; var t = ia(e); return t == m || t == b ? e.size : Or(e).length; }), (xn.snakeCase = Ws), (xn.some = function (e, t, n) { var r = Ci(e) ? gt : Vr; return n && da(e, t, n) && (t = void 0), r(e, ea(t, 3)); }), (xn.sortedIndex = function (e, t) { return Gr(e, t); }), (xn.sortedIndexBy = function (e, t, n) { return $r(e, t, ea(n, 2)); }), (xn.sortedIndexOf = function (e, t) { var n = null == e ? 0 : e.length; if (n) { var r = Gr(e, t); if (r < n && xi(e[r], t)) return r; } return -1; }), (xn.sortedLastIndex = function (e, t) { return Gr(e, t, !0); }), (xn.sortedLastIndexBy = function (e, t, n) { return $r(e, t, ea(n, 2), !0); }), (xn.sortedLastIndexOf = function (e, t) { if (null == e ? 0 : e.length) { var n = Gr(e, t, !0) - 1; if (xi(e[n], t)) return n; } return -1; }), (xn.startCase = qs), (xn.startsWith = function (e, t, n) { return (e = cs(e)), (n = null == n ? 0 : Qn(as(n), 0, e.length)), (t = eo(t)), e.slice(n, n + t.length) == t; }), (xn.subtract = mu), (xn.sum = function (e) { return e && e.length ? xt(e, Js) : 0; }), (xn.sumBy = function (e, t) { return e && e.length ? xt(e, ea(t, 2)) : 0; }), (xn.template = function (e, t, n) { var r = xn.templateSettings; n && da(e, t, n) && (t = void 0), (e = cs(e)), (t = fs({}, t, r, Io)); var o, a, i = fs({}, t.imports, r.imports, Io), s = As(i), u = jt(i, s), c = 0, l = t.interpolate || de, d = "__p += '", f = ye((t.escape || de).source + "|" + l.source + "|" + (l === F ? re : de).source + "|" + (t.evaluate || de).source + "|$", "g"), p = "//# sourceURL=" + ("sourceURL" in t ? t.sourceURL : "lodash.templateSources[" + ++Be + "]") + "\n"; e.replace(f, function (t, n, r, i, s, u) { return ( r || (r = i), (d += e.slice(c, u).replace(fe, Rt)), n && ((o = !0), (d += "' +\n__e(" + n + ") +\n'")), s && ((a = !0), (d += "';\n" + s + ";\n__p += '")), r && (d += "' +\n((__t = (" + r + ")) == null ? '' : __t) +\n'"), (c = u + t.length), t ); }), (d += "';\n"); var h = t.variable; h || (d = "with (obj) {\n" + d + "\n}\n"), (d = (a ? d.replace(N, "") : d).replace(j, "$1").replace(C, "$1;")), (d = "function(" + (h || "obj") + ") {\n" + (h ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (o ? ", __e = _.escape" : "") + (a ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + d + "return __p\n}"); var m = Hs(function () { return he(s, p + "return " + d).apply(void 0, u); }); if (((m.source = d), Ri(m))) throw m; return m; }), (xn.times = function (e, t) { if ((e = as(e)) < 1 || e > 9007199254740991) return []; var n = 4294967295, r = ln(e, 4294967295); e -= 4294967295; for (var o = Dt(r, (t = ea(t))); ++n < e; ) t(n); return o; }), (xn.toFinite = os), (xn.toInteger = as), (xn.toLength = is), (xn.toLower = function (e) { return cs(e).toLowerCase(); }), (xn.toNumber = ss), (xn.toSafeInteger = function (e) { return e ? Qn(as(e), -9007199254740991, 9007199254740991) : 0 === e ? e : 0; }), (xn.toString = cs), (xn.toUpper = function (e) { return cs(e).toUpperCase(); }), (xn.trim = function (e, t, n) { if ((e = cs(e)) && (n || void 0 === t)) return e.replace(V, ""); if (!e || !(t = eo(t))) return e; var r = Vt(e), o = Vt(t); return po(r, Pt(r, o), Yt(r, o) + 1).join(""); }), (xn.trimEnd = function (e, t, n) { if ((e = cs(e)) && (n || void 0 === t)) return e.replace($, ""); if (!e || !(t = eo(t))) return e; var r = Vt(e); return po(r, 0, Yt(r, Vt(t)) + 1).join(""); }), (xn.trimStart = function (e, t, n) { if ((e = cs(e)) && (n || void 0 === t)) return e.replace(G, ""); if (!e || !(t = eo(t))) return e; var r = Vt(e); return po(r, Pt(r, Vt(t))).join(""); }), (xn.truncate = function (e, t) { var n = 30, r = "..."; if (Xi(t)) { var o = "separator" in t ? t.separator : o; (n = "length" in t ? as(t.length) : n), (r = "omission" in t ? eo(t.omission) : r); } var a = (e = cs(e)).length; if (Ft(e)) { var i = Vt(e); a = i.length; } if (n >= a) return e; var s = n - Jt(r); if (s < 1) return r; var u = i ? po(i, 0, s).join("") : e.slice(0, s); if (void 0 === o) return u + r; if ((i && (s += u.length - s), Gi(o))) { if (e.slice(s).search(o)) { var c, l = u; for (o.global || (o = ye(o.source, cs(oe.exec(o)) + "g")), o.lastIndex = 0; (c = o.exec(l)); ) var d = c.index; u = u.slice(0, void 0 === d ? s : d); } } else if (e.indexOf(eo(o), s) != s) { var f = u.lastIndexOf(o); f > -1 && (u = u.slice(0, f)); } return u + r; }), (xn.unescape = function (e) { return (e = cs(e)) && W.test(e) ? e.replace(P, Gt) : e; }), (xn.uniqueId = function (e) { var t = ++ke; return cs(e) + t; }), (xn.upperCase = Bs), (xn.upperFirst = Rs), (xn.each = ci), (xn.eachRight = li), (xn.first = Ya), Qs( xn, ((fu = {}), dr(xn, function (e, t) { Te.call(xn.prototype, t) || (fu[t] = e); }), fu), { chain: !1 } ), (xn.VERSION = "4.17.4"), lt(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function (e) { xn[e].placeholder = xn; }), lt(["drop", "take"], function (e, t) { (Cn.prototype[e] = function (n) { n = void 0 === n ? 1 : cn(as(n), 0); var r = this.__filtered__ && !t ? new Cn(this) : this.clone(); return r.__filtered__ ? (r.__takeCount__ = ln(n, r.__takeCount__)) : r.__views__.push({ size: ln(n, 4294967295), type: e + (r.__dir__ < 0 ? "Right" : "") }), r; }), (Cn.prototype[e + "Right"] = function (t) { return this.reverse()[e](t).reverse(); }); }), lt(["filter", "map", "takeWhile"], function (e, t) { var n = t + 1, r = 1 == n || 3 == n; Cn.prototype[e] = function (e) { var t = this.clone(); return t.__iteratees__.push({ iteratee: ea(e, 3), type: n }), (t.__filtered__ = t.__filtered__ || r), t; }; }), lt(["head", "last"], function (e, t) { var n = "take" + (t ? "Right" : ""); Cn.prototype[e] = function () { return this[n](1).value()[0]; }; }), lt(["initial", "tail"], function (e, t) { var n = "drop" + (t ? "" : "Right"); Cn.prototype[e] = function () { return this.__filtered__ ? new Cn(this) : this[n](1); }; }), (Cn.prototype.compact = function () { return this.filter(Js); }), (Cn.prototype.find = function (e) { return this.filter(e).head(); }), (Cn.prototype.findLast = function (e) { return this.reverse().find(e); }), (Cn.prototype.invokeMap = Rr(function (e, t) { return "function" == typeof e ? new Cn(this) : this.map(function (n) { return _r(n, e, t); }); })), (Cn.prototype.reject = function (e) { return this.filter(ki(ea(e))); }), (Cn.prototype.slice = function (e, t) { e = as(e); var n = this; return n.__filtered__ && (e > 0 || t < 0) ? new Cn(n) : (e < 0 ? (n = n.takeRight(-e)) : e && (n = n.drop(e)), void 0 !== t && (n = (t = as(t)) < 0 ? n.dropRight(-t) : n.take(t - e)), n); }), (Cn.prototype.takeRightWhile = function (e) { return this.reverse().takeWhile(e).reverse(); }), (Cn.prototype.toArray = function () { return this.take(4294967295); }), dr(Cn.prototype, function (e, t) { var n = /^(?:filter|find|map|reject)|While$/.test(t), r = /^(?:head|last)$/.test(t), o = xn[r ? "take" + ("last" == t ? "Right" : "") : t], a = r || /^find/.test(t); o && (xn.prototype[t] = function () { var t = this.__wrapped__, i = r ? [1] : arguments, s = t instanceof Cn, u = i[0], c = s || Ci(t), l = function (e) { var t = o.apply(xn, yt([e], i)); return r && d ? t[0] : t; }; c && n && "function" == typeof u && 1 != u.length && (s = c = !1); var d = this.__chain__, f = !!this.__actions__.length, p = a && !d, h = s && !f; if (!a && c) { t = h ? t : new Cn(this); var m = e.apply(t, i); return m.__actions__.push({ func: oi, args: [l], thisArg: void 0 }), new jn(m, d); } return p && h ? e.apply(this, i) : ((m = this.thru(l)), p ? (r ? m.value()[0] : m.value()) : m); }); }), lt(["pop", "push", "shift", "sort", "splice", "unshift"], function (e) { var t = ge[e], n = /^(?:push|sort|unshift)$/.test(e) ? "tap" : "thru", r = /^(?:pop|shift)$/.test(e); xn.prototype[e] = function () { var e = arguments; if (r && !this.__chain__) { var o = this.value(); return t.apply(Ci(o) ? o : [], e); } return this[n](function (n) { return t.apply(Ci(n) ? n : [], e); }); }; }), dr(Cn.prototype, function (e, t) { var n = xn[t]; if (n) { var r = n.name + ""; (An[r] || (An[r] = [])).push({ name: t, func: n }); } }), (An[Do(void 0, 2).name] = [{ name: "wrapper", func: void 0 }]), (Cn.prototype.clone = function () { var e = new Cn(this.__wrapped__); return ( (e.__actions__ = _o(this.__actions__)), (e.__dir__ = this.__dir__), (e.__filtered__ = this.__filtered__), (e.__iteratees__ = _o(this.__iteratees__)), (e.__takeCount__ = this.__takeCount__), (e.__views__ = _o(this.__views__)), e ); }), (Cn.prototype.reverse = function () { if (this.__filtered__) { var e = new Cn(this); (e.__dir__ = -1), (e.__filtered__ = !0); } else (e = this.clone()).__dir__ *= -1; return e; }), (Cn.prototype.value = function () { var e = this.__wrapped__.value(), t = this.__dir__, n = Ci(e), r = t < 0, o = n ? e.length : 0, a = (function (e, t, n) { var r = -1, o = n.length; for (; ++r < o; ) { var a = n[r], i = a.size; switch (a.type) { case "drop": e += i; break; case "dropRight": t -= i; break; case "take": t = ln(t, e + i); break; case "takeRight": e = cn(e, t - i); } } return { start: e, end: t }; })(0, o, this.__views__), i = a.start, s = a.end, u = s - i, c = r ? s : i - 1, l = this.__iteratees__, d = l.length, f = 0, p = ln(u, this.__takeCount__); if (!n || (!r && o == u && p == u)) return ao(e, this.__actions__); var h = []; e: for (; u-- && f < p; ) { for (var m = -1, M = e[(c += t)]; ++m < d; ) { var y = l[m], v = y.iteratee, b = y.type, g = v(M); if (2 == b) M = g; else if (!g) { if (1 == b) continue e; break e; } } h[f++] = M; } return h; }), (xn.prototype.at = ai), (xn.prototype.chain = function () { return ri(this); }), (xn.prototype.commit = function () { return new jn(this.value(), this.__chain__); }), (xn.prototype.next = function () { void 0 === this.__values__ && (this.__values__ = rs(this.value())); var e = this.__index__ >= this.__values__.length; return { done: e, value: e ? void 0 : this.__values__[this.__index__++] }; }), (xn.prototype.plant = function (e) { for (var t, n = this; n instanceof Nn; ) { var r = Ea(n); (r.__index__ = 0), (r.__values__ = void 0), t ? (o.__wrapped__ = r) : (t = r); var o = r; n = n.__wrapped__; } return (o.__wrapped__ = e), t; }), (xn.prototype.reverse = function () { var e = this.__wrapped__; if (e instanceof Cn) { var t = e; return this.__actions__.length && (t = new Cn(this)), (t = t.reverse()).__actions__.push({ func: oi, args: [Xa], thisArg: void 0 }), new jn(t, this.__chain__); } return this.thru(Xa); }), (xn.prototype.toJSON = xn.prototype.valueOf = xn.prototype.value = function () { return ao(this.__wrapped__, this.__actions__); }), (xn.prototype.first = xn.prototype.head), Ze && (xn.prototype[Ze] = function () { return this; }), xn ); })(); (Je._ = $t), void 0 === (o = function () { return $t; }.call(t, n, t, r)) || (r.exports = o); }.call(this)); }.call(this, n(53), n(79)(e))); }, , , function (e, t, n) { "use strict"; t.__esModule = !0; var r, o = n(513), a = (r = o) && r.__esModule ? r : { default: r }; t.default = function (e, t, n) { return t in e ? (0, a.default)(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = n), e; }; }, function (e, t, n) { var r; !(function () { "use strict"; var n = {}.hasOwnProperty; function o() { for (var e = [], t = 0; t < arguments.length; t++) { var r = arguments[t]; if (r) { var a = typeof r; if ("string" === a || "number" === a) e.push(r); else if (Array.isArray(r) && r.length) { var i = o.apply(null, r); i && e.push(i); } else if ("object" === a) for (var s in r) n.call(r, s) && r[s] && e.push(s); } } return e.join(" "); } e.exports ? ((o.default = o), (e.exports = o)) : void 0 === (r = function () { return o; }.apply(t, [])) || (e.exports = r); })(); }, function (e, t) { e.exports = function (e) { return e && e.__esModule ? e : { default: e }; }; }, function (e, t, n) { "use strict"; var r = n(197), o = "object" == typeof self && self && self.Object === Object && self, a = r.a || o || Function("return this")(); t.a = a; }, function (e, t, n) { "use strict"; e.exports = n(818); }, function (e, t, n) { "use strict"; n.r(t); var r = n(1), o = n(0), a = n.n(o), i = a.a.shape({ trySubscribe: a.a.func.isRequired, tryUnsubscribe: a.a.func.isRequired, notifyNestedSubs: a.a.func.isRequired, isSubscribed: a.a.func.isRequired }), s = a.a.shape({ subscribe: a.a.func.isRequired, dispatch: a.a.func.isRequired, getState: a.a.func.isRequired }); function u(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); } function c(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || ("object" != typeof t && "function" != typeof t) ? e : t; } function l(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); (e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } })), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : (e.__proto__ = t)); } function d() { var e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "store", n = arguments[1], o = n || t + "Subscription", d = (function (e) { function n(r, o) { u(this, n); var a = c(this, e.call(this, r, o)); return (a[t] = r.store), a; } return ( l(n, e), (n.prototype.getChildContext = function () { var e; return ((e = {})[t] = this[t]), (e[o] = null), e; }), (n.prototype.render = function () { return r.Children.only(this.props.children); }), n ); })(r.Component); return (d.propTypes = { store: s.isRequired, children: a.a.element.isRequired }), (d.childContextTypes = (((e = {})[t] = s.isRequired), (e[o] = i), e)), d; } var f = d(), p = n(196), h = n.n(p), m = n(19), M = n.n(m); var y = { notify: function () {} }; var v = (function () { function e(t, n, r) { !(function (e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); })(this, e), (this.store = t), (this.parentSub = n), (this.onStateChange = r), (this.unsubscribe = null), (this.listeners = y); } return ( (e.prototype.addNestedSub = function (e) { return this.trySubscribe(), this.listeners.subscribe(e); }), (e.prototype.notifyNestedSubs = function () { this.listeners.notify(); }), (e.prototype.isSubscribed = function () { return Boolean(this.unsubscribe); }), (e.prototype.trySubscribe = function () { var e, t; this.unsubscribe || ((this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.onStateChange) : this.store.subscribe(this.onStateChange)), (this.listeners = ((e = []), (t = []), { clear: function () { (t = null), (e = null); }, notify: function () { for (var n = (e = t), r = 0; r < n.length; r++) n[r](); }, get: function () { return t; }, subscribe: function (n) { var r = !0; return ( t === e && (t = e.slice()), t.push(n), function () { r && null !== e && ((r = !1), t === e && (t = e.slice()), t.splice(t.indexOf(n), 1)); } ); }, }))); }), (e.prototype.tryUnsubscribe = function () { this.unsubscribe && (this.unsubscribe(), (this.unsubscribe = null), this.listeners.clear(), (this.listeners = y)); }), e ); })(), b = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function g(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); } function _(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || ("object" != typeof t && "function" != typeof t) ? e : t; } function A(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); (e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } })), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : (e.__proto__ = t)); } function L(e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; } var w = 0, T = {}; function k() {} function O(e, t) { var n = { run: function (r) { try { var o = e(t.getState(), r); (o !== n.props || n.error) && ((n.shouldComponentUpdate = !0), (n.props = o), (n.error = null)); } catch (e) { (n.shouldComponentUpdate = !0), (n.error = e); } }, }; return n; } function S(e) { var t, n, o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, a = o.getDisplayName, u = void 0 === a ? function (e) { return "ConnectAdvanced(" + e + ")"; } : a, c = o.methodName, l = void 0 === c ? "connectAdvanced" : c, d = o.renderCountProp, f = void 0 === d ? void 0 : d, p = o.shouldHandleStateChanges, m = void 0 === p || p, y = o.storeKey, S = void 0 === y ? "store" : y, z = o.withRef, E = void 0 !== z && z, x = L(o, ["getDisplayName", "methodName", "renderCountProp", "shouldHandleStateChanges", "storeKey", "withRef"]), D = S + "Subscription", N = w++, j = (((t = {})[S] = s), (t[D] = i), t), C = (((n = {})[D] = i), n); return function (t) { M()("function" == typeof t, "You must pass a component to the function returned by connect. Instead received " + JSON.stringify(t)); var n = t.displayName || t.name || "Component", o = u(n), a = b({}, x, { getDisplayName: u, methodName: l, renderCountProp: f, shouldHandleStateChanges: m, storeKey: S, withRef: E, displayName: o, wrappedComponentName: n, WrappedComponent: t }), i = (function (n) { function i(e, t) { g(this, i); var r = _(this, n.call(this, e, t)); return ( (r.version = N), (r.state = {}), (r.renderCount = 0), (r.store = e[S] || t[S]), (r.propsMode = Boolean(e[S])), (r.setWrappedInstance = r.setWrappedInstance.bind(r)), M()(r.store, 'Could not find "' + S + '" in either the context or props of "' + o + '". Either wrap the root component in a , or explicitly pass "' + S + '" as a prop to "' + o + '".'), r.initSelector(), r.initSubscription(), r ); } return ( A(i, n), (i.prototype.getChildContext = function () { var e, t = this.propsMode ? null : this.subscription; return ((e = {})[D] = t || this.context[D]), e; }), (i.prototype.componentDidMount = function () { m && (this.subscription.trySubscribe(), this.selector.run(this.props), this.selector.shouldComponentUpdate && this.forceUpdate()); }), (i.prototype.componentWillReceiveProps = function (e) { this.selector.run(e); }), (i.prototype.shouldComponentUpdate = function () { return this.selector.shouldComponentUpdate; }), (i.prototype.componentWillUnmount = function () { this.subscription && this.subscription.tryUnsubscribe(), (this.subscription = null), (this.notifyNestedSubs = k), (this.store = null), (this.selector.run = k), (this.selector.shouldComponentUpdate = !1); }), (i.prototype.getWrappedInstance = function () { return M()(E, "To access the wrapped instance, you need to specify { withRef: true } in the options argument of the " + l + "() call."), this.wrappedInstance; }), (i.prototype.setWrappedInstance = function (e) { this.wrappedInstance = e; }), (i.prototype.initSelector = function () { var t = e(this.store.dispatch, a); (this.selector = O(t, this.store)), this.selector.run(this.props); }), (i.prototype.initSubscription = function () { if (m) { var e = (this.propsMode ? this.props : this.context)[D]; (this.subscription = new v(this.store, e, this.onStateChange.bind(this))), (this.notifyNestedSubs = this.subscription.notifyNestedSubs.bind(this.subscription)); } }), (i.prototype.onStateChange = function () { this.selector.run(this.props), this.selector.shouldComponentUpdate ? ((this.componentDidUpdate = this.notifyNestedSubsOnComponentDidUpdate), this.setState(T)) : this.notifyNestedSubs(); }), (i.prototype.notifyNestedSubsOnComponentDidUpdate = function () { (this.componentDidUpdate = void 0), this.notifyNestedSubs(); }), (i.prototype.isSubscribed = function () { return Boolean(this.subscription) && this.subscription.isSubscribed(); }), (i.prototype.addExtraProps = function (e) { if (!(E || f || (this.propsMode && this.subscription))) return e; var t = b({}, e); return E && (t.ref = this.setWrappedInstance), f && (t[f] = this.renderCount++), this.propsMode && this.subscription && (t[D] = this.subscription), t; }), (i.prototype.render = function () { var e = this.selector; if (((e.shouldComponentUpdate = !1), e.error)) throw e.error; return Object(r.createElement)(t, this.addExtraProps(e.props)); }), i ); })(r.Component); return (i.WrappedComponent = t), (i.displayName = o), (i.childContextTypes = C), (i.contextTypes = j), (i.propTypes = j), h()(i, t); }; } var z = Object.prototype.hasOwnProperty; function E(e, t) { return e === t ? 0 !== e || 0 !== t || 1 / e == 1 / t : e != e && t != t; } function x(e, t) { if (E(e, t)) return !0; if ("object" != typeof e || null === e || "object" != typeof t || null === t) return !1; var n = Object.keys(e), r = Object.keys(t); if (n.length !== r.length) return !1; for (var o = 0; o < n.length; o++) if (!z.call(t, n[o]) || !E(e[n[o]], t[n[o]])) return !1; return !0; } var D = n(49); n(87); function N(e) { return function (t, n) { var r = e(t, n); function o() { return r; } return (o.dependsOnOwnProps = !1), o; }; } function j(e) { return null !== e.dependsOnOwnProps && void 0 !== e.dependsOnOwnProps ? Boolean(e.dependsOnOwnProps) : 1 !== e.length; } function C(e, t) { return function (t, n) { n.displayName; var r = function (e, t) { return r.dependsOnOwnProps ? r.mapToProps(e, t) : r.mapToProps(e); }; return ( (r.dependsOnOwnProps = !0), (r.mapToProps = function (t, n) { (r.mapToProps = e), (r.dependsOnOwnProps = j(e)); var o = r(t, n); return "function" == typeof o && ((r.mapToProps = o), (r.dependsOnOwnProps = j(o)), (o = r(t, n))), o; }), r ); }; } var P = [ function (e) { return "function" == typeof e ? C(e) : void 0; }, function (e) { return e ? void 0 : N(function (e) { return { dispatch: e }; }); }, function (e) { return e && "object" == typeof e ? N(function (t) { return Object(D.b)(e, t); }) : void 0; }, ]; var Y = [ function (e) { return "function" == typeof e ? C(e) : void 0; }, function (e) { return e ? void 0 : N(function () { return {}; }); }, ], W = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function q(e, t, n) { return W({}, n, e, t); } var B = [ function (e) { return "function" == typeof e ? (function (e) { return function (t, n) { n.displayName; var r = n.pure, o = n.areMergedPropsEqual, a = !1, i = void 0; return function (t, n, s) { var u = e(t, n, s); return a ? (r && o(u, i)) || (i = u) : ((a = !0), (i = u)), i; }; }; })(e) : void 0; }, function (e) { return e ? void 0 : function () { return q; }; }, ]; function R(e, t, n, r) { return function (o, a) { return n(e(o, a), t(r, a), a); }; } function F(e, t, n, r, o) { var a = o.areStatesEqual, i = o.areOwnPropsEqual, s = o.areStatePropsEqual, u = !1, c = void 0, l = void 0, d = void 0, f = void 0, p = void 0; function h(o, u) { var h, m, M = !i(u, l), y = !a(o, c); return ( (c = o), (l = u), M && y ? ((d = e(c, l)), t.dependsOnOwnProps && (f = t(r, l)), (p = n(d, f, l))) : M ? (e.dependsOnOwnProps && (d = e(c, l)), t.dependsOnOwnProps && (f = t(r, l)), (p = n(d, f, l))) : y ? ((h = e(c, l)), (m = !s(h, d)), (d = h), m && (p = n(d, f, l)), p) : p ); } return function (o, a) { return u ? h(o, a) : ((d = e((c = o), (l = a))), (f = t(r, l)), (p = n(d, f, l)), (u = !0), p); }; } function H(e, t) { var n = t.initMapStateToProps, r = t.initMapDispatchToProps, o = t.initMergeProps, a = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(t, ["initMapStateToProps", "initMapDispatchToProps", "initMergeProps"]), i = n(e, a), s = r(e, a), u = o(e, a); return (a.pure ? F : R)(i, s, u, e, a); } var I = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function X(e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; } function K(e, t, n) { for (var r = t.length - 1; r >= 0; r--) { var o = t[r](e); if (o) return o; } return function (t, r) { throw new Error("Invalid value of type " + typeof e + " for " + n + " argument when connecting component " + r.wrappedComponentName + "."); }; } function U(e, t) { return e === t; } var J = (function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = e.connectHOC, n = void 0 === t ? S : t, r = e.mapStateToPropsFactories, o = void 0 === r ? Y : r, a = e.mapDispatchToPropsFactories, i = void 0 === a ? P : a, s = e.mergePropsFactories, u = void 0 === s ? B : s, c = e.selectorFactory, l = void 0 === c ? H : c; return function (e, t, r) { var a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, s = a.pure, c = void 0 === s || s, d = a.areStatesEqual, f = void 0 === d ? U : d, p = a.areOwnPropsEqual, h = void 0 === p ? x : p, m = a.areStatePropsEqual, M = void 0 === m ? x : m, y = a.areMergedPropsEqual, v = void 0 === y ? x : y, b = X(a, ["pure", "areStatesEqual", "areOwnPropsEqual", "areStatePropsEqual", "areMergedPropsEqual"]), g = K(e, o, "mapStateToProps"), _ = K(t, i, "mapDispatchToProps"), A = K(r, u, "mergeProps"); return n( l, I( { methodName: "connect", getDisplayName: function (e) { return "Connect(" + e + ")"; }, shouldHandleStateChanges: Boolean(e), initMapStateToProps: g, initMapDispatchToProps: _, initMergeProps: A, pure: c, areStatesEqual: f, areOwnPropsEqual: h, areStatePropsEqual: M, areMergedPropsEqual: v, }, b ) ); }; })(); n.d(t, "Provider", function () { return f; }), n.d(t, "createProvider", function () { return d; }), n.d(t, "connectAdvanced", function () { return S; }), n.d(t, "connect", function () { return J; }); }, function (e, t) { var n = Array.isArray; e.exports = n; }, , function (e, t, n) { "use strict"; var r = n(1), o = n(598); if (void 0 === r) throw Error("create-react-class could not find the React object. If you are using script tags, make sure that React is being loaded before create-react-class."); var a = new r.Component().updater; e.exports = o(r.Component, r.isValidElement, a); }, , function (e, t, n) { "use strict"; e.exports = n(756); }, function (e, t, n) { "use strict"; t.__esModule = !0; var r, o = n(513), a = (r = o) && r.__esModule ? r : { default: r }; t.default = (function () { function e(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; (r.enumerable = r.enumerable || !1), (r.configurable = !0), "value" in r && (r.writable = !0), (0, a.default)(e, r.key, r); } } return function (t, n, r) { return n && e(t.prototype, n), r && e(t, r), t; }; })(); }, , function (e, t, n) { "use strict"; n.d(t, "a", function () { return r; }), n.d(t, "b", function () { return o; }); var r = "reduxPersist:", o = "persist/REHYDRATE"; }, , , , function (e, t, n) { "use strict"; t.a = function (e) { return null != e && "object" == typeof e; }; }, , function (e, t, n) { "use strict"; var r = n(87), o = n(265), a = "@@redux/INIT"; function i(e, t, n) { var s; if (("function" == typeof t && void 0 === n && ((n = t), (t = void 0)), void 0 !== n)) { if ("function" != typeof n) throw new Error("Expected the enhancer to be a function."); return n(i)(e, t); } if ("function" != typeof e) throw new Error("Expected the reducer to be a function."); var u = e, c = t, l = [], d = l, f = !1; function p() { d === l && (d = l.slice()); } function h() { return c; } function m(e) { if ("function" != typeof e) throw new Error("Expected listener to be a function."); var t = !0; return ( p(), d.push(e), function () { if (t) { (t = !1), p(); var n = d.indexOf(e); d.splice(n, 1); } } ); } function M(e) { if (!Object(r.a)(e)) throw new Error("Actions must be plain objects. Use custom middleware for async actions."); if (void 0 === e.type) throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?'); if (f) throw new Error("Reducers may not dispatch actions."); try { (f = !0), (c = u(c, e)); } finally { f = !1; } for (var t = (l = d), n = 0; n < t.length; n++) { (0, t[n])(); } return e; } return ( M({ type: a }), ((s = { dispatch: M, subscribe: m, getState: h, replaceReducer: function (e) { if ("function" != typeof e) throw new Error("Expected the nextReducer to be a function."); (u = e), M({ type: a }); }, })[o.a] = function () { var e, t = m; return ( ((e = { subscribe: function (e) { if ("object" != typeof e) throw new TypeError("Expected the observer to be an object."); function n() { e.next && e.next(h()); } return n(), { unsubscribe: t(n) }; }, })[o.a] = function () { return this; }), e ); }), s ); } function s(e, t) { var n = t && t.type; return ( "Given action " + ((n && '"' + n.toString() + '"') || "an action") + ', reducer "' + e + '" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.' ); } function u(e) { for (var t = Object.keys(e), n = {}, r = 0; r < t.length; r++) { var o = t[r]; 0, "function" == typeof e[o] && (n[o] = e[o]); } var i = Object.keys(n); var u = void 0; try { !(function (e) { Object.keys(e).forEach(function (t) { var n = e[t]; if (void 0 === n(void 0, { type: a })) throw new Error( 'Reducer "' + t + "\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined." ); if (void 0 === n(void 0, { type: "@@redux/PROBE_UNKNOWN_ACTION_" + Math.random().toString(36).substring(7).split("").join(".") })) throw new Error( 'Reducer "' + t + "\" returned undefined when probed with a random type. Don't try to handle " + a + ' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.' ); }); })(n); } catch (e) { u = e; } return function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = arguments[1]; if (u) throw u; for (var r = !1, o = {}, a = 0; a < i.length; a++) { var c = i[a], l = n[c], d = e[c], f = l(d, t); if (void 0 === f) { var p = s(c, t); throw new Error(p); } (o[c] = f), (r = r || f !== d); } return r ? o : e; }; } function c(e, t) { return function () { return t(e.apply(void 0, arguments)); }; } function l(e, t) { if ("function" == typeof e) return c(e, t); if ("object" != typeof e || null === e) throw new Error("bindActionCreators expected an object or a function, instead received " + (null === e ? "null" : typeof e) + '. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?'); for (var n = Object.keys(e), r = {}, o = 0; o < n.length; o++) { var a = n[o], i = e[a]; "function" == typeof i && (r[a] = c(i, t)); } return r; } function d() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return 0 === t.length ? function (e) { return e; } : 1 === t.length ? t[0] : t.reduce(function (e, t) { return function () { return e(t.apply(void 0, arguments)); }; }); } var f = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function p() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return function (e) { return function (n, r, o) { var a, i = e(n, r, o), s = i.dispatch, u = { getState: i.getState, dispatch: function (e) { return s(e); }, }; return ( (a = t.map(function (e) { return e(u); })), (s = d.apply(void 0, a)(i.dispatch)), f({}, i, { dispatch: s }) ); }; }; } n.d(t, "e", function () { return i; }), n.d(t, "c", function () { return u; }), n.d(t, "b", function () { return l; }), n.d(t, "a", function () { return p; }), n.d(t, "d", function () { return d; }); }, , function (e, t) { var n = (e.exports = { version: "2.6.9" }); "number" == typeof __e && (__e = n); }, function (e, t, n) { "use strict"; var r = n(54), o = Object.prototype, a = o.hasOwnProperty, i = o.toString, s = r.a ? r.a.toStringTag : void 0; var u = function (e) { var t = a.call(e, s), n = e[s]; try { e[s] = void 0; var r = !0; } catch (e) {} var o = i.call(e); return r && (t ? (e[s] = n) : delete e[s]), o; }, c = Object.prototype.toString; var l = function (e) { return c.call(e); }, d = r.a ? r.a.toStringTag : void 0; t.a = function (e) { return null == e ? (void 0 === e ? "[object Undefined]" : "[object Null]") : d && d in Object(e) ? u(e) : l(e); }; }, function (e, t) { var n; n = (function () { return this; })(); try { n = n || new Function("return this")(); } catch (e) { "object" == typeof window && (n = window); } e.exports = n; }, function (e, t, n) { "use strict"; var r = n(33).a.Symbol; t.a = r; }, , , function (e, t, n) { "use strict"; (t.__esModule = !0), (t.default = function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; }); }, , , , function (e, t, n) { var r = n(294), o = "object" == typeof self && self && self.Object === Object && self, a = r || o || Function("return this")(); e.exports = a; }, , function (e, t) { var n = Array.isArray; e.exports = n; }, function (e, t, n) { var r = n(466), o = "object" == typeof self && self && self.Object === Object && self, a = r || o || Function("return this")(); e.exports = a; }, function (e, t, n) { var r = n(254)("wks"), o = n(188), a = n(84).Symbol, i = "function" == typeof a; (e.exports = function (e) { return r[e] || (r[e] = (i && a[e]) || (i ? a : o)("Symbol." + e)); }).store = r; }, function (e, t, n) { var r, o, a; (o = "undefined" != typeof window ? window : this), (a = function (n, o) { var a = [], i = n.document, s = a.slice, u = a.concat, c = a.push, l = a.indexOf, d = {}, f = d.toString, p = d.hasOwnProperty, h = {}, m = function (e, t) { return new m.fn.init(e, t); }, M = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, y = /^-ms-/, v = /-([\da-z])/gi, b = function (e, t) { return t.toUpperCase(); }; function g(e) { var t = !!e && "length" in e && e.length, n = m.type(e); return "function" !== n && !m.isWindow(e) && ("array" === n || 0 === t || ("number" == typeof t && t > 0 && t - 1 in e)); } (m.fn = m.prototype = { jquery: "2.2.4", constructor: m, selector: "", length: 0, toArray: function () { return s.call(this); }, get: function (e) { return null != e ? (e < 0 ? this[e + this.length] : this[e]) : s.call(this); }, pushStack: function (e) { var t = m.merge(this.constructor(), e); return (t.prevObject = this), (t.context = this.context), t; }, each: function (e) { return m.each(this, e); }, map: function (e) { return this.pushStack( m.map(this, function (t, n) { return e.call(t, n, t); }) ); }, slice: function () { return this.pushStack(s.apply(this, arguments)); }, first: function () { return this.eq(0); }, last: function () { return this.eq(-1); }, eq: function (e) { var t = this.length, n = +e + (e < 0 ? t : 0); return this.pushStack(n >= 0 && n < t ? [this[n]] : []); }, end: function () { return this.prevObject || this.constructor(); }, push: c, sort: a.sort, splice: a.splice, }), (m.extend = m.fn.extend = function () { var e, t, n, r, o, a, i = arguments[0] || {}, s = 1, u = arguments.length, c = !1; for ("boolean" == typeof i && ((c = i), (i = arguments[s] || {}), s++), "object" == typeof i || m.isFunction(i) || (i = {}), s === u && ((i = this), s--); s < u; s++) if (null != (e = arguments[s])) for (t in e) (n = i[t]), i !== (r = e[t]) && (c && r && (m.isPlainObject(r) || (o = m.isArray(r))) ? (o ? ((o = !1), (a = n && m.isArray(n) ? n : [])) : (a = n && m.isPlainObject(n) ? n : {}), (i[t] = m.extend(c, a, r))) : void 0 !== r && (i[t] = r)); return i; }), m.extend({ expando: "jQuery" + ("2.2.4" + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) { throw new Error(e); }, noop: function () {}, isFunction: function (e) { return "function" === m.type(e); }, isArray: Array.isArray, isWindow: function (e) { return null != e && e === e.window; }, isNumeric: function (e) { var t = e && e.toString(); return !m.isArray(e) && t - parseFloat(t) + 1 >= 0; }, isPlainObject: function (e) { var t; if ("object" !== m.type(e) || e.nodeType || m.isWindow(e)) return !1; if (e.constructor && !p.call(e, "constructor") && !p.call(e.constructor.prototype || {}, "isPrototypeOf")) return !1; for (t in e); return void 0 === t || p.call(e, t); }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0; }, type: function (e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? d[f.call(e)] || "object" : typeof e; }, globalEval: function (e) { var t, n = eval; (e = m.trim(e)) && (1 === e.indexOf("use strict") ? (((t = i.createElement("script")).text = e), i.head.appendChild(t).parentNode.removeChild(t)) : n(e)); }, camelCase: function (e) { return e.replace(y, "ms-").replace(v, b); }, nodeName: function (e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase(); }, each: function (e, t) { var n, r = 0; if (g(e)) for (n = e.length; r < n && !1 !== t.call(e[r], r, e[r]); r++); else for (r in e) if (!1 === t.call(e[r], r, e[r])) break; return e; }, trim: function (e) { return null == e ? "" : (e + "").replace(M, ""); }, makeArray: function (e, t) { var n = t || []; return null != e && (g(Object(e)) ? m.merge(n, "string" == typeof e ? [e] : e) : c.call(n, e)), n; }, inArray: function (e, t, n) { return null == t ? -1 : l.call(t, e, n); }, merge: function (e, t) { for (var n = +t.length, r = 0, o = e.length; r < n; r++) e[o++] = t[r]; return (e.length = o), e; }, grep: function (e, t, n) { for (var r = [], o = 0, a = e.length, i = !n; o < a; o++) !t(e[o], o) !== i && r.push(e[o]); return r; }, map: function (e, t, n) { var r, o, a = 0, i = []; if (g(e)) for (r = e.length; a < r; a++) null != (o = t(e[a], a, n)) && i.push(o); else for (a in e) null != (o = t(e[a], a, n)) && i.push(o); return u.apply([], i); }, guid: 1, proxy: function (e, t) { var n, r, o; if (("string" == typeof t && ((n = e[t]), (t = e), (e = n)), m.isFunction(e))) return ( (r = s.call(arguments, 2)), ((o = function () { return e.apply(t || this, r.concat(s.call(arguments))); }).guid = e.guid = e.guid || m.guid++), o ); }, now: Date.now, support: h, }), "function" == typeof Symbol && (m.fn[Symbol.iterator] = a[Symbol.iterator]), m.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) { d["[object " + t + "]"] = t.toLowerCase(); }); var _ = (function (e) { var t, n, r, o, a, i, s, u, c, l, d, f, p, h, m, M, y, v, b, g = "sizzle" + 1 * new Date(), _ = e.document, A = 0, L = 0, w = oe(), T = oe(), k = oe(), O = function (e, t) { return e === t && (d = !0), 0; }, S = {}.hasOwnProperty, z = [], E = z.pop, x = z.push, D = z.push, N = z.slice, j = function (e, t) { for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n; return -1; }, C = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", P = "[\\x20\\t\\r\\n\\f]", Y = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", W = "\\[" + P + "*(" + Y + ")(?:" + P + "*([*^$|!~]?=)" + P + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + Y + "))|)" + P + "*\\]", q = ":(" + Y + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)", B = new RegExp(P + "+", "g"), R = new RegExp("^" + P + "+|((?:^|[^\\\\])(?:\\\\.)*)" + P + "+$", "g"), F = new RegExp("^" + P + "*," + P + "*"), H = new RegExp("^" + P + "*([>+~]|" + P + ")" + P + "*"), I = new RegExp("=" + P + "*([^\\]'\"]*?)" + P + "*\\]", "g"), X = new RegExp(q), K = new RegExp("^" + Y + "$"), U = { ID: new RegExp("^#(" + Y + ")"), CLASS: new RegExp("^\\.(" + Y + ")"), TAG: new RegExp("^(" + Y + "|[*])"), ATTR: new RegExp("^" + W), PSEUDO: new RegExp("^" + q), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + P + "*(even|odd|(([+-]|)(\\d*)n|)" + P + "*(?:([+-]|)" + P + "*(\\d+)|))" + P + "*\\)|)", "i"), bool: new RegExp("^(?:" + C + ")$", "i"), needsContext: new RegExp("^" + P + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + P + "*((?:-\\d)?\\d*)" + P + "*\\)|)(?=[^-]|$)", "i"), }, J = /^(?:input|select|textarea|button)$/i, V = /^h\d$/i, G = /^[^{]+\{\s*\[native \w/, $ = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, Q = /[+~]/, Z = /'|\\/g, ee = new RegExp("\\\\([\\da-f]{1,6}" + P + "?|(" + P + ")|.)", "ig"), te = function (e, t, n) { var r = "0x" + t - 65536; return r != r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode((r >> 10) | 55296, (1023 & r) | 56320); }, ne = function () { f(); }; try { D.apply((z = N.call(_.childNodes)), _.childNodes), z[_.childNodes.length].nodeType; } catch (e) { D = { apply: z.length ? function (e, t) { x.apply(e, N.call(t)); } : function (e, t) { for (var n = e.length, r = 0; (e[n++] = t[r++]); ); e.length = n - 1; }, }; } function re(e, t, r, o) { var a, s, c, l, d, h, y, v, A = t && t.ownerDocument, L = t ? t.nodeType : 9; if (((r = r || []), "string" != typeof e || !e || (1 !== L && 9 !== L && 11 !== L))) return r; if (!o && ((t ? t.ownerDocument || t : _) !== p && f(t), (t = t || p), m)) { if (11 !== L && (h = $.exec(e))) if ((a = h[1])) { if (9 === L) { if (!(c = t.getElementById(a))) return r; if (c.id === a) return r.push(c), r; } else if (A && (c = A.getElementById(a)) && b(t, c) && c.id === a) return r.push(c), r; } else { if (h[2]) return D.apply(r, t.getElementsByTagName(e)), r; if ((a = h[3]) && n.getElementsByClassName && t.getElementsByClassName) return D.apply(r, t.getElementsByClassName(a)), r; } if (n.qsa && !k[e + " "] && (!M || !M.test(e))) { if (1 !== L) (A = t), (v = e); else if ("object" !== t.nodeName.toLowerCase()) { for ((l = t.getAttribute("id")) ? (l = l.replace(Z, "\\$&")) : t.setAttribute("id", (l = g)), s = (y = i(e)).length, d = K.test(l) ? "#" + l : "[id='" + l + "']"; s--; ) y[s] = d + " " + he(y[s]); (v = y.join(",")), (A = (Q.test(e) && fe(t.parentNode)) || t); } if (v) try { return D.apply(r, A.querySelectorAll(v)), r; } catch (e) { } finally { l === g && t.removeAttribute("id"); } } } return u(e.replace(R, "$1"), t, r, o); } function oe() { var e = []; return function t(n, o) { return e.push(n + " ") > r.cacheLength && delete t[e.shift()], (t[n + " "] = o); }; } function ae(e) { return (e[g] = !0), e; } function ie(e) { var t = p.createElement("div"); try { return !!e(t); } catch (e) { return !1; } finally { t.parentNode && t.parentNode.removeChild(t), (t = null); } } function se(e, t) { for (var n = e.split("|"), o = n.length; o--; ) r.attrHandle[n[o]] = t; } function ue(e, t) { var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || 1 << 31) - (~e.sourceIndex || 1 << 31); if (r) return r; if (n) for (; (n = n.nextSibling); ) if (n === t) return -1; return e ? 1 : -1; } function ce(e) { return function (t) { return "input" === t.nodeName.toLowerCase() && t.type === e; }; } function le(e) { return function (t) { var n = t.nodeName.toLowerCase(); return ("input" === n || "button" === n) && t.type === e; }; } function de(e) { return ae(function (t) { return ( (t = +t), ae(function (n, r) { for (var o, a = e([], n.length, t), i = a.length; i--; ) n[(o = a[i])] && (n[o] = !(r[o] = n[o])); }) ); }); } function fe(e) { return e && void 0 !== e.getElementsByTagName && e; } for (t in ((n = re.support = {}), (a = re.isXML = function (e) { var t = e && (e.ownerDocument || e).documentElement; return !!t && "HTML" !== t.nodeName; }), (f = re.setDocument = function (e) { var t, o, i = e ? e.ownerDocument || e : _; return i !== p && 9 === i.nodeType && i.documentElement ? ((h = (p = i).documentElement), (m = !a(p)), (o = p.defaultView) && o.top !== o && (o.addEventListener ? o.addEventListener("unload", ne, !1) : o.attachEvent && o.attachEvent("onunload", ne)), (n.attributes = ie(function (e) { return (e.className = "i"), !e.getAttribute("className"); })), (n.getElementsByTagName = ie(function (e) { return e.appendChild(p.createComment("")), !e.getElementsByTagName("*").length; })), (n.getElementsByClassName = G.test(p.getElementsByClassName)), (n.getById = ie(function (e) { return (h.appendChild(e).id = g), !p.getElementsByName || !p.getElementsByName(g).length; })), n.getById ? ((r.find.ID = function (e, t) { if (void 0 !== t.getElementById && m) { var n = t.getElementById(e); return n ? [n] : []; } }), (r.filter.ID = function (e) { var t = e.replace(ee, te); return function (e) { return e.getAttribute("id") === t; }; })) : (delete r.find.ID, (r.filter.ID = function (e) { var t = e.replace(ee, te); return function (e) { var n = void 0 !== e.getAttributeNode && e.getAttributeNode("id"); return n && n.value === t; }; })), (r.find.TAG = n.getElementsByTagName ? function (e, t) { return void 0 !== t.getElementsByTagName ? t.getElementsByTagName(e) : n.qsa ? t.querySelectorAll(e) : void 0; } : function (e, t) { var n, r = [], o = 0, a = t.getElementsByTagName(e); if ("*" === e) { for (; (n = a[o++]); ) 1 === n.nodeType && r.push(n); return r; } return a; }), (r.find.CLASS = n.getElementsByClassName && function (e, t) { if (void 0 !== t.getElementsByClassName && m) return t.getElementsByClassName(e); }), (y = []), (M = []), (n.qsa = G.test(p.querySelectorAll)) && (ie(function (e) { (h.appendChild(e).innerHTML = ""), e.querySelectorAll("[msallowcapture^='']").length && M.push("[*^$]=" + P + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || M.push("\\[" + P + "*(?:value|" + C + ")"), e.querySelectorAll("[id~=" + g + "-]").length || M.push("~="), e.querySelectorAll(":checked").length || M.push(":checked"), e.querySelectorAll("a#" + g + "+*").length || M.push(".#.+[+~]"); }), ie(function (e) { var t = p.createElement("input"); t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && M.push("name" + P + "*[*^$|!~]?="), e.querySelectorAll(":enabled").length || M.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), M.push(",.*:"); })), (n.matchesSelector = G.test((v = h.matches || h.webkitMatchesSelector || h.mozMatchesSelector || h.oMatchesSelector || h.msMatchesSelector))) && ie(function (e) { (n.disconnectedMatch = v.call(e, "div")), v.call(e, "[s!='']:x"), y.push("!=", q); }), (M = M.length && new RegExp(M.join("|"))), (y = y.length && new RegExp(y.join("|"))), (t = G.test(h.compareDocumentPosition)), (b = t || G.test(h.contains) ? function (e, t) { var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode; return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))); } : function (e, t) { if (t) for (; (t = t.parentNode); ) if (t === e) return !0; return !1; }), (O = t ? function (e, t) { if (e === t) return (d = !0), 0; var r = !e.compareDocumentPosition - !t.compareDocumentPosition; return ( r || (1 & (r = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || (!n.sortDetached && t.compareDocumentPosition(e) === r) ? e === p || (e.ownerDocument === _ && b(_, e)) ? -1 : t === p || (t.ownerDocument === _ && b(_, t)) ? 1 : l ? j(l, e) - j(l, t) : 0 : 4 & r ? -1 : 1) ); } : function (e, t) { if (e === t) return (d = !0), 0; var n, r = 0, o = e.parentNode, a = t.parentNode, i = [e], s = [t]; if (!o || !a) return e === p ? -1 : t === p ? 1 : o ? -1 : a ? 1 : l ? j(l, e) - j(l, t) : 0; if (o === a) return ue(e, t); for (n = e; (n = n.parentNode); ) i.unshift(n); for (n = t; (n = n.parentNode); ) s.unshift(n); for (; i[r] === s[r]; ) r++; return r ? ue(i[r], s[r]) : i[r] === _ ? -1 : s[r] === _ ? 1 : 0; }), p) : p; }), (re.matches = function (e, t) { return re(e, null, null, t); }), (re.matchesSelector = function (e, t) { if (((e.ownerDocument || e) !== p && f(e), (t = t.replace(I, "='$1']")), n.matchesSelector && m && !k[t + " "] && (!y || !y.test(t)) && (!M || !M.test(t)))) try { var r = v.call(e, t); if (r || n.disconnectedMatch || (e.document && 11 !== e.document.nodeType)) return r; } catch (e) {} return re(t, p, null, [e]).length > 0; }), (re.contains = function (e, t) { return (e.ownerDocument || e) !== p && f(e), b(e, t); }), (re.attr = function (e, t) { (e.ownerDocument || e) !== p && f(e); var o = r.attrHandle[t.toLowerCase()], a = o && S.call(r.attrHandle, t.toLowerCase()) ? o(e, t, !m) : void 0; return void 0 !== a ? a : n.attributes || !m ? e.getAttribute(t) : (a = e.getAttributeNode(t)) && a.specified ? a.value : null; }), (re.error = function (e) { throw new Error("Syntax error, unrecognized expression: " + e); }), (re.uniqueSort = function (e) { var t, r = [], o = 0, a = 0; if (((d = !n.detectDuplicates), (l = !n.sortStable && e.slice(0)), e.sort(O), d)) { for (; (t = e[a++]); ) t === e[a] && (o = r.push(a)); for (; o--; ) e.splice(r[o], 1); } return (l = null), e; }), (o = re.getText = function (e) { var t, n = "", r = 0, a = e.nodeType; if (a) { if (1 === a || 9 === a || 11 === a) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling) n += o(e); } else if (3 === a || 4 === a) return e.nodeValue; } else for (; (t = e[r++]); ) n += o(t); return n; }), ((r = re.selectors = { cacheLength: 50, createPseudo: ae, match: U, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (e) { return (e[1] = e[1].replace(ee, te)), (e[3] = (e[3] || e[4] || e[5] || "").replace(ee, te)), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4); }, CHILD: function (e) { return ( (e[1] = e[1].toLowerCase()), "nth" === e[1].slice(0, 3) ? (e[3] || re.error(e[0]), (e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3]))), (e[5] = +(e[7] + e[8] || "odd" === e[3]))) : e[3] && re.error(e[0]), e ); }, PSEUDO: function (e) { var t, n = !e[6] && e[2]; return U.CHILD.test(e[0]) ? null : (e[3] ? (e[2] = e[4] || e[5] || "") : n && X.test(n) && (t = i(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && ((e[0] = e[0].slice(0, t)), (e[2] = n.slice(0, t))), e.slice(0, 3)); }, }, filter: { TAG: function (e) { var t = e.replace(ee, te).toLowerCase(); return "*" === e ? function () { return !0; } : function (e) { return e.nodeName && e.nodeName.toLowerCase() === t; }; }, CLASS: function (e) { var t = w[e + " "]; return ( t || ((t = new RegExp("(^|" + P + ")" + e + "(" + P + "|$)")) && w(e, function (e) { return t.test(("string" == typeof e.className && e.className) || (void 0 !== e.getAttribute && e.getAttribute("class")) || ""); })) ); }, ATTR: function (e, t, n) { return function (r) { var o = re.attr(r, e); return null == o ? "!=" === t : !t || ((o += ""), "=" === t ? o === n : "!=" === t ? o !== n : "^=" === t ? n && 0 === o.indexOf(n) : "*=" === t ? n && o.indexOf(n) > -1 : "$=" === t ? n && o.slice(-n.length) === n : "~=" === t ? (" " + o.replace(B, " ") + " ").indexOf(n) > -1 : "|=" === t && (o === n || o.slice(0, n.length + 1) === n + "-")); }; }, CHILD: function (e, t, n, r, o) { var a = "nth" !== e.slice(0, 3), i = "last" !== e.slice(-4), s = "of-type" === t; return 1 === r && 0 === o ? function (e) { return !!e.parentNode; } : function (t, n, u) { var c, l, d, f, p, h, m = a !== i ? "nextSibling" : "previousSibling", M = t.parentNode, y = s && t.nodeName.toLowerCase(), v = !u && !s, b = !1; if (M) { if (a) { for (; m; ) { for (f = t; (f = f[m]); ) if (s ? f.nodeName.toLowerCase() === y : 1 === f.nodeType) return !1; h = m = "only" === e && !h && "nextSibling"; } return !0; } if (((h = [i ? M.firstChild : M.lastChild]), i && v)) { for ( b = (p = (c = (l = (d = (f = M)[g] || (f[g] = {}))[f.uniqueID] || (d[f.uniqueID] = {}))[e] || [])[0] === A && c[1]) && c[2], f = p && M.childNodes[p]; (f = (++p && f && f[m]) || (b = p = 0) || h.pop()); ) if (1 === f.nodeType && ++b && f === t) { l[e] = [A, p, b]; break; } } else if ((v && (b = p = (c = (l = (d = (f = t)[g] || (f[g] = {}))[f.uniqueID] || (d[f.uniqueID] = {}))[e] || [])[0] === A && c[1]), !1 === b)) for ( ; (f = (++p && f && f[m]) || (b = p = 0) || h.pop()) && ((s ? f.nodeName.toLowerCase() !== y : 1 !== f.nodeType) || !++b || (v && ((l = (d = f[g] || (f[g] = {}))[f.uniqueID] || (d[f.uniqueID] = {}))[e] = [A, b]), f !== t)); ); return (b -= o) === r || (b % r == 0 && b / r >= 0); } }; }, PSEUDO: function (e, t) { var n, o = r.pseudos[e] || r.setFilters[e.toLowerCase()] || re.error("unsupported pseudo: " + e); return o[g] ? o(t) : o.length > 1 ? ((n = [e, e, "", t]), r.setFilters.hasOwnProperty(e.toLowerCase()) ? ae(function (e, n) { for (var r, a = o(e, t), i = a.length; i--; ) e[(r = j(e, a[i]))] = !(n[r] = a[i]); }) : function (e) { return o(e, 0, n); }) : o; }, }, pseudos: { not: ae(function (e) { var t = [], n = [], r = s(e.replace(R, "$1")); return r[g] ? ae(function (e, t, n, o) { for (var a, i = r(e, null, o, []), s = e.length; s--; ) (a = i[s]) && (e[s] = !(t[s] = a)); }) : function (e, o, a) { return (t[0] = e), r(t, null, a, n), (t[0] = null), !n.pop(); }; }), has: ae(function (e) { return function (t) { return re(e, t).length > 0; }; }), contains: ae(function (e) { return ( (e = e.replace(ee, te)), function (t) { return (t.textContent || t.innerText || o(t)).indexOf(e) > -1; } ); }), lang: ae(function (e) { return ( K.test(e || "") || re.error("unsupported lang: " + e), (e = e.replace(ee, te).toLowerCase()), function (t) { var n; do { if ((n = m ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang"))) return (n = n.toLowerCase()) === e || 0 === n.indexOf(e + "-"); } while ((t = t.parentNode) && 1 === t.nodeType); return !1; } ); }), target: function (t) { var n = e.location && e.location.hash; return n && n.slice(1) === t.id; }, root: function (e) { return e === h; }, focus: function (e) { return e === p.activeElement && (!p.hasFocus || p.hasFocus()) && !!(e.type || e.href || ~e.tabIndex); }, enabled: function (e) { return !1 === e.disabled; }, disabled: function (e) { return !0 === e.disabled; }, checked: function (e) { var t = e.nodeName.toLowerCase(); return ("input" === t && !!e.checked) || ("option" === t && !!e.selected); }, selected: function (e) { return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected; }, empty: function (e) { for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1; return !0; }, parent: function (e) { return !r.pseudos.empty(e); }, header: function (e) { return V.test(e.nodeName); }, input: function (e) { return J.test(e.nodeName); }, button: function (e) { var t = e.nodeName.toLowerCase(); return ("input" === t && "button" === e.type) || "button" === t; }, text: function (e) { var t; return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()); }, first: de(function () { return [0]; }), last: de(function (e, t) { return [t - 1]; }), eq: de(function (e, t, n) { return [n < 0 ? n + t : n]; }), even: de(function (e, t) { for (var n = 0; n < t; n += 2) e.push(n); return e; }), odd: de(function (e, t) { for (var n = 1; n < t; n += 2) e.push(n); return e; }), lt: de(function (e, t, n) { for (var r = n < 0 ? n + t : n; --r >= 0; ) e.push(r); return e; }), gt: de(function (e, t, n) { for (var r = n < 0 ? n + t : n; ++r < t; ) e.push(r); return e; }), }, }).pseudos.nth = r.pseudos.eq), { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 })) r.pseudos[t] = ce(t); for (t in { submit: !0, reset: !0 }) r.pseudos[t] = le(t); function pe() {} function he(e) { for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value; return r; } function me(e, t, n) { var r = t.dir, o = n && "parentNode" === r, a = L++; return t.first ? function (t, n, a) { for (; (t = t[r]); ) if (1 === t.nodeType || o) return e(t, n, a); } : function (t, n, i) { var s, u, c, l = [A, a]; if (i) { for (; (t = t[r]); ) if ((1 === t.nodeType || o) && e(t, n, i)) return !0; } else for (; (t = t[r]); ) if (1 === t.nodeType || o) { if ((s = (u = (c = t[g] || (t[g] = {}))[t.uniqueID] || (c[t.uniqueID] = {}))[r]) && s[0] === A && s[1] === a) return (l[2] = s[2]); if (((u[r] = l), (l[2] = e(t, n, i)))) return !0; } }; } function Me(e) { return e.length > 1 ? function (t, n, r) { for (var o = e.length; o--; ) if (!e[o](t, n, r)) return !1; return !0; } : e[0]; } function ye(e, t, n, r, o) { for (var a, i = [], s = 0, u = e.length, c = null != t; s < u; s++) (a = e[s]) && ((n && !n(a, r, o)) || (i.push(a), c && t.push(s))); return i; } function ve(e, t, n, r, o, a) { return ( r && !r[g] && (r = ve(r)), o && !o[g] && (o = ve(o, a)), ae(function (a, i, s, u) { var c, l, d, f = [], p = [], h = i.length, m = a || (function (e, t, n) { for (var r = 0, o = t.length; r < o; r++) re(e, t[r], n); return n; })(t || "*", s.nodeType ? [s] : s, []), M = !e || (!a && t) ? m : ye(m, f, e, s, u), y = n ? (o || (a ? e : h || r) ? [] : i) : M; if ((n && n(M, y, s, u), r)) for (c = ye(y, p), r(c, [], s, u), l = c.length; l--; ) (d = c[l]) && (y[p[l]] = !(M[p[l]] = d)); if (a) { if (o || e) { if (o) { for (c = [], l = y.length; l--; ) (d = y[l]) && c.push((M[l] = d)); o(null, (y = []), c, u); } for (l = y.length; l--; ) (d = y[l]) && (c = o ? j(a, d) : f[l]) > -1 && (a[c] = !(i[c] = d)); } } else (y = ye(y === i ? y.splice(h, y.length) : y)), o ? o(null, i, y, u) : D.apply(i, y); }) ); } function be(e) { for ( var t, n, o, a = e.length, i = r.relative[e[0].type], s = i || r.relative[" "], u = i ? 1 : 0, l = me( function (e) { return e === t; }, s, !0 ), d = me( function (e) { return j(t, e) > -1; }, s, !0 ), f = [ function (e, n, r) { var o = (!i && (r || n !== c)) || ((t = n).nodeType ? l(e, n, r) : d(e, n, r)); return (t = null), o; }, ]; u < a; u++ ) if ((n = r.relative[e[u].type])) f = [me(Me(f), n)]; else { if ((n = r.filter[e[u].type].apply(null, e[u].matches))[g]) { for (o = ++u; o < a && !r.relative[e[o].type]; o++); return ve( u > 1 && Me(f), u > 1 && he(e.slice(0, u - 1).concat({ value: " " === e[u - 2].type ? "*" : "" })).replace(R, "$1"), n, u < o && be(e.slice(u, o)), o < a && be((e = e.slice(o))), o < a && he(e) ); } f.push(n); } return Me(f); } return ( (pe.prototype = r.filters = r.pseudos), (r.setFilters = new pe()), (i = re.tokenize = function (e, t) { var n, o, a, i, s, u, c, l = T[e + " "]; if (l) return t ? 0 : l.slice(0); for (s = e, u = [], c = r.preFilter; s; ) { for (i in ((n && !(o = F.exec(s))) || (o && (s = s.slice(o[0].length) || s), u.push((a = []))), (n = !1), (o = H.exec(s)) && ((n = o.shift()), a.push({ value: n, type: o[0].replace(R, " ") }), (s = s.slice(n.length))), r.filter)) !(o = U[i].exec(s)) || (c[i] && !(o = c[i](o))) || ((n = o.shift()), a.push({ value: n, type: i, matches: o }), (s = s.slice(n.length))); if (!n) break; } return t ? s.length : s ? re.error(e) : T(e, u).slice(0); }), (s = re.compile = function (e, t) { var n, o = [], a = [], s = k[e + " "]; if (!s) { for (t || (t = i(e)), n = t.length; n--; ) (s = be(t[n]))[g] ? o.push(s) : a.push(s); (s = k( e, (function (e, t) { var n = t.length > 0, o = e.length > 0, a = function (a, i, s, u, l) { var d, h, M, y = 0, v = "0", b = a && [], g = [], _ = c, L = a || (o && r.find.TAG("*", l)), w = (A += null == _ ? 1 : Math.random() || 0.1), T = L.length; for (l && (c = i === p || i || l); v !== T && null != (d = L[v]); v++) { if (o && d) { for (h = 0, i || d.ownerDocument === p || (f(d), (s = !m)); (M = e[h++]); ) if (M(d, i || p, s)) { u.push(d); break; } l && (A = w); } n && ((d = !M && d) && y--, a && b.push(d)); } if (((y += v), n && v !== y)) { for (h = 0; (M = t[h++]); ) M(b, g, i, s); if (a) { if (y > 0) for (; v--; ) b[v] || g[v] || (g[v] = E.call(u)); g = ye(g); } D.apply(u, g), l && !a && g.length > 0 && y + t.length > 1 && re.uniqueSort(u); } return l && ((A = w), (c = _)), b; }; return n ? ae(a) : a; })(a, o) )).selector = e; } return s; }), (u = re.select = function (e, t, o, a) { var u, c, l, d, f, p = "function" == typeof e && e, h = !a && i((e = p.selector || e)); if (((o = o || []), 1 === h.length)) { if ((c = h[0] = h[0].slice(0)).length > 2 && "ID" === (l = c[0]).type && n.getById && 9 === t.nodeType && m && r.relative[c[1].type]) { if (!(t = (r.find.ID(l.matches[0].replace(ee, te), t) || [])[0])) return o; p && (t = t.parentNode), (e = e.slice(c.shift().value.length)); } for (u = U.needsContext.test(e) ? 0 : c.length; u-- && ((l = c[u]), !r.relative[(d = l.type)]); ) if ((f = r.find[d]) && (a = f(l.matches[0].replace(ee, te), (Q.test(c[0].type) && fe(t.parentNode)) || t))) { if ((c.splice(u, 1), !(e = a.length && he(c)))) return D.apply(o, a), o; break; } } return (p || s(e, h))(a, t, !m, o, !t || (Q.test(e) && fe(t.parentNode)) || t), o; }), (n.sortStable = g.split("").sort(O).join("") === g), (n.detectDuplicates = !!d), f(), (n.sortDetached = ie(function (e) { return 1 & e.compareDocumentPosition(p.createElement("div")); })), ie(function (e) { return (e.innerHTML = ""), "#" === e.firstChild.getAttribute("href"); }) || se("type|href|height|width", function (e, t, n) { if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2); }), (n.attributes && ie(function (e) { return (e.innerHTML = ""), e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value"); })) || se("value", function (e, t, n) { if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue; }), ie(function (e) { return null == e.getAttribute("disabled"); }) || se(C, function (e, t, n) { var r; if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null; }), re ); })(n); (m.find = _), (m.expr = _.selectors), (m.expr[":"] = m.expr.pseudos), (m.uniqueSort = m.unique = _.uniqueSort), (m.text = _.getText), (m.isXMLDoc = _.isXML), (m.contains = _.contains); var A = function (e, t, n) { for (var r = [], o = void 0 !== n; (e = e[t]) && 9 !== e.nodeType; ) if (1 === e.nodeType) { if (o && m(e).is(n)) break; r.push(e); } return r; }, L = function (e, t) { for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e); return n; }, w = m.expr.match.needsContext, T = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/, k = /^.[^:#\[\.,]*$/; function O(e, t, n) { if (m.isFunction(t)) return m.grep(e, function (e, r) { return !!t.call(e, r, e) !== n; }); if (t.nodeType) return m.grep(e, function (e) { return (e === t) !== n; }); if ("string" == typeof t) { if (k.test(t)) return m.filter(t, e, n); t = m.filter(t, e); } return m.grep(e, function (e) { return l.call(t, e) > -1 !== n; }); } (m.filter = function (e, t, n) { var r = t[0]; return ( n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? m.find.matchesSelector(r, e) ? [r] : [] : m.find.matches( e, m.grep(t, function (e) { return 1 === e.nodeType; }) ) ); }), m.fn.extend({ find: function (e) { var t, n = this.length, r = [], o = this; if ("string" != typeof e) return this.pushStack( m(e).filter(function () { for (t = 0; t < n; t++) if (m.contains(o[t], this)) return !0; }) ); for (t = 0; t < n; t++) m.find(e, o[t], r); return ((r = this.pushStack(n > 1 ? m.unique(r) : r)).selector = this.selector ? this.selector + " " + e : e), r; }, filter: function (e) { return this.pushStack(O(this, e || [], !1)); }, not: function (e) { return this.pushStack(O(this, e || [], !0)); }, is: function (e) { return !!O(this, "string" == typeof e && w.test(e) ? m(e) : e || [], !1).length; }, }); var S, z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/; ((m.fn.init = function (e, t, n) { var r, o; if (!e) return this; if (((n = n || S), "string" == typeof e)) { if (!(r = "<" === e[0] && ">" === e[e.length - 1] && e.length >= 3 ? [null, e, null] : z.exec(e)) || (!r[1] && t)) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); if (r[1]) { if (((t = t instanceof m ? t[0] : t), m.merge(this, m.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : i, !0)), T.test(r[1]) && m.isPlainObject(t))) for (r in t) m.isFunction(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); return this; } return (o = i.getElementById(r[2])) && o.parentNode && ((this.length = 1), (this[0] = o)), (this.context = i), (this.selector = e), this; } return e.nodeType ? ((this.context = this[0] = e), (this.length = 1), this) : m.isFunction(e) ? void 0 !== n.ready ? n.ready(e) : e(m) : (void 0 !== e.selector && ((this.selector = e.selector), (this.context = e.context)), m.makeArray(e, this)); }).prototype = m.fn), (S = m(i)); var E = /^(?:parents|prev(?:Until|All))/, x = { children: !0, contents: !0, next: !0, prev: !0 }; function D(e, t) { for (; (e = e[t]) && 1 !== e.nodeType; ); return e; } m.fn.extend({ has: function (e) { var t = m(e, this), n = t.length; return this.filter(function () { for (var e = 0; e < n; e++) if (m.contains(this, t[e])) return !0; }); }, closest: function (e, t) { for (var n, r = 0, o = this.length, a = [], i = w.test(e) || "string" != typeof e ? m(e, t || this.context) : 0; r < o; r++) for (n = this[r]; n && n !== t; n = n.parentNode) if (n.nodeType < 11 && (i ? i.index(n) > -1 : 1 === n.nodeType && m.find.matchesSelector(n, e))) { a.push(n); break; } return this.pushStack(a.length > 1 ? m.uniqueSort(a) : a); }, index: function (e) { return e ? ("string" == typeof e ? l.call(m(e), this[0]) : l.call(this, e.jquery ? e[0] : e)) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1; }, add: function (e, t) { return this.pushStack(m.uniqueSort(m.merge(this.get(), m(e, t)))); }, addBack: function (e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)); }, }), m.each( { parent: function (e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null; }, parents: function (e) { return A(e, "parentNode"); }, parentsUntil: function (e, t, n) { return A(e, "parentNode", n); }, next: function (e) { return D(e, "nextSibling"); }, prev: function (e) { return D(e, "previousSibling"); }, nextAll: function (e) { return A(e, "nextSibling"); }, prevAll: function (e) { return A(e, "previousSibling"); }, nextUntil: function (e, t, n) { return A(e, "nextSibling", n); }, prevUntil: function (e, t, n) { return A(e, "previousSibling", n); }, siblings: function (e) { return L((e.parentNode || {}).firstChild, e); }, children: function (e) { return L(e.firstChild); }, contents: function (e) { return e.contentDocument || m.merge([], e.childNodes); }, }, function (e, t) { m.fn[e] = function (n, r) { var o = m.map(this, t, n); return "Until" !== e.slice(-5) && (r = n), r && "string" == typeof r && (o = m.filter(r, o)), this.length > 1 && (x[e] || m.uniqueSort(o), E.test(e) && o.reverse()), this.pushStack(o); }; } ); var N, j = /\S+/g; function C() { i.removeEventListener("DOMContentLoaded", C), n.removeEventListener("load", C), m.ready(); } (m.Callbacks = function (e) { e = "string" == typeof e ? (function (e) { var t = {}; return ( m.each(e.match(j) || [], function (e, n) { t[n] = !0; }), t ); })(e) : m.extend({}, e); var t, n, r, o, a = [], i = [], s = -1, u = function () { for (o = e.once, r = t = !0; i.length; s = -1) for (n = i.shift(); ++s < a.length; ) !1 === a[s].apply(n[0], n[1]) && e.stopOnFalse && ((s = a.length), (n = !1)); e.memory || (n = !1), (t = !1), o && (a = n ? [] : ""); }, c = { add: function () { return ( a && (n && !t && ((s = a.length - 1), i.push(n)), (function t(n) { m.each(n, function (n, r) { m.isFunction(r) ? (e.unique && c.has(r)) || a.push(r) : r && r.length && "string" !== m.type(r) && t(r); }); })(arguments), n && !t && u()), this ); }, remove: function () { return ( m.each(arguments, function (e, t) { for (var n; (n = m.inArray(t, a, n)) > -1; ) a.splice(n, 1), n <= s && s--; }), this ); }, has: function (e) { return e ? m.inArray(e, a) > -1 : a.length > 0; }, empty: function () { return a && (a = []), this; }, disable: function () { return (o = i = []), (a = n = ""), this; }, disabled: function () { return !a; }, lock: function () { return (o = i = []), n || (a = n = ""), this; }, locked: function () { return !!o; }, fireWith: function (e, n) { return o || ((n = [e, (n = n || []).slice ? n.slice() : n]), i.push(n), t || u()), this; }, fire: function () { return c.fireWith(this, arguments), this; }, fired: function () { return !!r; }, }; return c; }), m.extend({ Deferred: function (e) { var t = [ ["resolve", "done", m.Callbacks("once memory"), "resolved"], ["reject", "fail", m.Callbacks("once memory"), "rejected"], ["notify", "progress", m.Callbacks("memory")], ], n = "pending", r = { state: function () { return n; }, always: function () { return o.done(arguments).fail(arguments), this; }, then: function () { var e = arguments; return m .Deferred(function (n) { m.each(t, function (t, a) { var i = m.isFunction(e[t]) && e[t]; o[a[1]](function () { var e = i && i.apply(this, arguments); e && m.isFunction(e.promise) ? e.promise().progress(n.notify).done(n.resolve).fail(n.reject) : n[a[0] + "With"](this === r ? n.promise() : this, i ? [e] : arguments); }); }), (e = null); }) .promise(); }, promise: function (e) { return null != e ? m.extend(e, r) : r; }, }, o = {}; return ( (r.pipe = r.then), m.each(t, function (e, a) { var i = a[2], s = a[3]; (r[a[1]] = i.add), s && i.add( function () { n = s; }, t[1 ^ e][2].disable, t[2][2].lock ), (o[a[0]] = function () { return o[a[0] + "With"](this === o ? r : this, arguments), this; }), (o[a[0] + "With"] = i.fireWith); }), r.promise(o), e && e.call(o, o), o ); }, when: function (e) { var t, n, r, o = 0, a = s.call(arguments), i = a.length, u = 1 !== i || (e && m.isFunction(e.promise)) ? i : 0, c = 1 === u ? e : m.Deferred(), l = function (e, n, r) { return function (o) { (n[e] = this), (r[e] = arguments.length > 1 ? s.call(arguments) : o), r === t ? c.notifyWith(n, r) : --u || c.resolveWith(n, r); }; }; if (i > 1) for (t = new Array(i), n = new Array(i), r = new Array(i); o < i; o++) a[o] && m.isFunction(a[o].promise) ? a[o].promise().progress(l(o, n, t)).done(l(o, r, a)).fail(c.reject) : --u; return u || c.resolveWith(r, a), c.promise(); }, }), (m.fn.ready = function (e) { return m.ready.promise().done(e), this; }), m.extend({ isReady: !1, readyWait: 1, holdReady: function (e) { e ? m.readyWait++ : m.ready(!0); }, ready: function (e) { (!0 === e ? --m.readyWait : m.isReady) || ((m.isReady = !0), (!0 !== e && --m.readyWait > 0) || (N.resolveWith(i, [m]), m.fn.triggerHandler && (m(i).triggerHandler("ready"), m(i).off("ready")))); }, }), (m.ready.promise = function (e) { return ( N || ((N = m.Deferred()), "complete" === i.readyState || ("loading" !== i.readyState && !i.documentElement.doScroll) ? n.setTimeout(m.ready) : (i.addEventListener("DOMContentLoaded", C), n.addEventListener("load", C))), N.promise(e) ); }), m.ready.promise(); var P = function (e, t, n, r, o, a, i) { var s = 0, u = e.length, c = null == n; if ("object" === m.type(n)) for (s in ((o = !0), n)) P(e, t, s, n[s], !0, a, i); else if ( void 0 !== r && ((o = !0), m.isFunction(r) || (i = !0), c && (i ? (t.call(e, r), (t = null)) : ((c = t), (t = function (e, t, n) { return c.call(m(e), n); }))), t) ) for (; s < u; s++) t(e[s], n, i ? r : r.call(e[s], s, t(e[s], n))); return o ? e : c ? t.call(e) : u ? t(e[0], n) : a; }, Y = function (e) { return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType; }; function W() { this.expando = m.expando + W.uid++; } (W.uid = 1), (W.prototype = { register: function (e, t) { var n = t || {}; return e.nodeType ? (e[this.expando] = n) : Object.defineProperty(e, this.expando, { value: n, writable: !0, configurable: !0 }), e[this.expando]; }, cache: function (e) { if (!Y(e)) return {}; var t = e[this.expando]; return t || ((t = {}), Y(e) && (e.nodeType ? (e[this.expando] = t) : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t; }, set: function (e, t, n) { var r, o = this.cache(e); if ("string" == typeof t) o[t] = n; else for (r in t) o[r] = t[r]; return o; }, get: function (e, t) { return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][t]; }, access: function (e, t, n) { var r; return void 0 === t || (t && "string" == typeof t && void 0 === n) ? (void 0 !== (r = this.get(e, t)) ? r : this.get(e, m.camelCase(t))) : (this.set(e, t, n), void 0 !== n ? n : t); }, remove: function (e, t) { var n, r, o, a = e[this.expando]; if (void 0 !== a) { if (void 0 === t) this.register(e); else { m.isArray(t) ? (r = t.concat(t.map(m.camelCase))) : ((o = m.camelCase(t)), (r = t in a ? [t, o] : (r = o) in a ? [r] : r.match(j) || [])), (n = r.length); for (; n--; ) delete a[r[n]]; } (void 0 === t || m.isEmptyObject(a)) && (e.nodeType ? (e[this.expando] = void 0) : delete e[this.expando]); } }, hasData: function (e) { var t = e[this.expando]; return void 0 !== t && !m.isEmptyObject(t); }, }); var q = new W(), B = new W(), R = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, F = /[A-Z]/g; function H(e, t, n) { var r; if (void 0 === n && 1 === e.nodeType) if (((r = "data-" + t.replace(F, "-$&").toLowerCase()), "string" == typeof (n = e.getAttribute(r)))) { try { n = "true" === n || ("false" !== n && ("null" === n ? null : +n + "" === n ? +n : R.test(n) ? m.parseJSON(n) : n)); } catch (e) {} B.set(e, t, n); } else n = void 0; return n; } m.extend({ hasData: function (e) { return B.hasData(e) || q.hasData(e); }, data: function (e, t, n) { return B.access(e, t, n); }, removeData: function (e, t) { B.remove(e, t); }, _data: function (e, t, n) { return q.access(e, t, n); }, _removeData: function (e, t) { q.remove(e, t); }, }), m.fn.extend({ data: function (e, t) { var n, r, o, a = this[0], i = a && a.attributes; if (void 0 === e) { if (this.length && ((o = B.get(a)), 1 === a.nodeType && !q.get(a, "hasDataAttrs"))) { for (n = i.length; n--; ) i[n] && 0 === (r = i[n].name).indexOf("data-") && ((r = m.camelCase(r.slice(5))), H(a, r, o[r])); q.set(a, "hasDataAttrs", !0); } return o; } return "object" == typeof e ? this.each(function () { B.set(this, e); }) : P( this, function (t) { var n, r; if (a && void 0 === t) return void 0 !== (n = B.get(a, e) || B.get(a, e.replace(F, "-$&").toLowerCase())) ? n : ((r = m.camelCase(e)), void 0 !== (n = B.get(a, r)) || void 0 !== (n = H(a, r, void 0)) ? n : void 0); (r = m.camelCase(e)), this.each(function () { var n = B.get(this, r); B.set(this, r, t), e.indexOf("-") > -1 && void 0 !== n && B.set(this, e, t); }); }, null, t, arguments.length > 1, null, !0 ); }, removeData: function (e) { return this.each(function () { B.remove(this, e); }); }, }), m.extend({ queue: function (e, t, n) { var r; if (e) return (t = (t || "fx") + "queue"), (r = q.get(e, t)), n && (!r || m.isArray(n) ? (r = q.access(e, t, m.makeArray(n))) : r.push(n)), r || []; }, dequeue: function (e, t) { t = t || "fx"; var n = m.queue(e, t), r = n.length, o = n.shift(), a = m._queueHooks(e, t); "inprogress" === o && ((o = n.shift()), r--), o && ("fx" === t && n.unshift("inprogress"), delete a.stop, o.call( e, function () { m.dequeue(e, t); }, a )), !r && a && a.empty.fire(); }, _queueHooks: function (e, t) { var n = t + "queueHooks"; return ( q.get(e, n) || q.access(e, n, { empty: m.Callbacks("once memory").add(function () { q.remove(e, [t + "queue", n]); }), }) ); }, }), m.fn.extend({ queue: function (e, t) { var n = 2; return ( "string" != typeof e && ((t = e), (e = "fx"), n--), arguments.length < n ? m.queue(this[0], e) : void 0 === t ? this : this.each(function () { var n = m.queue(this, e, t); m._queueHooks(this, e), "fx" === e && "inprogress" !== n[0] && m.dequeue(this, e); }) ); }, dequeue: function (e) { return this.each(function () { m.dequeue(this, e); }); }, clearQueue: function (e) { return this.queue(e || "fx", []); }, promise: function (e, t) { var n, r = 1, o = m.Deferred(), a = this, i = this.length, s = function () { --r || o.resolveWith(a, [a]); }; for ("string" != typeof e && ((t = e), (e = void 0)), e = e || "fx"; i--; ) (n = q.get(a[i], e + "queueHooks")) && n.empty && (r++, n.empty.add(s)); return s(), o.promise(t); }, }); var I = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, X = new RegExp("^(?:([+-])=|)(" + I + ")([a-z%]*)$", "i"), K = ["Top", "Right", "Bottom", "Left"], U = function (e, t) { return (e = t || e), "none" === m.css(e, "display") || !m.contains(e.ownerDocument, e); }; function J(e, t, n, r) { var o, a = 1, i = 20, s = r ? function () { return r.cur(); } : function () { return m.css(e, t, ""); }, u = s(), c = (n && n[3]) || (m.cssNumber[t] ? "" : "px"), l = (m.cssNumber[t] || ("px" !== c && +u)) && X.exec(m.css(e, t)); if (l && l[3] !== c) { (c = c || l[3]), (n = n || []), (l = +u || 1); do { (l /= a = a || ".5"), m.style(e, t, l + c); } while (a !== (a = s() / u) && 1 !== a && --i); } return n && ((l = +l || +u || 0), (o = n[1] ? l + (n[1] + 1) * n[2] : +n[2]), r && ((r.unit = c), (r.start = l), (r.end = o))), o; } var V = /^(?:checkbox|radio)$/i, G = /<([\w:-]+)/, $ = /^$|\/(?:java|ecma)script/i, Q = { option: [1, ""], thead: [1, "", "
"], col: [2, "", "
"], tr: [2, "", "
"], td: [3, "", "
"], _default: [0, "", ""], }; function Z(e, t) { var n = void 0 !== e.getElementsByTagName ? e.getElementsByTagName(t || "*") : void 0 !== e.querySelectorAll ? e.querySelectorAll(t || "*") : []; return void 0 === t || (t && m.nodeName(e, t)) ? m.merge([e], n) : n; } function ee(e, t) { for (var n = 0, r = e.length; n < r; n++) q.set(e[n], "globalEval", !t || q.get(t[n], "globalEval")); } (Q.optgroup = Q.option), (Q.tbody = Q.tfoot = Q.colgroup = Q.caption = Q.thead), (Q.th = Q.td); var te, ne, re = /<|&#?\w+;/; function oe(e, t, n, r, o) { for (var a, i, s, u, c, l, d = t.createDocumentFragment(), f = [], p = 0, h = e.length; p < h; p++) if ((a = e[p]) || 0 === a) if ("object" === m.type(a)) m.merge(f, a.nodeType ? [a] : a); else if (re.test(a)) { for (i = i || d.appendChild(t.createElement("div")), s = (G.exec(a) || ["", ""])[1].toLowerCase(), u = Q[s] || Q._default, i.innerHTML = u[1] + m.htmlPrefilter(a) + u[2], l = u[0]; l--; ) i = i.lastChild; m.merge(f, i.childNodes), ((i = d.firstChild).textContent = ""); } else f.push(t.createTextNode(a)); for (d.textContent = "", p = 0; (a = f[p++]); ) if (r && m.inArray(a, r) > -1) o && o.push(a); else if (((c = m.contains(a.ownerDocument, a)), (i = Z(d.appendChild(a), "script")), c && ee(i), n)) for (l = 0; (a = i[l++]); ) $.test(a.type || "") && n.push(a); return d; } (te = i.createDocumentFragment().appendChild(i.createElement("div"))), (ne = i.createElement("input")).setAttribute("type", "radio"), ne.setAttribute("checked", "checked"), ne.setAttribute("name", "t"), te.appendChild(ne), (h.checkClone = te.cloneNode(!0).cloneNode(!0).lastChild.checked), (te.innerHTML = ""), (h.noCloneChecked = !!te.cloneNode(!0).lastChild.defaultValue); var ae = /^key/, ie = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, se = /^([^.]*)(?:\.(.+)|)/; function ue() { return !0; } function ce() { return !1; } function le() { try { return i.activeElement; } catch (e) {} } function de(e, t, n, r, o, a) { var i, s; if ("object" == typeof t) { for (s in ("string" != typeof n && ((r = r || n), (n = void 0)), t)) de(e, s, n, r, t[s], a); return e; } if ((null == r && null == o ? ((o = n), (r = n = void 0)) : null == o && ("string" == typeof n ? ((o = r), (r = void 0)) : ((o = r), (r = n), (n = void 0))), !1 === o)) o = ce; else if (!o) return e; return ( 1 === a && ((i = o), ((o = function (e) { return m().off(e), i.apply(this, arguments); }).guid = i.guid || (i.guid = m.guid++))), e.each(function () { m.event.add(this, t, o, r, n); }) ); } (m.event = { global: {}, add: function (e, t, n, r, o) { var a, i, s, u, c, l, d, f, p, h, M, y = q.get(e); if (y) for ( n.handler && ((n = (a = n).handler), (o = a.selector)), n.guid || (n.guid = m.guid++), (u = y.events) || (u = y.events = {}), (i = y.handle) || (i = y.handle = function (t) { return void 0 !== m && m.event.triggered !== t.type ? m.event.dispatch.apply(e, arguments) : void 0; }), c = (t = (t || "").match(j) || [""]).length; c--; ) (p = M = (s = se.exec(t[c]) || [])[1]), (h = (s[2] || "").split(".").sort()), p && ((d = m.event.special[p] || {}), (p = (o ? d.delegateType : d.bindType) || p), (d = m.event.special[p] || {}), (l = m.extend({ type: p, origType: M, data: r, handler: n, guid: n.guid, selector: o, needsContext: o && m.expr.match.needsContext.test(o), namespace: h.join(".") }, a)), (f = u[p]) || (((f = u[p] = []).delegateCount = 0), (d.setup && !1 !== d.setup.call(e, r, h, i)) || (e.addEventListener && e.addEventListener(p, i))), d.add && (d.add.call(e, l), l.handler.guid || (l.handler.guid = n.guid)), o ? f.splice(f.delegateCount++, 0, l) : f.push(l), (m.event.global[p] = !0)); }, remove: function (e, t, n, r, o) { var a, i, s, u, c, l, d, f, p, h, M, y = q.hasData(e) && q.get(e); if (y && (u = y.events)) { for (c = (t = (t || "").match(j) || [""]).length; c--; ) if (((p = M = (s = se.exec(t[c]) || [])[1]), (h = (s[2] || "").split(".").sort()), p)) { for (d = m.event.special[p] || {}, f = u[(p = (r ? d.delegateType : d.bindType) || p)] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = a = f.length; a--; ) (l = f[a]), (!o && M !== l.origType) || (n && n.guid !== l.guid) || (s && !s.test(l.namespace)) || (r && r !== l.selector && ("**" !== r || !l.selector)) || (f.splice(a, 1), l.selector && f.delegateCount--, d.remove && d.remove.call(e, l)); i && !f.length && ((d.teardown && !1 !== d.teardown.call(e, h, y.handle)) || m.removeEvent(e, p, y.handle), delete u[p]); } else for (p in u) m.event.remove(e, p + t[c], n, r, !0); m.isEmptyObject(u) && q.remove(e, "handle events"); } }, dispatch: function (e) { e = m.event.fix(e); var t, n, r, o, a, i = [], u = s.call(arguments), c = (q.get(this, "events") || {})[e.type] || [], l = m.event.special[e.type] || {}; if (((u[0] = e), (e.delegateTarget = this), !l.preDispatch || !1 !== l.preDispatch.call(this, e))) { for (i = m.event.handlers.call(this, e, c), t = 0; (o = i[t++]) && !e.isPropagationStopped(); ) for (e.currentTarget = o.elem, n = 0; (a = o.handlers[n++]) && !e.isImmediatePropagationStopped(); ) (e.rnamespace && !e.rnamespace.test(a.namespace)) || ((e.handleObj = a), (e.data = a.data), void 0 !== (r = ((m.event.special[a.origType] || {}).handle || a.handler).apply(o.elem, u)) && !1 === (e.result = r) && (e.preventDefault(), e.stopPropagation())); return l.postDispatch && l.postDispatch.call(this, e), e.result; } }, handlers: function (e, t) { var n, r, o, a, i = [], s = t.delegateCount, u = e.target; if (s && u.nodeType && ("click" !== e.type || isNaN(e.button) || e.button < 1)) for (; u !== this; u = u.parentNode || this) if (1 === u.nodeType && (!0 !== u.disabled || "click" !== e.type)) { for (r = [], n = 0; n < s; n++) void 0 === r[(o = (a = t[n]).selector + " ")] && (r[o] = a.needsContext ? m(o, this).index(u) > -1 : m.find(o, this, null, [u]).length), r[o] && r.push(a); r.length && i.push({ elem: u, handlers: r }); } return s < t.length && i.push({ elem: this, handlers: t.slice(s) }), i; }, props: "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function (e, t) { return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), e; }, }, mouseHooks: { props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function (e, t) { var n, r, o, a = t.button; return ( null == e.pageX && null != t.clientX && ((r = (n = e.target.ownerDocument || i).documentElement), (o = n.body), (e.pageX = t.clientX + ((r && r.scrollLeft) || (o && o.scrollLeft) || 0) - ((r && r.clientLeft) || (o && o.clientLeft) || 0)), (e.pageY = t.clientY + ((r && r.scrollTop) || (o && o.scrollTop) || 0) - ((r && r.clientTop) || (o && o.clientTop) || 0))), e.which || void 0 === a || (e.which = 1 & a ? 1 : 2 & a ? 3 : 4 & a ? 2 : 0), e ); }, }, fix: function (e) { if (e[m.expando]) return e; var t, n, r, o = e.type, a = e, s = this.fixHooks[o]; for (s || (this.fixHooks[o] = s = ie.test(o) ? this.mouseHooks : ae.test(o) ? this.keyHooks : {}), r = s.props ? this.props.concat(s.props) : this.props, e = new m.Event(a), t = r.length; t--; ) e[(n = r[t])] = a[n]; return e.target || (e.target = i), 3 === e.target.nodeType && (e.target = e.target.parentNode), s.filter ? s.filter(e, a) : e; }, special: { load: { noBubble: !0 }, focus: { trigger: function () { if (this !== le() && this.focus) return this.focus(), !1; }, delegateType: "focusin", }, blur: { trigger: function () { if (this === le() && this.blur) return this.blur(), !1; }, delegateType: "focusout", }, click: { trigger: function () { if ("checkbox" === this.type && this.click && m.nodeName(this, "input")) return this.click(), !1; }, _default: function (e) { return m.nodeName(e.target, "a"); }, }, beforeunload: { postDispatch: function (e) { void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result); }, }, }, }), (m.removeEvent = function (e, t, n) { e.removeEventListener && e.removeEventListener(t, n); }), (m.Event = function (e, t) { if (!(this instanceof m.Event)) return new m.Event(e, t); e && e.type ? ((this.originalEvent = e), (this.type = e.type), (this.isDefaultPrevented = e.defaultPrevented || (void 0 === e.defaultPrevented && !1 === e.returnValue) ? ue : ce)) : (this.type = e), t && m.extend(this, t), (this.timeStamp = (e && e.timeStamp) || m.now()), (this[m.expando] = !0); }), (m.Event.prototype = { constructor: m.Event, isDefaultPrevented: ce, isPropagationStopped: ce, isImmediatePropagationStopped: ce, isSimulated: !1, preventDefault: function () { var e = this.originalEvent; (this.isDefaultPrevented = ue), e && !this.isSimulated && e.preventDefault(); }, stopPropagation: function () { var e = this.originalEvent; (this.isPropagationStopped = ue), e && !this.isSimulated && e.stopPropagation(); }, stopImmediatePropagation: function () { var e = this.originalEvent; (this.isImmediatePropagationStopped = ue), e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation(); }, }), m.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function (e, t) { m.event.special[e] = { delegateType: t, bindType: t, handle: function (e) { var n, r = this, o = e.relatedTarget, a = e.handleObj; return (o && (o === r || m.contains(r, o))) || ((e.type = a.origType), (n = a.handler.apply(this, arguments)), (e.type = t)), n; }, }; }), m.fn.extend({ on: function (e, t, n, r) { return de(this, e, t, n, r); }, one: function (e, t, n, r) { return de(this, e, t, n, r, 1); }, off: function (e, t, n) { var r, o; if (e && e.preventDefault && e.handleObj) return (r = e.handleObj), m(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; if ("object" == typeof e) { for (o in e) this.off(o, t, e[o]); return this; } return ( (!1 !== t && "function" != typeof t) || ((n = t), (t = void 0)), !1 === n && (n = ce), this.each(function () { m.event.remove(this, e, n, t); }) ); }, }); var fe = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, pe = /\s*$/g; function ye(e, t) { return m.nodeName(e, "table") && m.nodeName(11 !== t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e; } function ve(e) { return (e.type = (null !== e.getAttribute("type")) + "/" + e.type), e; } function be(e) { var t = me.exec(e.type); return t ? (e.type = t[1]) : e.removeAttribute("type"), e; } function ge(e, t) { var n, r, o, a, i, s, u, c; if (1 === t.nodeType) { if (q.hasData(e) && ((a = q.access(e)), (i = q.set(t, a)), (c = a.events))) for (o in (delete i.handle, (i.events = {}), c)) for (n = 0, r = c[o].length; n < r; n++) m.event.add(t, o, c[o][n]); B.hasData(e) && ((s = B.access(e)), (u = m.extend({}, s)), B.set(t, u)); } } function _e(e, t, n, r) { t = u.apply([], t); var o, a, i, s, c, l, d = 0, f = e.length, p = f - 1, M = t[0], y = m.isFunction(M); if (y || (f > 1 && "string" == typeof M && !h.checkClone && he.test(M))) return e.each(function (o) { var a = e.eq(o); y && (t[0] = M.call(this, o, a.html())), _e(a, t, n, r); }); if (f && ((a = (o = oe(t, e[0].ownerDocument, !1, e, r)).firstChild), 1 === o.childNodes.length && (o = a), a || r)) { for (s = (i = m.map(Z(o, "script"), ve)).length; d < f; d++) (c = o), d !== p && ((c = m.clone(c, !0, !0)), s && m.merge(i, Z(c, "script"))), n.call(e[d], c, d); if (s) for (l = i[i.length - 1].ownerDocument, m.map(i, be), d = 0; d < s; d++) (c = i[d]), $.test(c.type || "") && !q.access(c, "globalEval") && m.contains(l, c) && (c.src ? m._evalUrl && m._evalUrl(c.src) : m.globalEval(c.textContent.replace(Me, ""))); } return e; } function Ae(e, t, n) { for (var r, o = t ? m.filter(t, e) : e, a = 0; null != (r = o[a]); a++) n || 1 !== r.nodeType || m.cleanData(Z(r)), r.parentNode && (n && m.contains(r.ownerDocument, r) && ee(Z(r, "script")), r.parentNode.removeChild(r)); return e; } m.extend({ htmlPrefilter: function (e) { return e.replace(fe, "<$1>"); }, clone: function (e, t, n) { var r, o, a, i, s, u, c, l = e.cloneNode(!0), d = m.contains(e.ownerDocument, e); if (!(h.noCloneChecked || (1 !== e.nodeType && 11 !== e.nodeType) || m.isXMLDoc(e))) for (i = Z(l), r = 0, o = (a = Z(e)).length; r < o; r++) (s = a[r]), (u = i[r]), (c = void 0), "input" === (c = u.nodeName.toLowerCase()) && V.test(s.type) ? (u.checked = s.checked) : ("input" !== c && "textarea" !== c) || (u.defaultValue = s.defaultValue); if (t) if (n) for (a = a || Z(e), i = i || Z(l), r = 0, o = a.length; r < o; r++) ge(a[r], i[r]); else ge(e, l); return (i = Z(l, "script")).length > 0 && ee(i, !d && Z(e, "script")), l; }, cleanData: function (e) { for (var t, n, r, o = m.event.special, a = 0; void 0 !== (n = e[a]); a++) if (Y(n)) { if ((t = n[q.expando])) { if (t.events) for (r in t.events) o[r] ? m.event.remove(n, r) : m.removeEvent(n, r, t.handle); n[q.expando] = void 0; } n[B.expando] && (n[B.expando] = void 0); } }, }), m.fn.extend({ domManip: _e, detach: function (e) { return Ae(this, e, !0); }, remove: function (e) { return Ae(this, e); }, text: function (e) { return P( this, function (e) { return void 0 === e ? m.text(this) : this.empty().each(function () { (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) || (this.textContent = e); }); }, null, e, arguments.length ); }, append: function () { return _e(this, arguments, function (e) { (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) || ye(this, e).appendChild(e); }); }, prepend: function () { return _e(this, arguments, function (e) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var t = ye(this, e); t.insertBefore(e, t.firstChild); } }); }, before: function () { return _e(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this); }); }, after: function () { return _e(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this.nextSibling); }); }, empty: function () { for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (m.cleanData(Z(e, !1)), (e.textContent = "")); return this; }, clone: function (e, t) { return ( (e = null != e && e), (t = null == t ? e : t), this.map(function () { return m.clone(this, e, t); }) ); }, html: function (e) { return P( this, function (e) { var t = this[0] || {}, n = 0, r = this.length; if (void 0 === e && 1 === t.nodeType) return t.innerHTML; if ("string" == typeof e && !pe.test(e) && !Q[(G.exec(e) || ["", ""])[1].toLowerCase()]) { e = m.htmlPrefilter(e); try { for (; n < r; n++) 1 === (t = this[n] || {}).nodeType && (m.cleanData(Z(t, !1)), (t.innerHTML = e)); t = 0; } catch (e) {} } t && this.empty().append(e); }, null, e, arguments.length ); }, replaceWith: function () { var e = []; return _e( this, arguments, function (t) { var n = this.parentNode; m.inArray(this, e) < 0 && (m.cleanData(Z(this)), n && n.replaceChild(t, this)); }, e ); }, }), m.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function (e, t) { m.fn[e] = function (e) { for (var n, r = [], o = m(e), a = o.length - 1, i = 0; i <= a; i++) (n = i === a ? this : this.clone(!0)), m(o[i])[t](n), c.apply(r, n.get()); return this.pushStack(r); }; }); var Le, we = { HTML: "block", BODY: "block" }; function Te(e, t) { var n = m(t.createElement(e)).appendTo(t.body), r = m.css(n[0], "display"); return n.detach(), r; } function ke(e) { var t = i, n = we[e]; return ( n || (("none" !== (n = Te(e, t)) && n) || ((t = (Le = (Le || m("

Firmware

================================================ FILE: tools/server/app/static/index.html ================================================ PyPowerwall Console
Connected to 0 gateway(s) Last update: --
🔄 Power Flow
📊 Energy Summary
☀️ Solar Generation
-- kW
🔋 Battery
-- kW
Charge: --%
🏠 Home Usage
-- kW
Grid
-- kW
--
🚨 Alerts
No active alerts
🔌 Solar Strings
Loading string data...
🖥️ Server Health
Uptime
--
Memory
--
Gateways
--
API Calls
--
🔗 Connected Gateways
Loading gateways...
================================================ FILE: tools/server/app/static/viz-static/1.17c71172308436a079d1.js ================================================ (window.webpackJsonp = window.webpackJsonp || []).push([ [1], { 1154: function (e, t, r) { "use strict"; r.r(t), r.d(t, "initialCurrentTransformer", function () { return u; }), r.d(t, "initialCurrentTransformersState", function () { return m; }), r.d(t, "default", function () { return g; }), r.d(t, "hasSolarCurrentTransformersSelector", function () { return f; }); var i = r(27), s = r(18), n = r.n(s), a = r(2), c = r(12), E = r(8), l = r(37), o = r(151); function d(e, t) { var r = Object.keys(e); if (Object.getOwnPropertySymbols) { var i = Object.getOwnPropertySymbols(e); t && (i = i.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), r.push.apply(r, i); } return r; } function R(e) { for (var t = 1; t < arguments.length; t++) { var r = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(r), !0).forEach(function (t) { _(e, t, r[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : d(Object(r)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t)); }); } return e; } function _(e, t, r) { return t in e ? Object.defineProperty(e, t, { value: r, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = r), e; } const T = Object(i.values)(E.n), S = ["ampRating", "phaseSequence", "inverted"], u = { id: 1, connectionType: null, isRevenueGradeSolarMeter: !1, ampRating: null, phaseSequence: null, watts: null, amps: null, volts: null, realPowerScaleFactor: 1, reactivePower: null, apparentPower: null, powerFactor: null, inverted: !1, }, m = [R(R({}, u), {}, { id: 1 }), R(R({}, u), {}, { id: 2 }), R(R({}, u), {}, { id: 3 }), R(R({}, u), {}, { id: 4 })], p = { instant_power: 0, last_communication_time: null }, C = { isFetching: !1, isCreating: !1, isSetting: !1, didInvalidate: !1, inverterMeterReadings: { enabled: !1, isFetching: !1, didInvalidate: !1 }, items: [{ id: 1, connectionType: null, shortID: "", serial: "", macAddress: "", ipAddress: "", status: null, verified: !1, location: c.CurrentTransformerConnectionTypes.SITE, currentTransformers: m }], readSerials: [], synchrometerSettings: { isFetching: !1, didInvalidate: !1, ctVoltageReferences: { ct1: c.SyncCTVoltageReferenceType.DEFAULT, ct2: c.SyncCTVoltageReferenceType.DEFAULT, ct3: c.SyncCTVoltageReferenceType.DEFAULT }, ctVoltageReferenceOptions: { ct1: [c.SyncCTVoltageReferenceType.PHASE1], ct2: [c.SyncCTVoltageReferenceType.PHASE2], ct3: [c.SyncCTVoltageReferenceType.PHASE3] }, }, aggregates: Object(i.reduce)(T, (e, t) => ((e[t] = R({}, p)), e), {}), }; function g(e = C, t) { switch (t.type) { case a.ADD_METER: return R(R({}, e), {}, { items: [...e.items, R(R({}, C.items[0]), {}, { id: t.id })] }); case a.REMOVE_METER: let r = e.items.filter((e) => e.id !== t.id); return r.length || (r = [R(R({}, C.items[0]), {}, { id: t.id })]), R(R({}, e), {}, { items: r }); case a.REQUEST_METER_CONFIG: case a.REQUEST_METER_AMP_RATINGS: case a.REQUEST_DETECT_METER: case a.REQUEST_DELETE_METER: case a.REQUEST_DELETE_METER_CTS: case a.REQUEST_COMMISSION_METER: case a.REQUEST_METER_READINGS: case a.REQUEST_METER_FLIP_CT: case a.REQUEST_METER_AGGREGATES: return R(R({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case a.REQUEST_SET_METER_AMP_RATINGS: case a.REQUEST_SET_METER_CTS: return R(R({}, e), {}, { isSetting: !0, didInvalidate: !1 }); case a.REQUEST_CREATE_METER: return R(R({}, e), {}, { isCreating: !0, didInvalidate: !1 }); case a.RECEIVE_CREATE_METER_SUCCESS: let s = 0, E = Object(i.cloneDeep)(e.items.find((e, r) => (e.id === t.id && (s = r), e.id === t.id))); return ( (E.shortID = t.shortID), (E.serial = t.serial), (E.location = t.location), t.macAddress && t.macAddress.match(l.c) && (E.macAddress = t.macAddress), t.ipAddress && t.ipAddress.match(l.b) && (E.ipAddress = t.ipAddress), (E.connectionType = t.connectionType), (E.verified = !!t.connected), (E.location = t.location), R(R({}, e), {}, { isCreating: !1, items: [...e.items.slice(0, s), E, ...e.items.slice(s + 1)] }) ); case a.RECEIVE_DETECT_METER_SUCCESS: let d = 0, _ = Object(i.cloneDeep)(e.items.find((e, r) => (e.id === t.id && (d = r), e.id === t.id))); return (_.verified = !0), (_.connectionType = c.ConnectionTypes.NEURIO_W1_WIRED), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: [...e.items.slice(0, d), _, ...e.items.slice(d + 1)] }); case a.RECEIVE_METER_CONFIG_SUCCESS: return R( R({}, e), {}, { isFetching: null != t.isFetching ? t.isFetching : e.isFetching, didInvalidate: !1, items: t.meters .sort((e, t) => { const r = e.type, i = t.type; if (null != r && null != i) { if (r < i) return -1; if (r > i) return 1; } return 0; }) .map((t, r) => { let s = Object(o.y)({ connectionType: t.type }), n = t.type === c.ConnectionTypes.MSA, a = Object(o.q)({ connectionType: t.type }), E = Object(i.cloneDeep)(m); if ( (Object(o.s)(t.type) && E.forEach((e, t) => { e.phaseSequence = c.NeurioOrderedPhaseSequences[t]; }), s && E.splice(-1, 1), n && E.splice(-2, 2), a) ) { let e = Object(i.isEmpty)(t.cts) ? c.CurrentTransformerConnectionTypes.SITE : t.cts[0].type; E.forEach((t, r) => { E[r].connectionType = e; }); } Array.isArray(t.cts) || (t.cts = []), t.cts.forEach((e, t) => { (s && t >= 3) || e.valid.forEach((t, r) => { t && (!s || (s && r < 3)) && ((E[r].realPowerScaleFactor = null != e.real_power_scale_factor ? e.real_power_scale_factor : 1), 2 === Math.trunc(E[r].realPowerScaleFactor) && e.type === c.CurrentTransformerConnectionTypes.SOLAR ? (E[r].connectionType = c.CurrentTransformerConnectionTypes.DOUBLED_SOLAR) : (E[r].connectionType = e.type), (E[r].isRevenueGradeSolarMeter = e.type === c.CurrentTransformerConnectionTypes.SOLAR_RGM), (E[r].inverted = e.inverted[r])); }); }); const d = t.mac && t.mac.match(l.c) ? t.mac : C.items[0].macAddress, _ = t.ip_address && t.ip_address.match(l.b) ? t.ip_address : C.items[0].ipAddress, T = Object(o.v)(t.type) && (e.items || []).find(({ serial: e, shortID: r }) => e === t.serial && r === t.short_id), S = (T && T.status) || c.Statuses.UNKNOWN; return R( R({}, C.items[0]), {}, { id: r + 1, connectionType: t.type, location: t.location, shortID: t.short_id, serial: t.serial, macAddress: d, ipAddress: _, status: t.connected ? c.Statuses.SUCCESS_METER : S, verified: !!t.connected || s || a || n, currentTransformers: E, } ); }), } ); case a.RECEIVE_DELETE_METER_SUCCESS: let g = 0; for (let r = 0; r < e.items.length; r++) if (e.items[r].id === t.id) { g = r; break; } let f = [R(R({}, C.items[0]), {}, { id: t.id })]; return e.items.length > 1 && (f = [...e.items.slice(0, g), ...e.items.slice(g + 1)]), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: f }); case a.RECEIVE_METER_CONFIG_UPDATE: let I = e.items.findIndex((e) => (t.serial ? e.serial === t.serial : t.ip_address ? e.ip_address === t.ip_address : e.id === t.id)), O = Object(i.cloneDeep)(e.items[I]); return !O || (Object(o.s)(O.connectionType) && t.serial !== O.serial) ? R(R({}, e), {}, { isFetching: !1 }) : ((O.status = t.status), t.serial && (O.serial = t.serial), t.short_id && (O.shortID = t.short_id), t.location && (O.location = t.location), t.mac && t.mac.match(l.c) && (O.macAddress = t.mac), t.ip_address && t.ip_address.match(l.b) && (O.ipAddress = t.ip_address), t.location && (O.location = t.location), R(R({}, e), {}, { isFetching: null != t.isFetching ? t.isFetching : e.isFetching, items: [...e.items.slice(0, I), O, ...e.items.slice(I + 1)] })); case a.RECEIVE_COMMISSION_METER_UPDATE: let h = 0, A = Object(i.cloneDeep)(e.items.find((e, r) => (e.id === t.id && (h = r), e.id === t.id))); return A ? ((A.status = t.status), t.short_id && (A.shortID = t.short_id), t.serial && (A.serial = t.serial), t.location && (A.location = t.location), R(R({}, e), {}, { items: [...e.items.slice(0, h), A, ...e.items.slice(h + 1)] })) : e; case a.RECEIVE_COMMISSION_METER_SUCCESS: let y = 0, M = Object(i.cloneDeep)(e.items.find((e, r) => (e.id === t.id && (y = r), e.id === t.id))); return M ? ((M.verified = !!t.verified), t.shortID && (M.shortID = t.shortID), t.serial && (M.serial = t.serial), t.macAddress && t.macAddress.match(l.c) && (M.macAddress = t.macAddress), t.ipAddress && t.ipAddress.match(l.b) && (M.ipAddress = t.ipAddress), t.location && (M.location = M.location), (M.connectionType = t.connectionType), (M.status = t.status), (M.lastUpdatedAt = t.receivedAt), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: [...e.items.slice(0, y), M, ...e.items.slice(y + 1)] })) : e; case a.RECEIVE_METER_AMP_RATINGS_SUCCESS: let v = 0, b = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (v = r), e.serial === t.serial))); return ( t.ampRatings.length === m.length && t.ampRatings.forEach((e, t) => { let r = b.currentTransformers[t]; r.ampRating !== e && (r.ampRating = e); }), R(R({}, e), {}, { items: [...e.items.slice(0, v), b, ...e.items.slice(v + 1)] }) ); case a.RECEIVE_SET_METER_AMP_RATINGS_SUCCESS: let F = 0, V = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (F = r), e.serial === t.serial))); return ( t.ampRatings.length === m.length && t.ampRatings.forEach((e, t) => { let r = V.currentTransformers[t]; r.ampRating !== e && (r.ampRating = e); }), R(R({}, e), {}, { isSetting: !1, didInvalidate: !1, items: [...e.items.slice(0, F), V, ...e.items.slice(F + 1)] }) ); case a.RECEIVE_SET_METER_CTS_SUCCESS: let D = 0, N = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (D = r), e.serial === t.serial))); return ( N.currentTransformers.forEach((e) => { if (t.ids.length && t.ids.includes(e.id)) (e.connectionType = t.connectionType), (e.realPowerScaleFactor = t.realPowerScaleFactor); else if (Object(o.x)(e.connectionType, t.connectionType)) { const t = ["id", ...S]; for (let r in e) t.includes(r) || (e[r] = u[r]); } }), R(R({}, e), {}, { isSetting: null != t.isSetting && t.isSetting, didInvalidate: !1, items: [...e.items.slice(0, D), N, ...e.items.slice(D + 1)] }) ); case a.RECEIVE_DELETE_METER_CTS_SUCCESS: let U = 0; const j = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (U = r), e.serial === t.serial))); let w = []; return ( m.forEach((e, t) => { (Object(o.y)(j) && t >= 3) || w.push(R(R({}, e), Object(i.pick)(j.currentTransformers[t], S))); }), (j.currentTransformers = w), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: [...e.items.slice(0, U), j, ...e.items.slice(U + 1)] }) ); case a.RECEIVE_METER_READINGS_SUCCESS: let P = e.items, G = e.lastReadingUpdatedAt, L = e.readSerials; if (null != t.readings && !Object(i.isEmpty)(t.readings)) { P = Object(i.cloneDeep)(e.items); for (const e in t.readings) { const r = P.find((t) => t.serial === e), s = !Object(i.isEmpty)(t.readings[e].error); if (null != r && t.readings[e].data && t.readings[e].data.cts && t.readings[e].data.cts.length) { let i = 4; Object(o.y)(r) && (i = 3), r.connectionType === c.ConnectionTypes.MSA && (i = 2); t.readings[e].data.cts.forEach((e, t) => { if (null != r && !s && null != n()(e, (e) => e.ct) && e.ct >= 1 && e.ct <= i) { let t = e.p_W, i = e.v_V, s = e.q_VAR; null != t && (r.currentTransformers[e.ct - 1].watts = t), null != t && null != i && null != s && ((r.currentTransformers[e.ct - 1].amps = 0 !== i ? t / i : 0), (r.currentTransformers[e.ct - 1].volts = i), (r.currentTransformers[e.ct - 1].reactivePower = s), (r.currentTransformers[e.ct - 1].apparentPower = Object(o.a)(t, s)), (r.currentTransformers[e.ct - 1].powerFactor = Object(o.b)(t, s))); } else null != r && 0 === n()(e, (e) => e.ct) && t < i && (r.currentTransformers[t] = R(R({}, r.currentTransformers[t]), {}, { watts: null, amps: null, volts: null, reactivePower: null, apparentPower: null, powerFactor: null })); }); } } const r = Object.keys(t.readings); Object(i.without)(e.readSerials, ...r).forEach((e) => { const t = P.find((t) => t.serial === e); null != t && (t.currentTransformers = t.currentTransformers.map((e) => R(R({}, e), {}, { watts: null, amps: null, volts: null, reactivePower: null, apparentPower: null, powerFactor: null }))); }), (G = Date.now()), (L = r); } return R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, lastReadingUpdatedAt: G, readSerials: L, items: P }); case a.RECEIVE_METER_FLIP_CT_SUCCESS: let Q = 0, Y = Object(i.cloneDeep)(e.items.find((e, r) => (e.serial === t.serial && (Q = r), e.serial === t.serial))); return ( t.inverted.length === m.length && t.inverted.forEach((e, t) => { if (Object(o.y)(Y) && t >= 3) return; let r = Y.currentTransformers[t]; r.inverted !== e && ((r.inverted = e), null != r.amps && (r.amps *= -1), null != r.watts && (r.watts *= -1)); }), R(R({}, e), {}, { isFetching: !1, didInvalidate: !1, items: [...e.items.slice(0, Q), Y, ...e.items.slice(Q + 1)] }) ); case a.RECEIVE_METER_AGGREGATES_SUCCESS: return R( R({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, lastMeterReadingAt: Math.max(...Object(i.values)(t.aggregates).map((e) => (null != e.last_communication_time ? Date.parse(e.last_communication_time) : 0))), aggregates: Object(i.reduce)(T, (r, i) => ((r[i] = R(R({}, e.aggregates[i]), n()(t, (e) => e.aggregates[i]) || p)), r), R({}, e.aggregates)), } ); case a.RECEIVE_METER_CONFIG_ERROR: case a.RECEIVE_METER_AMP_RATINGS_ERROR: case a.RECEIVE_DETECT_METER_ERROR: case a.RECEIVE_DELETE_METER_ERROR: case a.RECEIVE_DELETE_METER_CTS_ERROR: case a.RECEIVE_COMMISSION_METER_ERROR: case a.RECEIVE_METER_READINGS_ERROR: case a.RECEIVE_METER_FLIP_CT_ERROR: case a.RECEIVE_METER_AGGREGATES_ERROR: return R(R({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case a.RECEIVE_CREATE_METER_ERROR: return R(R({}, e), {}, { isCreating: !1, didInvalidate: !0 }); case a.RECEIVE_SET_METER_AMP_RATINGS_ERROR: case a.RECEIVE_SET_METER_CTS_ERROR: return R(R({}, e), {}, { isSetting: !1, didInvalidate: !0 }); case a.RESET_METER_CURRENT_TRANSFORMER_READINGS: let k = e.items; return ( e.readSerials.length && ((k = Object(i.cloneDeep)(e.items)), e.readSerials.forEach((e) => { const t = k.find((t) => t.serial === e); null != t && (t.currentTransformers = t.currentTransformers.map((e) => R(R({}, e), {}, { watts: null, amps: null, volts: null, reactivePower: null, apparentPower: null, powerFactor: null }))); })), R(R({}, e), {}, { lastReadingUpdatedAt: null, items: k }) ); case a.REQUEST_SYNC_CT_VOLTAGE_REFERENCES: case a.REQUEST_SET_SYNC_CT_VOLTAGE_REFERENCES: case a.REQUEST_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS: return R(R({}, e), {}, { synchrometerSettings: R(R({}, e.synchrometerSettings), {}, { isFetching: !0, didInvalidate: !1 }) }); case a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS: case a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS: return R(R({}, e), {}, { synchrometerSettings: R(R({}, e.synchrometerSettings), {}, { isFetching: !1, didInvalidate: !1, ctVoltageReferences: t.pairing }) }); case a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR: case a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR: case a.RECEIVE_OPERATION_SETTINGS_ERROR: return R(R({}, e), {}, { synchrometerSettings: R(R({}, e.synchrometerSettings), {}, { isFetching: !1, didInvalidate: !0 }) }); case a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_SUCCESS: return R(R({}, e), {}, { synchrometerSettings: R(R({}, e.synchrometerSettings), {}, { isFetching: !1, didInvalidate: !1, ctVoltageReferenceOptions: t.options }) }); case a.REQUEST_ENABLE_INVERTER_METER_READINGS: return R(R({}, e), {}, { inverterMeterReadings: { enabled: e.inverterMeterReadings.enabled, isFetching: !0, didInvalidate: !1 } }); case a.RECEIVE_ENABLE_INVERTER_METER_READINGS_SUCCESS: return R(R({}, e), {}, { inverterMeterReadings: { enabled: t.enabled, isFetching: !1, didInvalidate: !1 } }); case a.RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR: return R(R({}, e), {}, { inverterMeterReadings: { enabled: e.inverterMeterReadings.enabled, isFetching: !1, didInvalidate: !0 } }); case a.RESET_ALL: case a.RESET_METER_CONFIG: return C; default: return e; } } function f({ meter: e }) { return e.items.some((e) => Object(o.n)(e.currentTransformers)); } }, }, ]); ================================================ FILE: tools/server/app/static/viz-static/39.17c71172308436a079d1.js ================================================ (window.webpackJsonp = window.webpackJsonp || []).push([ [39], { 1083: function (e, t, i) { "use strict"; var r; Object.defineProperty(t, "__esModule", { value: !0 }), (t.GRID_CODES_MODAL = t.GRID_CODE_FILTER_FREQUENCY_WARNING = t.GRIDCODE_ALL_OTHER_SELECTION = t.GRIDCODE_ALL_OTHER_STAR = t.gridCodeNestedLookupKeys = t.GridCodesNestedLookupKey = void 0), (function (e) { (e.country = "country"), (e.state = "state"), (e.distributor = "distributor"), (e.utility = "utility"), (e.retailer = "retailer"), (e.region = "region"), (e.grid_code = "grid_code"); })((r = t.GridCodesNestedLookupKey || (t.GridCodesNestedLookupKey = {}))), (t.gridCodeNestedLookupKeys = [r.country, r.state, r.distributor, r.utility, r.retailer, r.region, r.grid_code]), (t.GRIDCODE_ALL_OTHER_STAR = "*"), (t.GRIDCODE_ALL_OTHER_SELECTION = "All Other"), (t.GRID_CODE_FILTER_FREQUENCY_WARNING = "GRID_CODE_FILTER_FREQUENCY_WARNING"), (t.GRID_CODES_MODAL = "GRID_CODES_MODAL"); }, 1085: function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.emptyGridCodeSelection = t.gridCodeToOption = t.gridCodeConfigToSelections = t.configValueToDropdownSelection = t.dropdownSelectionToConfigValue = t.shouldAutoSelect = t.shouldCollapse = t.resolveNestedLookupStructureBySelections = t.selectSubObject = t.subObjectHasValidGridCodes = t.gridCodePointsToInputs = t.applyGridCodePointsToOverrides = t.applyGridCodeOverridesToPoints = t.parseGridCodeNameForSettings = t.gridCodeSelectionsEqual = t.parseCSVRecordIntoGridCodeConfig = t.serializeGridCodeConfigIntoCSVRecord = t.parseCSVRecordIntoArray = t.parseRegionsCSVIntoNestedLookupStructure = void 0); const r = i(1083), n = i(134), o = i(1086); function d(e) { let t = [""], i = !1; for (let r = 0; r < e.length; r++) { const n = e[r]; '"' !== n ? ("," !== n || i ? (t[t.length - 1] += n) : t.push("")) : (i = !i); } return t; } function _(e) { if (!e) return null; const t = e.split("_"); if (t.length < 4) return null; const [i, r, o] = t, d = parseFloat(i), _ = parseFloat(r); if (isNaN(d) || isNaN(_)) return null; let s; switch (o) { case "1": s = n.PhaseType.SINGLE; break; case "2": s = n.PhaseType.TWO; break; case "3": s = n.PhaseType.THREE; break; case "s": s = n.PhaseType.SPLIT; break; case "WyeLL": s = n.PhaseType.WYE_LL; break; default: return null; } return { grid_code: e, grid_freq_setting: d, grid_voltage_setting: _, grid_phase_setting: s }; } function s(e, t) { return "string" != typeof t || Array.isArray(e) ? null : e[t]; } (t.parseRegionsCSVIntoNestedLookupStructure = function (e, t) { let i = {}; return ( e .split("\n") .slice(1) .forEach((e) => { const r = d(e); if (r.length < 6) return; let n, [o, s, a, l, u, c, g] = r; i[s] || (i[s] = {}), i[s][a] || (i[s][a] = {}), i[s][a][l] || (i[s][a][l] = {}), i[s][a][l][u] || (i[s][a][l][u] = {}), i[s][a][l][u][c] || (i[s][a][l][u][c] = {}), i[s][a][l][u][c][g] || (i[s][a][l][u][c][g] = []), (n = t ? t[o] : _(o)), n && i[s][a][l][u][c][g].push(n); }), i ); }), (t.parseCSVRecordIntoArray = d), (t.serializeGridCodeConfigIntoCSVRecord = function (e) { var t, i, r, n, o, d, _; return [ null !== (t = e.grid_code) && void 0 !== t ? t : "", null !== (i = e.country) && void 0 !== i ? i : "", null !== (r = e.state) && void 0 !== r ? r : "", null !== (n = e.distributor) && void 0 !== n ? n : "", null !== (o = e.utility) && void 0 !== o ? o : "", null !== (d = e.retailer) && void 0 !== d ? d : "", null !== (_ = e.region) && void 0 !== _ ? _ : "", ] .map((e) => (e.includes(",") ? `"${e}"` : e)) .join(","); }), (t.parseCSVRecordIntoGridCodeConfig = function (e) { if (!e) return {}; const [t, i, r, n, o, _, s] = d(e); return { grid_code: t || void 0, country: i || void 0, state: r || void 0, distributor: n || void 0, utility: o || void 0, retailer: _ || void 0, region: s || void 0 }; }), (t.gridCodeSelectionsEqual = function (e, t) { for (let i of r.gridCodeNestedLookupKeys) if (e[i] !== t[i]) return !1; return !0; }), (t.parseGridCodeNameForSettings = _), (t.applyGridCodeOverridesToPoints = function (e, t) { let i = null != t ? t : []; return (null != e ? e : []).map((e) => { const t = i.find((t) => t.name === e.name); return Object.assign(Object.assign({}, e), { override: t ? t.value : null, value: t ? t.value : e.file_value }); }); }), (t.applyGridCodePointsToOverrides = function (e, t) { let i = null != e ? e : []; const r = (null != t ? t : []).filter((e) => !i.find((t) => t.name === e.name)); return i.reduce((e, t) => ("number" == typeof t.override && e.push({ name: t.name, value: t.override }), e), r); }), (t.gridCodePointsToInputs = function (e) { const t = {}; return (null != e ? e : []).forEach((e) => (t[e.name] = "number" == typeof e.override ? e.override.toString() : "")), t; }), (t.subObjectHasValidGridCodes = function e(t, i) { if (Array.isArray(t)) { for (let e of t) if (i(e)) return !0; return !1; } for (let r in t) if (e(t[r], i)) return !0; return !1; }), (t.selectSubObject = s), (t.resolveNestedLookupStructureBySelections = function (e, t, i) { let n = e; for (let e of r.gridCodeNestedLookupKeys) { if (e === i) break; let r = s(n, t[e]); if (!r) return null; n = r; } return n; }), (t.shouldCollapse = function (e) { return !e.length || (1 === e.length && e[0] === r.GRIDCODE_ALL_OTHER_SELECTION); }), (t.shouldAutoSelect = function (e) { return 1 === e.length; }), (t.dropdownSelectionToConfigValue = function (e) { return e === r.GRIDCODE_ALL_OTHER_SELECTION ? r.GRIDCODE_ALL_OTHER_STAR : e; }), (t.configValueToDropdownSelection = function (e) { return e === r.GRIDCODE_ALL_OTHER_STAR ? r.GRIDCODE_ALL_OTHER_SELECTION : e; }), (t.gridCodeConfigToSelections = function (e) { return { country: e.country, state: e.state, distributor: e.distributor, utility: e.utility, retailer: e.retailer, region: e.region, grid_code: e.grid_code }; }), (t.gridCodeToOption = function (e, t) { const i = _(t); return i ? { value: t, label: (0, o.formatGridCodeSettingsSummary)(e, i) } : null; }), (t.emptyGridCodeSelection = { [r.GridCodesNestedLookupKey.country]: void 0, [r.GridCodesNestedLookupKey.state]: void 0, [r.GridCodesNestedLookupKey.distributor]: void 0, [r.GridCodesNestedLookupKey.utility]: void 0, [r.GridCodesNestedLookupKey.retailer]: void 0, [r.GridCodesNestedLookupKey.region]: void 0, [r.GridCodesNestedLookupKey.grid_code]: void 0, }); }, 1086: function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.gridCodePointMessages = t.gridCodeUnitMessages = t.gridCodeLevelMessages = t.formatGridCodeSettingsSummary = t.gridCodeViewMessages = void 0); const r = i(3), n = i(1083), o = i(577); (t.gridCodeViewMessages = (0, r.defineMessages)({ filterFreqWarning: { id: "grid_code_view_filter_freq_warning", defaultMessage: "Carefully select the appropriate grid code to ensure that the system will run at the intended voltage and frequency." }, settingsSummary: { id: "grid_code_view_settings_summary", description: "Provides a summary of the grid code settings: the voltage, frequency, and phase configuration (e.g. Split-Phase, Three-Phase, etc.)", defaultMessage: "{voltage} {frequency} {phase}", }, preconfigured: { id: "grid_code_view_preconfigured_label", description: "Label for a preconfigured grid code (the grid code is present in config but cannot be resolved using the lookup keys)", defaultMessage: "PRECONFIGURED GRID CODE", }, })), (t.formatGridCodeSettingsSummary = function (e, i) { let r = ""; "number" == typeof i.grid_freq_setting && (r = e.formatMessage(o.unitMessages.hertz, { frequency: i.grid_freq_setting })); let n = ""; "number" == typeof i.grid_voltage_setting && (n = e.formatMessage(o.unitMessages.volts, { voltage: i.grid_voltage_setting })); const d = o.phaseMessages[i.grid_phase_setting]; let _ = d ? e.formatMessage(d) : ""; return e.formatMessage(t.gridCodeViewMessages.settingsSummary, { frequency: r, voltage: n, phase: _ }); }), (t.gridCodeLevelMessages = (0, r.defineMessages)({ [n.GridCodesNestedLookupKey.country]: { id: "grid_code_view_country_label", defaultMessage: "COUNTRY" }, [n.GridCodesNestedLookupKey.distributor]: { id: "grid_code_view_distributor_label", defaultMessage: "DNO" }, [n.GridCodesNestedLookupKey.utility]: { id: "grid_code_view_utility_label", defaultMessage: "UTILITY" }, [n.GridCodesNestedLookupKey.retailer]: { id: "grid_code_view_retailer_label", defaultMessage: "RETAILER" }, [n.GridCodesNestedLookupKey.state]: { id: "grid_code_view_region_label", defaultMessage: "REGION" }, [n.GridCodesNestedLookupKey.region]: { id: "grid_code_view_standard_label", defaultMessage: "STANDARD" }, [n.GridCodesNestedLookupKey.grid_code]: { id: "grid_code_view_volt_freq_label", defaultMessage: "VOLTAGE/FREQUENCY" }, })), (t.gridCodeUnitMessages = (0, r.defineMessages)({ grid_code_unit_Hz: { id: "grid_code_unit_Hz", defaultMessage: "Hz" }, grid_code_unit_s: { id: "grid_code_unit_s", defaultMessage: "seconds" }, grid_code_unit_V: { id: "grid_code_unit_V", defaultMessage: "Volts" }, grid_code_unit_V_pu: { id: "grid_code_unit_V_pu", defaultMessage: "V / V_nominal" }, grid_code_unit_enum: { id: "grid_code_unit_enum", defaultMessage: "enumerated value, see manual" }, grid_code_unit_bool: { id: "grid_code_unit_bool", defaultMessage: "0 = no, 1 = yes" }, })), (t.gridCodePointMessages = (0, r.defineMessages)({ grid_code_point_nominal_grid_frequency: { id: "grid_code_point_nominal_grid_frequency", defaultMessage: "Nominal Grid Frequency" }, grid_code_point_nominal_grid_voltage: { id: "grid_code_point_nominal_grid_voltage", defaultMessage: " Nominal Grid Voltage (L-N)" }, grid_code_point_nominal_pinv_voltage: { id: "grid_code_point_nominal_pinv_voltage", defaultMessage: "Nominal Grid Voltage of connected Powerwalls" }, grid_code_point_vf_limit_under_voltage_0_grid_following: { id: "grid_code_point_vf_limit_under_voltage_0_grid_following", defaultMessage: "Under Voltage Reconnect Limit" }, grid_code_point_vf_limit_under_frequency_0_grid_following: { id: "grid_code_point_vf_limit_under_frequency_0_grid_following", defaultMessage: "Under Frequency Reconnect Limit" }, grid_code_point_vf_limit_under_voltage_1_grid_following: { id: "grid_code_point_vf_limit_under_voltage_1_grid_following", defaultMessage: "Under Voltage Trip 1 - Limit" }, grid_code_point_vf_limit_under_frequency_1_grid_following: { id: "grid_code_point_vf_limit_under_frequency_1_grid_following", defaultMessage: "Under Frequency Trip 1 - Limit" }, grid_code_point_vf_timing_under_voltage_1_grid_following: { id: "grid_code_point_vf_timing_under_voltage_1_grid_following", defaultMessage: "Under Voltage Trip 1 - Timing" }, grid_code_point_vf_timing_under_frequency_1_grid_following: { id: "grid_code_point_vf_timing_under_frequency_1_grid_following", defaultMessage: "Under Frequency Trip 1 - Timing" }, grid_code_point_vf_limit_over_voltage_0_grid_following: { id: "grid_code_point_vf_limit_over_voltage_0_grid_following", defaultMessage: "Over Voltage Reconnect Limit" }, grid_code_point_vf_limit_over_frequency_0_grid_following: { id: "grid_code_point_vf_limit_over_frequency_0_grid_following", defaultMessage: "Over Frequency Reconnect Limit" }, grid_code_point_vf_limit_over_voltage_1_grid_following: { id: "grid_code_point_vf_limit_over_voltage_1_grid_following", defaultMessage: "Over Voltage Trip 1 - Limit" }, grid_code_point_vf_limit_over_frequency_1_grid_following: { id: "grid_code_point_vf_limit_over_frequency_1_grid_following", defaultMessage: "Over Frequency Trip 1 - Limit" }, grid_code_point_vf_timing_over_voltage_1_grid_following: { id: "grid_code_point_vf_timing_over_voltage_1_grid_following", defaultMessage: "Over Voltage Trip 1 - Timing" }, grid_code_point_vf_timing_over_frequency_1_grid_following: { id: "grid_code_point_vf_timing_over_frequency_1_grid_following", defaultMessage: "Over Frequency Trip 1 - Timing" }, grid_code_point_vf_timing_qualifying_time_grid_following: { id: "grid_code_point_vf_timing_qualifying_time_grid_following", defaultMessage: "Inverter Grid Requalification time" }, grid_code_point_vf_param_allow_charging_while_qualifying: { id: "grid_code_point_vf_param_allow_charging_while_qualifying", defaultMessage: "Allow battery charging during grid qualification period" }, grid_code_point_PINVrx_SmartInvSelect: { id: "grid_code_point_PINVrx_SmartInvSelect", defaultMessage: "Enabled Smart Inverter Features" }, })); }, 1089: function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return a; }); var r = i(2), n = i(1085); function o(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, r); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(i), !0).forEach(function (t) { _(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : o(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { isRetrieving: !1, isFetching: !1, isSaving: !1, isSetting: !1, didInvalidate: !1, error: null, codes: {}, config: { country: void 0, state: void 0, distributor: void 0, utility: void 0, retailer: void 0, region: void 0, grid_code: void 0, show_all_grid_codes: !1, grid_code_overrides: [], grid_voltage_setting: void 0, grid_phase_setting: void 0, grid_freq_setting: void 0, }, status: null, servicesActive: !1, offGrid: !1, measuredFrequency: null, }; function a(e = s, t) { switch (t.type) { case r.REQUEST_SITE_INFO: return d(d({}, e), {}, { isRetrieving: !0, didInvalidate: !1 }); case r.REQUEST_GRID_CODES: return d(d({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case r.REQUEST_SAVE_OFF_GRID: return d(d({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case r.REQUEST_SAVE_GRID_CODE: return d(d({}, e), {}, { isSaving: !0, isSetting: t.isSetting, didInvalidate: !1 }); case r.RECEIVE_SITE_INFO_SUCCESS: return d(d(d({}, e), l(e, t)), {}, { isRetrieving: !1, didInvalidate: !1 }); case r.RECEIVE_GRID_CODES_SUCCESS: let i = t.gridRegions; return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, codes: Object(n.parseRegionsCSVIntoNestedLookupStructure)(i.regions, i.grid_code_settings) }); case r.RECEIVE_SAVE_GRID_CODE_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt }, l(e, t)); case r.RECEIVE_SAVE_OFF_GRID_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, offGrid: t.offGrid }); case r.RECEIVE_GRID_STATUS_SUCCESS: return d(d({}, e), {}, { status: t.grid_status, servicesActive: t.grid_services_active }); case r.RECEIVE_SITE_INFO_ERROR: return d(d({}, e), {}, { isRetrieving: !1, didInvalidate: !0 }); case r.RECEIVE_GRID_CODES_ERROR: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case r.RECEIVE_SAVE_GRID_CODE_ERROR: case r.RECEIVE_SAVE_OFF_GRID_ERROR: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case r.RESET_ALL: case r.RESET_GRID_CODE_CONFIG: return s; default: return e; } } function l(e, t) { let i = d(d({}, e), {}, { offGrid: null != t.offgrid ? t.offgrid : e.offGrid, measuredFrequency: null != t.measured_frequency ? t.measured_frequency : e.measuredFrequency }), r = t.grid_code; return r ? d(d({}, i), {}, { config: r }) : i; } }, 1096: function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return a; }); var r = i(2), n = i(93); function o(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, r); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(i), !0).forEach(function (t) { _(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : o(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { isFetching: !1, isSaving: !1, didInvalidate: !1, siteName: "", timezone: null, mode: null, backupReserve: null, exportLimit: null, generationLimit: null, solarLimit: null, batteryLimit: null, hecoCommittedDischargePower: null, hecoFromHour: null, hecoFromMinute: null, hecoScheduledDispatchEnabled: null, hecoAlreadySet: null, }; function a(e = s, t) { switch (t.type) { case r.REQUEST_SITE_NAME: case r.REQUEST_SITE_INFO: case r.REQUEST_OPERATION_SETTINGS: case r.REQUEST_TIMEZONE: return d(d({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case r.REQUEST_SAVE_SITE_NAME: case r.REQUEST_SAVE_EXPORT_MODE: case r.REQUEST_SAVE_OPERATION_SETTINGS: case r.REQUEST_SAVE_TIMEZONE: return d(d({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case r.RECEIVE_SITE_NAME_SUCCESS: case r.RECEIVE_SITE_INFO_SUCCESS: const i = t.payload || t; return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, siteName: i.site_name, timezone: i.timezone, netMeterMode: i.net_meter_mode }); case r.RECEIVE_SAVE_SITE_NAME_SUCCESS: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, siteName: t.siteName }); case r.RECEIVE_OPERATION_SETTINGS_SUCCESS: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt }, l(e, t)); case r.RECEIVE_SAVE_OPERATION_SETTINGS_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, lastSavedAt: t.receivedAt }, l(e, t)); case r.RECEIVE_TIMEZONE_SUCCESS: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !1, timezone: t.time_zone || e.timezone }); case r.RECEIVE_SAVE_TIMEZONE_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, timezone: t.timezone }); case r.RECEIVE_GET_EXTRA_PROGRAMS_SUCCESS: return d( d({}, e), {}, { isSaving: !1, didInvalidate: !1 }, (function (e, t) { let i = (t.extraPrograms || []).find((e) => e.name === n.b.HECO && e.type === n.c.POWER_RANGE); if (i && i.recurring_events.length > 0) return { hecoScheduledDispatchEnabled: !0, hecoCommittedDischargePower: 1e3 * i.recurring_events[0].discharge_power_kw[0], hecoFromHour: i.recurring_events[0].schedule.fromHour, hecoFromMinute: i.recurring_events[0].schedule.fromMinute, hecoAlreadySet: !0, }; return { hecoScheduledDispatchEnabled: !1, hecoAlreadySet: !1 }; })(0, t) ); case r.RECEIVE_POST_EXTRA_PROGRAM_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1 }); case r.RECEIVE_SITEMASTER_SETTINGS_ERROR: case r.RECEIVE_START_SITEMASTER_ERROR: case r.RECEIVE_STOP_SITEMASTER_ERROR: case r.RECEIVE_SITE_INFO_ERROR: case r.RECEIVE_OPERATION_SETTINGS_ERROR: case r.RECEIVE_TIMEZONE_ERROR: case r.RECEIVE_GET_EXTRA_PROGRAMS_ERROR: case r.RECEIVE_POST_EXTRA_PROGRAM_ERROR: return d(d({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case r.RECEIVE_SAVE_SITE_NAME_ERROR: case r.RECEIVE_SAVE_OPERATION_SETTINGS_ERROR: case r.RECEIVE_SAVE_TIMEZONE_ERROR: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case r.RESET_ALL: case r.RESET_OPERATION_SETTINGS: return s; default: return e; } } function l(e, t) { let i = null != t.backup_reserve_percent ? t.backup_reserve_percent : t.backupReserve, r = null != t.max_pv_export_power_kW ? t.max_pv_export_power_kW : t.solarLimit; return ( n.g.includes(t.mode) || (i = null), { mode: t.mode || e.mode, backupReserve: null != i ? i : e.backupReserve, exportLimit: null != i ? 100 - i : e.backupReserve, solarLimit: void 0 !== r ? r : e.solarLimit, generationLimit: null != t.generationLimit ? t.generationLimit : e.generationLimit, batteryLimit: null != t.batteryLimit ? t.batteryLimit : e.batteryLimit, } ); } }, 1116: function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return l; }); var r = i(27), n = i(2); function o(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, r); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(i), !0).forEach(function (t) { _(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : o(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { id: 1, brand: "", model: "", powerRating: null, port: null, baudrate: null, ip: null, revenueGrade: null }, a = { isFetching: !1, isSaving: !1, isConnecting: !1, didInvalidate: !1, brands: [], models: {}, items: [s] }; function l(e = a, t) { switch (t.type) { case n.ADD_SOLAR: return d(d({}, e), {}, { items: [...e.items, d(d({}, s), {}, { id: t.id })] }); case n.REMOVE_SOLAR: let i = e.items.filter((e, i) => t.index !== i); return d(d({}, e), {}, { items: i.length ? i : a.items }); case n.RECEIVE_SOLAR_CONFIG_SUCCESS: { let i = d({}, e); return t.solars.length && (i.items = t.solars.map((e, t) => ({ brand: e.brand, model: e.model, id: t + 1, powerRating: e.power_rating_watts, ip: e.ip_address || null, revenueGrade: e.revenue_grade || null }))), i; } case n.RECEIVE_SOLAR_BRANDS_SUCCESS: return d(d({}, e), {}, { brands: t.brands }); case n.RECEIVE_SOLAR_MODELS_SUCCESS: return d(d({}, e), {}, { models: d(d({}, e.models), {}, { [t.brand]: t.models }) }); case n.REQUEST_SAVE_SOLAR_INVERTERS: case n.REQUEST_DELETE_SOLAR_INVERTER: return d(d({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case n.RECEIVE_SAVE_SOLAR_INVERTER_SUCCESS: let o = 0, _ = Object(r.cloneDeep)( e.items.find((e, i) => { let r = e.id === t.id; return r && (o = i), r; }) ); return d( d({}, e), {}, { items: [ ...e.items.slice(0, o), d(d({}, _), {}, { brand: t.brand, model: t.model, powerRating: t.power_rating_watts, ip: t.ip_address || null, revenueGrade: t.revenue_grade || null }), ...e.items.slice(o + 1), ], } ); case n.RECEIVE_SAVE_SOLAR_INVERTERS_SUCCESS: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, lastUpdatedAt: Date.now() }); case n.RECEIVE_DELETE_SOLAR_INVERTER_SUCCESS: { let i = [...e.items.slice(0, t.index), ...e.items.slice(t.index + 1)]; return d(d({}, e), {}, { isSaving: !1, didInvalidate: !1, items: i.length ? i : a.items }); } case n.RECEIVE_SAVE_SOLAR_INVERTERS_ERROR: case n.RECEIVE_DELETE_SOLAR_INVERTER_ERROR: return d(d({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case n.REQUEST_CONNECT_SOLAR_INVERTER: return d(d({}, e), {}, { isConnecting: !0, didInvalidate: !1 }); case n.RECEIVE_CONNECT_SOLAR_INVERTER_SUCCESS: return d( d({}, e), {}, { isConnecting: !1, didInvalidate: !0, items: [ ...e.items.slice(0, t.index), d(d({}, e.items[t.index]), {}, { brand: t.brand, model: t.model, powerRating: t.power_rating_watts, ip: t.ip_address, revenueGrade: t.revenue_grade || null }), ...e.items.slice(t.index + 1), ], } ); case n.RECEIVE_CONNECT_SOLAR_INVERTER_ERROR: return d(d({}, e), {}, { isConnecting: !1, didInvalidate: !0 }); case n.RESET_ALL: case n.RESET_SOLAR_CONFIG: return a; default: return e; } } }, 1119: function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return l; }); var r = i(27), n = i(2), o = i(22); function d(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, r); } return i; } function _(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(i), !0).forEach(function (t) { s(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : d(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function s(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const a = { isFetching: !1, didInvalidate: !1, chargeTests: [], meterResults: [], inverterResults: [], running: !1, currentStatus: null, hysteresis: null, status: null, error: null, alerts: [] }; function l(e = a, t) { switch (t.type) { case n.REQUEST_RUN_INVERTER_TEST: let i = Object(r.cloneDeep)(e.inverterResults); for (let e = 0; e < i.length; e++) null != i[e].results && i[e].results[o.n.LAST_ERROR] && (i[e].results[o.n.LAST_ERROR] = null); return _(_({}, e), {}, { error: null, inverterResults: i, isFetching: !0, didInvalidate: !1, currentStatus: null }); case n.REQUEST_TEST_RESULTS: case n.REQUEST_TEST_ALERTS: case n.REQUEST_CANCEL_TEST: return _(_({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case n.RECEIVE_TEST_RESULTS: return _( _({}, e), {}, { isFetching: !1, didInvalidate: !1, lastRetrievedAt: t.receivedAt, chargeTests: t.charge_tests || e.chargeTests, meterResults: t.meter_results || e.meterResults, inverterResults: t.inverter_results || e.inverterResults, running: t.running, error: t.error, hysteresis: t.hysteresis, currentStatus: t.running ? t.status : e.currentStatus, status: t.status, } ); case n.RECEIVE_RUN_INVERTER_TEST_SUCCESS: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !1, lastTestedAt: t.receivedAt, running: t.running, currentStatus: t.running ? t.status : e.currentStatus, status: t.status }); case n.RECEIVE_RUN_INVERTER_TEST_ERROR: case n.RECEIVE_TEST_RESULTS_ERROR: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !0, error: t.error }); case n.RECEIVE_TEST_ALERTS_SUCCESS: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !1, alerts: t.alerts }); case n.RECEIVE_CANCEL_TEST_SUCCESS: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !1, running: !1, currentStatus: null, status: o.o.CANCELED }); case n.RECEIVE_TEST_ALERTS_ERROR: case n.RECEIVE_CANCEL_TEST_ERROR: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case n.RESET_ALL: case n.RESET_TESTS: return a; default: return e; } } }, }, ]); ================================================ FILE: tools/server/app/static/viz-static/40.17c71172308436a079d1.js ================================================ (window.webpackJsonp = window.webpackJsonp || []).push([[40], { 1062: function (n, w) {} }]); ================================================ FILE: tools/server/app/static/viz-static/app.css ================================================ .error-item .error-info { margin-left: 10px; cursor: pointer } .error-item a.refresh { color: #fff } .error-item a.error-link { color: #fff; text-decoration: underline } p.error-item { line-height: 20px } .modal { transform: translateZ(0); background-color: rgba(0, 0, 0, .6) } .modal-header { background-color: #f7f7f7 } .modal-body p { color: #666; line-height: 20px } .modal-body .warning-content>p { margin-bottom: 25px } .modal-body .warning-content>p.warning { font-weight: 700 } .modal-body .warning-content ul.warning-list { list-style-type: disc; margin-left: 15px } .modal-body .warning-content ul.warning-list>li { color: #666 } .modal-body .checkbox-content .checkbox { padding-top: 25px } .modal-body .warning-separator { padding-top: 30px } .modal-footer .btn-close { color: #666 } .modal-footer .btn-close:focus, .modal-footer .btn-close:hover { color: #000 } .modal-center, .modal-footer .col-xs-6 { text-align: center } .modal-center { padding: 0 !important } .modal-center .modal-dialog { display: inline-block; text-align: left; vertical-align: middle } .modal-center .modal-dialog.modal-lg { width: 90% } .modal-center:before { content: ""; display: inline-block; height: 100%; vertical-align: middle; margin-right: -2px } .modal-verification p { padding-top: 25px } .modal-error .modal-header { background-color: #c00; color: #fff } .modal-error .modal-header .error-item { margin: 5px 0 0 } .modal-caution .modal-header { background-color: #ffb641; color: #fff } .modal-caution .modal-header .error-item { margin: 5px 0 0 } .modal-fullscreen { background: transparent } .modal-fullscreen .modal-content { background: transparent; border: 0; box-shadow: none } .modal-fullscreen .modal-dialog { margin: 0 auto; width: 100% } .modal-backdrop { position: relative !important } .modal-backdrop.modal-backdrop-fullscreen { background: #fff } .modal-backdrop.modal-backdrop-fullscreen.in { opacity: .97; filter: alpha(opacity=97) } .modal-no-borders .modal-header { border-bottom: none } .modal-no-borders .modal-footer { border-top: none } @media(max-width:767px) { .scan-modal .modal-dialog { width: 90% } } @media(min-width:768px) { .modal-fullscreen .modal-dialog { width: 750px } } @media(min-width:992px) { .modal-fullscreen .modal-dialog { width: 970px } } @media(min-width:1200px) { .modal-fullscreen .modal-dialog { width: 1170px } } .error-boundary>p { color: #c00 } .tds-icon { height: 36px; width: 36px; color: #333 } .tds-icon-inline { width: 1.75em; height: 1.75em; vertical-align: -.5em; color: #333 } .header { padding-top: 25px; padding-bottom: 25px; position: relative } .header .title { font-weight: 300 } .header p { line-height: 20px } .header p.wizard-progress { float: right; color: #ccc !important; font-size: 13px } .header.header-default { background-color: #35454c; color: #fff } .header.header-default p { color: #f7f7f7 } .header.header-default a { color: #fff !important; text-decoration: underline } .header.header-subview { background-color: #f7f7f7; color: #000; border-bottom: 1px solid #ccc } .header.header-subview a { color: #000 !important; text-decoration: underline } .header.header-blank { background-color: #fff } .header.error { background-color: #c00; color: #fff } ul.detailed-errors { margin: 0 } ul.detailed-errors>li { padding-bottom: 10px } .banner-container { letter-spacing: .3px; top: 0; left: 0; right: 0; background-color: #f3a83d; flex-direction: column; margin: 0 auto; box-shadow: 0 5px 15px rgba(0, 0, 0, .5); z-index: 10 } .banner-container .banner-close { top: 5px; right: 5px } .footer { position: fixed; background-color: hsla(0, 0%, 96.9%, .95); height: 60px; bottom: 0; width: 100%; z-index: 400; transform: translateZ(0) } .footer.footer-default, .footer.footer-subview { border-top: 1px solid #ccc } .footer.footer-subview { background-color: #fff } .footer a { display: block; line-height: 60px; font-weight: 600; font-size: 13px; color: #666; white-space: nowrap; cursor: pointer; transition: color .15s ease-in-out } .footer a svg { transition: stroke .15s ease-in-out } .footer a:focus, .footer a:hover { text-decoration: none } .footer a.btn-text:focus, .footer a.btn-text:hover { cursor: default; color: #666 } .footer a.cancel-link.btn-text { text-align: center } .footer a.back-link { float: left } .footer a.back-link svg { stroke: #666; margin-right: 7px } .footer a.back-link:focus, .footer a.back-link:hover { color: #000 } .footer a.back-link:focus svg, .footer a.back-link:hover svg { stroke: #000 } .footer a.cancel-link { margin: 0 auto; text-align: center } .footer a.forward-link { float: right } .footer a.forward-link svg { stroke: #666; margin-left: 7px } .footer a.forward-link.disabled svg { stroke: #ccc } .footer a.forward-link.btn-action { line-height: 36px; padding: 2px 12px; margin-top: 10px } .footer a.forward-link.btn-action svg { stroke: #fff } .footer .back-section .tooltip { left: auto !important } .toast { width: 85%; overflow: hidden; font-size: 14px; background-color: #fff; background-clip: initial; box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .25); border-radius: 3px; transition: all .1s ease-out; margin: 0 auto } .toast:hover { box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .5) } .toast:not(:last-child) { margin-bottom: 10px } @media(min-width:768px) { .toast { width: 360px } } .toast .toast-link { width: 100%; font-size: 14px; margin-bottom: 0 } .toast .toast-link-indicator { max-height: 14px; margin: auto 0 } .toast .toast-title { margin-right: auto } .toast .toast-header { display: flex; align-items: center; color: #fff } .toast .toast-warning-header { background-color: #c53929 } .toast .toast-standard-header { background-color: #35454c } .toast .toast-standard-header .toast-close { color: #fff; opacity: .4; text-shadow: 0 1px 0 #333 } .toast .toast-standard-header .toast-close:hover { opacity: 1 } .toast .toast-body { display: flex; justify-content: space-between } .toast-list { position: fixed; z-index: 20; top: 10px; right: 0; left: 0; display: flex; justify-content: center; flex-direction: column } @media(min-width:768px) { .toast-list { left: auto; right: 25px } } @font-face { font-family: Gotham; src: url(124f233cfa9945f861dcaca7acedd308.otf); font-weight: 100; font-style: normal } @font-face { font-family: Gotham; src: url(2bf15a1686c7a1bf7b577337a07d7049.otf); font-weight: 100; font-style: italic } @font-face { font-family: Gotham; src: url(86a6894da889a3db781418529403290f.otf); font-weight: 200; font-style: normal } @font-face { font-family: Gotham; src: url(a3b0d611359e6fa8356cd88aa9035268.otf); font-weight: 200; font-style: italic } @font-face { font-family: Gotham; src: url(bceda3fae660177ae570735feec62811.otf); font-weight: 300; font-style: normal } @font-face { font-family: Gotham; src: url(d859fee2eba0e67c75c4c92e719d0630.otf); font-weight: 300; font-style: italic } @font-face { font-family: Gotham; src: url(eca1317ee8a99162d0d0e2df77330cec.otf); font-weight: 400; font-style: normal } @font-face { font-family: Gotham; src: url(befdfda70624c396169873b05de57f8a.otf); font-weight: 400; font-style: italic } @font-face { font-family: Gotham; src: url(e19c20e966bde501f94e41cd0322dbe8.otf); font-weight: 600; font-style: normal } @font-face { font-family: Gotham; src: url(653969a51632a4df33358a39d7012f79.otf); font-weight: 600; font-style: italic } @font-face { font-family: Gotham; src: url(722c5f898bbca8b2eb3fce0287688326.otf); font-weight: 700; font-style: normal } @font-face { font-family: Gotham; src: url(ec89c09b066f57efc7687540c998845b.otf); font-weight: 700; font-style: italic } @font-face { font-family: Gotham; src: url(89aec2cc0b804667e95b1adc02e1ac4a.otf); font-weight: 800; font-style: normal } @font-face { font-family: Gotham; src: url(ec6b35b07448e1624cb09323b5fb6e32.otf); font-weight: 800; font-style: italic } @font-face { font-family: Gotham; src: url(b8d72cb0ef934ba1fe847c692d9dfed1.otf); font-weight: 900; font-style: normal } @font-face { font-family: Gotham; src: url(ac2944015a17576924af7c56d88751cb.otf); font-weight: 900; font-style: italic } .text-extra-large { font-size: 32px } .text-larger { font-size: 22px } .text-large { font-size: 19px } .text-medium { font-size: 16px } .text-small { font-size: 12px } .text-break { overflow-wrap: break-word; -webkit-hyphens: auto; hyphens: auto } .flex { display: flex !important } .m-1 { margin: 5px !important } .mx-1 { margin-left: 5px !important; margin-right: 5px !important } .my-1 { margin-bottom: 5px !important } .mt-1, .my-1 { margin-top: 5px !important } .mb-1 { margin-bottom: 5px !important } .ml-1 { margin-left: 5px !important } .mr-1 { margin-right: 5px !important } .p-1 { padding: 5px !important } .px-1 { padding-left: 5px !important; padding-right: 5px !important } .py-1 { padding-bottom: 5px !important } .pt-1, .py-1 { padding-top: 5px !important } .pb-1 { padding-bottom: 5px !important } .pl-1 { padding-left: 5px !important } .pr-1 { padding-right: 5px !important } .m-2 { margin: 10px !important } .mx-2 { margin-left: 10px !important; margin-right: 10px !important } .my-2 { margin-bottom: 10px !important } .mt-2, .my-2 { margin-top: 10px !important } .mb-2 { margin-bottom: 10px !important } .ml-2 { margin-left: 10px !important } .mr-2 { margin-right: 10px !important } .p-2 { padding: 10px !important } .px-2 { padding-left: 10px !important; padding-right: 10px !important } .py-2 { padding-bottom: 10px !important } .pt-2, .py-2 { padding-top: 10px !important } .pb-2 { padding-bottom: 10px !important } .pl-2 { padding-left: 10px !important } .pr-2 { padding-right: 10px !important } .m-3 { margin: 15px !important } .mx-3 { margin-left: 15px !important; margin-right: 15px !important } .my-3 { margin-bottom: 15px !important } .mt-3, .my-3 { margin-top: 15px !important } .mb-3 { margin-bottom: 15px !important } .ml-3 { margin-left: 15px !important } .mr-3 { margin-right: 15px !important } .p-3 { padding: 15px !important } .px-3 { padding-left: 15px !important; padding-right: 15px !important } .py-3 { padding-bottom: 15px !important } .pt-3, .py-3 { padding-top: 15px !important } .pb-3 { padding-bottom: 15px !important } .pl-3 { padding-left: 15px !important } .pr-3 { padding-right: 15px !important } .m-4 { margin: 20px !important } .mx-4 { margin-left: 20px !important; margin-right: 20px !important } .my-4 { margin-bottom: 20px !important } .mt-4, .my-4 { margin-top: 20px !important } .mb-4 { margin-bottom: 20px !important } .ml-4 { margin-left: 20px !important } .mr-4 { margin-right: 20px !important } .p-4 { padding: 20px !important } .px-4 { padding-left: 20px !important; padding-right: 20px !important } .py-4 { padding-bottom: 20px !important } .pt-4, .py-4 { padding-top: 20px !important } .pb-4 { padding-bottom: 20px !important } .pl-4 { padding-left: 20px !important } .pr-4 { padding-right: 20px !important } .m-5 { margin: 25px !important } .mx-5 { margin-left: 25px !important; margin-right: 25px !important } .my-5 { margin-bottom: 25px !important } .mt-5, .my-5 { margin-top: 25px !important } .mb-5 { margin-bottom: 25px !important } .ml-5 { margin-left: 25px !important } .mr-5 { margin-right: 25px !important } .p-5 { padding: 25px !important } .px-5 { padding-left: 25px !important; padding-right: 25px !important } .py-5 { padding-bottom: 25px !important } .pt-5, .py-5 { padding-top: 25px !important } .pb-5 { padding-bottom: 25px !important } .pl-5 { padding-left: 25px !important } .pr-5 { padding-right: 25px !important } .absolute { position: absolute !important } .relative { position: relative !important } @keyframes fade-out { 0% { opacity: 1 } to { opacity: 0 } } @keyframes slide-in-top { 0% { transform: translateY(-150%) } to { transform: translateY(0) } } @keyframes slide-out-top { 0% { transform: translateY(0) } to { transform: translateY(-150%) } } .fade-in { animation: fade-in .3s ease-in-out 1 normal forwards } .fade-out { animation: fade-out .3s ease-in-out 1 normal forwards } .slide-in-top { animation: slide-in-top .2s ease-in-out 1 normal forwards } .slide-out-top { animation: slide-out-top .2s ease-in-out 1 normal forwards } /*! * Bootstrap v3.3.7 (http://getbootstrap.com) * bootstrap-sass (https://github.com/twbs/bootstrap-sass) * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! * Bootstrap v3.4.1 (https://getbootstrap.com/) * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block } audio, canvas, progress, video { vertical-align: initial } a:active, a:hover { outline: 0 } b, strong { font-weight: 700 } mark { background: #ff0 } img { border: 0 } pre { overflow: auto } button, input, optgroup, select, textarea { color: inherit } button { overflow: visible } button, html input[type=button], input[type=reset], input[type=submit] { -webkit-appearance: button; cursor: pointer } button[disabled], html input[disabled] { cursor: default } button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0 } input { line-height: normal } input[type=checkbox], input[type=radio] { box-sizing: border-box; padding: 0 } input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { height: auto } input[type=search] { -webkit-appearance: textfield; box-sizing: initial } input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration { -webkit-appearance: none } table { border-collapse: collapse; border-spacing: 0 } td, th { padding: 0 } /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ @media print { *, :after, :before { color: #000 !important; text-shadow: none !important; background: transparent !important; box-shadow: none !important } a, a:visited { text-decoration: underline } a[href]:after { content: " (" attr(href) ")" } abbr[title]:after { content: " (" attr(title) ")" } a[href^="#"]:after, a[href^="javascript:"]:after { content: "" } blockquote, pre { border: 1px solid #999; page-break-inside: avoid } thead { display: table-header-group } img, tr { page-break-inside: avoid } img { max-width: 100% !important } h2, h3, p { orphans: 3; widows: 3 } h2, h3 { page-break-after: avoid } .navbar { display: none } .btn>.caret, .dropup>.btn>.caret { border-top-color: #000 !important } .label { border: 1px solid #000 } .table { border-collapse: collapse !important } .table td, .table th { background-color: #fff !important } .table-bordered td, .table-bordered th { border: 1px solid #ddd !important } } @font-face { font-family: Glyphicons Halflings; src: url(f4769f9bdb7466be65088239c12046d1.eot); src: url(f4769f9bdb7466be65088239c12046d1.eot?#iefix) format("embedded-opentype"), url(448c34a56d699c29117adc64c43affeb.woff2) format("woff2"), url(fa2772327f55d8198301fdb8bcfc8158.woff) format("woff"), url(e18bbf611f2a2e43afc071aa2f4e1512.ttf) format("truetype"), url(89889688147bd7575d6327160d64e760.svg#glyphicons_halflingsregular) format("svg") } .glyphicon { position: relative; top: 1px; display: inline-block; font-family: Glyphicons Halflings; font-style: normal; font-weight: 400; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale } .glyphicon-asterisk:before { content: "*" } .glyphicon-plus:before { content: "+" } .glyphicon-eur:before, .glyphicon-euro:before { content: "€" } .glyphicon-minus:before { content: "−" } .glyphicon-cloud:before { content: "☁" } .glyphicon-envelope:before { content: "✉" } .glyphicon-pencil:before { content: "✏" } .glyphicon-glass:before { content: "" } .glyphicon-music:before { content: "" } .glyphicon-search:before { content: "" } .glyphicon-heart:before { content: "" } .glyphicon-star:before { content: "" } .glyphicon-star-empty:before { content: "" } .glyphicon-user:before { content: "" } .glyphicon-film:before { content: "" } .glyphicon-th-large:before { content: "" } .glyphicon-th:before { content: "" } .glyphicon-th-list:before { content: "" } .glyphicon-ok:before { content: "" } .glyphicon-remove:before { content: "" } .glyphicon-zoom-in:before { content: "" } .glyphicon-zoom-out:before { content: "" } .glyphicon-off:before { content: "" } .glyphicon-signal:before { content: "" } .glyphicon-cog:before { content: "" } .glyphicon-trash:before { content: "" } .glyphicon-home:before { content: "" } .glyphicon-file:before { content: "" } .glyphicon-time:before { content: "" } .glyphicon-road:before { content: "" } .glyphicon-download-alt:before { content: "" } .glyphicon-download:before { content: "" } .glyphicon-upload:before { content: "" } .glyphicon-inbox:before { content: "" } .glyphicon-play-circle:before { content: "" } .glyphicon-repeat:before { content: "" } .glyphicon-refresh:before { content: "" } .glyphicon-list-alt:before { content: "" } .glyphicon-lock:before { content: "" } .glyphicon-flag:before { content: "" } .glyphicon-headphones:before { content: "" } .glyphicon-volume-off:before { content: "" } .glyphicon-volume-down:before { content: "" } .glyphicon-volume-up:before { content: "" } .glyphicon-qrcode:before { content: "" } .glyphicon-barcode:before { content: "" } .glyphicon-tag:before { content: "" } .glyphicon-tags:before { content: "" } .glyphicon-book:before { content: "" } .glyphicon-bookmark:before { content: "" } .glyphicon-print:before { content: "" } .glyphicon-camera:before { content: "" } .glyphicon-font:before { content: "" } .glyphicon-bold:before { content: "" } .glyphicon-italic:before { content: "" } .glyphicon-text-height:before { content: "" } .glyphicon-text-width:before { content: "" } .glyphicon-align-left:before { content: "" } .glyphicon-align-center:before { content: "" } .glyphicon-align-right:before { content: "" } .glyphicon-align-justify:before { content: "" } .glyphicon-list:before { content: "" } .glyphicon-indent-left:before { content: "" } .glyphicon-indent-right:before { content: "" } .glyphicon-facetime-video:before { content: "" } .glyphicon-picture:before { content: "" } .glyphicon-map-marker:before { content: "" } .glyphicon-adjust:before { content: "" } .glyphicon-tint:before { content: "" } .glyphicon-edit:before { content: "" } .glyphicon-share:before { content: "" } .glyphicon-check:before { content: "" } .glyphicon-move:before { content: "" } .glyphicon-step-backward:before { content: "" } .glyphicon-fast-backward:before { content: "" } .glyphicon-backward:before { content: "" } .glyphicon-play:before { content: "" } .glyphicon-pause:before { content: "" } .glyphicon-stop:before { content: "" } .glyphicon-forward:before { content: "" } .glyphicon-fast-forward:before { content: "" } .glyphicon-step-forward:before { content: "" } .glyphicon-eject:before { content: "" } .glyphicon-chevron-left:before { content: "" } .glyphicon-chevron-right:before { content: "" } .glyphicon-plus-sign:before { content: "" } .glyphicon-minus-sign:before { content: "" } .glyphicon-remove-sign:before { content: "" } .glyphicon-ok-sign:before { content: "" } .glyphicon-question-sign:before { content: "" } .glyphicon-info-sign:before { content: "" } .glyphicon-screenshot:before { content: "" } .glyphicon-remove-circle:before { content: "" } .glyphicon-ok-circle:before { content: "" } .glyphicon-ban-circle:before { content: "" } .glyphicon-arrow-left:before { content: "" } .glyphicon-arrow-right:before { content: "" } .glyphicon-arrow-up:before { content: "" } .glyphicon-arrow-down:before { content: "" } .glyphicon-share-alt:before { content: "" } .glyphicon-resize-full:before { content: "" } .glyphicon-resize-small:before { content: "" } .glyphicon-exclamation-sign:before { content: "" } .glyphicon-gift:before { content: "" } .glyphicon-leaf:before { content: "" } .glyphicon-fire:before { content: "" } .glyphicon-eye-open:before { content: "" } .glyphicon-eye-close:before { content: "" } .glyphicon-warning-sign:before { content: "" } .glyphicon-plane:before { content: "" } .glyphicon-calendar:before { content: "" } .glyphicon-random:before { content: "" } .glyphicon-comment:before { content: "" } .glyphicon-magnet:before { content: "" } .glyphicon-chevron-up:before { content: "" } .glyphicon-chevron-down:before { content: "" } .glyphicon-retweet:before { content: "" } .glyphicon-shopping-cart:before { content: "" } .glyphicon-folder-close:before { content: "" } .glyphicon-folder-open:before { content: "" } .glyphicon-resize-vertical:before { content: "" } .glyphicon-resize-horizontal:before { content: "" } .glyphicon-hdd:before { content: "" } .glyphicon-bullhorn:before { content: "" } .glyphicon-bell:before { content: "" } .glyphicon-certificate:before { content: "" } .glyphicon-thumbs-up:before { content: "" } .glyphicon-thumbs-down:before { content: "" } .glyphicon-hand-right:before { content: "" } .glyphicon-hand-left:before { content: "" } .glyphicon-hand-up:before { content: "" } .glyphicon-hand-down:before { content: "" } .glyphicon-circle-arrow-right:before { content: "" } .glyphicon-circle-arrow-left:before { content: "" } .glyphicon-circle-arrow-up:before { content: "" } .glyphicon-circle-arrow-down:before { content: "" } .glyphicon-globe:before { content: "" } .glyphicon-wrench:before { content: "" } .glyphicon-tasks:before { content: "" } .glyphicon-filter:before { content: "" } .glyphicon-briefcase:before { content: "" } .glyphicon-fullscreen:before { content: "" } .glyphicon-dashboard:before { content: "" } .glyphicon-paperclip:before { content: "" } .glyphicon-heart-empty:before { content: "" } .glyphicon-link:before { content: "" } .glyphicon-phone:before { content: "" } .glyphicon-pushpin:before { content: "" } .glyphicon-usd:before { content: "" } .glyphicon-gbp:before { content: "" } .glyphicon-sort:before { content: "" } .glyphicon-sort-by-alphabet:before { content: "" } .glyphicon-sort-by-alphabet-alt:before { content: "" } .glyphicon-sort-by-order:before { content: "" } .glyphicon-sort-by-order-alt:before { content: "" } .glyphicon-sort-by-attributes:before { content: "" } .glyphicon-sort-by-attributes-alt:before { content: "" } .glyphicon-unchecked:before { content: "" } .glyphicon-expand:before { content: "" } .glyphicon-collapse-down:before { content: "" } .glyphicon-collapse-up:before { content: "" } .glyphicon-log-in:before { content: "" } .glyphicon-flash:before { content: "" } .glyphicon-log-out:before { content: "" } .glyphicon-new-window:before { content: "" } .glyphicon-record:before { content: "" } .glyphicon-save:before { content: "" } .glyphicon-open:before { content: "" } .glyphicon-saved:before { content: "" } .glyphicon-import:before { content: "" } .glyphicon-export:before { content: "" } .glyphicon-send:before { content: "" } .glyphicon-floppy-disk:before { content: "" } .glyphicon-floppy-saved:before { content: "" } .glyphicon-floppy-remove:before { content: "" } .glyphicon-floppy-save:before { content: "" } .glyphicon-floppy-open:before { content: "" } .glyphicon-credit-card:before { content: "" } .glyphicon-transfer:before { content: "" } .glyphicon-cutlery:before { content: "" } .glyphicon-header:before { content: "" } .glyphicon-compressed:before { content: "" } .glyphicon-earphone:before { content: "" } .glyphicon-phone-alt:before { content: "" } .glyphicon-tower:before { content: "" } .glyphicon-stats:before { content: "" } .glyphicon-sd-video:before { content: "" } .glyphicon-hd-video:before { content: "" } .glyphicon-subtitles:before { content: "" } .glyphicon-sound-stereo:before { content: "" } .glyphicon-sound-dolby:before { content: "" } .glyphicon-sound-5-1:before { content: "" } .glyphicon-sound-6-1:before { content: "" } .glyphicon-sound-7-1:before { content: "" } .glyphicon-copyright-mark:before { content: "" } .glyphicon-registration-mark:before { content: "" } .glyphicon-cloud-download:before { content: "" } .glyphicon-cloud-upload:before { content: "" } .glyphicon-tree-conifer:before { content: "" } .glyphicon-tree-deciduous:before { content: "" } .glyphicon-cd:before { content: "" } .glyphicon-save-file:before { content: "" } .glyphicon-open-file:before { content: "" } .glyphicon-level-up:before { content: "" } .glyphicon-copy:before { content: "" } .glyphicon-paste:before { content: "" } .glyphicon-alert:before { content: "" } .glyphicon-equalizer:before { content: "" } .glyphicon-king:before { content: "" } .glyphicon-queen:before { content: "" } .glyphicon-pawn:before { content: "" } .glyphicon-bishop:before { content: "" } .glyphicon-knight:before { content: "" } .glyphicon-baby-formula:before { content: "" } .glyphicon-tent:before { content: "⛺" } .glyphicon-blackboard:before { content: "" } .glyphicon-bed:before { content: "" } .glyphicon-apple:before { content: "" } .glyphicon-erase:before { content: "" } .glyphicon-hourglass:before { content: "⌛" } .glyphicon-lamp:before { content: "" } .glyphicon-duplicate:before { content: "" } .glyphicon-piggy-bank:before { content: "" } .glyphicon-scissors:before { content: "" } .glyphicon-bitcoin:before, .glyphicon-btc:before, .glyphicon-xbt:before { content: "" } .glyphicon-jpy:before, .glyphicon-yen:before { content: "¥" } .glyphicon-rub:before, .glyphicon-ruble:before { content: "₽" } .glyphicon-scale:before { content: "" } .glyphicon-ice-lolly:before { content: "" } .glyphicon-ice-lolly-tasted:before { content: "" } .glyphicon-education:before { content: "" } .glyphicon-option-horizontal:before { content: "" } .glyphicon-option-vertical:before { content: "" } .glyphicon-menu-hamburger:before { content: "" } .glyphicon-modal-window:before { content: "" } .glyphicon-oil:before { content: "" } .glyphicon-grain:before { content: "" } .glyphicon-sunglasses:before { content: "" } .glyphicon-text-size:before { content: "" } .glyphicon-text-color:before { content: "" } .glyphicon-text-background:before { content: "" } .glyphicon-object-align-top:before { content: "" } .glyphicon-object-align-bottom:before { content: "" } .glyphicon-object-align-horizontal:before { content: "" } .glyphicon-object-align-left:before { content: "" } .glyphicon-object-align-vertical:before { content: "" } .glyphicon-object-align-right:before { content: "" } .glyphicon-triangle-right:before { content: "" } .glyphicon-triangle-left:before { content: "" } .glyphicon-triangle-bottom:before { content: "" } .glyphicon-triangle-top:before { content: "" } .glyphicon-console:before { content: "" } .glyphicon-superscript:before { content: "" } .glyphicon-subscript:before { content: "" } .glyphicon-menu-left:before { content: "" } .glyphicon-menu-right:before { content: "" } .glyphicon-menu-down:before { content: "" } .glyphicon-menu-up:before { content: "" } *, :after, :before { box-sizing: border-box } html { font-size: 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } body { font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.428571429; color: #333; background-color: #fff } button, input, select, textarea { font-family: inherit; font-size: inherit; line-height: inherit } a { color: #337ab7; text-decoration: none } a:focus, a:hover { color: #23527c; text-decoration: underline } a:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px } figure { margin: 0 } img { vertical-align: middle } .img-responsive { display: block; max-width: 100%; height: auto } .img-rounded { border-radius: 6px } .img-thumbnail { padding: 4px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; transition: all .2s ease-in-out; display: inline-block; max-width: 100%; height: auto } .img-circle { border-radius: 50% } hr { margin-top: 20px; margin-bottom: 20px; border: 0; border-top: 1px solid #eee } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0 } .sr-only-focusable:active, .sr-only-focusable:focus { position: static; width: auto; height: auto; margin: 0; overflow: visible; clip: auto } [role=button] { cursor: pointer } .h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit } .h1 .small, .h1 small, .h2 .small, .h2 small, .h3 .small, .h3 small, .h4 .small, .h4 small, .h5 .small, .h5 small, .h6 .small, .h6 small, h1 .small, h1 small, h2 .small, h2 small, h3 .small, h3 small, h4 .small, h4 small, h5 .small, h5 small, h6 .small, h6 small { font-weight: 400; line-height: 1; color: #777 } .h1, .h2, .h3, h1, h2, h3 { margin-top: 20px; margin-bottom: 10px } .h1 .small, .h1 small, .h2 .small, .h2 small, .h3 .small, .h3 small, h1 .small, h1 small, h2 .small, h2 small, h3 .small, h3 small { font-size: 65% } .h4, .h5, .h6, h4, h5, h6 { margin-top: 10px; margin-bottom: 10px } .h4 .small, .h4 small, .h5 .small, .h5 small, .h6 .small, .h6 small, h4 .small, h4 small, h5 .small, h5 small, h6 .small, h6 small { font-size: 75% } .h1, h1 { font-size: 36px } .h2, h2 { font-size: 30px } .h3, h3 { font-size: 24px } .h4, h4 { font-size: 18px } .h5, h5 { font-size: 14px } .h6, h6 { font-size: 12px } p { margin: 0 0 10px } .lead { margin-bottom: 20px; font-size: 16px; font-weight: 300; line-height: 1.4 } @media(min-width:768px) { .lead { font-size: 21px } } .small, small { font-size: 85% } .mark, mark { padding: .2em; background-color: #fcf8e3 } .text-left { text-align: left } .text-right { text-align: right } .text-center { text-align: center } .text-justify { text-align: justify } .text-nowrap { white-space: nowrap } .initialism, .text-uppercase { text-transform: uppercase } .text-capitalize { text-transform: capitalize } .text-muted { color: #777 } .text-primary { color: #337ab7 } a.text-primary:focus, a.text-primary:hover { color: #286090 } .text-success { color: #3c763d } a.text-success:focus, a.text-success:hover { color: #2b542c } .text-info { color: #31708f } a.text-info:focus, a.text-info:hover { color: #245269 } .text-warning { color: #8a6d3b } a.text-warning:focus, a.text-warning:hover { color: #66512c } .text-danger { color: #a94442 } a.text-danger:focus, a.text-danger:hover { color: #843534 } .bg-primary { color: #fff; background-color: #337ab7 } a.bg-primary:focus, a.bg-primary:hover { background-color: #286090 } .bg-success { background-color: #dff0d8 } a.bg-success:focus, a.bg-success:hover { background-color: #c1e2b3 } .bg-info { background-color: #d9edf7 } a.bg-info:focus, a.bg-info:hover { background-color: #afd9ee } .bg-warning { background-color: #fcf8e3 } a.bg-warning:focus, a.bg-warning:hover { background-color: #f7ecb5 } .bg-danger { background-color: #f2dede } a.bg-danger:focus, a.bg-danger:hover { background-color: #e4b9b9 } .page-header { padding-bottom: 9px; margin: 40px 0 20px; border-bottom: 1px solid #eee } ol, ul { margin-top: 0; margin-bottom: 10px } ol ol, ol ul, ul ol, ul ul { margin-bottom: 0 } .list-inline, .list-unstyled { padding-left: 0; list-style: none } .list-inline { margin-left: -5px } .list-inline>li { display: inline-block; padding-right: 5px; padding-left: 5px } dl { margin-top: 0; margin-bottom: 20px } dd, dt { line-height: 1.428571429 } dt { font-weight: 700 } dd { margin-left: 0 } .dl-horizontal dd:after, .dl-horizontal dd:before { display: table; content: " " } .dl-horizontal dd:after { clear: both } @media(min-width:768px) { .dl-horizontal dt { float: left; width: 160px; clear: left; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } .dl-horizontal dd { margin-left: 180px } } abbr[data-original-title], abbr[title] { cursor: help } .initialism { font-size: 90% } blockquote { padding: 10px 20px; margin: 0 0 20px; font-size: 17.5px; border-left: 5px solid #eee } blockquote ol:last-child, blockquote p:last-child, blockquote ul:last-child { margin-bottom: 0 } blockquote .small, blockquote footer, blockquote small { display: block; font-size: 80%; line-height: 1.428571429; color: #777 } blockquote .small:before, blockquote footer:before, blockquote small:before { content: "— " } .blockquote-reverse, blockquote.pull-right { padding-right: 15px; padding-left: 0; text-align: right; border-right: 5px solid #eee; border-left: 0 } .blockquote-reverse .small:before, .blockquote-reverse footer:before, .blockquote-reverse small:before, blockquote.pull-right .small:before, blockquote.pull-right footer:before, blockquote.pull-right small:before { content: "" } .blockquote-reverse .small:after, .blockquote-reverse footer:after, .blockquote-reverse small:after, blockquote.pull-right .small:after, blockquote.pull-right footer:after, blockquote.pull-right small:after { content: " —" } address { margin-bottom: 20px; font-style: normal; line-height: 1.428571429 } code, kbd, pre, samp { font-family: Menlo, Monaco, Consolas, Courier New, monospace } code { color: #c7254e; background-color: #f9f2f4; border-radius: 4px } code, kbd { padding: 2px 4px; font-size: 90% } kbd { color: #fff; background-color: #333; border-radius: 3px; box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25) } kbd kbd { padding: 0; font-size: 100%; font-weight: 700; box-shadow: none } pre { display: block; padding: 9.5px; margin: 0 0 10px; font-size: 13px; line-height: 1.428571429; color: #333; word-break: break-all; word-wrap: break-word; background-color: #f5f5f5; border: 1px solid #ccc; border-radius: 4px } pre code { padding: 0; font-size: inherit; color: inherit; white-space: pre-wrap; background-color: initial; border-radius: 0 } .pre-scrollable { max-height: 340px; overflow-y: scroll } .container { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto } .container:after, .container:before { display: table; content: " " } .container:after { clear: both } @media(min-width:768px) { .container { width: 750px } } @media(min-width:992px) { .container { width: 970px } } @media(min-width:1200px) { .container { width: 1170px } } .container-fluid { padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto } .container-fluid:after, .container-fluid:before { display: table; content: " " } .container-fluid:after { clear: both } .row { margin-right: -15px; margin-left: -15px } .row:after, .row:before { display: table; content: " " } .row:after { clear: both } .row-no-gutters { margin-right: 0; margin-left: 0 } .row-no-gutters [class*=col-] { padding-right: 0; padding-left: 0 } .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { position: relative; min-height: 1px; padding-right: 15px; padding-left: 15px } .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { float: left } .col-xs-1 { width: 8.3333333333% } .col-xs-2 { width: 16.6666666667% } .col-xs-3 { width: 25% } .col-xs-4 { width: 33.3333333333% } .col-xs-5 { width: 41.6666666667% } .col-xs-6 { width: 50% } .col-xs-7 { width: 58.3333333333% } .col-xs-8 { width: 66.6666666667% } .col-xs-9 { width: 75% } .col-xs-10 { width: 83.3333333333% } .col-xs-11 { width: 91.6666666667% } .col-xs-12 { width: 100% } .col-xs-pull-0 { right: auto } .col-xs-pull-1 { right: 8.3333333333% } .col-xs-pull-2 { right: 16.6666666667% } .col-xs-pull-3 { right: 25% } .col-xs-pull-4 { right: 33.3333333333% } .col-xs-pull-5 { right: 41.6666666667% } .col-xs-pull-6 { right: 50% } .col-xs-pull-7 { right: 58.3333333333% } .col-xs-pull-8 { right: 66.6666666667% } .col-xs-pull-9 { right: 75% } .col-xs-pull-10 { right: 83.3333333333% } .col-xs-pull-11 { right: 91.6666666667% } .col-xs-pull-12 { right: 100% } .col-xs-push-0 { left: auto } .col-xs-push-1 { left: 8.3333333333% } .col-xs-push-2 { left: 16.6666666667% } .col-xs-push-3 { left: 25% } .col-xs-push-4 { left: 33.3333333333% } .col-xs-push-5 { left: 41.6666666667% } .col-xs-push-6 { left: 50% } .col-xs-push-7 { left: 58.3333333333% } .col-xs-push-8 { left: 66.6666666667% } .col-xs-push-9 { left: 75% } .col-xs-push-10 { left: 83.3333333333% } .col-xs-push-11 { left: 91.6666666667% } .col-xs-push-12 { left: 100% } .col-xs-offset-0 { margin-left: 0 } .col-xs-offset-1 { margin-left: 8.3333333333% } .col-xs-offset-2 { margin-left: 16.6666666667% } .col-xs-offset-3 { margin-left: 25% } .col-xs-offset-4 { margin-left: 33.3333333333% } .col-xs-offset-5 { margin-left: 41.6666666667% } .col-xs-offset-6 { margin-left: 50% } .col-xs-offset-7 { margin-left: 58.3333333333% } .col-xs-offset-8 { margin-left: 66.6666666667% } .col-xs-offset-9 { margin-left: 75% } .col-xs-offset-10 { margin-left: 83.3333333333% } .col-xs-offset-11 { margin-left: 91.6666666667% } .col-xs-offset-12 { margin-left: 100% } @media(min-width:768px) { .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left } .col-sm-1 { width: 8.3333333333% } .col-sm-2 { width: 16.6666666667% } .col-sm-3 { width: 25% } .col-sm-4 { width: 33.3333333333% } .col-sm-5 { width: 41.6666666667% } .col-sm-6 { width: 50% } .col-sm-7 { width: 58.3333333333% } .col-sm-8 { width: 66.6666666667% } .col-sm-9 { width: 75% } .col-sm-10 { width: 83.3333333333% } .col-sm-11 { width: 91.6666666667% } .col-sm-12 { width: 100% } .col-sm-pull-0 { right: auto } .col-sm-pull-1 { right: 8.3333333333% } .col-sm-pull-2 { right: 16.6666666667% } .col-sm-pull-3 { right: 25% } .col-sm-pull-4 { right: 33.3333333333% } .col-sm-pull-5 { right: 41.6666666667% } .col-sm-pull-6 { right: 50% } .col-sm-pull-7 { right: 58.3333333333% } .col-sm-pull-8 { right: 66.6666666667% } .col-sm-pull-9 { right: 75% } .col-sm-pull-10 { right: 83.3333333333% } .col-sm-pull-11 { right: 91.6666666667% } .col-sm-pull-12 { right: 100% } .col-sm-push-0 { left: auto } .col-sm-push-1 { left: 8.3333333333% } .col-sm-push-2 { left: 16.6666666667% } .col-sm-push-3 { left: 25% } .col-sm-push-4 { left: 33.3333333333% } .col-sm-push-5 { left: 41.6666666667% } .col-sm-push-6 { left: 50% } .col-sm-push-7 { left: 58.3333333333% } .col-sm-push-8 { left: 66.6666666667% } .col-sm-push-9 { left: 75% } .col-sm-push-10 { left: 83.3333333333% } .col-sm-push-11 { left: 91.6666666667% } .col-sm-push-12 { left: 100% } .col-sm-offset-0 { margin-left: 0 } .col-sm-offset-1 { margin-left: 8.3333333333% } .col-sm-offset-2 { margin-left: 16.6666666667% } .col-sm-offset-3 { margin-left: 25% } .col-sm-offset-4 { margin-left: 33.3333333333% } .col-sm-offset-5 { margin-left: 41.6666666667% } .col-sm-offset-6 { margin-left: 50% } .col-sm-offset-7 { margin-left: 58.3333333333% } .col-sm-offset-8 { margin-left: 66.6666666667% } .col-sm-offset-9 { margin-left: 75% } .col-sm-offset-10 { margin-left: 83.3333333333% } .col-sm-offset-11 { margin-left: 91.6666666667% } .col-sm-offset-12 { margin-left: 100% } } @media(min-width:992px) { .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left } .col-md-1 { width: 8.3333333333% } .col-md-2 { width: 16.6666666667% } .col-md-3 { width: 25% } .col-md-4 { width: 33.3333333333% } .col-md-5 { width: 41.6666666667% } .col-md-6 { width: 50% } .col-md-7 { width: 58.3333333333% } .col-md-8 { width: 66.6666666667% } .col-md-9 { width: 75% } .col-md-10 { width: 83.3333333333% } .col-md-11 { width: 91.6666666667% } .col-md-12 { width: 100% } .col-md-pull-0 { right: auto } .col-md-pull-1 { right: 8.3333333333% } .col-md-pull-2 { right: 16.6666666667% } .col-md-pull-3 { right: 25% } .col-md-pull-4 { right: 33.3333333333% } .col-md-pull-5 { right: 41.6666666667% } .col-md-pull-6 { right: 50% } .col-md-pull-7 { right: 58.3333333333% } .col-md-pull-8 { right: 66.6666666667% } .col-md-pull-9 { right: 75% } .col-md-pull-10 { right: 83.3333333333% } .col-md-pull-11 { right: 91.6666666667% } .col-md-pull-12 { right: 100% } .col-md-push-0 { left: auto } .col-md-push-1 { left: 8.3333333333% } .col-md-push-2 { left: 16.6666666667% } .col-md-push-3 { left: 25% } .col-md-push-4 { left: 33.3333333333% } .col-md-push-5 { left: 41.6666666667% } .col-md-push-6 { left: 50% } .col-md-push-7 { left: 58.3333333333% } .col-md-push-8 { left: 66.6666666667% } .col-md-push-9 { left: 75% } .col-md-push-10 { left: 83.3333333333% } .col-md-push-11 { left: 91.6666666667% } .col-md-push-12 { left: 100% } .col-md-offset-0 { margin-left: 0 } .col-md-offset-1 { margin-left: 8.3333333333% } .col-md-offset-2 { margin-left: 16.6666666667% } .col-md-offset-3 { margin-left: 25% } .col-md-offset-4 { margin-left: 33.3333333333% } .col-md-offset-5 { margin-left: 41.6666666667% } .col-md-offset-6 { margin-left: 50% } .col-md-offset-7 { margin-left: 58.3333333333% } .col-md-offset-8 { margin-left: 66.6666666667% } .col-md-offset-9 { margin-left: 75% } .col-md-offset-10 { margin-left: 83.3333333333% } .col-md-offset-11 { margin-left: 91.6666666667% } .col-md-offset-12 { margin-left: 100% } } @media(min-width:1200px) { .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { float: left } .col-lg-1 { width: 8.3333333333% } .col-lg-2 { width: 16.6666666667% } .col-lg-3 { width: 25% } .col-lg-4 { width: 33.3333333333% } .col-lg-5 { width: 41.6666666667% } .col-lg-6 { width: 50% } .col-lg-7 { width: 58.3333333333% } .col-lg-8 { width: 66.6666666667% } .col-lg-9 { width: 75% } .col-lg-10 { width: 83.3333333333% } .col-lg-11 { width: 91.6666666667% } .col-lg-12 { width: 100% } .col-lg-pull-0 { right: auto } .col-lg-pull-1 { right: 8.3333333333% } .col-lg-pull-2 { right: 16.6666666667% } .col-lg-pull-3 { right: 25% } .col-lg-pull-4 { right: 33.3333333333% } .col-lg-pull-5 { right: 41.6666666667% } .col-lg-pull-6 { right: 50% } .col-lg-pull-7 { right: 58.3333333333% } .col-lg-pull-8 { right: 66.6666666667% } .col-lg-pull-9 { right: 75% } .col-lg-pull-10 { right: 83.3333333333% } .col-lg-pull-11 { right: 91.6666666667% } .col-lg-pull-12 { right: 100% } .col-lg-push-0 { left: auto } .col-lg-push-1 { left: 8.3333333333% } .col-lg-push-2 { left: 16.6666666667% } .col-lg-push-3 { left: 25% } .col-lg-push-4 { left: 33.3333333333% } .col-lg-push-5 { left: 41.6666666667% } .col-lg-push-6 { left: 50% } .col-lg-push-7 { left: 58.3333333333% } .col-lg-push-8 { left: 66.6666666667% } .col-lg-push-9 { left: 75% } .col-lg-push-10 { left: 83.3333333333% } .col-lg-push-11 { left: 91.6666666667% } .col-lg-push-12 { left: 100% } .col-lg-offset-0 { margin-left: 0 } .col-lg-offset-1 { margin-left: 8.3333333333% } .col-lg-offset-2 { margin-left: 16.6666666667% } .col-lg-offset-3 { margin-left: 25% } .col-lg-offset-4 { margin-left: 33.3333333333% } .col-lg-offset-5 { margin-left: 41.6666666667% } .col-lg-offset-6 { margin-left: 50% } .col-lg-offset-7 { margin-left: 58.3333333333% } .col-lg-offset-8 { margin-left: 66.6666666667% } .col-lg-offset-9 { margin-left: 75% } .col-lg-offset-10 { margin-left: 83.3333333333% } .col-lg-offset-11 { margin-left: 91.6666666667% } .col-lg-offset-12 { margin-left: 100% } } table { background-color: initial } table col[class*=col-] { position: static; display: table-column; float: none } table td[class*=col-], table th[class*=col-] { position: static; display: table-cell; float: none } caption { padding-top: 8px; padding-bottom: 8px; color: #777 } caption, th { text-align: left } .table { width: 100%; max-width: 100%; margin-bottom: 20px } .table>tbody>tr>td, .table>tbody>tr>th, .table>tfoot>tr>td, .table>tfoot>tr>th, .table>thead>tr>td, .table>thead>tr>th { padding: 8px; line-height: 1.428571429; vertical-align: top; border-top: 1px solid #ddd } .table>thead>tr>th { vertical-align: bottom; border-bottom: 2px solid #ddd } .table>caption+thead>tr:first-child>td, .table>caption+thead>tr:first-child>th, .table>colgroup+thead>tr:first-child>td, .table>colgroup+thead>tr:first-child>th, .table>thead:first-child>tr:first-child>td, .table>thead:first-child>tr:first-child>th { border-top: 0 } .table>tbody+tbody { border-top: 2px solid #ddd } .table .table { background-color: #fff } .table-condensed>tbody>tr>td, .table-condensed>tbody>tr>th, .table-condensed>tfoot>tr>td, .table-condensed>tfoot>tr>th, .table-condensed>thead>tr>td, .table-condensed>thead>tr>th { padding: 5px } .table-bordered, .table-bordered>tbody>tr>td, .table-bordered>tbody>tr>th, .table-bordered>tfoot>tr>td, .table-bordered>tfoot>tr>th, .table-bordered>thead>tr>td, .table-bordered>thead>tr>th { border: 1px solid #ddd } .table-bordered>thead>tr>td, .table-bordered>thead>tr>th { border-bottom-width: 2px } .table-striped>tbody>tr:nth-of-type(odd) { background-color: #f9f9f9 } .table-hover>tbody>tr:hover, .table>tbody>tr.active>td, .table>tbody>tr.active>th, .table>tbody>tr>td.active, .table>tbody>tr>th.active, .table>tfoot>tr.active>td, .table>tfoot>tr.active>th, .table>tfoot>tr>td.active, .table>tfoot>tr>th.active, .table>thead>tr.active>td, .table>thead>tr.active>th, .table>thead>tr>td.active, .table>thead>tr>th.active { background-color: #f5f5f5 } .table-hover>tbody>tr.active:hover>td, .table-hover>tbody>tr.active:hover>th, .table-hover>tbody>tr:hover>.active, .table-hover>tbody>tr>td.active:hover, .table-hover>tbody>tr>th.active:hover { background-color: #e8e8e8 } .table>tbody>tr.success>td, .table>tbody>tr.success>th, .table>tbody>tr>td.success, .table>tbody>tr>th.success, .table>tfoot>tr.success>td, .table>tfoot>tr.success>th, .table>tfoot>tr>td.success, .table>tfoot>tr>th.success, .table>thead>tr.success>td, .table>thead>tr.success>th, .table>thead>tr>td.success, .table>thead>tr>th.success { background-color: #dff0d8 } .table-hover>tbody>tr.success:hover>td, .table-hover>tbody>tr.success:hover>th, .table-hover>tbody>tr:hover>.success, .table-hover>tbody>tr>td.success:hover, .table-hover>tbody>tr>th.success:hover { background-color: #d0e9c6 } .table>tbody>tr.info>td, .table>tbody>tr.info>th, .table>tbody>tr>td.info, .table>tbody>tr>th.info, .table>tfoot>tr.info>td, .table>tfoot>tr.info>th, .table>tfoot>tr>td.info, .table>tfoot>tr>th.info, .table>thead>tr.info>td, .table>thead>tr.info>th, .table>thead>tr>td.info, .table>thead>tr>th.info { background-color: #d9edf7 } .table-hover>tbody>tr.info:hover>td, .table-hover>tbody>tr.info:hover>th, .table-hover>tbody>tr:hover>.info, .table-hover>tbody>tr>td.info:hover, .table-hover>tbody>tr>th.info:hover { background-color: #c4e3f3 } .table>tbody>tr.warning>td, .table>tbody>tr.warning>th, .table>tbody>tr>td.warning, .table>tbody>tr>th.warning, .table>tfoot>tr.warning>td, .table>tfoot>tr.warning>th, .table>tfoot>tr>td.warning, .table>tfoot>tr>th.warning, .table>thead>tr.warning>td, .table>thead>tr.warning>th, .table>thead>tr>td.warning, .table>thead>tr>th.warning { background-color: #fcf8e3 } .table-hover>tbody>tr.warning:hover>td, .table-hover>tbody>tr.warning:hover>th, .table-hover>tbody>tr:hover>.warning, .table-hover>tbody>tr>td.warning:hover, .table-hover>tbody>tr>th.warning:hover { background-color: #faf2cc } .table>tbody>tr.danger>td, .table>tbody>tr.danger>th, .table>tbody>tr>td.danger, .table>tbody>tr>th.danger, .table>tfoot>tr.danger>td, .table>tfoot>tr.danger>th, .table>tfoot>tr>td.danger, .table>tfoot>tr>th.danger, .table>thead>tr.danger>td, .table>thead>tr.danger>th, .table>thead>tr>td.danger, .table>thead>tr>th.danger { background-color: #f2dede } .table-hover>tbody>tr.danger:hover>td, .table-hover>tbody>tr.danger:hover>th, .table-hover>tbody>tr:hover>.danger, .table-hover>tbody>tr>td.danger:hover, .table-hover>tbody>tr>th.danger:hover { background-color: #ebcccc } .table-responsive { min-height: .01%; overflow-x: auto } @media screen and (max-width:767px) { .table-responsive { width: 100%; margin-bottom: 15px; overflow-y: hidden; -ms-overflow-style: -ms-autohiding-scrollbar; border: 1px solid #ddd } .table-responsive>.table { margin-bottom: 0 } .table-responsive>.table>tbody>tr>td, .table-responsive>.table>tbody>tr>th, .table-responsive>.table>tfoot>tr>td, .table-responsive>.table>tfoot>tr>th, .table-responsive>.table>thead>tr>td, .table-responsive>.table>thead>tr>th { white-space: nowrap } .table-responsive>.table-bordered { border: 0 } .table-responsive>.table-bordered>tbody>tr>td:first-child, .table-responsive>.table-bordered>tbody>tr>th:first-child, .table-responsive>.table-bordered>tfoot>tr>td:first-child, .table-responsive>.table-bordered>tfoot>tr>th:first-child, .table-responsive>.table-bordered>thead>tr>td:first-child, .table-responsive>.table-bordered>thead>tr>th:first-child { border-left: 0 } .table-responsive>.table-bordered>tbody>tr>td:last-child, .table-responsive>.table-bordered>tbody>tr>th:last-child, .table-responsive>.table-bordered>tfoot>tr>td:last-child, .table-responsive>.table-bordered>tfoot>tr>th:last-child, .table-responsive>.table-bordered>thead>tr>td:last-child, .table-responsive>.table-bordered>thead>tr>th:last-child { border-right: 0 } .table-responsive>.table-bordered>tbody>tr:last-child>td, .table-responsive>.table-bordered>tbody>tr:last-child>th, .table-responsive>.table-bordered>tfoot>tr:last-child>td, .table-responsive>.table-bordered>tfoot>tr:last-child>th { border-bottom: 0 } } fieldset { min-width: 0; padding: 0; margin: 0; border: 0 } legend { display: block; width: 100%; margin-bottom: 20px; font-size: 21px; line-height: inherit; color: #333; border: 0; border-bottom: 1px solid #e5e5e5 } label { display: inline-block; max-width: 100%; margin-bottom: 5px; font-weight: 700 } input[type=search] { box-sizing: border-box; -webkit-appearance: none; -moz-appearance: none; appearance: none } input[type=checkbox], input[type=radio] { margin: 4px 0 0; margin-top: 1px\9; line-height: normal } fieldset[disabled] input[type=checkbox], fieldset[disabled] input[type=radio], input[type=checkbox].disabled, input[type=checkbox][disabled], input[type=radio].disabled, input[type=radio][disabled] { cursor: not-allowed } input[type=file] { display: block } input[type=range] { display: block; width: 100% } select[multiple], select[size] { height: auto } input[type=checkbox]:focus, input[type=file]:focus, input[type=radio]:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px } output { padding-top: 7px } .form-control, output { display: block; font-size: 14px; line-height: 1.428571429; color: #555 } .form-control { width: 100%; height: 34px; padding: 6px 12px; background-color: #fff; background-image: none; border: 1px solid #ccc; border-radius: 4px; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out } .form-control:focus { border-color: #66afe9; outline: 0; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6) } .form-control::-moz-placeholder { color: #999; opacity: 1 } .form-control:-ms-input-placeholder { color: #999 } .form-control::-webkit-input-placeholder { color: #999 } .form-control::-ms-expand { background-color: initial; border: 0 } .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control { background-color: #eee; opacity: 1 } .form-control[disabled], fieldset[disabled] .form-control { cursor: not-allowed } textarea.form-control { height: auto } @media screen and (-webkit-min-device-pixel-ratio:0) { input[type=date].form-control, input[type=datetime-local].form-control, input[type=month].form-control, input[type=time].form-control { line-height: 34px } .input-group-sm>.input-group-btn>input[type=date].btn, .input-group-sm>.input-group-btn>input[type=datetime-local].btn, .input-group-sm>.input-group-btn>input[type=month].btn, .input-group-sm>.input-group-btn>input[type=time].btn, .input-group-sm input[type=date], .input-group-sm input[type=datetime-local], .input-group-sm input[type=month], .input-group-sm input[type=time], input[type=date].input-sm, input[type=datetime-local].input-sm, input[type=month].input-sm, input[type=time].input-sm { line-height: 30px } .input-group-lg>.input-group-btn>input[type=date].btn, .input-group-lg>.input-group-btn>input[type=datetime-local].btn, .input-group-lg>.input-group-btn>input[type=month].btn, .input-group-lg>.input-group-btn>input[type=time].btn, .input-group-lg input[type=date], .input-group-lg input[type=datetime-local], .input-group-lg input[type=month], .input-group-lg input[type=time], input[type=date].input-lg, input[type=datetime-local].input-lg, input[type=month].input-lg, input[type=time].input-lg { line-height: 46px } } .form-group { margin-bottom: 15px } .checkbox, .radio { position: relative; display: block; margin-top: 10px; margin-bottom: 10px } .checkbox.disabled label, .radio.disabled label, fieldset[disabled] .checkbox label, fieldset[disabled] .radio label { cursor: not-allowed } .checkbox label, .radio label { min-height: 20px; padding-left: 20px; margin-bottom: 0; font-weight: 400; cursor: pointer } .checkbox-inline input[type=checkbox], .checkbox input[type=checkbox], .radio-inline input[type=radio], .radio input[type=radio] { position: absolute; margin-top: 4px\9; margin-left: -20px } .checkbox+.checkbox, .radio+.radio { margin-top: -5px } .checkbox-inline, .radio-inline { position: relative; display: inline-block; padding-left: 20px; margin-bottom: 0; font-weight: 400; vertical-align: middle; cursor: pointer } .checkbox-inline.disabled, .radio-inline.disabled, fieldset[disabled] .checkbox-inline, fieldset[disabled] .radio-inline { cursor: not-allowed } .checkbox-inline+.checkbox-inline, .radio-inline+.radio-inline { margin-top: 0; margin-left: 10px } .form-control-static { min-height: 34px; padding-top: 7px; padding-bottom: 7px; margin-bottom: 0 } .form-control-static.input-lg, .form-control-static.input-sm, .input-group-lg>.form-control-static.form-control, .input-group-lg>.form-control-static.input-group-addon, .input-group-lg>.input-group-btn>.form-control-static.btn, .input-group-sm>.form-control-static.form-control, .input-group-sm>.form-control-static.input-group-addon, .input-group-sm>.input-group-btn>.form-control-static.btn { padding-right: 0; padding-left: 0 } .input-group-sm>.form-control, .input-group-sm>.input-group-addon, .input-group-sm>.input-group-btn>.btn, .input-sm { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px } .input-group-sm>.input-group-btn>select.btn, .input-group-sm>select.form-control, .input-group-sm>select.input-group-addon, select.input-sm { height: 30px; line-height: 30px } .input-group-sm>.input-group-btn>select[multiple].btn, .input-group-sm>.input-group-btn>textarea.btn, .input-group-sm>select[multiple].form-control, .input-group-sm>select[multiple].input-group-addon, .input-group-sm>textarea.form-control, .input-group-sm>textarea.input-group-addon, select[multiple].input-sm, textarea.input-sm { height: auto } .form-group-sm .form-control { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px } .form-group-sm select.form-control { height: 30px; line-height: 30px } .form-group-sm select[multiple].form-control, .form-group-sm textarea.form-control { height: auto } .form-group-sm .form-control-static { height: 30px; min-height: 32px; padding: 6px 10px; font-size: 12px; line-height: 1.5 } .input-group-lg>.form-control, .input-group-lg>.input-group-addon, .input-group-lg>.input-group-btn>.btn, .input-lg { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px } .input-group-lg>.input-group-btn>select.btn, .input-group-lg>select.form-control, .input-group-lg>select.input-group-addon, select.input-lg { height: 46px; line-height: 46px } .input-group-lg>.input-group-btn>select[multiple].btn, .input-group-lg>.input-group-btn>textarea.btn, .input-group-lg>select[multiple].form-control, .input-group-lg>select[multiple].input-group-addon, .input-group-lg>textarea.form-control, .input-group-lg>textarea.input-group-addon, select[multiple].input-lg, textarea.input-lg { height: auto } .form-group-lg .form-control { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px } .form-group-lg select.form-control { height: 46px; line-height: 46px } .form-group-lg select[multiple].form-control, .form-group-lg textarea.form-control { height: auto } .form-group-lg .form-control-static { height: 46px; min-height: 38px; padding: 11px 16px; font-size: 18px; line-height: 1.3333333 } .has-feedback { position: relative } .has-feedback .form-control { padding-right: 42.5px } .form-control-feedback { position: absolute; top: 0; right: 0; z-index: 2; display: block; width: 34px; height: 34px; line-height: 34px; text-align: center; pointer-events: none } .form-group-lg .form-control+.form-control-feedback, .input-group-lg+.form-control-feedback, .input-group-lg>.form-control+.form-control-feedback, .input-group-lg>.input-group-addon+.form-control-feedback, .input-group-lg>.input-group-btn>.btn+.form-control-feedback, .input-lg+.form-control-feedback { width: 46px; height: 46px; line-height: 46px } .form-group-sm .form-control+.form-control-feedback, .input-group-sm+.form-control-feedback, .input-group-sm>.form-control+.form-control-feedback, .input-group-sm>.input-group-addon+.form-control-feedback, .input-group-sm>.input-group-btn>.btn+.form-control-feedback, .input-sm+.form-control-feedback { width: 30px; height: 30px; line-height: 30px } .has-success .checkbox, .has-success .checkbox-inline, .has-success.checkbox-inline label, .has-success.checkbox label, .has-success .control-label, .has-success .help-block, .has-success .radio, .has-success .radio-inline, .has-success.radio-inline label, .has-success.radio label { color: #3c763d } .has-success .form-control { border-color: #3c763d; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) } .has-success .form-control:focus { border-color: #2b542c; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168 } .has-success .input-group-addon { color: #3c763d; background-color: #dff0d8; border-color: #3c763d } .has-success .form-control-feedback { color: #3c763d } .has-warning .checkbox, .has-warning .checkbox-inline, .has-warning.checkbox-inline label, .has-warning.checkbox label, .has-warning .control-label, .has-warning .help-block, .has-warning .radio, .has-warning .radio-inline, .has-warning.radio-inline label, .has-warning.radio label { color: #8a6d3b } .has-warning .form-control { border-color: #8a6d3b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) } .has-warning .form-control:focus { border-color: #66512c; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b } .has-warning .input-group-addon { color: #8a6d3b; background-color: #fcf8e3; border-color: #8a6d3b } .has-warning .form-control-feedback { color: #8a6d3b } .has-error .checkbox, .has-error .checkbox-inline, .has-error.checkbox-inline label, .has-error.checkbox label, .has-error .control-label, .has-error .help-block, .has-error .radio, .has-error .radio-inline, .has-error.radio-inline label, .has-error.radio label { color: #a94442 } .has-error .form-control { border-color: #a94442; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075) } .has-error .form-control:focus { border-color: #843534; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483 } .has-error .input-group-addon { color: #a94442; background-color: #f2dede; border-color: #a94442 } .has-error .form-control-feedback { color: #a94442 } .has-feedback label~.form-control-feedback { top: 25px } .has-feedback label.sr-only~.form-control-feedback { top: 0 } .help-block { display: block; margin-top: 5px; margin-bottom: 10px; color: #737373 } @media(min-width:768px) { .form-inline .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle } .form-inline .form-control { display: inline-block; width: auto; vertical-align: middle } .form-inline .form-control-static { display: inline-block } .form-inline .input-group { display: inline-table; vertical-align: middle } .form-inline .input-group .form-control, .form-inline .input-group .input-group-addon, .form-inline .input-group .input-group-btn { width: auto } .form-inline .input-group>.form-control { width: 100% } .form-inline .control-label { margin-bottom: 0; vertical-align: middle } .form-inline .checkbox, .form-inline .radio { display: inline-block; margin-top: 0; margin-bottom: 0; vertical-align: middle } .form-inline .checkbox label, .form-inline .radio label { padding-left: 0 } .form-inline .checkbox input[type=checkbox], .form-inline .radio input[type=radio] { position: relative; margin-left: 0 } .form-inline .has-feedback .form-control-feedback { top: 0 } } .form-horizontal .checkbox, .form-horizontal .checkbox-inline, .form-horizontal .radio, .form-horizontal .radio-inline { padding-top: 7px; margin-top: 0; margin-bottom: 0 } .form-horizontal .checkbox, .form-horizontal .radio { min-height: 27px } .form-horizontal .form-group { margin-right: -15px; margin-left: -15px } .form-horizontal .form-group:after, .form-horizontal .form-group:before { display: table; content: " " } .form-horizontal .form-group:after { clear: both } @media(min-width:768px) { .form-horizontal .control-label { padding-top: 7px; margin-bottom: 0; text-align: right } } .form-horizontal .has-feedback .form-control-feedback { right: 15px } @media(min-width:768px) { .form-horizontal .form-group-lg .control-label { padding-top: 11px; font-size: 18px } } @media(min-width:768px) { .form-horizontal .form-group-sm .control-label { padding-top: 6px; font-size: 12px } } .btn { display: inline-block; margin-bottom: 0; font-weight: 400; text-align: center; white-space: nowrap; vertical-align: middle; touch-action: manipulation; cursor: pointer; background-image: none; border: 1px solid transparent; padding: 6px 12px; font-size: 14px; line-height: 1.428571429; border-radius: 4px; -webkit-user-select: none; user-select: none } .btn.active.focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn:active:focus, .btn:focus { outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px } .btn.focus, .btn:focus, .btn:hover { color: #333; text-decoration: none } .btn.active, .btn:active { background-image: none; outline: 0; box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125) } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { cursor: not-allowed; filter: alpha(opacity=65); opacity: .65; box-shadow: none } a.btn.disabled, fieldset[disabled] a.btn { pointer-events: none } .btn-default { color: #333; background-color: #fff; border-color: #ccc } .btn-default.focus, .btn-default:focus { color: #333; background-color: #e6e6e6; border-color: #8c8c8c } .btn-default:hover { color: #333; background-color: #e6e6e6; border-color: #adadad } .btn-default.active, .btn-default:active, .open>.btn-default.dropdown-toggle { color: #333; background-color: #e6e6e6; background-image: none; border-color: #adadad } .btn-default.active.focus, .btn-default.active:focus, .btn-default.active:hover, .btn-default:active.focus, .btn-default:active:focus, .btn-default:active:hover, .open>.btn-default.dropdown-toggle.focus, .open>.btn-default.dropdown-toggle:focus, .open>.btn-default.dropdown-toggle:hover { color: #333; background-color: #d4d4d4; border-color: #8c8c8c } .btn-default.disabled.focus, .btn-default.disabled:focus, .btn-default.disabled:hover, .btn-default[disabled].focus, .btn-default[disabled]:focus, .btn-default[disabled]:hover, fieldset[disabled] .btn-default.focus, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:hover { background-color: #fff; border-color: #ccc } .btn-default .badge { color: #fff; background-color: #333 } .btn-primary { color: #fff; background-color: #337ab7; border-color: #2e6da4 } .btn-primary.focus, .btn-primary:focus { color: #fff; background-color: #286090; border-color: #122b40 } .btn-primary:hover { color: #fff; background-color: #286090; border-color: #204d74 } .btn-primary.active, .btn-primary:active, .open>.btn-primary.dropdown-toggle { color: #fff; background-color: #286090; background-image: none; border-color: #204d74 } .btn-primary.active.focus, .btn-primary.active:focus, .btn-primary.active:hover, .btn-primary:active.focus, .btn-primary:active:focus, .btn-primary:active:hover, .open>.btn-primary.dropdown-toggle.focus, .open>.btn-primary.dropdown-toggle:focus, .open>.btn-primary.dropdown-toggle:hover { color: #fff; background-color: #204d74; border-color: #122b40 } .btn-primary.disabled.focus, .btn-primary.disabled:focus, .btn-primary.disabled:hover, .btn-primary[disabled].focus, .btn-primary[disabled]:focus, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary.focus, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:hover { background-color: #337ab7; border-color: #2e6da4 } .btn-primary .badge { color: #337ab7; background-color: #fff } .btn-success { color: #fff; background-color: #5cb85c; border-color: #4cae4c } .btn-success.focus, .btn-success:focus { color: #fff; background-color: #449d44; border-color: #255625 } .btn-success:hover { color: #fff; background-color: #449d44; border-color: #398439 } .btn-success.active, .btn-success:active, .open>.btn-success.dropdown-toggle { color: #fff; background-color: #449d44; background-image: none; border-color: #398439 } .btn-success.active.focus, .btn-success.active:focus, .btn-success.active:hover, .btn-success:active.focus, .btn-success:active:focus, .btn-success:active:hover, .open>.btn-success.dropdown-toggle.focus, .open>.btn-success.dropdown-toggle:focus, .open>.btn-success.dropdown-toggle:hover { color: #fff; background-color: #398439; border-color: #255625 } .btn-success.disabled.focus, .btn-success.disabled:focus, .btn-success.disabled:hover, .btn-success[disabled].focus, .btn-success[disabled]:focus, .btn-success[disabled]:hover, fieldset[disabled] .btn-success.focus, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:hover { background-color: #5cb85c; border-color: #4cae4c } .btn-success .badge { color: #5cb85c; background-color: #fff } .btn-info { color: #fff; background-color: #5bc0de; border-color: #46b8da } .btn-info.focus, .btn-info:focus { color: #fff; background-color: #31b0d5; border-color: #1b6d85 } .btn-info:hover { color: #fff; background-color: #31b0d5; border-color: #269abc } .btn-info.active, .btn-info:active, .open>.btn-info.dropdown-toggle { color: #fff; background-color: #31b0d5; background-image: none; border-color: #269abc } .btn-info.active.focus, .btn-info.active:focus, .btn-info.active:hover, .btn-info:active.focus, .btn-info:active:focus, .btn-info:active:hover, .open>.btn-info.dropdown-toggle.focus, .open>.btn-info.dropdown-toggle:focus, .open>.btn-info.dropdown-toggle:hover { color: #fff; background-color: #269abc; border-color: #1b6d85 } .btn-info.disabled.focus, .btn-info.disabled:focus, .btn-info.disabled:hover, .btn-info[disabled].focus, .btn-info[disabled]:focus, .btn-info[disabled]:hover, fieldset[disabled] .btn-info.focus, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:hover { background-color: #5bc0de; border-color: #46b8da } .btn-info .badge { color: #5bc0de; background-color: #fff } .btn-warning { color: #fff; background-color: #f0ad4e; border-color: #eea236 } .btn-warning.focus, .btn-warning:focus { color: #fff; background-color: #ec971f; border-color: #985f0d } .btn-warning:hover { color: #fff; background-color: #ec971f; border-color: #d58512 } .btn-warning.active, .btn-warning:active, .open>.btn-warning.dropdown-toggle { color: #fff; background-color: #ec971f; background-image: none; border-color: #d58512 } .btn-warning.active.focus, .btn-warning.active:focus, .btn-warning.active:hover, .btn-warning:active.focus, .btn-warning:active:focus, .btn-warning:active:hover, .open>.btn-warning.dropdown-toggle.focus, .open>.btn-warning.dropdown-toggle:focus, .open>.btn-warning.dropdown-toggle:hover { color: #fff; background-color: #d58512; border-color: #985f0d } .btn-warning.disabled.focus, .btn-warning.disabled:focus, .btn-warning.disabled:hover, .btn-warning[disabled].focus, .btn-warning[disabled]:focus, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning.focus, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:hover { background-color: #f0ad4e; border-color: #eea236 } .btn-warning .badge { color: #f0ad4e; background-color: #fff } .btn-danger { color: #fff; background-color: #d9534f; border-color: #d43f3a } .btn-danger.focus, .btn-danger:focus { color: #fff; background-color: #c9302c; border-color: #761c19 } .btn-danger:hover { color: #fff; background-color: #c9302c; border-color: #ac2925 } .btn-danger.active, .btn-danger:active, .open>.btn-danger.dropdown-toggle { color: #fff; background-color: #c9302c; background-image: none; border-color: #ac2925 } .btn-danger.active.focus, .btn-danger.active:focus, .btn-danger.active:hover, .btn-danger:active.focus, .btn-danger:active:focus, .btn-danger:active:hover, .open>.btn-danger.dropdown-toggle.focus, .open>.btn-danger.dropdown-toggle:focus, .open>.btn-danger.dropdown-toggle:hover { color: #fff; background-color: #ac2925; border-color: #761c19 } .btn-danger.disabled.focus, .btn-danger.disabled:focus, .btn-danger.disabled:hover, .btn-danger[disabled].focus, .btn-danger[disabled]:focus, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger.focus, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:hover { background-color: #d9534f; border-color: #d43f3a } .btn-danger .badge { color: #d9534f; background-color: #fff } .btn-link { font-weight: 400; color: #337ab7; border-radius: 0 } .btn-link, .btn-link.active, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: initial; box-shadow: none } .btn-link, .btn-link:active, .btn-link:focus, .btn-link:hover { border-color: transparent } .btn-link:focus, .btn-link:hover { color: #23527c; text-decoration: underline; background-color: initial } .btn-link[disabled]:focus, .btn-link[disabled]:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:hover { color: #777; text-decoration: none } .btn-group-lg>.btn, .btn-lg { padding: 10px 16px; font-size: 18px; line-height: 1.3333333; border-radius: 6px } .btn-group-sm>.btn, .btn-sm { padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px } .btn-group-xs>.btn, .btn-xs { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 3px } .btn-block { display: block; width: 100% } .btn-block+.btn-block { margin-top: 5px } input[type=button].btn-block, input[type=reset].btn-block, input[type=submit].btn-block { width: 100% } .fade { opacity: 0; transition: opacity .15s linear } .fade.in { opacity: 1 } .collapse { display: none } .collapse.in { display: block } tr.collapse.in { display: table-row } tbody.collapse.in { display: table-row-group } .collapsing { position: relative; height: 0; overflow: hidden; transition-property: height, visibility; transition-duration: .35s; transition-timing-function: ease } .caret { display: inline-block; width: 0; height: 0; margin-left: 2px; vertical-align: middle; border-top: 4px dashed; border-top: 4px solid\9; border-right: 4px solid transparent; border-left: 4px solid transparent } .dropdown, .dropup { position: relative } .dropdown-toggle:focus { outline: 0 } .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; font-size: 14px; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, .15); border-radius: 4px; box-shadow: 0 6px 12px rgba(0, 0, 0, .175) } .dropdown-menu.pull-right { right: 0; left: auto } .dropdown-menu .divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5 } .dropdown-menu>li>a { display: block; padding: 3px 20px; clear: both; font-weight: 400; line-height: 1.428571429; color: #333; white-space: nowrap } .dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover { color: #262626; text-decoration: none; background-color: #f5f5f5 } .dropdown-menu>.active>a, .dropdown-menu>.active>a:focus, .dropdown-menu>.active>a:hover { color: #fff; text-decoration: none; background-color: #337ab7; outline: 0 } .dropdown-menu>.disabled>a, .dropdown-menu>.disabled>a:focus, .dropdown-menu>.disabled>a:hover { color: #777 } .dropdown-menu>.disabled>a:focus, .dropdown-menu>.disabled>a:hover { text-decoration: none; cursor: not-allowed; background-color: initial; background-image: none; filter: progid:DXImageTransform.Microsoft.gradient(enabled=false) } .open>.dropdown-menu { display: block } .open>a { outline: 0 } .dropdown-menu-right { right: 0; left: auto } .dropdown-menu-left { right: auto; left: 0 } .dropdown-header { display: block; padding: 3px 20px; font-size: 12px; line-height: 1.428571429; color: #777; white-space: nowrap } .dropdown-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 990 } .pull-right>.dropdown-menu { right: 0; left: auto } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { content: ""; border-top: 0; border-bottom: 4px dashed; border-bottom: 4px solid\9 } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 2px } @media(min-width:768px) { .navbar-right .dropdown-menu { right: 0; left: auto } .navbar-right .dropdown-menu-left { left: 0; right: auto } } .btn-group, .btn-group-vertical { position: relative; display: inline-block; vertical-align: middle } .btn-group-vertical>.btn, .btn-group>.btn { position: relative; float: left } .btn-group-vertical>.btn.active, .btn-group-vertical>.btn:active, .btn-group-vertical>.btn:focus, .btn-group-vertical>.btn:hover, .btn-group>.btn.active, .btn-group>.btn:active, .btn-group>.btn:focus, .btn-group>.btn:hover { z-index: 2 } .btn-group .btn+.btn, .btn-group .btn+.btn-group, .btn-group .btn-group+.btn, .btn-group .btn-group+.btn-group { margin-left: -1px } .btn-toolbar { margin-left: -5px } .btn-toolbar:after, .btn-toolbar:before { display: table; content: " " } .btn-toolbar:after { clear: both } .btn-toolbar .btn, .btn-toolbar .btn-group, .btn-toolbar .input-group { float: left } .btn-toolbar>.btn, .btn-toolbar>.btn-group, .btn-toolbar>.input-group { margin-left: 5px } .btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { border-radius: 0 } .btn-group>.btn:first-child { margin-left: 0 } .btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle) { border-top-right-radius: 0; border-bottom-right-radius: 0 } .btn-group>.btn:last-child:not(:first-child), .btn-group>.dropdown-toggle:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0 } .btn-group>.btn-group { float: left } .btn-group>.btn-group:not(:first-child):not(:last-child)>.btn { border-radius: 0 } .btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child, .btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle { border-top-right-radius: 0; border-bottom-right-radius: 0 } .btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child { border-top-left-radius: 0; border-bottom-left-radius: 0 } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0 } .btn-group>.btn+.dropdown-toggle { padding-right: 8px; padding-left: 8px } .btn-group-lg.btn-group>.btn+.dropdown-toggle, .btn-group>.btn-lg+.dropdown-toggle { padding-right: 12px; padding-left: 12px } .btn-group.open .dropdown-toggle { box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125) } .btn-group.open .dropdown-toggle.btn-link { box-shadow: none } .btn .caret { margin-left: 0 } .btn-group-lg>.btn .caret, .btn-lg .caret { border-width: 5px 5px 0 } .dropup .btn-group-lg>.btn .caret, .dropup .btn-lg .caret { border-width: 0 5px 5px } .btn-group-vertical>.btn, .btn-group-vertical>.btn-group, .btn-group-vertical>.btn-group>.btn { display: block; float: none; width: 100%; max-width: 100% } .btn-group-vertical>.btn-group:after, .btn-group-vertical>.btn-group:before { display: table; content: " " } .btn-group-vertical>.btn-group:after { clear: both } .btn-group-vertical>.btn-group>.btn { float: none } .btn-group-vertical>.btn+.btn, .btn-group-vertical>.btn+.btn-group, .btn-group-vertical>.btn-group+.btn, .btn-group-vertical>.btn-group+.btn-group { margin-top: -1px; margin-left: 0 } .btn-group-vertical>.btn:not(:first-child):not(:last-child) { border-radius: 0 } .btn-group-vertical>.btn:first-child:not(:last-child) { border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0 } .btn-group-vertical>.btn:last-child:not(:first-child) { border-top-left-radius: 0; border-top-right-radius: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px } .btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn { border-radius: 0 } .btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child, .btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle { border-bottom-right-radius: 0; border-bottom-left-radius: 0 } .btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child { border-top-left-radius: 0; border-top-right-radius: 0 } .btn-group-justified { display: table; width: 100%; table-layout: fixed; border-collapse: initial } .btn-group-justified>.btn, .btn-group-justified>.btn-group { display: table-cell; float: none; width: 1% } .btn-group-justified>.btn-group .btn { width: 100% } .btn-group-justified>.btn-group .dropdown-menu { left: auto } [data-toggle=buttons]>.btn-group>.btn input[type=checkbox], [data-toggle=buttons]>.btn-group>.btn input[type=radio], [data-toggle=buttons]>.btn input[type=checkbox], [data-toggle=buttons]>.btn input[type=radio] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none } .input-group { position: relative; display: table; border-collapse: initial } .input-group[class*=col-] { float: none; padding-right: 0; padding-left: 0 } .input-group .form-control { position: relative; z-index: 2; float: left; width: 100%; margin-bottom: 0 } .input-group .form-control:focus { z-index: 3 } .input-group-addon, .input-group-btn, .input-group .form-control { display: table-cell } .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) { border-radius: 0 } .input-group-addon, .input-group-btn { width: 1%; white-space: nowrap; vertical-align: middle } .input-group-addon { padding: 6px 12px; font-size: 14px; font-weight: 400; line-height: 1; color: #555; text-align: center; background-color: #eee; border: 1px solid #ccc; border-radius: 4px } .input-group-addon.input-sm, .input-group-sm>.input-group-addon, .input-group-sm>.input-group-btn>.input-group-addon.btn { padding: 5px 10px; font-size: 12px; border-radius: 3px } .input-group-addon.input-lg, .input-group-lg>.input-group-addon, .input-group-lg>.input-group-btn>.input-group-addon.btn { padding: 10px 16px; font-size: 18px; border-radius: 6px } .input-group-addon input[type=checkbox], .input-group-addon input[type=radio] { margin-top: 0 } .input-group-addon:first-child, .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group>.btn, .input-group-btn:first-child>.dropdown-toggle, .input-group-btn:last-child>.btn-group:not(:last-child)>.btn, .input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle), .input-group .form-control:first-child { border-top-right-radius: 0; border-bottom-right-radius: 0 } .input-group-addon:first-child { border-right: 0 } .input-group-addon:last-child, .input-group-btn:first-child>.btn-group:not(:first-child)>.btn, .input-group-btn:first-child>.btn:not(:first-child), .input-group-btn:last-child>.btn, .input-group-btn:last-child>.btn-group>.btn, .input-group-btn:last-child>.dropdown-toggle, .input-group .form-control:last-child { border-top-left-radius: 0; border-bottom-left-radius: 0 } .input-group-addon:last-child { border-left: 0 } .input-group-btn { font-size: 0; white-space: nowrap } .input-group-btn, .input-group-btn>.btn { position: relative } .input-group-btn>.btn+.btn { margin-left: -1px } .input-group-btn>.btn:active, .input-group-btn>.btn:focus, .input-group-btn>.btn:hover { z-index: 2 } .input-group-btn:first-child>.btn, .input-group-btn:first-child>.btn-group { margin-right: -1px } .input-group-btn:last-child>.btn, .input-group-btn:last-child>.btn-group { z-index: 2; margin-left: -1px } .nav { padding-left: 0; margin-bottom: 0; list-style: none } .nav:after, .nav:before { display: table; content: " " } .nav:after { clear: both } .nav>li, .nav>li>a { position: relative; display: block } .nav>li>a { padding: 10px 15px } .nav>li>a:focus, .nav>li>a:hover { text-decoration: none; background-color: #eee } .nav>li.disabled>a { color: #777 } .nav>li.disabled>a:focus, .nav>li.disabled>a:hover { color: #777; text-decoration: none; cursor: not-allowed; background-color: initial } .nav .open>a, .nav .open>a:focus, .nav .open>a:hover { background-color: #eee; border-color: #337ab7 } .nav .nav-divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5 } .nav>li>a>img { max-width: none } .nav-tabs { border-bottom: 1px solid #ddd } .nav-tabs>li { float: left; margin-bottom: -1px } .nav-tabs>li>a { margin-right: 2px; line-height: 1.428571429; border: 1px solid transparent; border-radius: 4px 4px 0 0 } .nav-tabs>li>a:hover { border-color: #eee #eee #ddd } .nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover { color: #555; cursor: default; background-color: #fff; border: 1px solid; border-color: #ddd #ddd transparent } .nav-pills>li { float: left } .nav-pills>li>a { border-radius: 4px } .nav-pills>li+li { margin-left: 2px } .nav-pills>li.active>a, .nav-pills>li.active>a:focus, .nav-pills>li.active>a:hover { color: #fff; background-color: #337ab7 } .nav-stacked>li { float: none } .nav-stacked>li+li { margin-top: 2px; margin-left: 0 } .nav-justified, .nav-tabs.nav-justified { width: 100% } .nav-justified>li, .nav-tabs.nav-justified>li { float: none } .nav-justified>li>a, .nav-tabs.nav-justified>li>a { margin-bottom: 5px; text-align: center } .nav-justified>.dropdown .dropdown-menu { top: auto; left: auto } @media(min-width:768px) { .nav-justified>li, .nav-tabs.nav-justified>li { display: table-cell; width: 1% } .nav-justified>li>a, .nav-tabs.nav-justified>li>a { margin-bottom: 0 } } .nav-tabs-justified, .nav-tabs.nav-justified { border-bottom: 0 } .nav-tabs-justified>li>a, .nav-tabs.nav-justified>li>a { margin-right: 0; border-radius: 4px } .nav-tabs-justified>.active>a, .nav-tabs-justified>.active>a:focus, .nav-tabs-justified>.active>a:hover, .nav-tabs.nav-justified>.active>a { border: 1px solid #ddd } @media(min-width:768px) { .nav-tabs-justified>li>a, .nav-tabs.nav-justified>li>a { border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0 } .nav-tabs-justified>.active>a, .nav-tabs-justified>.active>a:focus, .nav-tabs-justified>.active>a:hover, .nav-tabs.nav-justified>.active>a { border-bottom-color: #fff } } .tab-content>.tab-pane { display: none } .tab-content>.active { display: block } .nav-tabs .dropdown-menu { margin-top: -1px; border-top-left-radius: 0; border-top-right-radius: 0 } .navbar { position: relative; min-height: 50px; margin-bottom: 20px; border: 1px solid transparent } .navbar:after, .navbar:before { display: table; content: " " } .navbar:after { clear: both } @media(min-width:768px) { .navbar { border-radius: 4px } } .navbar-header:after, .navbar-header:before { display: table; content: " " } .navbar-header:after { clear: both } @media(min-width:768px) { .navbar-header { float: left } } .navbar-collapse { padding-right: 15px; padding-left: 15px; overflow-x: visible; border-top: 1px solid transparent; box-shadow: inset 0 1px 0 hsla(0, 0%, 100%, .1); -webkit-overflow-scrolling: touch } .navbar-collapse:after, .navbar-collapse:before { display: table; content: " " } .navbar-collapse:after { clear: both } .navbar-collapse.in { overflow-y: auto } @media(min-width:768px) { .navbar-collapse { width: auto; border-top: 0; box-shadow: none } .navbar-collapse.collapse { display: block !important; height: auto !important; padding-bottom: 0; overflow: visible !important } .navbar-collapse.in { overflow-y: visible } .navbar-fixed-bottom .navbar-collapse, .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse { padding-right: 0; padding-left: 0 } } .navbar-fixed-bottom, .navbar-fixed-top { position: fixed; right: 0; left: 0; z-index: 1030 } .navbar-fixed-bottom .navbar-collapse, .navbar-fixed-top .navbar-collapse { max-height: 340px } @media(max-device-width:480px)and (orientation:landscape) { .navbar-fixed-bottom .navbar-collapse, .navbar-fixed-top .navbar-collapse { max-height: 200px } } @media(min-width:768px) { .navbar-fixed-bottom, .navbar-fixed-top { border-radius: 0 } } .navbar-fixed-top { top: 0; border-width: 0 0 1px } .navbar-fixed-bottom { bottom: 0; margin-bottom: 0; border-width: 1px 0 0 } .container-fluid>.navbar-collapse, .container-fluid>.navbar-header, .container>.navbar-collapse, .container>.navbar-header { margin-right: -15px; margin-left: -15px } @media(min-width:768px) { .container-fluid>.navbar-collapse, .container-fluid>.navbar-header, .container>.navbar-collapse, .container>.navbar-header { margin-right: 0; margin-left: 0 } } .navbar-static-top { z-index: 1000; border-width: 0 0 1px } @media(min-width:768px) { .navbar-static-top { border-radius: 0 } } .navbar-brand { float: left; height: 50px; padding: 15px; font-size: 18px; line-height: 20px } .navbar-brand:focus, .navbar-brand:hover { text-decoration: none } .navbar-brand>img { display: block } @media(min-width:768px) { .navbar>.container-fluid .navbar-brand, .navbar>.container .navbar-brand { margin-left: -15px } } .navbar-toggle { position: relative; float: right; padding: 9px 10px; margin-right: 15px; margin-top: 8px; margin-bottom: 8px; background-color: initial; background-image: none; border: 1px solid transparent; border-radius: 4px } .navbar-toggle:focus { outline: 0 } .navbar-toggle .icon-bar { display: block; width: 22px; height: 2px; border-radius: 1px } .navbar-toggle .icon-bar+.icon-bar { margin-top: 4px } @media(min-width:768px) { .navbar-toggle { display: none } } .navbar-nav { margin: 7.5px -15px } .navbar-nav>li>a { padding-top: 10px; padding-bottom: 10px; line-height: 20px } @media(max-width:767px) { .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0; background-color: initial; border: 0; box-shadow: none } .navbar-nav .open .dropdown-menu .dropdown-header, .navbar-nav .open .dropdown-menu>li>a { padding: 5px 15px 5px 25px } .navbar-nav .open .dropdown-menu>li>a { line-height: 20px } .navbar-nav .open .dropdown-menu>li>a:focus, .navbar-nav .open .dropdown-menu>li>a:hover { background-image: none } } @media(min-width:768px) { .navbar-nav { float: left; margin: 0 } .navbar-nav>li { float: left } .navbar-nav>li>a { padding-top: 15px; padding-bottom: 15px } } .navbar-form { padding: 10px 15px; border-top: 1px solid transparent; border-bottom: 1px solid transparent; box-shadow: inset 0 1px 0 hsla(0, 0%, 100%, .1), 0 1px 0 hsla(0, 0%, 100%, .1); margin: 8px -15px } @media(min-width:768px) { .navbar-form .form-group { display: inline-block; margin-bottom: 0; vertical-align: middle } .navbar-form .form-control { display: inline-block; width: auto; vertical-align: middle } .navbar-form .form-control-static { display: inline-block } .navbar-form .input-group { display: inline-table; vertical-align: middle } .navbar-form .input-group .form-control, .navbar-form .input-group .input-group-addon, .navbar-form .input-group .input-group-btn { width: auto } .navbar-form .input-group>.form-control { width: 100% } .navbar-form .control-label { margin-bottom: 0; vertical-align: middle } .navbar-form .checkbox, .navbar-form .radio { display: inline-block; margin-top: 0; margin-bottom: 0; vertical-align: middle } .navbar-form .checkbox label, .navbar-form .radio label { padding-left: 0 } .navbar-form .checkbox input[type=checkbox], .navbar-form .radio input[type=radio] { position: relative; margin-left: 0 } .navbar-form .has-feedback .form-control-feedback { top: 0 } } @media(max-width:767px) { .navbar-form .form-group { margin-bottom: 5px } .navbar-form .form-group:last-child { margin-bottom: 0 } } @media(min-width:768px) { .navbar-form { width: auto; padding-top: 0; padding-bottom: 0; margin-right: 0; margin-left: 0; border: 0; box-shadow: none } } .navbar-nav>li>.dropdown-menu { margin-top: 0; border-top-left-radius: 0; border-top-right-radius: 0 } .navbar-fixed-bottom .navbar-nav>li>.dropdown-menu { margin-bottom: 0; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0 } .navbar-btn { margin-top: 8px; margin-bottom: 8px } .btn-group-sm>.navbar-btn.btn, .navbar-btn.btn-sm { margin-top: 10px; margin-bottom: 10px } .btn-group-xs>.navbar-btn.btn, .navbar-btn.btn-xs { margin-top: 14px; margin-bottom: 14px } .navbar-text { margin-top: 15px; margin-bottom: 15px } @media(min-width:768px) { .navbar-text { float: left; margin-right: 15px; margin-left: 15px } } @media(min-width:768px) { .navbar-left { float: left !important } .navbar-right { float: right !important; margin-right: -15px } .navbar-right~.navbar-right { margin-right: 0 } } .navbar-default { background-color: #f8f8f8; border-color: #e7e7e7 } .navbar-default .navbar-brand { color: #777 } .navbar-default .navbar-brand:focus, .navbar-default .navbar-brand:hover { color: #5e5e5e; background-color: initial } .navbar-default .navbar-nav>li>a, .navbar-default .navbar-text { color: #777 } .navbar-default .navbar-nav>li>a:focus, .navbar-default .navbar-nav>li>a:hover { color: #333; background-color: initial } .navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus, .navbar-default .navbar-nav>.active>a:hover { color: #555; background-color: #e7e7e7 } .navbar-default .navbar-nav>.disabled>a, .navbar-default .navbar-nav>.disabled>a:focus, .navbar-default .navbar-nav>.disabled>a:hover { color: #ccc; background-color: initial } .navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:focus, .navbar-default .navbar-nav>.open>a:hover { color: #555; background-color: #e7e7e7 } @media(max-width:767px) { .navbar-default .navbar-nav .open .dropdown-menu>li>a { color: #777 } .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus, .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover { color: #333; background-color: initial } .navbar-default .navbar-nav .open .dropdown-menu>.active>a, .navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus, .navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover { color: #555; background-color: #e7e7e7 } .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a, .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus, .navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover { color: #ccc; background-color: initial } } .navbar-default .navbar-toggle { border-color: #ddd } .navbar-default .navbar-toggle:focus, .navbar-default .navbar-toggle:hover { background-color: #ddd } .navbar-default .navbar-toggle .icon-bar { background-color: #888 } .navbar-default .navbar-collapse, .navbar-default .navbar-form { border-color: #e7e7e7 } .navbar-default .navbar-link { color: #777 } .navbar-default .navbar-link:hover { color: #333 } .navbar-default .btn-link { color: #777 } .navbar-default .btn-link:focus, .navbar-default .btn-link:hover { color: #333 } .navbar-default .btn-link[disabled]:focus, .navbar-default .btn-link[disabled]:hover, fieldset[disabled] .navbar-default .btn-link:focus, fieldset[disabled] .navbar-default .btn-link:hover { color: #ccc } .navbar-inverse { background-color: #222; border-color: #090909 } .navbar-inverse .navbar-brand { color: #9d9d9d } .navbar-inverse .navbar-brand:focus, .navbar-inverse .navbar-brand:hover { color: #fff; background-color: initial } .navbar-inverse .navbar-nav>li>a, .navbar-inverse .navbar-text { color: #9d9d9d } .navbar-inverse .navbar-nav>li>a:focus, .navbar-inverse .navbar-nav>li>a:hover { color: #fff; background-color: initial } .navbar-inverse .navbar-nav>.active>a, .navbar-inverse .navbar-nav>.active>a:focus, .navbar-inverse .navbar-nav>.active>a:hover { color: #fff; background-color: #090909 } .navbar-inverse .navbar-nav>.disabled>a, .navbar-inverse .navbar-nav>.disabled>a:focus, .navbar-inverse .navbar-nav>.disabled>a:hover { color: #444; background-color: initial } .navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:focus, .navbar-inverse .navbar-nav>.open>a:hover { color: #fff; background-color: #090909 } @media(max-width:767px) { .navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header { border-color: #090909 } .navbar-inverse .navbar-nav .open .dropdown-menu .divider { background-color: #090909 } .navbar-inverse .navbar-nav .open .dropdown-menu>li>a { color: #9d9d9d } .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus, .navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover { color: #fff; background-color: initial } .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a, .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus, .navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover { color: #fff; background-color: #090909 } .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a, .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus, .navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover { color: #444; background-color: initial } } .navbar-inverse .navbar-toggle { border-color: #333 } .navbar-inverse .navbar-toggle:focus, .navbar-inverse .navbar-toggle:hover { background-color: #333 } .navbar-inverse .navbar-toggle .icon-bar { background-color: #fff } .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { border-color: #101010 } .navbar-inverse .navbar-link { color: #9d9d9d } .navbar-inverse .navbar-link:hover { color: #fff } .navbar-inverse .btn-link { color: #9d9d9d } .navbar-inverse .btn-link:focus, .navbar-inverse .btn-link:hover { color: #fff } .navbar-inverse .btn-link[disabled]:focus, .navbar-inverse .btn-link[disabled]:hover, fieldset[disabled] .navbar-inverse .btn-link:focus, fieldset[disabled] .navbar-inverse .btn-link:hover { color: #444 } .breadcrumb { padding: 8px 15px; margin-bottom: 20px; list-style: none; background-color: #f5f5f5; border-radius: 4px } .breadcrumb>li { display: inline-block } .breadcrumb>li+li:before { padding: 0 5px; color: #ccc; content: "/ " } .breadcrumb>.active { color: #777 } .pagination { display: inline-block; padding-left: 0; margin: 20px 0; border-radius: 4px } .pagination>li { display: inline } .pagination>li>a, .pagination>li>span { position: relative; float: left; padding: 6px 12px; margin-left: -1px; line-height: 1.428571429; color: #337ab7; text-decoration: none; background-color: #fff; border: 1px solid #ddd } .pagination>li>a:focus, .pagination>li>a:hover, .pagination>li>span:focus, .pagination>li>span:hover { z-index: 2; color: #23527c; background-color: #eee; border-color: #ddd } .pagination>li:first-child>a, .pagination>li:first-child>span { margin-left: 0; border-top-left-radius: 4px; border-bottom-left-radius: 4px } .pagination>li:last-child>a, .pagination>li:last-child>span { border-top-right-radius: 4px; border-bottom-right-radius: 4px } .pagination>.active>a, .pagination>.active>a:focus, .pagination>.active>a:hover, .pagination>.active>span, .pagination>.active>span:focus, .pagination>.active>span:hover { z-index: 3; color: #fff; cursor: default; background-color: #337ab7; border-color: #337ab7 } .pagination>.disabled>a, .pagination>.disabled>a:focus, .pagination>.disabled>a:hover, .pagination>.disabled>span, .pagination>.disabled>span:focus, .pagination>.disabled>span:hover { color: #777; cursor: not-allowed; background-color: #fff; border-color: #ddd } .pagination-lg>li>a, .pagination-lg>li>span { padding: 10px 16px; font-size: 18px; line-height: 1.3333333 } .pagination-lg>li:first-child>a, .pagination-lg>li:first-child>span { border-top-left-radius: 6px; border-bottom-left-radius: 6px } .pagination-lg>li:last-child>a, .pagination-lg>li:last-child>span { border-top-right-radius: 6px; border-bottom-right-radius: 6px } .pagination-sm>li>a, .pagination-sm>li>span { padding: 5px 10px; font-size: 12px; line-height: 1.5 } .pagination-sm>li:first-child>a, .pagination-sm>li:first-child>span { border-top-left-radius: 3px; border-bottom-left-radius: 3px } .pagination-sm>li:last-child>a, .pagination-sm>li:last-child>span { border-top-right-radius: 3px; border-bottom-right-radius: 3px } .pager { padding-left: 0; margin: 20px 0; text-align: center; list-style: none } .pager:after, .pager:before { display: table; content: " " } .pager:after { clear: both } .pager li { display: inline } .pager li>a, .pager li>span { display: inline-block; padding: 5px 14px; background-color: #fff; border: 1px solid #ddd; border-radius: 15px } .pager li>a:focus, .pager li>a:hover { text-decoration: none; background-color: #eee } .pager .next>a, .pager .next>span { float: right } .pager .previous>a, .pager .previous>span { float: left } .pager .disabled>a, .pager .disabled>a:focus, .pager .disabled>a:hover, .pager .disabled>span { color: #777; cursor: not-allowed; background-color: #fff } .label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: initial; border-radius: .25em } .label:empty { display: none } .btn .label { position: relative; top: -1px } a.label:focus, a.label:hover { color: #fff; text-decoration: none; cursor: pointer } .label-default { background-color: #777 } .label-default[href]:focus, .label-default[href]:hover { background-color: #5e5e5e } .label-primary { background-color: #337ab7 } .label-primary[href]:focus, .label-primary[href]:hover { background-color: #286090 } .label-success { background-color: #5cb85c } .label-success[href]:focus, .label-success[href]:hover { background-color: #449d44 } .label-info { background-color: #5bc0de } .label-info[href]:focus, .label-info[href]:hover { background-color: #31b0d5 } .label-warning { background-color: #f0ad4e } .label-warning[href]:focus, .label-warning[href]:hover { background-color: #ec971f } .label-danger { background-color: #d9534f } .label-danger[href]:focus, .label-danger[href]:hover { background-color: #c9302c } .badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 12px; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: middle; background-color: #777; border-radius: 10px } .badge:empty { display: none } .btn .badge { position: relative; top: -1px } .btn-group-xs>.btn .badge, .btn-xs .badge { top: 0; padding: 1px 5px } .list-group-item.active>.badge, .nav-pills>.active>a>.badge { color: #337ab7; background-color: #fff } .list-group-item>.badge { float: right } .list-group-item>.badge+.badge { margin-right: 5px } .nav-pills>li>a>.badge { margin-left: 3px } a.badge:focus, a.badge:hover { color: #fff; text-decoration: none; cursor: pointer } .jumbotron { padding-top: 30px; padding-bottom: 30px; margin-bottom: 30px; background-color: #eee } .jumbotron, .jumbotron .h1, .jumbotron h1 { color: inherit } .jumbotron p { margin-bottom: 15px; font-size: 21px; font-weight: 200 } .jumbotron>hr { border-top-color: #d5d5d5 } .container-fluid .jumbotron, .container .jumbotron { padding-right: 15px; padding-left: 15px; border-radius: 6px } .jumbotron .container { max-width: 100% } @media screen and (min-width:768px) { .jumbotron { padding-top: 48px; padding-bottom: 48px } .container-fluid .jumbotron, .container .jumbotron { padding-right: 60px; padding-left: 60px } .jumbotron .h1, .jumbotron h1 { font-size: 63px } } .thumbnail { display: block; padding: 4px; margin-bottom: 20px; line-height: 1.428571429; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; transition: border .2s ease-in-out } .thumbnail>img, .thumbnail a>img { display: block; max-width: 100%; height: auto; margin-right: auto; margin-left: auto } .thumbnail .caption { padding: 9px; color: #333 } a.thumbnail.active, a.thumbnail:focus, a.thumbnail:hover { border-color: #337ab7 } .alert { padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px } .alert h4 { margin-top: 0; color: inherit } .alert .alert-link { font-weight: 700 } .alert>p, .alert>ul { margin-bottom: 0 } .alert>p+p { margin-top: 5px } .alert-dismissable, .alert-dismissible { padding-right: 35px } .alert-dismissable .close, .alert-dismissible .close { position: relative; top: -2px; right: -21px; color: inherit } .alert-success { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6 } .alert-success hr { border-top-color: #c9e2b3 } .alert-success .alert-link { color: #2b542c } .alert-info { color: #31708f; background-color: #d9edf7; border-color: #bce8f1 } .alert-info hr { border-top-color: #a6e1ec } .alert-info .alert-link { color: #245269 } .alert-warning { color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc } .alert-warning hr { border-top-color: #f7e1b5 } .alert-warning .alert-link { color: #66512c } .alert-danger { color: #a94442; background-color: #f2dede; border-color: #ebccd1 } .alert-danger hr { border-top-color: #e4b9c0 } .alert-danger .alert-link { color: #843534 } @keyframes progress-bar-stripes { 0% { background-position: 40px 0 } to { background-position: 0 0 } } .progress { height: 20px; margin-bottom: 20px; overflow: hidden; background-color: #f5f5f5; border-radius: 4px; box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1) } .progress-bar { float: left; width: 0; height: 100%; font-size: 12px; line-height: 20px; color: #fff; text-align: center; background-color: #337ab7; box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); transition: width .6s ease } .progress-bar-striped, .progress-striped .progress-bar { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent); background-size: 40px 40px } .progress-bar.active, .progress.active .progress-bar { animation: progress-bar-stripes 2s linear infinite } .progress-bar-success { background-color: #5cb85c } .progress-striped .progress-bar-success { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent) } .progress-bar-info { background-color: #5bc0de } .progress-striped .progress-bar-info { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent) } .progress-bar-warning { background-color: #f0ad4e } .progress-striped .progress-bar-warning { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent) } .progress-bar-danger { background-color: #d9534f } .progress-striped .progress-bar-danger { background-image: linear-gradient(45deg, hsla(0, 0%, 100%, .15) 25%, transparent 0, transparent 50%, hsla(0, 0%, 100%, .15) 0, hsla(0, 0%, 100%, .15) 75%, transparent 0, transparent) } .media { margin-top: 15px } .media:first-child { margin-top: 0 } .media, .media-body { overflow: hidden; zoom: 1 } .media-body { width: 10000px } .media-object { display: block } .media-object.img-thumbnail { max-width: none } .media-right, .media>.pull-right { padding-left: 10px } .media-left, .media>.pull-left { padding-right: 10px } .media-body, .media-left, .media-right { display: table-cell; vertical-align: top } .media-middle { vertical-align: middle } .media-bottom { vertical-align: bottom } .media-heading { margin-top: 0; margin-bottom: 5px } .media-list { padding-left: 0; list-style: none } .list-group { padding-left: 0; margin-bottom: 20px } .list-group-item { position: relative; display: block; padding: 10px 15px; margin-bottom: -1px; background-color: #fff; border: 1px solid #ddd } .list-group-item:first-child { border-top-left-radius: 4px; border-top-right-radius: 4px } .list-group-item:last-child { margin-bottom: 0; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px } .list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover { color: #777; cursor: not-allowed; background-color: #eee } .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading { color: inherit } .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text { color: #777 } .list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover { z-index: 2; color: #fff; background-color: #337ab7; border-color: #337ab7 } .list-group-item.active .list-group-item-heading, .list-group-item.active .list-group-item-heading>.small, .list-group-item.active .list-group-item-heading>small, .list-group-item.active:focus .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading>.small, .list-group-item.active:focus .list-group-item-heading>small, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading>.small, .list-group-item.active:hover .list-group-item-heading>small { color: inherit } .list-group-item.active .list-group-item-text, .list-group-item.active:focus .list-group-item-text, .list-group-item.active:hover .list-group-item-text { color: #c7ddef } a.list-group-item, button.list-group-item { color: #555 } a.list-group-item .list-group-item-heading, button.list-group-item .list-group-item-heading { color: #333 } a.list-group-item:focus, a.list-group-item:hover, button.list-group-item:focus, button.list-group-item:hover { color: #555; text-decoration: none; background-color: #f5f5f5 } button.list-group-item { width: 100%; text-align: left } .list-group-item-success { color: #3c763d; background-color: #dff0d8 } a.list-group-item-success, button.list-group-item-success { color: #3c763d } a.list-group-item-success .list-group-item-heading, button.list-group-item-success .list-group-item-heading { color: inherit } a.list-group-item-success:focus, a.list-group-item-success:hover, button.list-group-item-success:focus, button.list-group-item-success:hover { color: #3c763d; background-color: #d0e9c6 } a.list-group-item-success.active, a.list-group-item-success.active:focus, a.list-group-item-success.active:hover, button.list-group-item-success.active, button.list-group-item-success.active:focus, button.list-group-item-success.active:hover { color: #fff; background-color: #3c763d; border-color: #3c763d } .list-group-item-info { color: #31708f; background-color: #d9edf7 } a.list-group-item-info, button.list-group-item-info { color: #31708f } a.list-group-item-info .list-group-item-heading, button.list-group-item-info .list-group-item-heading { color: inherit } a.list-group-item-info:focus, a.list-group-item-info:hover, button.list-group-item-info:focus, button.list-group-item-info:hover { color: #31708f; background-color: #c4e3f3 } a.list-group-item-info.active, a.list-group-item-info.active:focus, a.list-group-item-info.active:hover, button.list-group-item-info.active, button.list-group-item-info.active:focus, button.list-group-item-info.active:hover { color: #fff; background-color: #31708f; border-color: #31708f } .list-group-item-warning { color: #8a6d3b; background-color: #fcf8e3 } a.list-group-item-warning, button.list-group-item-warning { color: #8a6d3b } a.list-group-item-warning .list-group-item-heading, button.list-group-item-warning .list-group-item-heading { color: inherit } a.list-group-item-warning:focus, a.list-group-item-warning:hover, button.list-group-item-warning:focus, button.list-group-item-warning:hover { color: #8a6d3b; background-color: #faf2cc } a.list-group-item-warning.active, a.list-group-item-warning.active:focus, a.list-group-item-warning.active:hover, button.list-group-item-warning.active, button.list-group-item-warning.active:focus, button.list-group-item-warning.active:hover { color: #fff; background-color: #8a6d3b; border-color: #8a6d3b } .list-group-item-danger { color: #a94442; background-color: #f2dede } a.list-group-item-danger, button.list-group-item-danger { color: #a94442 } a.list-group-item-danger .list-group-item-heading, button.list-group-item-danger .list-group-item-heading { color: inherit } a.list-group-item-danger:focus, a.list-group-item-danger:hover, button.list-group-item-danger:focus, button.list-group-item-danger:hover { color: #a94442; background-color: #ebcccc } a.list-group-item-danger.active, a.list-group-item-danger.active:focus, a.list-group-item-danger.active:hover, button.list-group-item-danger.active, button.list-group-item-danger.active:focus, button.list-group-item-danger.active:hover { color: #fff; background-color: #a94442; border-color: #a94442 } .list-group-item-heading { margin-top: 0; margin-bottom: 5px } .list-group-item-text { margin-bottom: 0; line-height: 1.3 } .panel { margin-bottom: 20px; background-color: #fff; border: 1px solid transparent; border-radius: 4px; box-shadow: 0 1px 1px rgba(0, 0, 0, .05) } .panel-body { padding: 15px } .panel-body:after, .panel-body:before { display: table; content: " " } .panel-body:after { clear: both } .panel-heading { padding: 10px 15px; border-bottom: 1px solid transparent; border-top-left-radius: 3px; border-top-right-radius: 3px } .panel-heading>.dropdown .dropdown-toggle, .panel-title { color: inherit } .panel-title { margin-top: 0; margin-bottom: 0; font-size: 16px } .panel-title>.small, .panel-title>.small>a, .panel-title>a, .panel-title>small, .panel-title>small>a { color: inherit } .panel-footer { padding: 10px 15px; background-color: #f5f5f5; border-top: 1px solid #ddd; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px } .panel>.list-group, .panel>.panel-collapse>.list-group { margin-bottom: 0 } .panel>.list-group .list-group-item, .panel>.panel-collapse>.list-group .list-group-item { border-width: 1px 0; border-radius: 0 } .panel>.list-group:first-child .list-group-item:first-child, .panel>.panel-collapse>.list-group:first-child .list-group-item:first-child { border-top: 0; border-top-left-radius: 3px; border-top-right-radius: 3px } .panel>.list-group:last-child .list-group-item:last-child, .panel>.panel-collapse>.list-group:last-child .list-group-item:last-child { border-bottom: 0; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px } .panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child { border-top-left-radius: 0; border-top-right-radius: 0 } .list-group+.panel-footer, .panel-heading+.list-group .list-group-item:first-child { border-top-width: 0 } .panel>.panel-collapse>.table, .panel>.table, .panel>.table-responsive>.table { margin-bottom: 0 } .panel>.panel-collapse>.table caption, .panel>.table-responsive>.table caption, .panel>.table caption { padding-right: 15px; padding-left: 15px } .panel>.table-responsive:first-child>.table:first-child, .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child, .panel>.table:first-child, .panel>.table:first-child>tbody:first-child>tr:first-child, .panel>.table:first-child>thead:first-child>tr:first-child { border-top-left-radius: 3px; border-top-right-radius: 3px } .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child, .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child, .panel>.table:first-child>tbody:first-child>tr:first-child td:first-child, .panel>.table:first-child>tbody:first-child>tr:first-child th:first-child, .panel>.table:first-child>thead:first-child>tr:first-child td:first-child, .panel>.table:first-child>thead:first-child>tr:first-child th:first-child { border-top-left-radius: 3px } .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child, .panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child, .panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child, .panel>.table:first-child>tbody:first-child>tr:first-child td:last-child, .panel>.table:first-child>tbody:first-child>tr:first-child th:last-child, .panel>.table:first-child>thead:first-child>tr:first-child td:last-child, .panel>.table:first-child>thead:first-child>tr:first-child th:last-child { border-top-right-radius: 3px } .panel>.table-responsive:last-child>.table:last-child, .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child, .panel>.table:last-child, .panel>.table:last-child>tbody:last-child>tr:last-child, .panel>.table:last-child>tfoot:last-child>tr:last-child { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px } .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child, .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child, .panel>.table:last-child>tbody:last-child>tr:last-child td:first-child, .panel>.table:last-child>tbody:last-child>tr:last-child th:first-child, .panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child, .panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child { border-bottom-left-radius: 3px } .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child, .panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child, .panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child, .panel>.table:last-child>tbody:last-child>tr:last-child td:last-child, .panel>.table:last-child>tbody:last-child>tr:last-child th:last-child, .panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child, .panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child { border-bottom-right-radius: 3px } .panel>.panel-body+.table, .panel>.panel-body+.table-responsive, .panel>.table+.panel-body, .panel>.table-responsive+.panel-body { border-top: 1px solid #ddd } .panel>.table>tbody:first-child>tr:first-child td, .panel>.table>tbody:first-child>tr:first-child th { border-top: 0 } .panel>.table-bordered, .panel>.table-responsive>.table-bordered { border: 0 } .panel>.table-bordered>tbody>tr>td:first-child, .panel>.table-bordered>tbody>tr>th:first-child, .panel>.table-bordered>tfoot>tr>td:first-child, .panel>.table-bordered>tfoot>tr>th:first-child, .panel>.table-bordered>thead>tr>td:first-child, .panel>.table-bordered>thead>tr>th:first-child, .panel>.table-responsive>.table-bordered>tbody>tr>td:first-child, .panel>.table-responsive>.table-bordered>tbody>tr>th:first-child, .panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child, .panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child, .panel>.table-responsive>.table-bordered>thead>tr>td:first-child, .panel>.table-responsive>.table-bordered>thead>tr>th:first-child { border-left: 0 } .panel>.table-bordered>tbody>tr>td:last-child, .panel>.table-bordered>tbody>tr>th:last-child, .panel>.table-bordered>tfoot>tr>td:last-child, .panel>.table-bordered>tfoot>tr>th:last-child, .panel>.table-bordered>thead>tr>td:last-child, .panel>.table-bordered>thead>tr>th:last-child, .panel>.table-responsive>.table-bordered>tbody>tr>td:last-child, .panel>.table-responsive>.table-bordered>tbody>tr>th:last-child, .panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child, .panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child, .panel>.table-responsive>.table-bordered>thead>tr>td:last-child, .panel>.table-responsive>.table-bordered>thead>tr>th:last-child { border-right: 0 } .panel>.table-bordered>tbody>tr:first-child>td, .panel>.table-bordered>tbody>tr:first-child>th, .panel>.table-bordered>tbody>tr:last-child>td, .panel>.table-bordered>tbody>tr:last-child>th, .panel>.table-bordered>tfoot>tr:last-child>td, .panel>.table-bordered>tfoot>tr:last-child>th, .panel>.table-bordered>thead>tr:first-child>td, .panel>.table-bordered>thead>tr:first-child>th, .panel>.table-responsive>.table-bordered>tbody>tr:first-child>td, .panel>.table-responsive>.table-bordered>tbody>tr:first-child>th, .panel>.table-responsive>.table-bordered>tbody>tr:last-child>td, .panel>.table-responsive>.table-bordered>tbody>tr:last-child>th, .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td, .panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th, .panel>.table-responsive>.table-bordered>thead>tr:first-child>td, .panel>.table-responsive>.table-bordered>thead>tr:first-child>th { border-bottom: 0 } .panel>.table-responsive { margin-bottom: 0; border: 0 } .panel-group { margin-bottom: 20px } .panel-group .panel { margin-bottom: 0; border-radius: 4px } .panel-group .panel+.panel { margin-top: 5px } .panel-group .panel-heading { border-bottom: 0 } .panel-group .panel-heading+.panel-collapse>.list-group, .panel-group .panel-heading+.panel-collapse>.panel-body { border-top: 1px solid #ddd } .panel-group .panel-footer { border-top: 0 } .panel-group .panel-footer+.panel-collapse .panel-body { border-bottom: 1px solid #ddd } .panel-default { border-color: #ddd } .panel-default>.panel-heading { color: #333; background-color: #f5f5f5; border-color: #ddd } .panel-default>.panel-heading+.panel-collapse>.panel-body { border-top-color: #ddd } .panel-default>.panel-heading .badge { color: #f5f5f5; background-color: #333 } .panel-default>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #ddd } .panel-primary { border-color: #337ab7 } .panel-primary>.panel-heading { color: #fff; background-color: #337ab7; border-color: #337ab7 } .panel-primary>.panel-heading+.panel-collapse>.panel-body { border-top-color: #337ab7 } .panel-primary>.panel-heading .badge { color: #337ab7; background-color: #fff } .panel-primary>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #337ab7 } .panel-success { border-color: #d6e9c6 } .panel-success>.panel-heading { color: #3c763d; background-color: #dff0d8; border-color: #d6e9c6 } .panel-success>.panel-heading+.panel-collapse>.panel-body { border-top-color: #d6e9c6 } .panel-success>.panel-heading .badge { color: #dff0d8; background-color: #3c763d } .panel-success>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #d6e9c6 } .panel-info { border-color: #bce8f1 } .panel-info>.panel-heading { color: #31708f; background-color: #d9edf7; border-color: #bce8f1 } .panel-info>.panel-heading+.panel-collapse>.panel-body { border-top-color: #bce8f1 } .panel-info>.panel-heading .badge { color: #d9edf7; background-color: #31708f } .panel-info>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #bce8f1 } .panel-warning { border-color: #faebcc } .panel-warning>.panel-heading { color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc } .panel-warning>.panel-heading+.panel-collapse>.panel-body { border-top-color: #faebcc } .panel-warning>.panel-heading .badge { color: #fcf8e3; background-color: #8a6d3b } .panel-warning>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #faebcc } .panel-danger { border-color: #ebccd1 } .panel-danger>.panel-heading { color: #a94442; background-color: #f2dede; border-color: #ebccd1 } .panel-danger>.panel-heading+.panel-collapse>.panel-body { border-top-color: #ebccd1 } .panel-danger>.panel-heading .badge { color: #f2dede; background-color: #a94442 } .panel-danger>.panel-footer+.panel-collapse>.panel-body { border-bottom-color: #ebccd1 } .embed-responsive { position: relative; display: block; height: 0; padding: 0; overflow: hidden } .embed-responsive .embed-responsive-item, .embed-responsive embed, .embed-responsive iframe, .embed-responsive object, .embed-responsive video { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; height: 100%; border: 0 } .embed-responsive-16by9 { padding-bottom: 56.25% } .embed-responsive-4by3 { padding-bottom: 75% } .well { min-height: 20px; padding: 19px; margin-bottom: 20px; background-color: #f5f5f5; border: 1px solid #e3e3e3; border-radius: 4px; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05) } .well blockquote { border-color: #ddd; border-color: rgba(0, 0, 0, .15) } .well-lg { padding: 24px; border-radius: 6px } .well-sm { padding: 9px; border-radius: 3px } .close { float: right; font-size: 21px; font-weight: 700; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; filter: alpha(opacity=20); opacity: .2 } .close:focus, .close:hover { color: #000; text-decoration: none; cursor: pointer; filter: alpha(opacity=50); opacity: .5 } button.close { padding: 0; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; -moz-appearance: none; appearance: none } .modal, .modal-open { overflow: hidden } .modal { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1050; display: none; -webkit-overflow-scrolling: touch; outline: 0 } .modal.fade .modal-dialog { transform: translateY(-25%); transition: transform .3s ease-out } .modal.in .modal-dialog { transform: translate(0) } .modal-open .modal { overflow-x: hidden; overflow-y: auto } .modal-dialog { position: relative; width: auto; margin: 10px } .modal-content { position: relative; background-color: #fff; background-clip: padding-box; border: 1px solid #999; border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; box-shadow: 0 3px 9px rgba(0, 0, 0, .5); outline: 0 } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: #000 } .modal-backdrop.fade { filter: alpha(opacity=0); opacity: 0 } .modal-backdrop.in { filter: alpha(opacity=50); opacity: .5 } .modal-header { padding: 15px; border-bottom: 1px solid #e5e5e5 } .modal-header:after, .modal-header:before { display: table; content: " " } .modal-header:after { clear: both } .modal-header .close { margin-top: -2px } .modal-title { margin: 0; line-height: 1.428571429 } .modal-body { position: relative; padding: 15px } .modal-footer { padding: 15px; text-align: right; border-top: 1px solid #e5e5e5 } .modal-footer:after, .modal-footer:before { display: table; content: " " } .modal-footer:after { clear: both } .modal-footer .btn+.btn { margin-bottom: 0; margin-left: 5px } .modal-footer .btn-group .btn+.btn { margin-left: -1px } .modal-footer .btn-block+.btn-block { margin-left: 0 } .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll } @media(min-width:768px) { .modal-dialog { width: 600px; margin: 30px auto } .modal-content { box-shadow: 0 5px 15px rgba(0, 0, 0, .5) } .modal-sm { width: 300px } } @media(min-width:992px) { .modal-lg { width: 900px } } .tooltip { position: absolute; z-index: 1070; display: block; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-style: normal; font-weight: 400; line-height: 1.428571429; line-break: auto; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; word-wrap: normal; white-space: normal; font-size: 12px; filter: alpha(opacity=0); opacity: 0 } .tooltip.in { filter: alpha(opacity=90); opacity: .9 } .tooltip.top { padding: 5px 0; margin-top: -3px } .tooltip.right { padding: 0 5px; margin-left: 3px } .tooltip.bottom { padding: 5px 0; margin-top: 3px } .tooltip.left { padding: 0 5px; margin-left: -3px } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-width: 5px 5px 0; border-top-color: #000 } .tooltip.top-left .tooltip-arrow { right: 5px } .tooltip.top-left .tooltip-arrow, .tooltip.top-right .tooltip-arrow { bottom: 0; margin-bottom: -5px; border-width: 5px 5px 0; border-top-color: #000 } .tooltip.top-right .tooltip-arrow { left: 5px } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-width: 5px 5px 5px 0; border-right-color: #000 } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-width: 5px 0 5px 5px; border-left-color: #000 } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-width: 0 5px 5px; border-bottom-color: #000 } .tooltip.bottom-left .tooltip-arrow { top: 0; right: 5px; margin-top: -5px; border-width: 0 5px 5px; border-bottom-color: #000 } .tooltip.bottom-right .tooltip-arrow { top: 0; left: 5px; margin-top: -5px; border-width: 0 5px 5px; border-bottom-color: #000 } .tooltip-inner { max-width: 200px; padding: 3px 8px; color: #fff; text-align: center; background-color: #000; border-radius: 4px } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid } .popover { position: absolute; top: 0; left: 0; z-index: 1060; display: none; max-width: 276px; padding: 1px; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-style: normal; font-weight: 400; line-height: 1.428571429; line-break: auto; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; word-wrap: normal; white-space: normal; font-size: 14px; background-color: #fff; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, .2); border-radius: 6px; box-shadow: 0 5px 10px rgba(0, 0, 0, .2) } .popover.top { margin-top: -10px } .popover.right { margin-left: 10px } .popover.bottom { margin-top: 10px } .popover.left { margin-left: -10px } .popover>.arrow { border-width: 11px } .popover>.arrow, .popover>.arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid } .popover>.arrow:after { content: ""; border-width: 10px } .popover.top>.arrow { bottom: -11px; left: 50%; margin-left: -11px; border-top-color: #999; border-top-color: rgba(0, 0, 0, .25); border-bottom-width: 0 } .popover.top>.arrow:after { bottom: 1px; margin-left: -10px; content: " "; border-top-color: #fff; border-bottom-width: 0 } .popover.right>.arrow { top: 50%; left: -11px; margin-top: -11px; border-right-color: #999; border-right-color: rgba(0, 0, 0, .25); border-left-width: 0 } .popover.right>.arrow:after { bottom: -10px; left: 1px; content: " "; border-right-color: #fff; border-left-width: 0 } .popover.bottom>.arrow { top: -11px; left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #999; border-bottom-color: rgba(0, 0, 0, .25) } .popover.bottom>.arrow:after { top: 1px; margin-left: -10px; content: " "; border-top-width: 0; border-bottom-color: #fff } .popover.left>.arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #999; border-left-color: rgba(0, 0, 0, .25) } .popover.left>.arrow:after { right: 1px; bottom: -10px; content: " "; border-right-width: 0; border-left-color: #fff } .popover-title { padding: 8px 14px; margin: 0; font-size: 14px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0 } .popover-content { padding: 9px 14px } .carousel, .carousel-inner { position: relative } .carousel-inner { width: 100%; overflow: hidden } .carousel-inner>.item { position: relative; display: none; transition: left .6s ease-in-out } .carousel-inner>.item>a>img, .carousel-inner>.item>img { display: block; max-width: 100%; height: auto; line-height: 1 } @media (-webkit-transform-3d), (transform-3d) { .carousel-inner>.item { transition: transform .6s ease-in-out; -webkit-backface-visibility: hidden; backface-visibility: hidden; perspective: 1000px } .carousel-inner>.item.active.right, .carousel-inner>.item.next { transform: translate3d(100%, 0, 0); left: 0 } .carousel-inner>.item.active.left, .carousel-inner>.item.prev { transform: translate3d(-100%, 0, 0); left: 0 } .carousel-inner>.item.active, .carousel-inner>.item.next.left, .carousel-inner>.item.prev.right { transform: translateZ(0); left: 0 } } .carousel-inner>.active, .carousel-inner>.next, .carousel-inner>.prev { display: block } .carousel-inner>.active { left: 0 } .carousel-inner>.next, .carousel-inner>.prev { position: absolute; top: 0; width: 100% } .carousel-inner>.next { left: 100% } .carousel-inner>.prev { left: -100% } .carousel-inner>.next.left, .carousel-inner>.prev.right { left: 0 } .carousel-inner>.active.left { left: -100% } .carousel-inner>.active.right { left: 100% } .carousel-control { position: absolute; top: 0; bottom: 0; left: 0; width: 15%; font-size: 20px; color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, .6); background-color: transparent; filter: alpha(opacity=50); opacity: .5 } .carousel-control.left { background-image: linear-gradient(90deg, rgba(0, 0, 0, .5) 0, rgba(0, 0, 0, .0001)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#80000000", endColorstr="#00000000", GradientType=1); background-repeat: repeat-x } .carousel-control.right { right: 0; left: auto; background-image: linear-gradient(90deg, rgba(0, 0, 0, .0001) 0, rgba(0, 0, 0, .5)); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#00000000", endColorstr="#80000000", GradientType=1); background-repeat: repeat-x } .carousel-control:focus, .carousel-control:hover { color: #fff; text-decoration: none; outline: 0; filter: alpha(opacity=90); opacity: .9 } .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next, .carousel-control .icon-prev { position: absolute; top: 50%; z-index: 5; display: inline-block; margin-top: -10px } .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { left: 50%; margin-left: -10px } .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { right: 50%; margin-right: -10px } .carousel-control .icon-next, .carousel-control .icon-prev { width: 20px; height: 20px; font-family: serif; line-height: 1 } .carousel-control .icon-prev:before { content: "‹" } .carousel-control .icon-next:before { content: "›" } .carousel-indicators { position: absolute; bottom: 10px; left: 50%; z-index: 15; width: 60%; padding-left: 0; margin-left: -30%; text-align: center; list-style: none } .carousel-indicators li { display: inline-block; width: 10px; height: 10px; margin: 1px; text-indent: -999px; cursor: pointer; background-color: #000\9; background-color: transparent; border: 1px solid #fff; border-radius: 10px } .carousel-indicators .active { width: 12px; height: 12px; margin: 0; background-color: #fff } .carousel-caption { position: absolute; right: 15%; bottom: 20px; left: 15%; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, .6) } .carousel-caption .btn { text-shadow: none } @media screen and (min-width:768px) { .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next, .carousel-control .icon-prev { width: 30px; height: 30px; margin-top: -10px; font-size: 30px } .carousel-control .glyphicon-chevron-left, .carousel-control .icon-prev { margin-left: -10px } .carousel-control .glyphicon-chevron-right, .carousel-control .icon-next { margin-right: -10px } .carousel-caption { right: 20%; left: 20%; padding-bottom: 30px } .carousel-indicators { bottom: 20px } } .clearfix:after, .clearfix:before { display: table; content: " " } .clearfix:after { clear: both } .center-block { display: block; margin-right: auto; margin-left: auto } .pull-right { float: right !important } .pull-left { float: left !important } .hide { display: none !important } .show { display: block !important } .invisible { visibility: hidden } .text-hide { font: 0/0 a; color: transparent; text-shadow: none; background-color: initial; border: 0 } .hidden { display: none !important } .affix { position: fixed } .visible-lg, .visible-lg-block, .visible-lg-inline, .visible-lg-inline-block, .visible-md, .visible-md-block, .visible-md-inline, .visible-md-inline-block, .visible-sm, .visible-sm-block, .visible-sm-inline, .visible-sm-inline-block, .visible-xs, .visible-xs-block, .visible-xs-inline, .visible-xs-inline-block { display: none !important } @media(max-width:767px) { .visible-xs { display: block !important } table.visible-xs { display: table !important } tr.visible-xs { display: table-row !important } td.visible-xs, th.visible-xs { display: table-cell !important } } @media(max-width:767px) { .visible-xs-block { display: block !important } } @media(max-width:767px) { .visible-xs-inline { display: inline !important } } @media(max-width:767px) { .visible-xs-inline-block { display: inline-block !important } } @media(min-width:768px)and (max-width:991px) { .visible-sm { display: block !important } table.visible-sm { display: table !important } tr.visible-sm { display: table-row !important } td.visible-sm, th.visible-sm { display: table-cell !important } } @media(min-width:768px)and (max-width:991px) { .visible-sm-block { display: block !important } } @media(min-width:768px)and (max-width:991px) { .visible-sm-inline { display: inline !important } } @media(min-width:768px)and (max-width:991px) { .visible-sm-inline-block { display: inline-block !important } } @media(min-width:992px)and (max-width:1199px) { .visible-md { display: block !important } table.visible-md { display: table !important } tr.visible-md { display: table-row !important } td.visible-md, th.visible-md { display: table-cell !important } } @media(min-width:992px)and (max-width:1199px) { .visible-md-block { display: block !important } } @media(min-width:992px)and (max-width:1199px) { .visible-md-inline { display: inline !important } } @media(min-width:992px)and (max-width:1199px) { .visible-md-inline-block { display: inline-block !important } } @media(min-width:1200px) { .visible-lg { display: block !important } table.visible-lg { display: table !important } tr.visible-lg { display: table-row !important } td.visible-lg, th.visible-lg { display: table-cell !important } } @media(min-width:1200px) { .visible-lg-block { display: block !important } } @media(min-width:1200px) { .visible-lg-inline { display: inline !important } } @media(min-width:1200px) { .visible-lg-inline-block { display: inline-block !important } } @media(max-width:767px) { .hidden-xs { display: none !important } } @media(min-width:768px)and (max-width:991px) { .hidden-sm { display: none !important } } @media(min-width:992px)and (max-width:1199px) { .hidden-md { display: none !important } } @media(min-width:1200px) { .hidden-lg { display: none !important } } .visible-print { display: none !important } @media print { .visible-print { display: block !important } table.visible-print { display: table !important } tr.visible-print { display: table-row !important } td.visible-print, th.visible-print { display: table-cell !important } } .visible-print-block { display: none !important } @media print { .visible-print-block { display: block !important } } .visible-print-inline { display: none !important } @media print { .visible-print-inline { display: inline !important } } .visible-print-inline-block { display: none !important } @media print { .visible-print-inline-block { display: inline-block !important } } @media print { .hidden-print { display: none !important } } .checkbox-inline label, .checkbox label { padding-left: 28px } .checkbox-inline input[type=checkbox], .checkbox input[type=checkbox] { visibility: hidden; margin-top: 0; margin-left: -28px; width: 20px; cursor: pointer } .checkbox-inline input[type=checkbox]:after, .checkbox input[type=checkbox]:after { content: ""; visibility: visible; border: 1px solid #666; display: block; position: absolute; margin: auto; height: 20px; width: 20px; background: #f7f7f7; transition: background .15s ease-in-out } .checkbox-inline input[type=checkbox]~span, .checkbox input[type=checkbox]~span { transition: color .15s ease-in-out } .checkbox-inline input[type=checkbox]:checked:after, .checkbox input[type=checkbox]:checked:after { content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAMCAYAAAC5tzfZAAAAAXNSR0IArs4c6QAAAL1JREFUKBWNi7EJAkEQRU8PNDqMBTNBjA2swcwGRLADMyswNLIEExsQEyPDA8ECLEAQEzHRwPUN7MqIP3DgsbP/v8myPyeEUE3qZ0mBejlokB95x6qXGfIabErIpeRDpInZzA3avpM7UgfuYDOSkg+RanAwm1n5LiMoYAs9X/BfgM0JCt/Z0dwa5gFTK3kH8IIn9L8OolCnWEKaDcs5fmY/Bz5AGsI1yvbsoOIduSO1YA8XaEpJhcg5dFWXsjdWD8DwycyU8QAAAABJRU5ErkJggg=="); color: #fff; border: 1px solid #00a2e8; background: #00a2e8; text-align: center; line-height: 20px } .checkbox-inline input[type=checkbox]:checked~span, .checkbox input[type=checkbox]:checked~span { color: #000 } .container { max-width: 768px } .modal-open .modal { display: block } .modal-backdrop.in { opacity: .8 } .modal-body, .modal-footer { padding-top: 25px } .modal-footer { padding-bottom: 25px } .modal-content { border-radius: 0; border: none } .form-control { height: 48px; border-radius: 0; font-weight: 400; color: #000; font-size: 16px; background-color: #f7f7f7; border-color: #ccc; box-shadow: none; transition: border-color .15s ease-in-out } .form-control:focus, .form-control:hover { box-shadow: none; border-color: #666 } .form-control-feedback { width: 48px; height: 48px; line-height: 48px } .form-group { margin-bottom: 25px } .form-group label { margin-bottom: 8px } .input-group.focus input, .input-group:active input, .input-group:hover input { border: 1px solid #666; border-right-color: #ccc } .input-group.focus .input-group-addon, .input-group:active .input-group-addon, .input-group:hover .input-group-addon { border: 1px solid #666; border-left: 0 } .input-group-addon { border-radius: 0; transition: border-color .15s ease-in-out } .input-group-addon:active, .input-group-addon:focus, .input-group-addon:hover { cursor: pointer } .has-error .form-control, .has-error .form-control:focus, .has-error .form-control:hover, .has-success .form-control, .has-success .form-control:focus, .has-success .form-control:hover, .has-warning .form-control, .has-warning .form-control:focus, .has-warning .form-control:hover { box-shadow: none } .has-error .input-group.focus input, .has-error .input-group:active input, .has-error .input-group:hover input, .has-success .input-group.focus input, .has-success .input-group:active input, .has-success .input-group:hover input, .has-warning .input-group.focus input, .has-warning .input-group:active input, .has-warning .input-group:hover input { border-right: 1px solid #ccc } .has-error .input-group.focus .input-group-addon, .has-error .input-group:active .input-group-addon, .has-error .input-group:hover .input-group-addon, .has-success .input-group.focus .input-group-addon, .has-success .input-group:active .input-group-addon, .has-success .input-group:hover .input-group-addon, .has-warning .input-group.focus .input-group-addon, .has-warning .input-group:active .input-group-addon, .has-warning .input-group:hover .input-group-addon { border-left: 0 } .has-error .input-group-addon, .has-success .input-group-addon, .has-warning .input-group-addon { background-color: #00a2e8 } .has-error .help-block, .has-success .help-block, .has-warning .help-block { font-size: 14px } .has-error .help-block .warning, .has-success .help-block .warning, .has-warning .help-block .warning { margin-right: 7px } .has-error .form-control { border-color: #c00 } .has-error .form-control:focus, .has-error .form-control:hover { border-color: #ad0404 } .has-error .input-group.focus .input-group-addon, .has-error .input-group.focus input, .has-error .input-group:active .input-group-addon, .has-error .input-group:active input, .has-error .input-group:hover .input-group-addon, .has-error .input-group:hover input { border: 1px solid #c00 } .has-error .input-group.focus .input-verified, .has-error .input-group:active .input-verified, .has-error .input-group:hover .input-verified { border-right: 1px solid #c00 !important } .has-error .input-group-addon { color: #c00; border-color: #c00 } .has-error .control-label { color: #c00 } .has-error .dropdown .dropdown-toggle { border-color: #c00 } .has-error .help-block { color: #c00 } .has-warning .form-control { border-color: #ad9100 } .has-warning .form-control:focus, .has-warning .form-control:hover { border-color: #8c7500 } .has-warning .input-group.focus .input-group-addon, .has-warning .input-group.focus input, .has-warning .input-group:active .input-group-addon, .has-warning .input-group:active input, .has-warning .input-group:hover .input-group-addon, .has-warning .input-group:hover input { border: 1px solid #ad9100 } .has-warning .input-group.focus .input-verified, .has-warning .input-group:active .input-verified, .has-warning .input-group:hover .input-verified { border-right: 1px solid #ad9100 !important } .has-warning .input-group-addon { color: #ad9100; border-color: #ad9100 } .has-warning .control-label { color: #ad9100 } .has-warning .dropdown .dropdown-toggle { border-color: #ad9100 } .has-warning .help-block { color: #ad9100 } .has-success .form-control { border-color: #029c36 } .has-success .form-control:focus, .has-success .form-control:hover { border-color: #01591f } .has-success .input-group.focus .input-group-addon, .has-success .input-group.focus input, .has-success .input-group:active .input-group-addon, .has-success .input-group:active input, .has-success .input-group:hover .input-group-addon, .has-success .input-group:hover input { border: 1px solid #029c36 } .has-success .input-group.focus .input-verified, .has-success .input-group:active .input-verified, .has-success .input-group:hover .input-verified { border-right: 1px solid #029c36 !important } .has-success .input-group-addon { color: #029c36; border-color: #029c36 } .has-success .control-label { color: #029c36 } .has-success .dropdown .dropdown-toggle { border-color: #029c36 } .checkbox label, .radio label { font-size: 16px; line-height: 16px; display: inline } .checkbox label span, .radio label span { color: grey } .radio-inline label, .radio label { padding-left: 25px } .radio-inline input[type=radio], .radio input[type=radio] { visibility: hidden; margin-top: 0; margin-left: -25px; cursor: pointer } .radio-inline input[type=radio]:after, .radio input[type=radio]:after { content: ""; visibility: visible; border: 1px solid #666; display: block; position: absolute; margin: auto; height: 17px; width: 17px; border-radius: 50%; background: #f7f7f7; transition: border .15s ease-in-out } .radio-inline input[type=radio]~span, .radio input[type=radio]~span { transition: color .3s ease-in-out } .radio-inline input[type=radio]:checked:after, .radio input[type=radio]:checked:after { border: 4.5px solid #00a2e8 } .radio-inline input[type=radio]:checked~span, .radio input[type=radio]:checked~span { color: #000 } .radio-inline { padding-left: 25px } .btn { padding: 6px 15px; border-radius: 0 } .btn.disabled { background-color: initial } .btn.btn-success { font-weight: 600; background-color: #04e04e; border-color: #04e04e } .btn.btn-success:hover { background-color: #029c36; border-color: #029c36 } .btn.btn-success:active { background-color: #01591f; border-color: #01591f } .btn.btn-danger { font-weight: 600; background-color: #c00; border-color: #c00 } .btn.btn-danger:hover { background-color: #ad0404; border-color: #ad0404 } .btn.btn-danger:active { background-color: #8a0707; border-color: #8a0707 } .tooltip { font-family: Gotham } .tooltip.top .tooltip-arrow { border-top-color: #666 } .tooltip-inner { background-color: #666 } .label { vertical-align: middle; font-size: 60% } .label .badge { margin-left: 5px; padding: 1px 4px } .label-danger .badge { background-color: #fff; color: #d9534f } .label-success .badge { background-color: #fff; color: #5cb85c } .label-default .badge { background-color: #fff; color: #777 } .well { padding: 0 } @media(min-width:480px) { .well { padding: 19px } } @media(min-width:768px) { .form-horizontal .control-label { padding-top: 0; margin-bottom: 8px } .form-horizontal .form-group.has-error .control-label { margin-bottom: 0 } .form-horizontal .form-group label { text-align: left; height: 48px; display: flex; align-items: center; justify-content: flex-start } .form-horizontal .form-group .radio>label, .form-horizontal .form-group label.radio-label { height: auto } } input[type=number] { -moz-appearance: textfield !important } input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0 } /*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ html { font-family: sans-serif; line-height: 1.15; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100% } body { margin: 0 } article, aside, details, figcaption, figure, footer, header, main, menu, nav, section, summary { display: block } audio, canvas, progress, video { display: inline-block } audio:not([controls]) { display: none; height: 0 } progress { vertical-align: initial } [hidden], template { display: none } a { background-color: initial; -webkit-text-decoration-skip: objects } a:active, a:hover { outline-width: 0 } abbr[title] { border-bottom: none; text-decoration: underline; text-decoration: underline dotted } b, strong { font-weight: inherit; font-weight: bolder } dfn { font-style: italic } h1 { font-size: 2em; margin: .67em 0 } mark { background-color: #ff0; color: #000 } small { font-size: 80% } sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: initial } sub { bottom: -.25em } sup { top: -.5em } img { border-style: none } svg:not(:root) { overflow: hidden } code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em } figure { margin: 1em 40px } hr { box-sizing: initial; height: 0; overflow: visible } button, input, optgroup, select, textarea { font: inherit; margin: 0 } optgroup { font-weight: 700 } button, input { overflow: visible } button, select { text-transform: none } [type=reset], [type=submit], button, html [type=button] { -webkit-appearance: button } [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner { border-style: none; padding: 0 } [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring { outline: 1px dotted ButtonText } fieldset { border: 1px solid silver; margin: 0 2px; padding: .35em .625em .75em } legend { box-sizing: border-box; color: inherit; display: table; max-width: 100%; padding: 0; white-space: normal } textarea { overflow: auto } [type=checkbox], [type=radio] { box-sizing: border-box; padding: 0 } [type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button { height: auto } [type=search] { -webkit-appearance: textfield; outline-offset: -2px } [type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration { -webkit-appearance: none } ::-webkit-input-placeholder { color: inherit; opacity: .54 } ::-webkit-file-upload-button { -webkit-appearance: button; font: inherit } @keyframes spin { to { transform: rotate(1turn) } } @keyframes ellipsis { to { width: 20px } } html { box-sizing: border-box } body, html { position: fixed; top: 0; left: 0; right: 0; bottom: 0; overflow: hidden; color: #333; margin: 0; padding: 0; font-size: 16px; font-family: Gotham; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale } *, :after, :before { box-sizing: inherit } h2 { font-size: 30px; font-weight: 300; letter-spacing: .3px; line-height: 35px } p.bold, span.bold { font-weight: 600 } p { font-size: 16px; letter-spacing: .3px } p.bold { font-weight: 600 } p.note { font-size: 14px; font-style: italic; color: grey } p.check { font-size: 12px; margin-left: 2px } p.check-connected { color: #04e04e } p.check-intermittent { color: #f2ca00 } p.check-disconnected { color: #c00 } p.double-check-text { padding-top: 15px } p.loading:after { overflow: hidden; display: inline-block; vertical-align: bottom; content: "…"; width: 0; animation: ellipsis .9s steps(4) infinite } span.delete-icon { color: #c00 } span.delete-icon:hover { color: #ad0404 } span.delete-icon:active { color: #8a0707 } span.active-connected { color: #000 !important } span.checkmark { color: #04e04e !important } span.caret { margin-left: 5px } a, button { -webkit-user-select: none; user-select: none } a:active, a:focus, button:active, button:focus { outline: none !important } a.btn-link, button.btn-link { font-weight: 600; color: #00a2e8; font-size: 13px; line-height: 15px; letter-spacing: .3px; transition: color .15s ease-in-out } a.btn-link:hover, button.btn-link:hover { text-decoration: none; color: #0487c0 } a.btn-link:focus, button.btn-link:focus { text-decoration: none; color: #00a2e8 } a.btn-link:active, button.btn-link:active { text-decoration: none; color: #005175 } a.btn-error, button.btn-error { font-weight: 600; color: #c00 } a.btn-error:hover, button.btn-error:hover { text-decoration: none; color: #ad0404 } a.btn-error:focus, button.btn-error:focus { text-decoration: none; color: #c00 } a.btn-error:active, button.btn-error:active { text-decoration: none; color: #8a0707 } a.btn-clear, button.btn-clear { border: 1px solid #fff; border-radius: 0; color: #fff; font-weight: 500; line-height: 15px; letter-spacing: .3px; padding: 10px 0; background-color: initial; transition: background-color .15s ease-in-out } a.btn-clear:hover, button.btn-clear:hover { background-color: hsla(0, 0%, 100%, .05); color: #fff } a.btn-clear:focus, button.btn-clear:focus { background-color: initial; color: #fff } a.btn-clear:active, button.btn-clear:active { background-color: hsla(0, 0%, 100%, .15); color: #fff } a.btn-anchor-bottom, button.btn-anchor-bottom { position: absolute; left: 0; right: 0; bottom: 85px } a.refresh, button.refresh { color: grey; text-decoration: underline } a.default-cursor, button.default-cursor { cursor: auto !important } a.btn-delete, button.btn-delete { padding-top: 0; padding-bottom: 0; float: right } a.left, button.left { float: left } a.right, button.right { float: right } ul { padding-left: 0; list-style: none } label { font-weight: 400; font-size: 13px; letter-spacing: .3px; line-height: 15px; color: #666; margin-bottom: 15px } label.item-label { border-bottom: 1px solid #efefef; padding-bottom: 15px; letter-spacing: .27px; display: block } label img.input-info { margin-left: 10px } input:not([type=checkbox]):not([type=radio]) { -webkit-appearance: none } input:-webkit-autofill { -webkit-box-shadow: 0 0 0 1000px #f1fafe inset !important; -webkit-text-fill-color: #000 !important } button[type=submit], input[type=file] { opacity: 0; width: 0; height: 0; overflow: hidden; position: absolute; padding: 0; border: none } form.show-submit button[type=submit] { opacity: 1; width: auto; height: auto; overflow: initial; position: static; padding: initial; border: initial } img.spinner { animation: spin 1s linear infinite } img.spinner.xs { width: 20px; height: 20px } img.spinner.sm { width: 40px; height: 40px } img.info.md, img.warning.md { width: 25px; height: 25px } img.info.sm, img.warning.sm { width: 18px; height: 18px } img.caution.md { width: 26.79px; height: 25px } img.caution.sm { width: 19.29px; height: 18px } .btn-action { color: #fff !important; border-radius: 0 } .btn-action, .btn-action.disabled { background-color: #00a2e8; border-color: #00a2e8 } .btn-action:hover { background-color: #0487c0; border-color: #0487c0 } .btn-action:active { background-color: #005175; border-color: #005175 } .disabled, .uneditable { pointer-events: none !important; cursor: default !important } .disabled:active, .disabled:focus, .uneditable:active, .uneditable:focus { text-decoration: none !important } .disabled { color: #ccc !important } .uneditable { color: #666 !important } .line-breaks { white-space: pre-wrap } .no-margin { margin: 0 !important } .no-padding { padding: 0 !important } .no-padding-bottom { padding-bottom: 0 !important } .no-horizontal-padding { padding-left: 0 !important; padding-right: 0 !important } .no-border { border: none !important } .no-cursor { cursor: default !important } .hand { cursor: pointer } .vertical-align { display: flex; align-items: center } .horizontal-row-align { flex-direction: row } .center-align, .horizontal-row-align { display: flex; justify-content: center; align-items: center } .position-relative { position: relative } .inline-block { display: inline-block } .ellipsis { text-overflow: ellipsis; white-space: nowrap; overflow: hidden } .input-group span.connect { color: #fff; font-weight: 600 } .input-group.focus .input-verified, .input-group:active .input-verified, .input-group:hover .input-verified { border-right: 1px solid #666 !important } .advanced-settings-toggle { -webkit-user-select: none; user-select: none; margin-bottom: 15px; cursor: pointer; display: inline-block } .advanced-settings-toggle .advanced-settings-text { font-weight: 400; font-size: 13px; color: #35454c; display: inline } .advanced-settings-toggle .advanced-settings-input-fields { margin-top: 12px } .clipboard-image { width: 20px; pointer-events: none } .success-checkmark-image { width: 50px; height: auto } .vertical-spacing { margin-top: 25px; margin-bottom: 25px } .full-width { width: 100% } .text-black { color: #000 !important } .text-lowercase { text-transform: lowercase } .required-field-helper-text { color: #c00; text-align: right; font-size: 12px; padding-top: 12.5px } @media(min-width:360px) { .required-field-helper-text { margin-bottom: 25px } } .required-field-asterisk:after { content: "*"; padding: 4px; font-size: 16px; font-weight: 700; color: #c00 } .modal-header { padding-top: 30px; padding-bottom: 30px } .modal-body { padding-top: 50px; padding-bottom: 25px } .modal-footer { padding-top: 30px; padding-bottom: 30px } .app { height: 100%; display: flex; flex-direction: column; overflow-x: hidden; overflow-y: scroll; -webkit-overflow-scrolling: touch } .core-layout__viewport { flex: 1; padding-bottom: 60px; position: relative } .core-layout__viewport.wizard-container { background-image: linear-gradient(180deg, #fff 0, #e7e7e7); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#FFFFFFFF", endColorstr="#FFE7E7E7", GradientType=0); background-repeat: repeat-x } .core-layout__viewport.success-container { background-color: #35454c } .core-layout__viewport>.container { flex: 1 } @media(min-width:768px) { .app { overflow-x: auto } } .input-group-action { padding: 6px 22px; background-color: #00a2e8; border-color: #00a2e8; transition: background-color .15s ease-in-out, border-color .15s ease-in-out } .input-group-action:active, .input-group-action:focus { background-color: #005175; border-color: #005175 } .input-group-default { padding: 6px 22px; background-color: #fff } .input-group-blend, .input-group-default, .input-group-validation { transition: background-color .15s ease-in-out, border-color .15s ease-in-out } .input-group-blend { padding: 6px 18px; background-color: #f7f7f7 } .input-group-blend:focus, .input-group-blend:hover { cursor: default } .password-input button[type=submit] { opacity: 0; width: 0; height: 0; overflow: hidden; position: absolute; padding: 0; border: none } .password-input .eye-icon { position: absolute; top: 0; bottom: 0; margin: auto; z-index: 20; opacity: .8; right: 15px } .password-input .eye-icon-submittable { right: 70px } .password-input .password-field-with-icon { padding-right: 60px } @keyframes fade-in { 0% { opacity: 0 } to { opacity: 1 } } .dropdown { display: inline-block; width: 100% } .dropdown select { position: absolute; -webkit-appearance: menulist-button; width: 100%; height: 100% } .dropdown select:focus { outline: none } .dropdown .dropdown-toggle { height: 48px; width: 100%; border: 1px solid #ccc; background-color: #f7f7f7; text-align: left; padding: 2px 25px 3px 10px; position: relative; font-size: 16px; color: #000; overflow: hidden; text-overflow: ellipsis } .dropdown .dropdown-toggle.ios { pointer-events: none } .dropdown .dropdown-toggle img { position: absolute; right: 10px; top: 50%; margin-top: -4px } .dropdown .dropdown-menu { margin-top: 0; border: 1px solid #666; border-top: none; border-radius: 0; width: 100%; padding: 0 0 10px; box-shadow: none; background-color: #f7f7f7; min-width: 0; max-height: 50vh; overflow-y: scroll; animation: fade-in .15s ease-in-out } @media(max-height:720px) { .dropdown .dropdown-menu { max-height: 35vh } } .dropdown .dropdown-menu::-webkit-scrollbar { -webkit-overflow-scrolling: auto; -webkit-appearance: none; background-color: #f7f7f7 } .dropdown .dropdown-menu::-webkit-scrollbar:vertical { width: 11px } .dropdown .dropdown-menu::-webkit-scrollbar:horizontal { height: 11px } .dropdown .dropdown-menu::-webkit-scrollbar-thumb { border-radius: 8px; border: 2px solid #f7f7f7; background-color: #666 } .dropdown .dropdown-menu>li { height: 48px } .dropdown .dropdown-menu>li>a { font-size: 16px; color: #000; padding: 0 10px; line-height: 48px; overflow: hidden; text-overflow: ellipsis } .dropdown .dropdown-menu>li>a:hover { background-color: #efefef } .dropdown .dropdown-menu>li>a:focus { background-color: #00a2e8; color: #fff } .dropdown.open .dropdown-toggle { border: 1px solid; border-color: #666 #666 #ccc; color: #ccc } .caret-down { transform: rotate(180deg) } @includes keyframes(Select-animation-fadeIn) { 0% { opacity: 0 } to { opacity: 1 } } .Select { position: relative } .Select.disabled .Select-placeholder { color: #ccc !important } .Select, .Select div, .Select input, .Select span { box-sizing: border-box } .Select.is-disabled>.Select-control { background-color: #f7f7f7 } .Select.is-disabled>.Select-control:hover { box-shadow: none } .Select.is-disabled .Select-arrow-zone { cursor: default; pointer-events: none; opacity: .35 } .Select-control { background-color: #f7f7f7; border: 1px solid #ccc; font-size: 16px; color: #000; padding: 2px 2px 3px 10px; text-align: left; cursor: default; border-spacing: 0; border-collapse: initial; min-height: 48px; outline: none; overflow: hidden; position: relative; width: 100% } .Select-control .Select-input:focus { outline: none } .is-searchable.is-open>.Select-control { cursor: text; border: 1px solid #666 } .is-open>.Select-control { border-bottom-right-radius: 0; border-bottom-left-radius: 0; background: #f7f7f7; border-color: #b3b3b3 #ccc #d9d9d9 } .is-open>.Select-control .Select-arrow { top: -2px; border-color: transparent transparent #999; border-width: 0 5px 5px } .is-searchable.is-focused:not(.is-open)>.Select-control { cursor: text } .Select--single>.Select-control .Select-value, .Select-placeholder { bottom: 0; color: #000; left: 0; padding: 12px 10px 3px; position: absolute; right: 0; top: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap } .has-value.is-pseudo-focused.Select--single>.Select-control .Select-value .Select-value-label, .has-value.Select--single>.Select-control .Select-value .Select-value-label { color: #000 } .has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label, .has-value.Select--single>.Select-control .Select-value a.Select-value-label { cursor: pointer; text-decoration: none } .has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:focus, .has-value.is-pseudo-focused.Select--single>.Select-control .Select-value a.Select-value-label:hover, .has-value.Select--single>.Select-control .Select-value a.Select-value-label:focus, .has-value.Select--single>.Select-control .Select-value a.Select-value-label:hover { outline: none; text-decoration: underline } .Select-input { font-size: 16px; color: #000; background-color: #f7f7f7; width: 100%; vertical-align: middle } .Select-input>input { width: 100%; background: none transparent; border: 0; box-shadow: none; cursor: default; display: inline-block; font-family: inherit; font-size: inherit; margin: 3px 0 0; outline: none; line-height: 36px; padding: 0; -webkit-appearance: none } .is-focused .Select-input>input { cursor: text } .has-value.is-pseudo-focused .Select-input { opacity: 0 } .Select-control:not(.is-searchable)>.Select-input { outline: none } .Select-loading-zone { cursor: pointer; text-align: center } .Select-loading, .Select-loading-zone { position: relative; vertical-align: middle; width: 16px } .Select-loading { animation: Select-animation-spin .4s linear infinite; height: 16px; box-sizing: border-box; border-radius: 50%; border: 2px solid #ccc; border-right-color: #000; display: inline-block } .Select-clear-zone { animation: Select-animation-fadeIn .2s; color: #999; cursor: pointer; position: absolute; text-align: center; vertical-align: middle; width: 17px; right: 30px; top: 27% } .Select-clear-zone:hover { color: #d0021b } .Select-clear { display: inline-block; font-size: 18px; line-height: 1 } .Select--multi .Select-clear-zone { width: 17px } .Select-arrow-zone { cursor: pointer; position: absolute; text-align: center; vertical-align: middle; width: 25px; right: 4px; top: 24% } .Select-arrow { border-color: #999 transparent transparent; border-style: solid; border-width: 5px 5px 2.5px; display: inline-block; height: 0; width: 0; position: relative } .is-open .Select-arrow, .Select-arrow-zone:hover>.Select-arrow { border-top-color: #666 } .Select--multi .Select-multi-value-wrapper { display: inline-block } .Select .Select-aria-only { display: inline-block; height: 1px; width: 1px; margin: -1px; clip: rect(0, 0, 0, 0); overflow: hidden; float: left } .Select-menu-outer { background-color: #f7f7f7; border: 1px solid #666; border-top-color: #ccc; box-shadow: none; box-sizing: border-box; margin-top: -1px; margin-bottom: 48px; max-height: 300px; position: absolute; top: 100%; width: 100%; z-index: 3; -webkit-overflow-scrolling: touch } .Select-menu { max-height: 298px; overflow-y: auto } .Select-option { box-sizing: border-box; background-color: #f7f7f7; color: #000; cursor: pointer; display: block; padding: 0 10px; line-height: 48px; animation: fade-in .15s ease-in-out } .Select-option.is-focused, .Select-option.is-selected { background-color: #efefef; color: #000 } .Select-option.is-disabled { color: #ccc; cursor: default } .Select-noresults { box-sizing: border-box; color: #999; cursor: default; display: block; padding: 8px 10px } .Select-noresults:focus, .Select-noresults:hover { background-color: #efefef } .Select--multi .Select-input { vertical-align: middle; margin-left: 0; padding: 0 } .Select--multi.has-value .Select-input { margin-left: 5px } .Select--multi .Select-value { background-color: #efefef; background-color: rgba(0, 126, 255, .08); border: 1px solid #ccc; border: 1px solid rgba(0, 126, 255, .24); color: #007eff; display: inline-block; font-size: 16px; line-height: 1.4; margin-left: 5px; margin-top: 5px; vertical-align: top } .Select--multi .Select-value-icon, .Select--multi .Select-value-label { display: inline-block; vertical-align: middle } .Select--multi .Select-value-label { border-bottom-right-radius: 2px; border-top-right-radius: 2px; cursor: default; padding: 2px 5px } .Select--multi a.Select-value-label { cursor: pointer; text-decoration: none } .Select--multi a.Select-value-label:hover { text-decoration: underline } .is-open .Select-control>.Select-multi-value-wrapper>.Select-value>.Select-value-label { color: #ccc } .Select--multi .Select-value-icon { cursor: pointer; border-bottom-left-radius: 2px; border-top-left-radius: 2px; border-right: 1px solid #c2e0ff; border-right: 1px solid rgba(0, 126, 255, .24); padding: 1px 5px 3px } .Select--multi .Select-value-icon:focus, .Select--multi .Select-value-icon:hover { background-color: #f7f7f7; background-color: rgba(0, 113, 230, .08) } .Select--multi .Select-value-icon:active { background-color: #f7f7f7; background-color: rgba(0, 126, 255, .24) } .Select--multi.is-disabled .Select-value { background-color: #f7f7f7; border: 1px solid #e3e3e3; color: #000 } .Select--multi.is-disabled .Select-value-icon { cursor: not-allowed; border-right: 1px solid #e3e3e3 } .Select--multi.is-disabled .Select-value-icon:active, .Select--multi.is-disabled .Select-value-icon:focus, .Select--multi.is-disabled .Select-value-icon:hover { background-color: #f7f7f7 } @keyframes Select-animation-spin { to { transform: rotate(1turn) } } .Select-not-listed { line-height: 36px; color: #000; cursor: pointer } @media(max-width:580px) { .Select-clear-zone { animation: Select-animation-fadeIn .2s; color: #999; cursor: pointer; position: relative; text-align: center; vertical-align: middle; width: 17px; right: 0; top: 0 } .Select-option { border-bottom: 1px solid hsla(0, 0%, 40%, .3); word-wrap: break-word; line-height: 24px; padding: 11.5px 10px } .Select-option:last-of-type { border-bottom: none } } .Select-create-option-placeholder { font-style: italic } .login label { color: #666 } .login label>.info-icon { padding-left: 5px; vertical-align: bottom } .login input { background-color: #fff } .login .forgot-form { margin-bottom: 0 } .login .forgot-form #forgot-password { text-align: right } .login .form-group { margin-bottom: 15px } @media(min-width:768px) { .login .form-group { margin-bottom: 25px } } .modal-banner-container { display: flex; flex-direction: column; align-items: center; overflow: hidden; width: 100%; padding: 25px; color: #fff; background: #5f85e7 } .modal-banner-container .banner-content-container { display: flex; flex-direction: row; margin-bottom: 15px } .modal-banner-container .banner-content-container .banner-img-container { display: flex; flex-direction: column; justify-content: space-around; padding-right: 25px; padding-left: 30px; border-radius: 25px } .modal-banner-container .banner-content-container .banner-img-container img { height: 75px; width: 75px; border-radius: 20%; overflow: hidden } .modal-banner-container .banner-content-container .banner-text-container { display: flex; flex-direction: column; justify-content: center; max-width: 200px } .modal-banner-container .banner-content-container .banner-text-container h4, .modal-banner-container .banner-content-container .banner-text-container span { font-weight: 700; font-size: 16px; padding: 0; line-height: 1.5 } .modal-banner-container .banner-content-button { padding: 10px 20px; border: 0; border-radius: 4px; min-width: 300px; background-color: #fff; color: #000 } .energy-icon, .energy-icon .centered { display: flex; flex-direction: column } .energy-icon .centered { align-items: center; justify-content: center } .energy-icon .icon-container { border-width: 1px; border-style: solid } .energy-icon .icon-container.default-icon-container { border-style: dotted } .grid-services { border-radius: 25px; background-color: #f3f3f3; padding: 0 10px; position: relative; top: -25px; text-align: center; margin: auto; width: 150px } .grid-services>span.grid-services-text { font-size: 12px; color: grey } .circle:before { content: "●"; font-size: 20px } .circle { font-size: 20px; vertical-align: middle; margin-right: 3px; color: #029c36 } .collapsible-container { width: 100% } .collapsible-container:last-child { border-bottom: none } .collapsible-container>.collapsible-header { cursor: pointer; position: relative; display: flex; flex-direction: row; text-align: left; justify-content: space-between; align-items: center } .rotate-90 { transform: rotate(90deg) } .system-container { display: flex; flex-direction: column; margin: 10px } .system-container .system-loading-spinner { margin: 24px auto } .system-sitecontroller { padding-bottom: 15px; margin-bottom: 15px; border-bottom: 1px solid grey } .system-sitecontroller:last-child { margin-bottom: 0; border-bottom: none } .system-device-header { margin-top: 12px; margin-bottom: 6px; width: 95% } .system-device-body { margin-left: 20px } .system-device-update-progress progress { display: block; width: 100% } .vitals-section { margin: 10px 0 0 -15px; font-weight: 700; font-size: 14px } .powerwall-plus-section { margin-left: 15px } .inverter-power-buttons { display: flex; flex-direction: row; margin: 8px 0 } .inverter-power-buttons button { padding: 8px 12px; border-width: 0; margin: 0 1px; font-weight: 700; font-size: 14px; color: #000 } .inverter-power-buttons .inverter-power-button-selected { background-color: #00a2e8 } .inverter-power-buttons .inverter-power-button-left { border-top-left-radius: 8px; border-bottom-left-radius: 8px } .inverter-power-buttons .inverter-power-button-right { border-top-right-radius: 8px; border-bottom-right-radius: 8px } .inverter-power-buttons button:disabled { background-color: #ccc; color: #aaa } .inverter-power-buttons button:disabled.inverter-power-button-selected { background-color: #8bb9cc; color: #888 } .inverter-reset-button { border-radius: 8px; padding: 8px 12px; border-width: 0; margin: 0 1px; font-weight: 700; font-size: 14px; color: #000 } .vitals-value { font-size: 14px; margin-bottom: 0 } .vitals-value-selftest { font-weight: 700; color: #00a2e8 } .vitals-value-fault { font-weight: 700; color: #c00 } .vitals-value-muted { color: #aaa } .vitals-value-error { color: #c00 } .vitals-value-warning { color: #00a2e8 } .vitals-heading { color: #666; font-size: 16px; margin-top: 0 } .vitals-item { margin-right: 15px; margin-left: 15px; margin-top: 25px } .vitals-item:last-child { margin-bottom: 25px } .device-alert { color: red; margin: 8px } .device-alert-note { color: #000; margin-left: 24px; font-size: smaller; font-style: italic } .device-attention { display: inline-block; width: 1em; height: 1em; line-height: 1em; border-radius: 50%; text-align: center; font-weight: 700; color: #fff; background-color: red; margin: 0 2px } .device-attention:before { content: "!" } .system-warning-subtitle { font-size: larger; font-weight: 700; color: red } .powerwall-pairing-container { margin: 20px 0 10px } .powerwall-pairing-container .powerwall-pairing-link { display: block; text-transform: uppercase; font-size: smaller; font-weight: 700 } .powerwall-pairing-container .powerwall-pairing-link:before { content: "+ " } .powerwall-pairing-container .powerwall-pairing-column { position: relative; display: flex; flex-direction: column } .powerwall-pairing-container .powerwall-pairing-row { display: flex; flex-direction: row; justify-content: space-around; flex: 1 } .powerwall-pairing-container .powerwall-pairing-message { color: #000 } .powerwall-pairing-container .powerwall-pairing-success { color: green } .powerwall-pairing-container .powerwall-pairing-error { color: red } .powerwall-pairing-container .progress-bar { width: 100% } .powerwall-scanning-link { display: block; text-transform: uppercase; font-size: smaller; font-weight: 700 } .powerwall-scanning-link-disabled { color: #666 } .installation-problem { margin: 5px 0; padding: 10px; border: 2px solid red; background: #fff; color: #000; max-width: 768px } .installation-problem .installation-problem-title { font-weight: 700 } .installation-problem .installation-problem-title:before { content: "⚠️"; font-size: 32px; margin-right: 8px; float: right } .installation-problem .installation-problem-image { margin: 0 } .installation-problem .installation-problem-image img { width: 100% } .installation-problem .installation-problem-details { font-style: italic; margin-left: 10px } .installation-problem .installation-problem-details ul { list-style: unset } .installation-problem .installation-problem-details ul li { margin-left: 20px } @keyframes opacity-pulse { 0% { opacity: .12 } 5% { opacity: 0 } 15% { opacity: .12 } 25% { opacity: .2 } to { opacity: .2 } } .power-flow { display: flex; flex-direction: column; align-items: center; position: relative } .power-flow .glow-container { position: absolute; border-style: solid; margin: 0 auto; box-sizing: initial; animation: opacity-pulse 1s ease-in-out infinite } .power-flow .label-container { position: absolute; z-index: 5; margin: 0 auto } .power-flow .label-container p { text-align: center; font-weight: 600; margin: 0 } .power-flow .label-container.label-inactive p { color: #ccc; opacity: .5 } .power-flow .label-container img.label-image { margin-right: 5px; vertical-align: sub } .power-flow .label-container #missing-meter-label { font-size: 28px } .power-flow .islanded-container { position: absolute; z-index: 4; margin: 0 auto } .power-flow .grid-row-container { display: flex; flex-direction: row; justify-content: center; align-items: center } .power-flow p.icon-text { font-size: 14px; padding-top: 5px; color: #fff } .power-flow .inactive { opacity: .5 } .power-flow .compact-btn-row { display: flex; flex-direction: row; justify-content: flex-start; align-items: center } .power-flow .btn-sitemaster { margin-top: 25px; margin-bottom: 25px } .power-flow .btn-sitemaster.btn-stop { background-color: #c00; border-color: #c00 } .power-flow .btn-sitemaster.btn-stop:hover { background-color: #ad0404; border-color: #ad0404 } .power-flow .btn-sitemaster.btn-stop:active { background-color: #8a0707; border-color: #8a0707 } .power-flow .btn-sitemaster.btn-stop:disabled { background-color: #ccc; border-color: #ccc } .power-flow .btn-sitemaster.btn-start { background-color: #04e04e; border-color: #04e04e } .power-flow .btn-sitemaster.btn-start:hover { background-color: #029c36; border-color: #029c36 } .power-flow .btn-sitemaster.btn-start:active { background-color: #01591f; border-color: #01591f } .power-flow .btn-sitemaster.btn-start:disabled { background-color: #ccc; border-color: #ccc } .power-flow .disabled-explanation { display: block; text-align: center; margin-top: -19px; margin-bottom: 6px } .power-flow circle { fill: inherit } .power-flow .powerwall-soe { position: absolute; top: 0; left: 0; right: 0; margin: 0 auto } .power-flow-grid { background-color: #f7f7f7; width: 100vw; left: 50%; right: 50%; margin-left: -50vw; margin-right: -50vw; position: relative } .power-flow-grid.error { background-color: #fff !important; border-bottom: 1px solid #efefef } .power-flow-grid.active { background-color: #35454c } .auto-config { margin: 15px 0 } .auto-config button { border-radius: 3px; color: #000; font-weight: 700 } .auto-config-done-button { display: block; margin-left: auto; margin-right: 50px } .auto-config-state { margin-top: 8px; margin-left: 20px } .auto-config-complete, .auto-config-pending { color: green; font-weight: 700 } .auto-config-error-state { color: red } .auto-config-action { margin: 10px; color: #000; font-size: smaller; font-style: italic } .auto-config-throbber { animation-name: auto-config-throb; animation-duration: 2.5s; animation-iteration-count: infinite } @keyframes auto-config-throb { 0% { color: #000 } 50% { color: transparent } to { color: #000 } } .menu-item { border-bottom: 1px solid #efefef } .menu-item>a { display: block; position: relative; color: #000; text-decoration: initial; padding: 15px 0 } .menu-item>a:hover { cursor: pointer; text-decoration: none } .menu-item>a>img { position: absolute; right: 5px; top: 50% } .menu-item>a>img.caret-right { margin-top: -7px } .menu-item>a>img.caret-down, .menu-item>a>img.caret-up { margin-top: -4px } .menu-item>a>img.no-float { position: inherit; right: inherit; top: inherit } .menu-item>a>.delete-icon { font-size: 30px; position: absolute; right: 5px; top: 50%; margin-top: -20px } .menu-item .single-title { margin: 0; padding: 10px 0 } .menu-item .single-title, .menu-item .subtitle, .menu-item .title { font-size: 16px; letter-spacing: .3px } .menu-item .title { color: #000; font-weight: 400 } .menu-item .title>span { color: grey } .menu-item .subtitle { color: #666 } ul.menu-items { margin: 0 } ul.menu-items>li .subtitle { color: grey } .power-flow-header { background-color: #35454c; position: absolute; top: 15px; left: 0; right: 0; z-index: 2 } .power-flow-header p.name { font-weight: 600; text-align: center; color: #fff; margin: 0 } .power-flow-header p.name.not-connected { color: red } .power-flow-header p.name.connected { color: green } .power-flow-header p.name.scanning, .power-flow-header p.name.updating { animation: scanning-updating-throb 2.5s infinite } .power-flow-header.inactive { background-color: #f7f7f7 } .power-flow-header.inactive p.name { color: #666 } @keyframes scanning-updating-throb { 0% { color: #ff0 } 50% { color: rgba(255, 255, 0, .5) } to { color: #ff0 } } .power-flow-grid { padding-top: 64px } .power-flow-grid~ul.overview-menu>li:first-child { border-top: 1px solid #efefef } .home .btn-link { margin: 25px 0 } .home .compliance-row { display: flex; align-items: center; margin-bottom: 24px } .home .download-logo-button { display: flex; align-items: center; margin-left: auto; padding: 15px 0 0 } .home .align-image-right { height: 15%; width: 15%; margin-left: auto; padding-right: 10px } .home .footer { position: absolute; left: 0 } .home .footer a.cancel-link { cursor: auto } .home .footer a.cancel-link:hover { color: #666 } .home .navigation-row { padding-top: 60px } .modal-sitemaster .modal-footer { text-align: left } .soft-blocker-container { z-index: 2000; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: #eaeaea; padding: 30px } .carousel-display-container { position: fixed; top: 0; left: 0; display: flex; flex-direction: column; align-items: center; padding: 30px; width: 100% } .carousel-display-container img { max-height: 90vh } .carousel-display-container .carousel-toggle-left { position: fixed; top: 0; left: 0; width: 25%; height: 65% } .carousel-display-container .carousel-toggle-right { position: fixed; top: 0; left: 75%; width: 25%; height: 65% } .carousel-menu-container { z-index: 2001; position: fixed; bottom: 0; left: 0; background-color: #fff; width: 100%; height: 35%; padding: 30px } .carousel-menu-container h3 { margin-top: 0; font-size: 16px; font-weight: 600 } .carousel-menu-container p { font-size: 12px } .carousel-menu-container .menu-carousel-tabs { display: flex; flex-direction: row; justify-content: center; gap: 10px; padding-bottom: 30px } .carousel-menu-container .button-continue { position: fixed; bottom: 30px; background-color: #3e6ae1; color: #fff; padding: 10px; width: calc(100% - 60px); border-radius: 4px; border-style: none; text-align: center; font-size: 12px } @media(min-width:600px) { .carousel-menu-container .button-continue { width: 94px; left: calc(50% - 47px) } } .confirm-checkbox { text-align: center; margin: 30px } .confirm-checkbox-input { margin-top: -3px !important } .password-generate-container { display: flex; flex-direction: column; margin: 10px } .password-generate-container .password-generate-help-text { margin: 36px 0 } .password-generate-container .password-generate-spinner { margin-left: 12px; width: 24px; height: 24px } .password-generate-container .password-generate-notice { font-weight: 700 } .password-generate-container .password-generate-error { font-weight: 700; color: #c00 } .service-container { display: flex; flex-direction: column; margin: 10px } .factory-reset-modal-button, .factory-reset-modal-container { text-align: center; margin: 1em } ================================================ FILE: tools/server/app/static/viz-static/app.js ================================================ !(function (e) { function t(t) { for (var n, r, s = t[0], _ = t[1], l = t[2], c = 0, u = []; c < s.length; c++) (r = s[c]), Object.prototype.hasOwnProperty.call(a, r) && a[r] && u.push(a[r][0]), (a[r] = 0); for (n in _) Object.prototype.hasOwnProperty.call(_, n) && (e[n] = _[n]); for (d && d(t); u.length; ) u.shift()(); return o.push.apply(o, l || []), i(); } function i() { for (var e, t = 0; t < o.length; t++) { for (var i = o[t], n = !0, r = 1; r < i.length; r++) { var _ = i[r]; 0 !== a[_] && (n = !1); } n && (o.splice(t--, 1), (e = s((s.s = i[0])))); } return e; } var n = {}, r = { 9: 0 }, a = { 9: 0 }, o = []; function s(t) { if (n[t]) return n[t].exports; var i = (n[t] = { i: t, l: !1, exports: {} }); return e[t].call(i.exports, i, i.exports, s), (i.l = !0), i.exports; } (s.e = function (e) { var t = []; r[e] ? t.push(r[e]) : 0 !== r[e] && { 2: 1, 4: 1, 5: 1, 6: 1, 7: 1, 10: 1, 11: 1, 12: 1, 13: 1, 14: 1, 15: 1, 16: 1, 17: 1, 18: 1, 19: 1, 20: 1, 21: 1, 22: 1, 23: 1, 24: 1, 25: 1, 27: 1, 30: 1, 31: 1, 32: 1, 33: 1, 34: 1, 35: 1, 36: 1, 37: 1, 38: 1 }[e] && t.push( (r[e] = new Promise(function (t, i) { for (var n = window.appPrefix + e + ".17c71172308436a079d1.css", a = s.p + n, o = document.getElementsByTagName("link"), _ = 0; _ < o.length; _++) { var l = (d = o[_]).getAttribute("data-href") || d.getAttribute("href"); if ("stylesheet" === d.rel && (l === n || l === a)) return t(); } var c = document.getElementsByTagName("style"); for (_ = 0; _ < c.length; _++) { var d; if ((l = (d = c[_]).getAttribute("data-href")) === n || l === a) return t(); } var u = document.createElement("link"); (u.rel = "stylesheet"), (u.type = "text/css"), (u.onload = t), (u.onerror = function (t) { var n = (t && t.target && t.target.src) || a, o = new Error("Loading CSS chunk " + e + " failed.\n(" + n + ")"); (o.code = "CSS_CHUNK_LOAD_FAILED"), (o.request = n), delete r[e], u.parentNode.removeChild(u), i(o); }), (u.href = a), document.getElementsByTagName("head")[0].appendChild(u); }).then(function () { r[e] = 0; })) ); var i = a[e]; if (0 !== i) if (i) t.push(i[2]); else { var n = new Promise(function (t, n) { i = a[e] = [t, n]; }); t.push((i[2] = n)); var o, _ = document.createElement("script"); (_.charset = "utf-8"), (_.timeout = 120), s.nc && _.setAttribute("nonce", s.nc), (_.src = (function (e) { return ( s.p + "" + ({ 2: "advanced-settings~control~meter-validation~settings", 3: "batteries~powerwall~summary", 4: "advanced-settings~settings", 5: "batteries", 6: "legal~registration", 7: "advanced-settings", 8: "alert", 10: "client-protocols", 11: "compliance", 12: "components", 13: "control", 14: "cts", 15: "diagnostics", 16: "generation", 17: "grid", 18: "installation", 19: "inverter", 20: "legal", 21: "meter", 22: "meter-validation", 23: "modbus", 24: "network", 25: "network-switch", 26: "open-loop-meter-validation", 27: "phase", 28: "powerwall", 29: "registration", 30: "security", 31: "self-test-log-viewer", 32: "settings", 33: "success", 34: "summary", 35: "timezone", 36: "update", 37: "upgrade", 38: "wizard", }[e] || e) + ".17c71172308436a079d1.js" ); })(e)); var l = new Error(); o = function (t) { (_.onerror = _.onload = null), clearTimeout(c); var i = a[e]; if (0 !== i) { if (i) { var n = t && ("load" === t.type ? "missing" : t.type), r = t && t.target && t.target.src; (l.message = "Loading chunk " + e + " failed.\n(" + n + ": " + r + ")"), (l.name = "ChunkLoadError"), (l.type = n), (l.request = r), i[1](l); } a[e] = void 0; } }; var c = setTimeout(function () { o({ type: "timeout", target: _ }); }, 12e4); (_.onerror = _.onload = o), document.head.appendChild(_); } return Promise.all(t); }), (s.m = e), (s.c = n), (s.d = function (e, t, i) { s.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: i }); }), (s.r = function (e) { "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(e, "__esModule", { value: !0 }); }), (s.t = function (e, t) { if ((1 & t && (e = s(e)), 8 & t)) return e; if (4 & t && "object" == typeof e && e && e.__esModule) return e; var i = Object.create(null); if ((s.r(i), Object.defineProperty(i, "default", { enumerable: !0, value: e }), 2 & t && "string" != typeof e)) for (var n in e) s.d( i, n, function (t) { return e[t]; }.bind(null, n) ); return i; }), (s.n = function (e) { var t = e && e.__esModule ? function () { return e.default; } : function () { return e; }; return s.d(t, "a", t), t; }), (s.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t); }), (s.p = window.appPrefix), (s.oe = function (e) { throw (console.error(e), e); }); var _ = (window.webpackJsonp = window.webpackJsonp || []), l = _.push.bind(_); (_.push = t), (_ = _.slice()); for (var c = 0; c < _.length; c++) t(_[c]); var d = l; o.push([1050, 0]), i(); })([ , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "LOCATION_CHANGE", function () { return n; }), i.d(t, "SHOW_NAVIGATION", function () { return r; }), i.d(t, "UPDATE_NAVIGATION", function () { return a; }), i.d(t, "SHOW_BACK", function () { return o; }), i.d(t, "HIDE_BACK", function () { return s; }), i.d(t, "SHOW_CANCEL", function () { return _; }), i.d(t, "HIDE_CANCEL", function () { return l; }), i.d(t, "SHOW_FORWARD", function () { return c; }), i.d(t, "HIDE_FORWARD", function () { return d; }), i.d(t, "RESET_NAVIGATION", function () { return u; }), i.d(t, "SHOW_MODAL", function () { return m; }), i.d(t, "UPDATE_MODAL", function () { return p; }), i.d(t, "HIDE_MODAL", function () { return g; }), i.d(t, "DESTROY_MODAL", function () { return w; }), i.d(t, "SHOW_HEADER", function () { return v; }), i.d(t, "UPDATE_HEADER", function () { return f; }), i.d(t, "RESET_HEADER", function () { return h; }), i.d(t, "SHOW_BANNER", function () { return E; }), i.d(t, "DESTROY_BANNER", function () { return b; }), i.d(t, "DESTROY_ALL_BANNERS", function () { return y; }), i.d(t, "REQUEST_CONFIG_INITIALIZED", function () { return S; }), i.d(t, "RECEIVE_CONFIG_INITIALIZED", function () { return R; }), i.d(t, "RECEIVE_CONFIG_INITIALIZED_ERROR", function () { return T; }), i.d(t, "REQUEST_SYNC_CONFIG", function () { return A; }), i.d(t, "RECEIVE_SYNC_CONFIG_SUCCESS", function () { return C; }), i.d(t, "RECEIVE_SYNC_CONFIG_ERROR", function () { return I; }), i.d(t, "CHANGE_USERNAME", function () { return O; }), i.d(t, "CHANGE_LOGIN_TYPE", function () { return N; }), i.d(t, "REQUEST_LOGIN", function () { return k; }), i.d(t, "RECEIVE_LOGIN_SUCCESS", function () { return P; }), i.d(t, "RECEIVE_LOGIN_ERROR", function () { return D; }), i.d(t, "REQUEST_GENERATE_PASSWORD", function () { return L; }), i.d(t, "RECEIVE_GENERATE_PASSWORD_SUCCESS", function () { return M; }), i.d(t, "RECEIVE_GENERATE_PASSWORD_ERROR", function () { return z; }), i.d(t, "REQUEST_RESET_PASSWORD", function () { return U; }), i.d(t, "RECEIVE_RESET_PASSWORD_SUCCESS", function () { return V; }), i.d(t, "RECEIVE_RESET_PASSWORD_ERROR", function () { return G; }), i.d(t, "REQUEST_CHANGE_PASSWORD", function () { return j; }), i.d(t, "RECEIVE_CHANGE_PASSWORD_SUCCESS", function () { return W; }), i.d(t, "RECEIVE_CHANGE_PASSWORD_ERROR", function () { return F; }), i.d(t, "REQUEST_LOGOUT", function () { return q; }), i.d(t, "RECEIVE_LOGOUT_ERROR", function () { return x; }), i.d(t, "RESET_AUTHENTICATION", function () { return B; }), i.d(t, "REQUEST_START_TOGGLE_AUTH", function () { return H; }), i.d(t, "RECEIVE_START_TOGGLE_AUTH_SUCCESS", function () { return K; }), i.d(t, "RECEIVE_START_TOGGLE_AUTH_ERROR", function () { return Y; }), i.d(t, "REQUEST_CANCEL_TOGGLE_AUTH", function () { return Q; }), i.d(t, "RECEIVE_CANCEL_TOGGLE_AUTH_SUCCESS", function () { return Z; }), i.d(t, "RECEIVE_CANCEL_TOGGLE_AUTH_ERROR", function () { return J; }), i.d(t, "REQUEST_TOGGLE_AUTH_LOGIN", function () { return X; }), i.d(t, "RECEIVE_TOGGLE_AUTH_LOGIN_SUCCESS", function () { return $; }), i.d(t, "RECEIVE_TOGGLE_AUTH_LOGIN_ERROR", function () { return ee; }), i.d(t, "REQUEST_SUPPORTS_TOGGLE_AUTH", function () { return te; }), i.d(t, "RECEIVE_SUPPORTS_TOGGLE_AUTH_SUCCESS", function () { return ie; }), i.d(t, "RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR", function () { return ne; }), i.d(t, "REQUEST_NETWORKS", function () { return re; }), i.d(t, "RECEIVE_NETWORKS_SUCCESS", function () { return ae; }), i.d(t, "RECEIVE_NETWORKS_ERROR", function () { return oe; }), i.d(t, "REQUEST_ACCESS_POINTS", function () { return se; }), i.d(t, "RECEIVE_ACCESS_POINTS_SUCCESS", function () { return _e; }), i.d(t, "RECEIVE_ACCESS_POINTS_ERROR", function () { return le; }), i.d(t, "REQUEST_CONNECT_ETHERNET", function () { return ce; }), i.d(t, "RECEIVE_CONNECT_ETHERNET_SUCCESS", function () { return de; }), i.d(t, "RECEIVE_CONNECT_ETHERNET_ERROR", function () { return ue; }), i.d(t, "REQUEST_SCAN_WIFI_NETWORKS", function () { return me; }), i.d(t, "RECEIVE_SCAN_WIFI_NETWORKS_SUCCESS", function () { return pe; }), i.d(t, "RECEIVE_SCAN_WIFI_NETWORKS_ERROR", function () { return ge; }), i.d(t, "REQUEST_CONNECT_WIFI", function () { return we; }), i.d(t, "RECEIVE_CONNECT_WIFI_SUCCESS", function () { return ve; }), i.d(t, "RECEIVE_CONNECT_WIFI_ERROR", function () { return fe; }), i.d(t, "REQUEST_DISCONNECT_NETWORK", function () { return he; }), i.d(t, "RECEIVE_DISCONNECT_NETWORK_SUCCESS", function () { return Ee; }), i.d(t, "RECEIVE_DISCONNECT_NETWORK_ERROR", function () { return be; }), i.d(t, "REQUEST_DELETE_NETWORK", function () { return ye; }), i.d(t, "RECEIVE_DELETE_NETWORK_SUCCESS", function () { return Se; }), i.d(t, "RECEIVE_DELETE_NETWORK_ERROR", function () { return Re; }), i.d(t, "RESET_NETWORK_CONFIG", function () { return Te; }), i.d(t, "CANCEL_NETWORK", function () { return Ae; }), i.d(t, "REQUEST_CLIENT_PROTOCOLS", function () { return Ce; }), i.d(t, "RECEIVE_CLIENT_PROTOCOLS_SUCCESS", function () { return Ie; }), i.d(t, "RECEIVE_CLIENT_PROTOCOLS_ERROR", function () { return Oe; }), i.d(t, "RECEIVE_CHECK_UPDATE", function () { return Ne; }), i.d(t, "REQUEST_INSTALL_UPDATE", function () { return ke; }), i.d(t, "RECEIVE_CHECK_UPDATE_ERROR", function () { return Pe; }), i.d(t, "RECEIVE_START_UPDATE_ERROR", function () { return De; }), i.d(t, "DOWNLOAD_STALLED_ERROR", function () { return Le; }), i.d(t, "DOWNLOAD_PROGRESSING", function () { return Me; }), i.d(t, "REQUEST_UPDATE", function () { return ze; }), i.d(t, "RECEIVE_UPDATE_ERROR", function () { return Ue; }), i.d(t, "CANCEL_UPDATE", function () { return Ve; }), i.d(t, "SAVE_SYSTEM_INFO", function () { return Ge; }), i.d(t, "RESET_SYSTEM_INFO", function () { return je; }), i.d(t, "REQUEST_CHECK_UPDATE_URGENCY", function () { return We; }), i.d(t, "RECEIVE_CHECK_UPDATE_URGENCY", function () { return Fe; }), i.d(t, "RECEIVE_CHECK_UPDATE_URGENCY_ERROR", function () { return qe; }), i.d(t, "FACTORY_RESET", function () { return xe; }), i.d(t, "RESET_ALL", function () { return Be; }), i.d(t, "ADD_METER", function () { return He; }), i.d(t, "REMOVE_METER", function () { return Ke; }), i.d(t, "RESET_METER_CONFIG", function () { return Ye; }), i.d(t, "RESET_METER_CURRENT_TRANSFORMER_READINGS", function () { return Qe; }), i.d(t, "REQUEST_DETECT_METER", function () { return Ze; }), i.d(t, "RECEIVE_DETECT_METER_SUCCESS", function () { return Je; }), i.d(t, "RECEIVE_DETECT_METER_ERROR", function () { return Xe; }), i.d(t, "REQUEST_CREATE_METER", function () { return $e; }), i.d(t, "RECEIVE_CREATE_METER_SUCCESS", function () { return et; }), i.d(t, "RECEIVE_CREATE_METER_ERROR", function () { return tt; }), i.d(t, "REQUEST_DELETE_METER", function () { return it; }), i.d(t, "RECEIVE_DELETE_METER_SUCCESS", function () { return nt; }), i.d(t, "RECEIVE_DELETE_METER_ERROR", function () { return rt; }), i.d(t, "REQUEST_COMMISSION_METER", function () { return at; }), i.d(t, "RECEIVE_COMMISSION_METER_UPDATE", function () { return ot; }), i.d(t, "RECEIVE_COMMISSION_METER_SUCCESS", function () { return st; }), i.d(t, "RECEIVE_COMMISSION_METER_ERROR", function () { return _t; }), i.d(t, "REQUEST_METER_CONFIG", function () { return lt; }), i.d(t, "RECEIVE_METER_CONFIG_UPDATE", function () { return ct; }), i.d(t, "RECEIVE_METER_CONFIG_SUCCESS", function () { return dt; }), i.d(t, "RECEIVE_METER_CONFIG_ERROR", function () { return ut; }), i.d(t, "REQUEST_SET_METER_CTS", function () { return mt; }), i.d(t, "RECEIVE_SET_METER_CTS_SUCCESS", function () { return pt; }), i.d(t, "RECEIVE_SET_METER_CTS_ERROR", function () { return gt; }), i.d(t, "REQUEST_DELETE_METER_CTS", function () { return wt; }), i.d(t, "RECEIVE_DELETE_METER_CTS_SUCCESS", function () { return vt; }), i.d(t, "RECEIVE_DELETE_METER_CTS_ERROR", function () { return ft; }), i.d(t, "REQUEST_METER_READINGS", function () { return ht; }), i.d(t, "RECEIVE_METER_READINGS_SUCCESS", function () { return Et; }), i.d(t, "RECEIVE_METER_READINGS_ERROR", function () { return bt; }), i.d(t, "REQUEST_METER_FLIP_CT", function () { return yt; }), i.d(t, "RECEIVE_METER_FLIP_CT_SUCCESS", function () { return St; }), i.d(t, "RECEIVE_METER_FLIP_CT_ERROR", function () { return Rt; }), i.d(t, "REQUEST_METER_AGGREGATES", function () { return Tt; }), i.d(t, "RECEIVE_METER_AGGREGATES_SUCCESS", function () { return At; }), i.d(t, "RECEIVE_METER_AGGREGATES_ERROR", function () { return Ct; }), i.d(t, "CANCEL_METER", function () { return It; }), i.d(t, "REQUEST_METER_AMP_RATINGS", function () { return Ot; }), i.d(t, "RECEIVE_METER_AMP_RATINGS_SUCCESS", function () { return Nt; }), i.d(t, "RECEIVE_METER_AMP_RATINGS_ERROR", function () { return kt; }), i.d(t, "REQUEST_SET_METER_AMP_RATINGS", function () { return Pt; }), i.d(t, "RECEIVE_SET_METER_AMP_RATINGS_SUCCESS", function () { return Dt; }), i.d(t, "RECEIVE_SET_METER_AMP_RATINGS_ERROR", function () { return Lt; }), i.d(t, "REQUEST_SYNC_CT_VOLTAGE_REFERENCES", function () { return Mt; }), i.d(t, "RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS", function () { return zt; }), i.d(t, "RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR", function () { return Ut; }), i.d(t, "REQUEST_SET_SYNC_CT_VOLTAGE_REFERENCES", function () { return Vt; }), i.d(t, "RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS", function () { return Gt; }), i.d(t, "RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR", function () { return jt; }), i.d(t, "REQUEST_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS", function () { return Wt; }), i.d(t, "RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_SUCCESS", function () { return Ft; }), i.d(t, "RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR", function () { return qt; }), i.d(t, "REQUEST_ENABLE_INVERTER_METER_READINGS", function () { return xt; }), i.d(t, "RECEIVE_ENABLE_INVERTER_METER_READINGS_SUCCESS", function () { return Bt; }), i.d(t, "RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR", function () { return Ht; }), i.d(t, "REQUEST_GRID_CODES", function () { return Kt; }), i.d(t, "RECEIVE_GRID_CODES_SUCCESS", function () { return Yt; }), i.d(t, "RECEIVE_GRID_CODES_ERROR", function () { return Qt; }), i.d(t, "REQUEST_SAVE_GRID_CODE", function () { return Zt; }), i.d(t, "RECEIVE_SAVE_GRID_CODE_SUCCESS", function () { return Jt; }), i.d(t, "RECEIVE_SAVE_GRID_CODE_ERROR", function () { return Xt; }), i.d(t, "REQUEST_GRID_STATUS", function () { return $t; }), i.d(t, "RECEIVE_GRID_STATUS_SUCCESS", function () { return ei; }), i.d(t, "RECEIVE_GRID_STATUS_ERROR", function () { return ti; }), i.d(t, "REQUEST_SAVE_OFF_GRID", function () { return ii; }), i.d(t, "RECEIVE_SAVE_OFF_GRID_SUCCESS", function () { return ni; }), i.d(t, "RECEIVE_SAVE_OFF_GRID_ERROR", function () { return ri; }), i.d(t, "REQUEST_SAVE_GRID_PHASE", function () { return ai; }), i.d(t, "RECEIVE_SAVE_GRID_PHASE_SUCCESS", function () { return oi; }), i.d(t, "RECEIVE_SAVE_GRID_PHASE_ERROR", function () { return si; }), i.d(t, "RESET_GRID_CODE_CONFIG", function () { return _i; }), i.d(t, "SCAN_POWERWALLS", function () { return li; }), i.d(t, "REQUEST_POWERWALLS", function () { return ci; }), i.d(t, "RECEIVE_POWERWALLS", function () { return di; }), i.d(t, "RECEIVE_POWERWALLS_ERROR", function () { return ui; }), i.d(t, "REQUEST_SOE", function () { return mi; }), i.d(t, "RECEIVE_SOE_SUCCESS", function () { return pi; }), i.d(t, "RECEIVE_SOE_ERROR", function () { return gi; }), i.d(t, "REQUEST_POWERWALLS_UPDATE", function () { return wi; }), i.d(t, "RECEIVE_POWERWALLS_UPDATE_SUCCESS", function () { return vi; }), i.d(t, "RECEIVE_POWERWALLS_UPDATE_ERROR", function () { return fi; }), i.d(t, "REQUEST_POWERWALLS_STATUS", function () { return hi; }), i.d(t, "RECEIVE_POWERWALLS_STATUS_SUCCESS", function () { return Ei; }), i.d(t, "RECEIVE_POWERWALLS_STATUS_ERROR", function () { return bi; }), i.d(t, "RESET_POWERWALL_CONFIG", function () { return yi; }), i.d(t, "REQUEST_START_PHASE_DETECTION", function () { return Si; }), i.d(t, "RECEIVE_START_PHASE_DETECTION_SUCCESS", function () { return Ri; }), i.d(t, "RECEIVE_START_PHASE_DETECTION_ERROR", function () { return Ti; }), i.d(t, "REQUEST_FETCH_PHASE_INFORMATION", function () { return Ai; }), i.d(t, "RECEIVE_FETCH_PHASE_INFORMATION_SUCCESS", function () { return Ci; }), i.d(t, "RECEIVE_FETCH_PHASE_INFORMATION_ERROR", function () { return Ii; }), i.d(t, "REQUEST_SAVE_PHASE_USAGES", function () { return Oi; }), i.d(t, "RECEIVE_SAVE_PHASE_USAGES_SUCCESS", function () { return Ni; }), i.d(t, "RECEIVE_SAVE_PHASE_USAGES_ERROR", function () { return ki; }), i.d(t, "REQUEST_ENABLE_INVERTER_SOLAR_METER_READINGS", function () { return Pi; }), i.d(t, "RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_SUCCESS", function () { return Di; }), i.d(t, "RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_ERROR", function () { return Li; }), i.d(t, "REQUEST_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS", function () { return Mi; }), i.d(t, "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS", function () { return zi; }), i.d(t, "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS_ERROR", function () { return Ui; }), i.d(t, "ADD_SOLAR", function () { return Vi; }), i.d(t, "REMOVE_SOLAR", function () { return Gi; }), i.d(t, "REQUEST_SOLAR_CONFIG", function () { return ji; }), i.d(t, "RECEIVE_SOLAR_CONFIG_SUCCESS", function () { return Wi; }), i.d(t, "RECEIVE_SOLAR_CONFIG_ERROR", function () { return Fi; }), i.d(t, "REQUEST_SOLAR_BRANDS", function () { return qi; }), i.d(t, "RECEIVE_SOLAR_BRANDS_SUCCESS", function () { return xi; }), i.d(t, "RECEIVE_SOLAR_BRANDS_ERROR", function () { return Bi; }), i.d(t, "REQUEST_SOLAR_MODELS", function () { return Hi; }), i.d(t, "RECEIVE_SOLAR_MODELS_SUCCESS", function () { return Ki; }), i.d(t, "RECEIVE_SOLAR_MODELS_ERROR", function () { return Yi; }), i.d(t, "REQUEST_SAVE_SOLAR_INVERTERS", function () { return Qi; }), i.d(t, "RECEIVE_SAVE_SOLAR_INVERTER_SUCCESS", function () { return Zi; }), i.d(t, "RECEIVE_SAVE_SOLAR_INVERTERS_SUCCESS", function () { return Ji; }), i.d(t, "RECEIVE_SAVE_SOLAR_INVERTER_ERROR", function () { return Xi; }), i.d(t, "RECEIVE_SAVE_SOLAR_INVERTERS_ERROR", function () { return $i; }), i.d(t, "REQUEST_DELETE_SOLAR_INVERTER", function () { return en; }), i.d(t, "RECEIVE_DELETE_SOLAR_INVERTER_SUCCESS", function () { return tn; }), i.d(t, "RECEIVE_DELETE_SOLAR_INVERTER_ERROR", function () { return nn; }), i.d(t, "REQUEST_CONNECT_SOLAR_INVERTER", function () { return rn; }), i.d(t, "RECEIVE_CONNECT_SOLAR_INVERTER_SUCCESS", function () { return an; }), i.d(t, "RECEIVE_CONNECT_SOLAR_INVERTER_ERROR", function () { return on; }), i.d(t, "RESET_SOLAR_CONFIG", function () { return sn; }), i.d(t, "REQUEST_GENERATOR_CONFIG", function () { return _n; }), i.d(t, "RECEIVE_GENERATOR_CONFIG_SUCCESS", function () { return ln; }), i.d(t, "RECEIVE_GENERATOR_CONFIG_ERROR", function () { return cn; }), i.d(t, "REQUEST_GENERATOR_DISCONNECT_TYPES", function () { return dn; }), i.d(t, "RECEIVE_GENERATOR_DISCONNECT_TYPES_SUCCESS", function () { return un; }), i.d(t, "RECEIVE_GENERATOR_DISCONNECT_TYPES_ERROR", function () { return mn; }), i.d(t, "REQUEST_SAVE_GENERATORS", function () { return pn; }), i.d(t, "RECEIVE_SAVE_GENERATORS_SUCCESS", function () { return gn; }), i.d(t, "RECEIVE_SAVE_GENERATORS_ERROR", function () { return wn; }), i.d(t, "REQUEST_DELETE_GENERATOR", function () { return vn; }), i.d(t, "RECEIVE_DELETE_GENERATOR_SUCCESS", function () { return fn; }), i.d(t, "RECEIVE_DELETE_GENERATOR_ERROR", function () { return hn; }), i.d(t, "ADD_GENERATOR", function () { return En; }), i.d(t, "REMOVE_GENERATOR", function () { return bn; }), i.d(t, "RESET_GENERATOR_CONFIG", function () { return yn; }), i.d(t, "REQUEST_SITE_INFO", function () { return Sn; }), i.d(t, "RECEIVE_SITE_INFO_SUCCESS", function () { return Rn; }), i.d(t, "RECEIVE_SITE_INFO_ERROR", function () { return Tn; }), i.d(t, "REQUEST_SAVE_SITE_NAME", function () { return An; }), i.d(t, "RECEIVE_SAVE_SITE_NAME_SUCCESS", function () { return Cn; }), i.d(t, "RECEIVE_SAVE_SITE_NAME_ERROR", function () { return In; }), i.d(t, "REQUEST_SITE_NAME", function () { return On; }), i.d(t, "RECEIVE_SITE_NAME_SUCCESS", function () { return Nn; }), i.d(t, "RECEIVE_SITE_NAME_ERROR", function () { return kn; }), i.d(t, "REQUEST_SAVE_EXPORT_MODE", function () { return Pn; }), i.d(t, "RECEIVE_SAVE_EXPORT_MODE_SUCCESS", function () { return Dn; }), i.d(t, "RECEIVE_SAVE_EXPORT_MODE_ERROR", function () { return Ln; }), i.d(t, "REQUEST_OPERATION_SETTINGS", function () { return Mn; }), i.d(t, "RECEIVE_OPERATION_SETTINGS_SUCCESS", function () { return zn; }), i.d(t, "RECEIVE_OPERATION_SETTINGS_ERROR", function () { return Un; }), i.d(t, "REQUEST_SAVE_OPERATION_SETTINGS", function () { return Vn; }), i.d(t, "RECEIVE_SAVE_OPERATION_SETTINGS_SUCCESS", function () { return Gn; }), i.d(t, "RECEIVE_SAVE_OPERATION_SETTINGS_ERROR", function () { return jn; }), i.d(t, "REQUEST_TIMEZONE", function () { return Wn; }), i.d(t, "RECEIVE_TIMEZONE_SUCCESS", function () { return Fn; }), i.d(t, "RECEIVE_TIMEZONE_ERROR", function () { return qn; }), i.d(t, "REQUEST_SAVE_TIMEZONE", function () { return xn; }), i.d(t, "RECEIVE_SAVE_TIMEZONE_SUCCESS", function () { return Bn; }), i.d(t, "RECEIVE_SAVE_TIMEZONE_ERROR", function () { return Hn; }), i.d(t, "RESET_OPERATION_SETTINGS", function () { return Kn; }), i.d(t, "REQUEST_GET_EXTRA_PROGRAMS", function () { return Yn; }), i.d(t, "RECEIVE_GET_EXTRA_PROGRAMS_SUCCESS", function () { return Qn; }), i.d(t, "RECEIVE_GET_EXTRA_PROGRAMS_ERROR", function () { return Zn; }), i.d(t, "REQUEST_POST_EXTRA_PROGRAM", function () { return Jn; }), i.d(t, "RECEIVE_POST_EXTRA_PROGRAM_SUCCESS", function () { return Xn; }), i.d(t, "RECEIVE_POST_EXTRA_PROGRAM_ERROR", function () { return $n; }), i.d(t, "REQUEST_SITEMASTER_SETTINGS", function () { return er; }), i.d(t, "RECEIVE_SITEMASTER_SETTINGS_SUCCESS", function () { return tr; }), i.d(t, "RECEIVE_SITEMASTER_SETTINGS_ERROR", function () { return ir; }), i.d(t, "REQUEST_START_SITEMASTER", function () { return nr; }), i.d(t, "RECEIVE_START_SITEMASTER_SUCCESS", function () { return rr; }), i.d(t, "RECEIVE_START_SITEMASTER_ERROR", function () { return ar; }), i.d(t, "REQUEST_STOP_SITEMASTER", function () { return or; }), i.d(t, "RECEIVE_STOP_SITEMASTER_SUCCESS", function () { return sr; }), i.d(t, "RECEIVE_STOP_SITEMASTER_ERROR", function () { return _r; }), i.d(t, "REQUEST_SITEMASTER_FOR_COMMISSIONING", function () { return lr; }), i.d(t, "RECEIVE_SITEMASTER_FOR_COMMISSIONING_SUCCESS", function () { return cr; }), i.d(t, "RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR", function () { return dr; }), i.d(t, "RESET_SITEMASTER_SETTINGS", function () { return ur; }), i.d(t, "REQUEST_RUN_INVERTER_TEST", function () { return mr; }), i.d(t, "RECEIVE_RUN_INVERTER_TEST_SUCCESS", function () { return pr; }), i.d(t, "RECEIVE_RUN_INVERTER_TEST_ERROR", function () { return gr; }), i.d(t, "REQUEST_TEST_RESULTS", function () { return wr; }), i.d(t, "RECEIVE_TEST_RESULTS", function () { return vr; }), i.d(t, "RECEIVE_TEST_RESULTS_ERROR", function () { return fr; }), i.d(t, "REQUEST_CANCEL_TEST", function () { return hr; }), i.d(t, "RECEIVE_CANCEL_TEST_SUCCESS", function () { return Er; }), i.d(t, "RECEIVE_CANCEL_TEST_ERROR", function () { return br; }), i.d(t, "REQUEST_TEST_ALERTS", function () { return yr; }), i.d(t, "RECEIVE_TEST_ALERTS_SUCCESS", function () { return Sr; }), i.d(t, "RECEIVE_TEST_ALERTS_ERROR", function () { return Rr; }), i.d(t, "RESET_TESTS", function () { return Tr; }), i.d(t, "REQUEST_START_DIAGNOSTIC_TESTS", function () { return Ar; }), i.d(t, "RECEIVE_START_DIAGNOSTIC_TESTS_SUCCESS", function () { return Cr; }), i.d(t, "RECEIVE_START_DIAGNOSTIC_TESTS_ERROR", function () { return Ir; }), i.d(t, "REQUEST_STOP_DIAGNOSTIC_TEST", function () { return Or; }), i.d(t, "RECEIVE_STOP_DIAGNOSTIC_TEST_SUCCESS", function () { return Nr; }), i.d(t, "RECEIVE_STOP_DIAGNOSTIC_TEST_ERROR", function () { return kr; }), i.d(t, "REQUEST_DIAGNOSTIC_TEST_RESULTS", function () { return Pr; }), i.d(t, "RECEIVE_DIAGNOSTIC_TEST_RESULTS_SUCCESS", function () { return Dr; }), i.d(t, "RECEIVE_DIAGNOSTIC_TEST_RESULTS_ERROR", function () { return Lr; }), i.d(t, "RESET_DIAGNOSTICS", function () { return Mr; }), i.d(t, "REQUEST_INSTALLATION_INFORMATION", function () { return zr; }), i.d(t, "RECEIVE_INSTALLATION_INFORMATION_SUCCESS", function () { return Ur; }), i.d(t, "RECEIVE_INSTALLATION_INFORMATION_ERROR", function () { return Vr; }), i.d(t, "REQUEST_SAVE_INSTALLATION_INFORMATION", function () { return Gr; }), i.d(t, "RECEIVE_SAVE_INSTALLATION_INFORMATION_SUCCESS", function () { return jr; }), i.d(t, "RECEIVE_SAVE_INSTALLATION_INFORMATION_ERROR", function () { return Wr; }), i.d(t, "CHANGE_COMPANY", function () { return Fr; }), i.d(t, "CHANGE_PHONE", function () { return qr; }), i.d(t, "CHANGE_EMAIL", function () { return xr; }), i.d(t, "SAVE_PHOTOS", function () { return Br; }), i.d(t, "RESET_INSTALLATION_INFORMATION", function () { return Hr; }), i.d(t, "REQUEST_COMPANY_INFORMATION", function () { return Kr; }), i.d(t, "RECEIVE_COMPANY_INFORMATION_SUCCESS", function () { return Yr; }), i.d(t, "RECEIVE_COMPANY_INFORMATION_ERROR", function () { return Qr; }), i.d(t, "REQUEST_SAVE_LEGAL_INFORMATION", function () { return Zr; }), i.d(t, "RECEIVE_SAVE_LEGAL_INFORMATION_SUCCESS", function () { return Jr; }), i.d(t, "RECEIVE_SAVE_LEGAL_INFORMATION_ERROR", function () { return Xr; }), i.d(t, "REQUEST_CUSTOMER_INFORMATION_CONFIG", function () { return $r; }), i.d(t, "RECEIVE_CUSTOMER_INFORMATION_CONFIG_SUCCESS", function () { return ea; }), i.d(t, "RECEIVE_CUSTOMER_INFORMATION_CONFIG_ERROR", function () { return ta; }), i.d(t, "REQUEST_REGISTER_CUSTOMER_INFORMATION", function () { return ia; }), i.d(t, "RECEIVE_REGISTER_CUSTOMER_INFORMATION_SUCCESS", function () { return na; }), i.d(t, "RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR", function () { return ra; }), i.d(t, "RESET_CUSTOMER_INFORMATION", function () { return aa; }), i.d(t, "REQUEST_REGISTRATION", function () { return oa; }), i.d(t, "RECEIVE_REGISTRATION_SUCCESS", function () { return sa; }), i.d(t, "RECEIVE_REGISTRATION_ERROR", function () { return _a; }), i.d(t, "SHOW_ERROR", function () { return la; }), i.d(t, "CLEAR_ERROR", function () { return ca; }), i.d(t, "CLEAR_ERRORS", function () { return da; }), i.d(t, "RESET_ERROR_CONFIG", function () { return ua; }), i.d(t, "GENERIC_ERROR", function () { return ma; }), i.d(t, "NO_CONNECTION_ERROR", function () { return pa; }), i.d(t, "METER_INCORRECT_CT_ERROR", function () { return ga; }), i.d(t, "METER_INCORRECT_SHORT_ID_ERROR", function () { return wa; }), i.d(t, "METER_DUPLICATE_SHORT_ID_ERROR", function () { return va; }), i.d(t, "METER_INCORRECT_SERIAL_ERROR", function () { return fa; }), i.d(t, "METER_DUPLICATE_SERIAL_ERROR", function () { return ha; }), i.d(t, "METER_INCORRECT_MAC_ADDRESS_ERROR", function () { return Ea; }), i.d(t, "METER_INCORRECT_IP_ADDRESS_ERROR", function () { return ba; }), i.d(t, "METER_BARCODE_DECODE_ERROR", function () { return ya; }), i.d(t, "INVERTER_TEST_RESULT_ERROR", function () { return Sa; }), i.d(t, "INVERTER_TEST_GRID_UNCOMPLIANT_ERROR", function () { return Ra; }), i.d(t, "INVERTER_TEST_NOT_IDLE_ERROR", function () { return Ta; }), i.d(t, "PASSWORD_INCORRECT_MATCH_ERROR", function () { return Aa; }), i.d(t, "METER_UPDATE_ERROR", function () { return Ca; }), i.d(t, "METER_FETCH_STATUS_ERROR", function () { return Ia; }), i.d(t, "POWER_RATING_RANGE_ERROR", function () { return Oa; }), i.d(t, "SUSTAINED_POWER_RANGE_ERROR", function () { return Na; }), i.d(t, "SITEMASTER_NOT_RUNNING_ERROR", function () { return ka; }), i.d(t, "SHOW_TOAST", function () { return Pa; }), i.d(t, "CLEAR_TOAST", function () { return Da; }), i.d(t, "CLEAR_TOASTS", function () { return La; }), i.d(t, "NO_METERS_CONFIGURED_WARNING", function () { return Ma; }), i.d(t, "NO_POWERWALLS_DETECTED_WARNING", function () { return za; }), i.d(t, "NO_SOLAR_INVERTER_WARNING", function () { return Ua; }), i.d(t, "NO_SOLAR_CT_WARNING", function () { return Va; }), i.d(t, "NO_SITE_OR_LOAD_CT_WARNING", function () { return Ga; }), i.d(t, "RECEIVE_INSTALLATION_PROBLEMS", function () { return ja; }); const n = "LOCATION_CHANGE", r = "SHOW_NAVIGATION", a = "UPDATE_NAVIGATION", o = "SHOW_BACK", s = "HIDE_BACK", _ = "SHOW_CANCEL", l = "HIDE_CANCEL", c = "SHOW_FORWARD", d = "HIDE_FORWARD", u = "RESET_NAVIGATION", m = "SHOW_MODAL", p = "UPDATE_MODAL", g = "HIDE_MODAL", w = "DESTROY_MODAL", v = "SHOW_HEADER", f = "UPDATE_HEADER", h = "RESET_HEADER", E = "SHOW_BANNER", b = "DESTROY_BANNER", y = "DESTROY_ALL_BANNERS", S = "REQUEST_CONFIG_INITIALIZED", R = "RECEIVE_CONFIG_INITIALIZED", T = "RECEIVE_CONFIG_INITIALIZED_ERROR", A = "REQUEST_SYNC_CONFIG", C = "RECEIVE_SYNC_CONFIG_SUCCESS", I = "RECEIVE_SYNC_CONFIG_ERROR", O = "CHANGE_USERNAME", N = "CHANGE_LOGIN_TYPE", k = "REQUEST_LOGIN", P = "RECEIVE_LOGIN_SUCCESS", D = "RECEIVE_LOGIN_ERROR", L = "REQUEST_GENERATE_PASSWORD", M = "RECEIVE_GENERATE_PASSWORD_SUCCESS", z = "RECEIVE_GENERATE_PASSWORD_ERROR", U = "REQUEST_RESET_PASSWORD", V = "RECEIVE_RESET_PASSWORD_SUCCESS", G = "RECEIVE_RESET_PASSWORD_ERROR", j = "REQUEST_CHANGE_PASSWORD", W = "RECEIVE_CHANGE_PASSWORD_SUCCESS", F = "RECEIVE_CHANGE_PASSWORD_ERROR", q = "REQUEST_LOGOUT", x = "RECEIVE_LOGOUT_ERROR", B = "RESET_AUTHENTICATION", H = "REQUEST_START_TOGGLE_AUTH", K = "RECEIVE_START_TOGGLE_AUTH_SUCCESS", Y = "RECEIVE_START_TOGGLE_AUTH_ERROR", Q = "REQUEST_CANCEL_TOGGLE_AUTH", Z = "RECEIVE_CANCEL_TOGGLE_AUTH_SUCCESS", J = "RECEIVE_CANCEL_TOGGLE_AUTH_ERROR", X = "REQUEST_TOGGLE_AUTH_LOGIN", $ = "RECEIVE_TOGGLE_AUTH_LOGIN_SUCCESS", ee = "RECEIVE_TOGGLE_AUTH_LOGIN_ERROR", te = "REQUEST_SUPPORTS_TOGGLE_AUTH", ie = "RECEIVE_SUPPORTS_TOGGLE_AUTH_SUCCESS", ne = "RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR", re = "REQUEST_NETWORKS", ae = "RECEIVE_NETWORKS_SUCCESS", oe = "RECEIVE_NETWORKS_ERROR", se = "REQUEST_ACCESS_POINTS", _e = "RECEIVE_ACCESS_POINTS_SUCCESS", le = "RECEIVE_ACCESS_POINTS_ERROR", ce = "REQUEST_CONNECT_ETHERNET", de = "RECEIVE_CONNECT_ETHERNET_SUCCESS", ue = "RECEIVE_CONNECT_ETHERNET_ERROR", me = "REQUEST_SCAN_WIFI_NETWORKS", pe = "RECEIVE_SCAN_WIFI_NETWORKS_SUCCESS", ge = "RECEIVE_SCAN_WIFI_NETWORKS_ERROR", we = "REQUEST_CONNECT_WIFI", ve = "RECEIVE_CONNECT_WIFI_SUCCESS", fe = "RECEIVE_CONNECT_WIFI_ERROR", he = "REQUEST_DISCONNECT_NETWORK", Ee = "RECEIVE_DISCONNECT_NETWORK_SUCCESS", be = "RECEIVE_DISCONNECT_NETWORK_ERROR", ye = "REQUEST_DELETE_NETWORK", Se = "RECEIVE_DELETE_NETWORK_SUCCESS", Re = "RECEIVE_DELETE_NETWORK_ERROR", Te = "RESET_NETWORK_CONFIG", Ae = "CANCEL_NETWORK", Ce = "REQUEST_CLIENT_PROTOCOLS", Ie = "RECEIVE_CLIENT_PROTOCOLS_SUCCESS", Oe = "RECEIVE_CLIENT_PROTOCOLS_ERROR", Ne = "RECEIVE_CHECK_UPDATE", ke = "REQUEST_INSTALL_UPDATE", Pe = "RECEIVE_CHECK_UPDATE_ERROR", De = "RECEIVE_START_UPDATE_ERROR", Le = "DOWNLOAD_STALLED_ERROR", Me = "DOWNLOAD_PROGRESSING", ze = "REQUEST_UPDATE", Ue = "RECEIVE_UPDATE_ERROR", Ve = "CANCEL_UPDATE", Ge = "SAVE_SYSTEM_INFO", je = "RESET_SYSTEM_INFO", We = "REQUEST_CHECK_UPDATE_URGENCY", Fe = "RECEIVE_CHECK_UPDATE_URGENCY", qe = "RECEIVE_CHECK_UPDATE_URGENCY_ERROR", xe = "FACTORY_RESET", Be = "RESET_ALL", He = "ADD_METER", Ke = "REMOVE_METER", Ye = "RESET_METER_CONFIG", Qe = "RESET_METER_CURRENT_TRANSFORMER_READINGS", Ze = "REQUEST_DETECT_METER", Je = "RECEIVE_DETECT_METER_SUCCESS", Xe = "RECEIVE_DETECT_METER_ERROR", $e = "REQUEST_CREATE_METER", et = "RECEIVE_CREATE_METER_SUCCESS", tt = "RECEIVE_CREATE_METER_ERROR", it = "REQUEST_DELETE_METER", nt = "RECEIVE_DELETE_METER_SUCCESS", rt = "RECEIVE_DELETE_METER_ERROR", at = "REQUEST_COMMISSION_METER", ot = "RECEIVE_COMMISSION_METER_UPDATE", st = "RECEIVE_COMMISSION_METER_SUCCESS", _t = "RECEIVE_COMMISSION_METER_ERROR", lt = "REQUEST_METER_CONFIG", ct = "RECEIVE_METER_CONFIG_UPDATE", dt = "RECEIVE_METER_CONFIG_SUCCESS", ut = "RECEIVE_METER_CONFIG_ERROR", mt = "REQUEST_SET_METER_CTS", pt = "RECEIVE_SET_METER_CTS_SUCCESS", gt = "RECEIVE_SET_METER_CTS_ERROR", wt = "REQUEST_DELETE_METER_CTS", vt = "RECEIVE_DELETE_METER_CTS_SUCCESS", ft = "RECEIVE_DELETE_METER_CTS_ERROR", ht = "REQUEST_METER_READINGS", Et = "RECEIVE_METER_READINGS_SUCCESS", bt = "RECEIVE_METER_READINGS_ERROR", yt = "REQUEST_METER_FLIP_CT", St = "RECEIVE_METER_FLIP_CT_SUCCESS", Rt = "RECEIVE_METER_FLIP_CT_ERROR", Tt = "REQUEST_METER_AGGREGATES", At = "RECEIVE_METER_AGGREGATES_SUCCESS", Ct = "RECEIVE_METER_AGGREGATES_ERROR", It = "CANCEL_METER", Ot = "REQUEST_METER_AMP_RATINGS", Nt = "RECEIVE_METER_AMP_RATINGS_SUCCESS", kt = "RECEIVE_METER_AMP_RATINGS_ERROR", Pt = "REQUEST_SET_METER_AMP_RATINGS", Dt = "RECEIVE_SET_METER_AMP_RATINGS_SUCCESS", Lt = "RECEIVE_SET_METER_AMP_RATINGS_ERROR", Mt = "REQUEST_SYNC_CT_VOLTAGE_REFERENCES", zt = "RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS", Ut = "RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR", Vt = "REQUEST_SET_SYNC_CT_VOLTAGE_REFERENCES", Gt = "RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS", jt = "RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR", Wt = "REQUEST_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS", Ft = "RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_SUCCESS", qt = "RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR", xt = "REQUEST_ENABLE_INVERTER_METER_READINGS", Bt = "RECEIVE_ENABLE_INVERTER_METER_READINGS_SUCCESS", Ht = "RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR", Kt = "REQUEST_GRID_CODES", Yt = "RECEIVE_GRID_CODES_SUCCESS", Qt = "RECEIVE_GRID_CODES_ERROR", Zt = "REQUEST_SAVE_GRID_CODE", Jt = "RECEIVE_SAVE_GRID_CODE_SUCCESS", Xt = "RECEIVE_SAVE_GRID_CODE_ERROR", $t = "REQUEST_GRID_STATUS", ei = "RECEIVE_GRID_STATUS_SUCCESS", ti = "RECEIVE_GRID_STATUS_ERROR", ii = "REQUEST_SAVE_OFF_GRID", ni = "RECEIVE_SAVE_OFF_GRID_SUCCESS", ri = "RECEIVE_SAVE_OFF_GRID_ERROR", ai = "REQUEST_SAVE_GRID_PHASE", oi = "RECEIVE_SAVE_GRID_PHASE_SUCCESS", si = "RECEIVE_SAVE_GRID_PHASE_ERROR", _i = "RESET_GRID_CODE_CONFIG", li = "SCAN_POWERWALLS", ci = "REQUEST_POWERWALLS", di = "RECEIVE_POWERWALLS", ui = "RECEIVE_POWERWALLS_ERROR", mi = "REQUEST_SOE", pi = "RECEIVE_SOE_SUCCESS", gi = "RECEIVE_SOE_ERROR", wi = "REQUEST_POWERWALLS_UPDATE", vi = "RECEIVE_POWERWALLS_UPDATE_SUCCESS", fi = "RECEIVE_POWERWALLS_UPDATE_ERROR", hi = "REQUEST_POWERWALLS_STATUS", Ei = "RECEIVE_POWERWALLS_STATUS_SUCCESS", bi = "RECEIVE_POWERWALLS_STATUS_ERROR", yi = "RESET_POWERWALL_CONFIG", Si = "REQUEST_START_PHASE_DETECTION", Ri = "RECEIVE_START_PHASE_DETECTION_SUCCESS", Ti = "RECEIVE_START_PHASE_DETECTION_ERROR", Ai = "REQUEST_FETCH_PHASE_INFORMATION", Ci = "RECEIVE_FETCH_PHASE_INFORMATION_SUCCESS", Ii = "RECEIVE_FETCH_PHASE_INFORMATION_ERROR", Oi = "REQUEST_SAVE_PHASE_USAGES", Ni = "RECEIVE_SAVE_PHASE_USAGES_SUCCESS", ki = "RECEIVE_SAVE_PHASE_USAGES_ERROR", Pi = "REQUEST_ENABLE_INVERTER_SOLAR_METER_READINGS", Di = "RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_SUCCESS", Li = "RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_ERROR", Mi = "REQUEST_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS", zi = "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS", Ui = "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS_ERROR", Vi = "ADD_SOLAR", Gi = "REMOVE_SOLAR", ji = "REQUEST_SOLAR_CONFIG", Wi = "RECEIVE_SOLAR_CONFIG_SUCCESS", Fi = "RECEIVE_SOLAR_CONFIG_ERROR", qi = "REQUEST_SOLAR_BRANDS", xi = "RECEIVE_SOLAR_BRANDS_SUCCESS", Bi = "RECEIVE_SOLAR_BRANDS_ERROR", Hi = "REQUEST_SOLAR_MODELS", Ki = "RECEIVE_SOLAR_MODELS_SUCCESS", Yi = "RECEIVE_SOLAR_MODELS_ERROR", Qi = "REQUEST_SAVE_SOLAR_INVERTERS", Zi = "RECEIVE_SAVE_SOLAR_INVERTER_SUCCESS", Ji = "RECEIVE_SAVE_SOLAR_INVERTERS_SUCCESS", Xi = "RECEIVE_SAVE_SOLAR_INVERTER_ERROR", $i = "RECEIVE_SAVE_SOLAR_INVERTERS_ERROR", en = "REQUEST_DELETE_SOLAR_INVERTER", tn = "RECEIVE_DELETE_SOLAR_INVERTER_SUCCESS", nn = "RECEIVE_DELETE_SOLAR_INVERTER_ERROR", rn = "REQUEST_CONNECT_SOLAR_INVERTER", an = "RECEIVE_CONNECT_SOLAR_INVERTER_SUCCESS", on = "RECEIVE_CONNECT_SOLAR_INVERTER_ERROR", sn = "RESET_SOLAR_CONFIG", _n = "REQUEST_GENERATOR_CONFIG", ln = "RECEIVE_GENERATOR_CONFIG_SUCCESS", cn = "RECEIVE_GENERATOR_CONFIG_ERROR", dn = "REQUEST_GENERATOR_DISCONNECT_TYPES", un = "RECEIVE_GENERATOR_DISCONNECT_TYPES_SUCCESS", mn = "RECEIVE_GENERATOR_DISCONNECT_TYPES_ERROR", pn = "REQUEST_SAVE_GENERATORS", gn = "RECEIVE_SAVE_GENERATORS_SUCCESS", wn = "RECEIVE_SAVE_GENERATORS_ERROR", vn = "REQUEST_DELETE_GENERATOR", fn = "RECEIVE_DELETE_GENERATOR_SUCCESS", hn = "RECEIVE_DELETE_GENERATOR_ERROR", En = "ADD_GENERATOR", bn = "REMOVE_GENERATOR", yn = "RESET_GENERATOR_CONFIG", Sn = "REQUEST_SITE_INFO", Rn = "RECEIVE_SITE_INFO_SUCCESS", Tn = "RECEIVE_SITE_INFO_ERROR", An = "REQUEST_SAVE_SITE_NAME", Cn = "RECEIVE_SAVE_SITE_NAME_SUCCESS", In = "RECEIVE_SAVE_SITE_NAME_ERROR", On = "REQUEST_SITE_NAME", Nn = "RECEIVE_SITE_NAME_SUCCESS", kn = "RECEIVE_SITE_NAME_ERROR", Pn = "REQUEST_SAVE_EXPORT_MODE", Dn = "RECEIVE_SAVE_EXPORT_MODE_SUCCESS", Ln = "RECEIVE_SAVE_EXPORT_MODE_ERROR", Mn = "REQUEST_OPERATION_SETTINGS", zn = "RECEIVE_OPERATION_SETTINGS_SUCCESS", Un = "RECEIVE_OPERATION_SETTINGS_ERROR", Vn = "REQUEST_SAVE_OPERATION_SETTINGS", Gn = "RECEIVE_SAVE_OPERATION_SETTINGS_SUCCESS", jn = "RECEIVE_SAVE_OPERATION_SETTINGS_ERROR", Wn = "REQUEST_TIMEZONE", Fn = "RECEIVE_TIMEZONE_SUCCESS", qn = "RECEIVE_TIMEZONE_ERROR", xn = "REQUEST_SAVE_TIMEZONE", Bn = "RECEIVE_SAVE_TIMEZONE_SUCCESS", Hn = "RECEIVE_SAVE_TIMEZONE_ERROR", Kn = "RESET_OPERATION_SETTINGS", Yn = "REQUEST_GET_EXTRA_PROGRAMS", Qn = "RECEIVE_GET_EXTRA_PROGRAMS_SUCCESS", Zn = "RECEIVE_GET_EXTRA_PROGRAMS_ERROR", Jn = "REQUEST_POST_EXTRA_PROGRAM", Xn = "RECEIVE_POST_EXTRA_PROGRAM_SUCCESS", $n = "RECEIVE_POST_EXTRA_PROGRAM_ERROR", er = "REQUEST_SITEMASTER_SETTINGS", tr = "RECEIVE_SITEMASTER_SETTINGS_SUCCESS", ir = "RECEIVE_SITEMASTER_SETTINGS_ERROR", nr = "REQUEST_START_SITEMASTER", rr = "RECEIVE_START_SITEMASTER_SUCCESS", ar = "RECEIVE_START_SITEMASTER_ERROR", or = "REQUEST_STOP_SITEMASTER", sr = "RECEIVE_STOP_SITEMASTER_SUCCESS", _r = "RECEIVE_STOP_SITEMASTER_ERROR", lr = "REQUEST_SITEMASTER_FOR_COMMISSIONING", cr = "RECEIVE_SITEMASTER_FOR_COMMISSIONING_SUCCESS", dr = "RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR", ur = "RESET_SITEMASTER_SETTINGS", mr = "REQUEST_RUN_INVERTER_TEST", pr = "RECEIVE_RUN_INVERTER_TEST_SUCCESS", gr = "RECEIVE_RUN_INVERTER_TEST_ERROR", wr = "REQUEST_TEST_RESULTS", vr = "RECEIVE_TEST_RESULTS", fr = "RECEIVE_TEST_RESULTS_ERROR", hr = "REQUEST_CANCEL_TEST", Er = "RECEIVE_CANCEL_TEST", br = "RECEIVE_CANCEL_TEST_ERROR", yr = "REQUEST_TEST_ALERTS", Sr = "RECEIVE_TEST_ALERTS_SUCCESS", Rr = "RECEIVE_TEST_ALERTS_ERROR", Tr = "RESET_TESTS", Ar = "REQUEST_START_DIAGNOSTIC_TESTS", Cr = "RECEIVE_START_DIAGNOSTIC_TESTS_SUCCESS", Ir = "RECEIVE_START_DIAGNOSTIC_TESTS_ERROR", Or = "REQUEST_STOP_DIAGNOSTIC_TEST", Nr = "RECEIVE_STOP_DIAGNOSTIC_TEST_SUCCESS", kr = "RECEIVE_STOP_DIAGNOSTIC_TEST_ERROR", Pr = "REQUEST_DIAGNOSTIC_TEST_RESULTS", Dr = "RECEIVE_DIAGNOSTIC_TEST_RESULTS_SUCCESS", Lr = "RECEIVE_DIAGNOSTIC_TEST_RESULTS_ERROR", Mr = "RESET_DIAGNOSTICS", zr = "REQUEST_INSTALLATION_INFORMATION", Ur = "RECEIVE_INSTALLATION_INFORMATION_SUCCESS", Vr = "RECEIVE_INSTALLATION_INFORMATION_ERROR", Gr = "REQUEST_SAVE_INSTALLATION_INFORMATION", jr = "RECEIVE_SAVE_INSTALLATION_INFORMATION_SUCCESS", Wr = "RECEIVE_SAVE_INSTALLATION_INFORMATION_ERROR", Fr = "CHANGE_COMPANY", qr = "CHANGE_PHONE", xr = "CHANGE_EMAIL", Br = "SAVE_PHOTOS", Hr = "RESET_INSTALLATION_INFORMATION", Kr = "REQUEST_COMPANY_INFORMATION", Yr = "RECEIVE_COMPANY_INFORMATION_SUCCESS", Qr = "RECEIVE_COMPANY_INFORMATION_ERROR", Zr = "REQUEST_SAVE_LEGAL_INFORMATION", Jr = "RECEIVE_SAVE_LEGAL_INFORMATION_SUCCESS", Xr = "RECEIVE_SAVE_LEGAL_INFORMATION_ERROR", $r = "REQUEST_CUSTOMER_INFORMATION_CONFIG", ea = "RECEIVE_CUSTOMER_INFORMATION_CONFIG_SUCCESS", ta = "RECEIVE_CUSTOMER_INFORMATION_CONFIG_ERROR", ia = "REQUEST_REGISTER_CUSTOMER_INFORMATION", na = "RECEIVE_REGISTER_CUSTOMER_INFORMATION_SUCCESS", ra = "RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR", aa = "RESET_CUSTOMER_INFORMATION", oa = "REQUEST_REGISTRATION", sa = "RECEIVE_REGISTRATION_SUCCESS", _a = "RECEIVE_REGISTRATION_ERROR", la = "SHOW_ERROR", ca = "CLEAR_ERROR", da = "CLEAR_ERRORS", ua = "RESET_ERROR_CONFIG", ma = "GENERIC_ERROR", pa = "NO_CONNECTION_ERROR", ga = "METER_INCORRECT_CT_ERROR", wa = "METER_INCORRECT_SHORT_ID_ERROR", va = "METER_DUPLICATE_SHORT_ID_ERROR", fa = "METER_INCORRECT_SERIAL_ERROR", ha = "METER_DUPLICATE_SERIAL_ERROR", Ea = "METER_INCORRECT_MAC_ADDRESS_ERROR", ba = "METER_INCORRECT_IP_ADDRESS_ERROR", ya = "METER_BARCODE_DECODE_ERROR", Sa = "INVERTER_TEST_RESULT_ERROR", Ra = "INVERTER_TEST_GRID_UNCOMPLIANT_ERROR", Ta = "INVERTER_TEST_NOT_IDLE_ERROR", Aa = "PASSWORD_INCORRECT_MATCH_ERROR", Ca = "METER_UPDATE_ERROR", Ia = "METER_FETCH_STATUS_ERROR", Oa = "POWER_OUT_OF_RANGE_ERROR", Na = "SUSTAINED_POWER_RANGE_ERROR", ka = "SITEMASTER_NOT_RUNNING_ERROR", Pa = "SHOW_TOAST", Da = "CLEAR_TOAST", La = "CLEAR_TOASTS", Ma = "NO_METERS_CONFIGURED_WARNING", za = "NO_POWERWALLS_DETECTED_WARNING", Ua = "NO_SOLAR_INVERTER_WARNING", Va = "NO_SOLAR_CT_WARNING", Ga = "NO_SITE_OR_LOAD_CT_WARNING", ja = "RECEIVE_INSTALLATION_PROBLEMS"; }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.postOptions = t.checkResponseStatus = t.parseResponseText = t.parseText = t.parseJSON = t.checkStatus = void 0); class n extends Error { constructor(e, t) { super(e), (this.response = t); } } (t.checkStatus = function (e) { if (e.status >= 200 && e.status < 300) return e; throw new n(e.statusText, e); }), (t.parseJSON = function (e) { return e.json(); }), (t.parseText = function (e) { return e.text(); }), (t.parseResponseText = function (e) { if (!e) return null; try { return JSON.parse(e); } catch (t) { const i = `Error: ${e}. Check server logs`; throw new n(i, i); } }), (t.checkResponseStatus = function (e) { var t; const i = e; if (!((i && i.code && !(i.code >= 200 && i.code < 300)) || ((null == i ? void 0 : i.message) && (null == i ? void 0 : i.error)))) return e || {}; throw new n(null !== (t = null == i ? void 0 : i.message) && void 0 !== t ? t : "Response error", i); }); t.postOptions = (e) => ({ method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(e) }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.authedPostOptions = t.apiToUrl = t.toApi = void 0); const n = i(4), r = "http://10.33.155.246:8088", a = { api: { host: r, uri: r + window.apiBaseUrl }, static: { host: "http://10.33.155.246:3000", uri: "http://10.33.155.246:3000" }, credentials: "include" }; (a.api.host = ""), (a.api.uri = window.apiBaseUrl), (a.static.host = ""), (a.static.uri = ""), (a.credentials = "same-origin"); t.toApi = (e) => `${a.api.uri}/${e}`; t.apiToUrl = (e) => `${a.api.uri}${e}`; (t.authedPostOptions = (e) => Object.assign(Object.assign({}, (0, n.postOptions)(e)), { credentials: a.credentials })), (t.default = a); }, function (e, t, i) { "use strict"; function n(e, ...t) { return (...i) => { let n = { type: e }; return ( t.forEach((e, r) => { n[t[r]] = i[r]; }), n ); }; } i.d(t, "b", function () { return n; }), i.d(t, "a", function () { return r; }); const r = (e) => (t) => ({ payload: t, receivedAt: Date.now(), type: e }); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "showError", function () { return _; }), i.d(t, "clearError", function () { return l; }), i.d(t, "clearErrors", function () { return c; }), i.d(t, "resetErrorConfig", function () { return d; }), i.d(t, "uploadLogs", function () { return u; }); var n = i(2), r = i(6), a = i(4), o = i(5), s = i.n(o); function _(e, t, i, r) { return { type: n.SHOW_ERROR, name: e, message: t, context: i, logError: r }; } const l = Object(r.b)(n.CLEAR_ERROR, "name", "context"), c = Object(r.b)(n.CLEAR_ERRORS), d = Object(r.b)(n.RESET_ERROR_CONFIG); async function u(e, t, i) { let n = { level: e, log: t }; return ( i && (n.trace = i), fetch(s.a.api.uri + "/logging", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(n) }) .then(a.checkStatus) .then(() => {}) .catch((e) => { throw e; }) ); } }, function (e, t, i) { "use strict"; i.d(t, "h", function () { return o; }), i.d(t, "n", function () { return s; }), i.d(t, "m", function () { return _; }), i.d(t, "e", function () { return l; }), i.d(t, "f", function () { return c; }), i.d(t, "c", function () { return d; }), i.d(t, "g", function () { return u; }), i.d(t, "d", function () { return m; }), i.d(t, "b", function () { return p; }), i.d(t, "a", function () { return g; }), i.d(t, "k", function () { return w; }), i.d(t, "l", function () { return v; }), i.d(t, "i", function () { return f; }), i.d(t, "j", function () { return h; }), i.d(t, "p", function () { return E; }), i.d(t, "o", function () { return b; }); var n = i(1), r = i.n(n), a = i(27); const o = { SOLAR: "SOLAR", USAGE: "USAGE", GRID: "GRID", BATTERY: "BATTERY" }, s = { [o.SOLAR]: "solar", [o.USAGE]: "load", [o.GRID]: "site", [o.BATTERY]: "battery" }, _ = Object(a.invert)(s), l = "rgba(255,255,255,0.2)", c = "#FADE2A", // Solar Power - old #F2CA00 d = "#00D000", // Powerwall Energy u = "#5794F2", // Home - old #00AEEF m = "#CBCFD1", p = "#FFA400", g = r.a.createElement( "linearGradient", { id: "blueYellowGradient", gradientUnits: "userSpaceOnUse", x1: "97.9811065%", y1: "2.01889349%", x2: "0.224566072%", y2: "99.7754339%" }, r.a.createElement("stop", { stopColor: u, offset: "0%" }), r.a.createElement("stop", { stopColor: c, offset: "99.1828763%" }) ), w = r.a.createElement( "linearGradient", { id: "greenBlueGradient", gradientUnits: "userSpaceOnUse", x1: "50%", y1: "0%", x2: "50%", y2: "100%" }, r.a.createElement("stop", { stopColor: u, offset: "0%" }), r.a.createElement("stop", { stopColor: d, offset: "100%" }) ), v = r.a.createElement( "linearGradient", { id: "greenGrayGradient", gradientUnits: "userSpaceOnUse", x1: "0%", y1: "50%", x2: "97.9811065%", y2: "2.01889349%" }, r.a.createElement("stop", { stopColor: d, offset: "0%" }), r.a.createElement("stop", { stopColor: m, offset: "100%" }) ), f = r.a.createElement( "linearGradient", { id: "grayBlueGradient", gradientUnits: "userSpaceOnUse", x1: "0%", y1: "50%", x2: "97.9811065%", y2: "2.01889349%" }, r.a.createElement("stop", { stopColor: m, offset: "0%" }), r.a.createElement("stop", { stopColor: u, offset: "100%" }) ), h = r.a.createElement( "linearGradient", { id: "grayGreenGradient", gradientUnits: "userSpaceOnUse", x1: "0%", y1: "50%", x2: "97.9811065%", y2: "2.01889349%" }, r.a.createElement("stop", { stopColor: m, offset: "0%" }), r.a.createElement("stop", { stopColor: d, offset: "100%" }) ), E = r.a.createElement( "linearGradient", { id: "yellowGreenGradient", gradientUnits: "userSpaceOnUse", x1: "50%", y1: "0%", x2: "50%", y2: "97.3274075%" }, r.a.createElement("stop", { stopColor: c, offset: "0%" }), r.a.createElement("stop", { stopColor: d, offset: "100%" }) ), b = r.a.createElement( "linearGradient", { id: "yellowGrayGradient", gradientUnits: "userSpaceOnUse", x1: "50%", y1: "0%", x2: "50%", y2: "100%" }, r.a.createElement("stop", { stopColor: m, offset: "0%" }), r.a.createElement("stop", { stopColor: c, offset: "100%" }) ); }, , function (e, t, i) { "use strict"; i.d(t, "i", function () { return n; }), i.d(t, "g", function () { return r; }), i.d(t, "h", function () { return a; }), i.d(t, "b", function () { return o; }), i.d(t, "c", function () { return s; }), i.d(t, "e", function () { return _; }), i.d(t, "d", function () { return l; }), i.d(t, "a", function () { return c; }), i.d(t, "f", function () { return d; }); const n = ["/", "/wizard", "/password", "/compliance", "/upgrade"], r = [...n, "/network", "/network/ethernet", "/network/wifi", "/legal", "/registration", "/summary", "/vitals"], a = ["/update", "/success"], o = "LOGIN_MODAL", s = { KIOSK: "kiosk", INSTALLER: "installer", CUSTOMER: "customer", ADMIN: "admin", ENGINEER: "engineer" }, _ = { HOME_OWNER: "Home_Owner", KIOSK_VIEWER: "Kiosk_Viewer", PROVIDER_ENGINEER: "Provider_Engineer", TESLA_ENGINEER: "Tesla_Engineer" }, l = [s.INSTALLER, s.ENGINEER, s.ADMIN], c = /^$|^[_A-Za-z0-9-+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(-[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$/, d = [401, 403]; }, function (e, t, i) { "use strict"; var n = i(49), r = i(17), a = i(2); const o = r.browserHistory.getCurrentLocation(); function s(e = o, t) { switch (t.type) { case a.LOCATION_CHANGE: return t.payload; default: return e; } } var _ = i(58); function l(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function c(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? l(Object(i), !0).forEach(function (t) { d(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : l(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function d(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const u = { route: null, text: "", onClick: null, buttonClass: "", additionalProps: {} }; function m(e = u, t, i) { let n = i.toUpperCase(); switch (t.type) { case a["SHOW_" + n]: return c(c({}, e), {}, { route: t.route, text: t.text, onClick: t.onClick, buttonClass: t.buttonClass, additionalProps: t.additionalProps }); case a["HIDE_" + n]: return c(c({}, e), u); case a.RESET_NAVIGATION: return u; default: return e; } } const p = { navigationType: "footer-default", back: u, cancel: u, forward: u }; function g(e = p, t) { switch (t.type) { case a.SHOW_NAVIGATION: let i = { navigationType: t.navigationType }; return ( t.backProps ? (i.back = c(c({}, e.back), t.backProps)) : (i.back = p), t.cancelProps ? (i.cancel = c(c({}, e.cancel), t.cancelProps)) : (i.cancel = p), t.forwardProps ? (i.forward = c(c({}, e.forward), t.forwardProps)) : (i.forward = p), i ); case a.UPDATE_NAVIGATION: if (e.navigationType === t.navigationType) { let i = {}; return t.backProps && (i.back = c(c({}, e.back), t.backProps)), t.cancelProps && (i.cancel = c(c({}, e.cancel), t.cancelProps)), t.forwardProps && (i.forward = c(c({}, e.forward), t.forwardProps)), c(c({}, e), i); } return e; case a.RESET_NAVIGATION: return { navigationType: "footer-default", back: m(e.back, t, _.a.BACK), cancel: m(e.cancel, t, _.a.CANCEL), forward: m(e.forward, t, _.a.FORWARD) }; default: return c(c({}, e), {}, { back: m(e.back, t, _.a.BACK), cancel: m(e.cancel, t, _.a.CANCEL), forward: m(e.forward, t, _.a.FORWARD) }); } } function w(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function v(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? w(Object(i), !0).forEach(function (t) { f(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : w(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function f(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const h = { modalType: null, modalProps: {}, bootstrapProps: { show: !0 } }; function E(e = h, t) { switch (t.type) { case a.SHOW_MODAL: return { modalType: t.modalType, modalProps: t.modalProps, bootstrapProps: v(v({}, e.bootstrapProps), t.bootstrapProps) }; case a.UPDATE_MODAL: return t.modalType === e.modalType ? v(v({}, e), {}, { modalProps: v(v({}, e.modalProps), t.modalProps), bootstrapProps: v(v({}, e.bootstrapProps), t.bootstrapProps) }) : e; case a.DESTROY_MODAL: return t.modalType === e.modalType ? h : e; case a.HIDE_MODAL: return h; default: return e; } } function b(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function y(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? b(Object(i), !0).forEach(function (t) { S(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : b(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function S(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const R = { headerType: "header-default", headerProps: { title: null, subtitle: null, subtitleView: null, additionalView: null, progress: 0 } }; function T(e = R, t) { switch (t.type) { case a.SHOW_HEADER: return { headerType: t.headerType, headerProps: y(y({}, e.headerProps), t.headerProps) }; case a.UPDATE_HEADER: return t.headerType === e.headerType ? y(y({}, e), {}, { headerProps: y(y({}, e.headerProps), t.headerProps) }) : e; case a.RESET_HEADER: return R; default: return e; } } var A = i(27); function C(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function I(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? C(Object(i), !0).forEach(function (t) { O(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : C(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function O(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const N = { items: [] }; function k(e = N, t) { switch (t.type) { case a.SHOW_BANNER: { const i = Object(A.orderBy)([...e.items, I(I({}, t.bannerProps), {}, { timestamp: Date.now() })], ["priority", "timestamp"], ["desc", "desc"]), n = Object(A.sortedUniqBy)(i, (e) => e.name); return I(I({}, e), {}, { items: n }); } case a.DESTROY_BANNER: return I(I({}, e), {}, { items: e.items.filter((e) => e.name !== t.name) }); case a.DESTROY_ALL_BANNERS: return N; default: return e; } } function P(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function D(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? P(Object(i), !0).forEach(function (t) { L(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : P(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function L(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const M = { items: [] }; function z(e = M, t) { switch (t.type) { case a.SHOW_TOAST: return e.items.find((e) => e.name === t.name) ? e : D(D({}, e), {}, { items: [...e.items, { name: t.name, toastProps: t.toastProps }] }); case a.CLEAR_TOAST: return D(D({}, e), {}, { items: e.items.filter((e) => e.name !== t.name) }); case a.CLEAR_TOASTS: return D(D({}, e), {}, { items: [] }); default: return e; } } var U = i(291), V = i(199), G = i(60), j = i(18), W = i.n(j), F = i(105); function q(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function x(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? q(Object(i), !0).forEach(function (t) { B(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : q(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function B(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const H = { isEnumerating: !1, isFirmwareUpdating: !1, version: null, lastUpdatedAt: null }; function K(e = H, t) { switch (t.type) { case F.l: case a.REQUEST_POWERWALLS_UPDATE: return x(x({}, e), {}, { isFirmwareUpdating: !0 }); case F.b: return x(x({}, e), {}, { isFirmwareUpdating: W()(t, (e) => e.payload.updating) || !1 }); case a.RECEIVE_POWERWALLS: return x(x({}, e), {}, { isEnumerating: t.enumerating }); case a.RECEIVE_POWERWALLS_STATUS_SUCCESS: return x(x({}, e), {}, { isFirmwareUpdating: t.updating }); case F.r: case F.a: case a.RECEIVE_POWERWALLS_STATUS_ERROR: case F.c: case a.RECEIVE_POWERWALLS_UPDATE_ERROR: return x(x({}, e), {}, { isFirmwareUpdating: !1 }); case a.SAVE_SYSTEM_INFO: return x(x({}, e), {}, { version: t.version, lastUpdatedAt: Date.now() }); case a.RESET_ALL: case a.RESET_SYSTEM_INFO: return H; default: return e; } } var Y = i(280), Q = i(44); function Z(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function J(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? Z(Object(i), !0).forEach(function (t) { X(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : Z(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function X(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const $ = { didCancelUpdate: !1, didInvalidate: !1, didTimeout: !1, downloadStalled: !1, estimatedBytesPerSecond: null, info: null, isCheckingUpdateUrgency: !1, isFetching: !1, isUpdating: !1, startedAt: null, state: null, updateUrgency: null, }; function ee(e = $, t) { switch (t.type) { case a.RECEIVE_CHECK_UPDATE: return J(J({}, e), {}, { isFetching: Q.a.includes(t.state), didInvalidate: !1, state: t.state, info: t.info, estimatedBytesPerSecond: t.estimated_bytes_per_second, startedAt: t.start_time || e.startedAt }); case a.REQUEST_UPDATE: return J(J({}, e), {}, { didInvalidate: !1, isFetching: !0 }); case a.REQUEST_INSTALL_UPDATE: return J(J({}, e), {}, { didInvalidate: !1, isFetching: !0, isUpdating: !0 }); case a.CANCEL_UPDATE: return J(J({}, e), {}, { isFetching: !1, didInvalidate: !0, state: null, didCancelUpdate: !0 }); case a.DOWNLOAD_STALLED_ERROR: return J(J({}, e), {}, { downloadStalled: !0 }); case a.DOWNLOAD_PROGRESSING: return J(J({}, e), {}, { downloadStalled: !1, estimatedBytesPerSecond: t.estimated_bytes_per_second }); case a.RECEIVE_CHECK_UPDATE_ERROR: case a.RECEIVE_START_UPDATE_ERROR: case a.RECEIVE_UPDATE_ERROR: return J(J({}, e), {}, { isFetching: !1, didInvalidate: !0, info: t.info }); case a.REQUEST_CHECK_UPDATE_URGENCY: return J(J({}, e), {}, { isCheckingUpdateUrgency: !0 }); case a.RECEIVE_CHECK_UPDATE_URGENCY: return J(J({}, e), {}, { isCheckingUpdateUrgency: !1, updateUrgency: t.payload.update_urgency }); case a.RECEIVE_CHECK_UPDATE_URGENCY_ERROR: return J(J({}, e), {}, { isCheckingUpdateUrgency: !1, updateUrgency: Q.b.INVALID }); default: return e; } } var te = i(533), ie = i(126); function ne(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function re(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } i.d(t, "b", function () { return oe; }), i.d(t, "c", function () { return se; }); const ae = (e = {}) => Object(n.c)( (function (e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? ne(Object(i), !0).forEach(function (t) { re(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : ne(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; })( { location: s, navigation: g, modal: E, header: T, banner: k, toast: z, error: U.default, authentication: V.default, configuration: G.default, system: K, meterValidation: Y.default, update: ee, sitemaster: te.default, troubleshooting: ie.a, }, e ) ), oe = (e, { key: t, reducer: i }) => { Object.hasOwnProperty.call(e.asyncReducers, t) || ((e.asyncReducers[t] = i), e.replaceReducer(ae(e.asyncReducers))); }, se = (e, t) => { t.forEach(({ key: t, reducer: i }, n) => { Object.hasOwnProperty.call(e.asyncReducers, t) || (e.asyncReducers[t] = i); }), e.replaceReducer(ae(e.asyncReducers)); }; t.a = ae; }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "PowerUnits", function () { return a; }), i.d(t, "PowerFactorRange", function () { return o; }), i.d(t, "ReasonableVoltageRange", function () { return s; }), i.d(t, "CurrentUnits", function () { return _; }), i.d(t, "CurrentTransformerConnectionTypes", function () { return l; }), i.d(t, "SolarLocationCurrentTransformerTypes", function () { return c; }), i.d(t, "CheckPolarityConnectionTypes", function () { return d; }), i.d(t, "CurrentTransformerConnectionLabels", function () { return u; }), i.d(t, "PhaseSequences", function () { return m; }), i.d(t, "NeurioOrderedPhaseSequences", function () { return p; }), i.d(t, "CurrentTransformerReadingTypes", function () { return g; }), i.d(t, "CurrentTransformerWarningTypes", function () { return w; }), i.d(t, "CurrentTransformerPhaseWarningTypes", function () { return v; }), i.d(t, "CurrentTransformerAmpRatings", function () { return f; }), i.d(t, "ConnectionTypes", function () { return h; }), i.d(t, "Statuses", function () { return E; }), i.d(t, "TextInputTypes", function () { return b; }), i.d(t, "MeterUpdateConstants", function () { return y; }), i.d(t, "NEURIO_METER_SHORT_ID_LENGTH", function () { return S; }), i.d(t, "NEURIO_METER_SERIAL_LENGTH", function () { return R; }), i.d(t, "MAX_IMAGE_UPLOAD_SIZE", function () { return T; }), i.d(t, "METER_CT_AMP_NOISE", function () { return A; }), i.d(t, "METER_POWER_NOISE", function () { return C; }), i.d(t, "MAC_ADDRESS_LENGTH", function () { return I; }), i.d(t, "SyncCTVoltageReferenceType", function () { return O; }); i(27); var n = i(3), r = i(134); const a = { WATTS: "W", KILOWATTS: "kW", MEGAWATTS: "MW", POWER_FACTOR: "PF" }, o = { POWER_FACTOR_MINIMUM: 0.8, VOLT_AMPS_MINIMUM: 500, VOLT_AMPS_MAXIMUM: 1e3 }, s = { VOLTAGE_MINIMUM: 90, VOLTAGE_MAXIMUM: 265 }, _ = { AMPS: "A", VOLTS: "V" }, l = { SITE: "site", SOLAR: "solar", SOLAR_RGM: "solarRGM", DOUBLED_SOLAR: "doubled_solar", LOAD: "load", GENERATOR: "generator", BATTERY: "battery", CONDUCTOR: "conductor", NONE: "none" }, c = [l.SOLAR, l.DOUBLED_SOLAR], d = [...c, l.LOAD, l.SOLAR_RGM], u = Object(n.defineMessages)({ [l.SITE]: { id: "meter_item_view_site_location", defaultMessage: "Site" }, [l.SOLAR]: { id: "meter_item_view_solar_location", defaultMessage: "Solar" }, [l.SOLAR_RGM]: { id: "meter_item_view_solar_rgm_location", defaultMessage: "Solar Revenue-Only" }, [l.DOUBLED_SOLAR]: { id: "meter_item_view_doubled_solar_location", defaultMessage: "Doubled Solar" }, [l.LOAD]: { id: "meter_item_view_load_location", defaultMessage: "Load" }, [l.GENERATOR]: { id: "meter_item_view_generator_location", defaultMessage: "Generator" }, [l.BATTERY]: { id: "meter_item_view_battery_location", defaultMessage: "Battery" }, [l.CONDUCTOR]: { id: "meter_item_view_conductor_location", defaultMessage: "Conductor" }, [l.NONE]: { id: "meter_item_view_none_location", defaultMessage: "None" }, }), m = { A: "A", B: "B", C: "C" }, p = [m.A, m.B, m.C, m.A], g = { WATTS: "watts", AMPS: "amps", VOLTS: "volts", POWER_FACTOR: "power_factor", NO_READING: "no_reading" }, w = { NEGATIVE_AMPS: "negative_amps", POWER_FACTOR: "power_factor", VOLTAGE: "voltage", PHASE: "phase" }, v = { USAGES: "phase_usages_warning", [r.PhaseType.SINGLE]: "single_phase_warning", [r.PhaseType.SPLIT]: "split_phase_warning", [r.PhaseType.THREE]: "three_phase_warning" }, f = { LOW: "200A", HIGH: "800A", SMART: "Smart", MISSING: "Missing" }, h = { NEURIO_W1_WIFI: "neurio_tcp", NEURIO_W1_WIRED: "neurio_mb", NEURIO_W2_WIFI: "neurio_w2_tcp", NEURIO_W2_WIRED: "neurio_w2_mb", SYNCHROMETER_X: "synchrometerX", SYNCHROMETER_Y: "synchrometerY", MSA: "msa", ACUVIM: "acuvim", }, E = { UNKNOWN: "", STARTED_WIFI_ADD: "add_meter", SENDING_CREDENTIALS: "sending_hec_credentials", VERIFYING_METER: "verifying_meter", UPDATING_METER: "updating_meter", SUCCESS_METER: "success_meter", FAILED_METER: "failed_meter", ADD_METER_ERROR: "add_meter_err", VERIFY_METER_ERROR: "verify_meter_err", RECONNECTING: "reconnecting", DETECTING_WIRED_METERS: "detect_modbus", }, b = { SHORT_ID: "short_id", SERIAL: "serial", MAC_ADDRESS: "mac_address", IP_ADDRESS: "ip_address" }, y = { UPDATE_TIMEOUT: 120, METER_UPDATE_MODAL: "METER_UPDATE_MODAL" }, S = 5, R = 13, T = 1280, A = -0.1, C = 50, I = 17, O = { DEFAULT: "PhaseNone", PHASE1: "Phase1", PHASE2: "Phase2", PHASE3: "Phase3" }; }, function (e, t, i) { "use strict"; i.d(t, "f", function () { return n; }), i.d(t, "c", function () { return r; }), i.d(t, "k", function () { return a; }), i.d(t, "b", function () { return o; }), i.d(t, "a", function () { return s; }), i.d(t, "j", function () { return _; }), i.d(t, "g", function () { return l; }), i.d(t, "e", function () { return c; }), i.d(t, "d", function () { return d; }), i.d(t, "i", function () { return u; }), i.d(t, "h", function () { return m; }); const n = "italy", r = "germany", a = "united states", o = "canada", s = "australia", _ = "united kingdom", l = "new zealand", c = { CONNECTED: "SystemGridConnected", ISLAND_READY: "SystemIslandedReady", ISLANDED: "SystemIslandedActive", TRANSITION_TO_GRID: "SystemTransitionToGrid" }, d = { COMPLIANT: "Grid_Compliant", QUALIFYING: "Grid_Qualifying", UNCOMPLIANT: "Grid_Uncompliant" }, u = { PHASE_1: "phase1", PHASE_2: "phase2", PHASE_3: "phase3" }, m = { [u.PHASE_1]: "Phase1", [u.PHASE_2]: "Phase2", [u.PHASE_3]: "Phase3" }; }, function (e, t, i) { "use strict"; i.r(t); var n, r, a, o = i(7); class s { static message(e, t, i = !1) { window && window.console && console.log && (console.log(e), t && console.log(t), i && Object(o.uploadLogs)(s.LOG_LEVELS.INFO, e).catch((e) => { console.error(e); })); } static debug(e, t, i = !1) { window && window.console && console.info && (console.info(e), t && console.info(t), i && Object(o.uploadLogs)(s.LOG_LEVELS.DEBUG, e).catch((e) => { console.error(e); })); } static warn(e, t, i = !1) { window && window.console && console.warn && (console.warn(e), t && console.warn(t), i && Object(o.uploadLogs)(s.LOG_LEVELS.WARN, e).catch((e) => { console.error(e); })); } static trace(e) { window && window.console && console.trace && (e ? console.trace(e) : console.trace()); } constructor(e, t) { (this.message = e), (this.context = t); } getMessage() { return this.message; } setMessage(e) { this.message = e; } getContext() { return this.context; } setContext(e) { this.context = e; } toError() { return new Error(this.getMessage()); } } (a = { FATAL: "FATAL", ERROR: "ERROR", WARN: "WARN", DEBUG: "DEBUG", INFO: "INFO", TRACE: "TRACE" }), (r = "LOG_LEVELS") in (n = s) ? Object.defineProperty(n, r, { value: a, enumerable: !0, configurable: !0, writable: !0 }) : (n[r] = a); var _ = i(2), l = i(10); i.d(t, "default", function () { return c; }); class c extends s { static error(e, t, i = !1) { if (window && window.console && console.error && (console.error(e), t && console.error(t), i)) { let t, i = null; e instanceof c ? ((i = e.getStackTrace()), (t = e.toString())) : e instanceof Error ? ((i = e.stack), (t = e.toString())) : (t = "object" == typeof e ? JSON.stringify(e) : e.toString()), Object(o.uploadLogs)(s.LOG_LEVELS.ERROR, t, i).catch((e) => { console.error(e); }); } } static fatal(e, t, i = !1) { window && window.console && console.error && (console.error(e), t || (e instanceof c ? (t = e.getStackTrace()) : e instanceof Error && (t = e.stack)), t && console.error(t), i && Object(o.uploadLogs)(s.LOG_LEVELS.FATAL, e.toString(), t).catch((e) => { console.error(e); })); } static logFatal(e, t) { c.fatal(e, t.componentStack, !0); } constructor(e = _.GENERIC_ERROR, t, i, n = !1) { super(t, i), (this.name = e), c.error(this, null, n); } getName() { return this.name; } setName(e) { this.name = e; } isDetailed() { return null != this.context && this.context.detailed; } isUnauthorized() { return null != this.context && null != this.context.code && l.f.includes(this.context.code); } toDetailedString() { let e = `${this.name}: ${this.message}\n`; return null != this.context && (e += JSON.stringify(this.context)), e; } toErrorString() { let e = this.message; return null != this.context && this.context.error && this.message !== this.context.error && this.message !== "Error: " + this.context.error && (e += ` (${this.context.error})`), e; } getStackTrace() { return super.toError().stack; } toString() { return JSON.stringify(this.toJSON()); } toJSON() { let e = { name: this.name, message: this.message }; return this.context && (e.context = this.context), e; } } }, function (e, t, i) { "use strict"; let n; i.d(t, "a", function () { return r; }), i.d(t, "d", function () { return a; }), i.d(t, "b", function () { return o; }), i.d(t, "e", function () { return s; }), i.d(t, "c", function () { return _; }); const r = 3e4; function a(e = 0) { return new Promise((t) => { n = setTimeout(t, e); }); } function o() { clearTimeout(n); } function s(e, t, i) { return new Promise((n, r) => { i.then(n, r), setTimeout(r.bind(null, t), e); }); } function _(e) { let t = !1; return { promise: new Promise((i, n) => { e.then( (e) => (t ? n({ isCanceled: !0 }) : i(e)), (e) => n(t ? { isCanceled: !0 } : e) ); }), cancel() { t = !0; }, }; } }, , , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "isAuthenticated", function () { return o; }), i.d(t, "isCustomer", function () { return s; }), i.d(t, "isInstaller", function () { return _; }), i.d(t, "isEngineer", function () { return l; }), i.d(t, "isTeslaUser", function () { return c; }), i.d(t, "hasExpiredSession", function () { return d; }); var n = i(10), r = i(45), a = i(29); function o(e, t = []) { let i = !1; for (let e = 0; e < t.length; e++) if (Object(a.o)(t[e])) { i = !0; break; } return null !== e.lastLoginAt && e.loginType !== n.c.KIOSK && !i && (null != Object(r.b)("AuthCookie") || l(e)); } function s(e, t = []) { return o(e, t) && e.loginType === n.c.CUSTOMER; } function _(e, t = []) { return o(e, t) && e.loginType === n.c.INSTALLER; } function l(e) { return null !== e.lastLoginAt && e.loginType === n.c.ENGINEER; } function c(e) { const t = e.email ? e.email.toLowerCase() : ""; return l(e) || (_(e) && t.endsWith("@tesla.com")); } function d(e) { for (let t = 0; t < e.length; t++) if (Object(a.l)(e[t].message)) return !0; return !1; } }, function (e, t, i) { "use strict"; function n(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function r(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? n(Object(i), !0).forEach(function (t) { a(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : n(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function a(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } i.d(t, "o", function () { return o; }), i.d(t, "h", function () { return s; }), i.d(t, "i", function () { return _; }), i.d(t, "s", function () { return l; }), i.d(t, "q", function () { return c; }), i.d(t, "r", function () { return d; }), i.d(t, "l", function () { return u; }), i.d(t, "m", function () { return m; }), i.d(t, "k", function () { return p; }), i.d(t, "n", function () { return g; }), i.d(t, "j", function () { return w; }), i.d(t, "p", function () { return v; }), i.d(t, "b", function () { return f; }), i.d(t, "g", function () { return h; }), i.d(t, "d", function () { return E; }), i.d(t, "c", function () { return b; }), i.d(t, "f", function () { return y; }), i.d(t, "e", function () { return S; }), i.d(t, "a", function () { return R; }), i.d(t, "t", function () { return T; }); const o = { IDLE: "TestNotRun", INIT: "TestInitializing", PREP: "TestStartingSM", RUNNING: "TestRunning", FAILED: "TestFailed", PASSED: "TestPassed", CANCELED: "TestCanceled" }, s = { OVER_FREQUENCY: "overFrequency", UNDER_FREQUENCY: "underFrequency", CHANGE_FREQUENCY: "changeFrequency", PHASE_1_UNDER_VOLTAGE: "phaseOneUnderVoltage", PHASE_2_UNDER_VOLTAGE: "phaseTwoUnderVoltage", PHASE_3_UNDER_VOLTAGE: "phaseThreeUnderVoltage", PHASE_1_OVER_VOLTAGE: "phaseOneOverVoltage", PHASE_2_OVER_VOLTAGE: "phaseTwoOverVoltage", PHASE_3_OVER_VOLTAGE: "phaseThreeOverVoltage", }, _ = { PINV_a021_vfCheckSplitPhaseOverVoltage: s.PHASE_2_OVER_VOLTAGE, PINV_a020_vfCheckSplitPhaseUnderVoltage: s.PHASE_2_UNDER_VOLTAGE, PINV_a005_vfCheckOverVoltage: s.PHASE_1_OVER_VOLTAGE, PINV_a004_vfCheckUnderVoltage: s.PHASE_1_UNDER_VOLTAGE, PINV_a007_vfCheckOverFrequency: s.OVER_FREQUENCY, PINV_a006_vfCheckUnderFrequency: s.UNDER_FREQUENCY, PINV_a008_vfCheckRocof: s.CHANGE_FREQUENCY, }, l = { NOT_RUN: "not_run", RUNNING: "running", SCHEDULED: "scheduled", PASS: "pass", FAIL: "fail", INCONCLUSIVE: "marginal", CANCELED: "canceled", ALERT: "alert" }, c = (l.RUNNING, l.SCHEDULED, [l.FAIL, l.CANCELED]), d = [l.PASS, l.FAIL, l.INCONCLUSIVE, l.CANCELED], u = r(r({}, l), {}, { NOT_RUN: "notRun", NA: "na", COMPLETE: "complete" }), m = { PinvTestResultSummaryNotRun: u.NOT_RUN, PinvTestResultSummaryRunning: u.RUNNING, PinvTestResultSummaryPass: u.PASS, PinvTestResultSummaryFail: u.FAIL, PinvTestResultStatusNA: u.NA, PinvTestResultStatusRunning: u.RUNNING, PinvTestResultStatusComplete: u.COMPLETE, }, p = { ALL: "PinvTestAll", OVER_FREQ_STAGE_ONE: "PinvTestOverFreqStage1", OVER_FREQ_STAGE_TWO: "PinvTestOverFreqStage2", UNDER_FREQ_STAGE_ONE: "PinvTestUnderFreqStage1", UNDER_FREQ_STAGE_TWO: "PinvTestUnderFreqStage2", OVER_VOLT_ONE: "PinvTestOverVolt1", OVER_VOLT_TWO: "PinvTestOverVolt2", UNDER_VOLT_ONE: "PinvTestUnderVolt1", UNDER_VOLT_TWO: "PinvTestUnderVolt2", }, g = { SET_MAGNITUDE: "SetMagnitude", SET_TIME: "SetTime", TRIP_TIME: "TripTime", TRIP_MAGNITUDE: "TripMagnitude", ACCURACY_MAGNITUDE: "AccuracyMagnitude", ACCURACY_TIME: "AccuracyTime", CURRENT_MAGNITUDE: "CurrentMagnitude", LAST_ERROR: "LastError", TIMESTAMP: "Timestamp", }, w = { GRID_UNCOMPLIANT: "PinvTestStartResponseGridUncompliant", NOT_IDLE: "PinvTestStartResponseNotIdle" }, v = "PinvTest", f = { ALERTS: "Alerts", NETWORK: "Network", SELF_TESTS: "SelfTests", INTERNAL_COMMUNICATIONS: "InternalComms", METERING: "Metering", CONFIG: "Config", WIRING: "Wiring", GRID: "Grid" }, h = { NETWORK_CONNECTION: "Network connection", ENABLE_LINE: "EnableLine", CAN_BUS: "CAN bus", METER_COMMUNICATIONS: "Meter communication", DC_SELF_TEST: "DC Self Test Suite", AC_SELF_TEST: "AC Self Test Suite", INDIVIDUAL_SELF_TEST: "Individual Self Test", }, E = { MAX_ALLOWED_CHARGE_POWER: "max_allowed_charge_power", MAX_ALLOWED_DISCHARGE_POWER: "max_allowed_discharge_power", BLOCK_SERIALS: "block_serials", TEST_NAME: "test_name" }, b = { NUMERICAL: "numerical", MULTI_SELECT: "multi_select", SINGLE_SELECT: "single_select" }, y = { GOOGLE_HTTP: "GoogleHTTP", GOOGLE_HTTPS: "GoogleHTTPS", CONFIG_UPDATE_STATUS: "ConfigUpdateStatus", HERMES_STATUS: "HermesStatus" }, S = { IP_ADDRESS: "IP Address", SUBNET_MASK: "Subnet" }, R = { audience: "Audience", clearCondition: "Clear Condition", potentialImpact: "Potential Impact", isUrgent: "Urgent", isLatching: "Latching", node: "Node", safetyReason: "Safety Reason", alertID: "Alert ID", payloadSignals: "Payload Signals", max: "Max", snaValue: "SNA Value", offset: "Offset", scale: "Scale", name: "Name", min: "Min", units: "Units", alertName: "Alert Name", uiID: "UI UD", signoff: "Sign Off", impactCategory: "Impact Category", displayName: "Display Name", supplierDtcName: "Supplier DTC Name", alertType: "Alert Type", description: "Description", signalName: "Signal Name", setCondition: "Set Condition", }, T = { HwCritical: "HwCritical", PerformanceCritical: "PerformanceCritical", Informational: "Informational" }; }, , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "Locales", function () { return d; }), i.d(t, "LocaleTextMap", function () { return u; }), i.d(t, "LocaleMap", function () { return m; }), i.d(t, "modalMessages", function () { return p; }), i.d(t, "navigationMessages", function () { return g; }), i.d(t, "timeMessages", function () { return w; }), i.d(t, "networkMessages", function () { return v; }), i.d(t, "controlMessages", function () { return f; }), i.d(t, "labelMessages", function () { return h; }), i.d(t, "inputTitles", function () { return E; }), i.d(t, "inputMessages", function () { return b; }), i.d(t, "warnings", function () { return y; }), i.d(t, "powerwallMessages", function () { return S; }), i.d(t, "errorMessages", function () { return R; }), i.d(t, "validationMessages", function () { return T; }), i.d(t, "meterUpdateMessages", function () { return A; }), i.d(t, "diagnosticTestNames", function () { return C; }), i.d(t, "meterMessages", function () { return I; }), i.d(t, "phaseLineMessages", function () { return O; }), i.d(t, "meterAggregateTypeMessages", function () { return N; }), i.d(t, "formLegendMessages", function () { return k; }), i.d(t, "operationModeMessages", function () { return P; }), i.d(t, "conductorMessages", function () { return D; }), i.d(t, "canRebootMessages", function () { return L; }), i.d(t, "passwordFormLabels", function () { return M; }), i.d(t, "diagnosticAlertMetaDataType", function () { return z; }); var n = i(27), r = i(3), a = i(22), o = i(92), s = i(8), _ = i(93), l = i(42), c = i(12); const d = { ENGLISH: "en", GERMAN: "de", ITALIAN: "it", SPANISH: "es", DUTCH: "nl", FRENCH: "fr", JAPANESE: "ja" }, u = { [d.ENGLISH]: "English", [d.GERMAN]: "Deutsch", [d.ITALIAN]: "Italiano", [d.SPANISH]: "Español", [d.DUTCH]: "Nederlands", [d.FRENCH]: "Français", [d.JAPANESE]: "日本語" }, m = Object(n.reduce)(Object.values(d), (e, t) => ((e[u[t]] = t), e), {}), p = Object(r.defineMessages)({ ok: { id: "modal_ok", defaultMessage: "OK" }, note: { id: "modal_note", defaultMessage: "Note" }, yes: { id: "modal_yes", defaultMessage: "YES" }, no: { id: "modal_no", defaultMessage: "NO" }, confirm: { id: "modal_confirm", defaultMessage: "CONFIRM" }, acknowledge: { id: "modal_acknowledge", defaultMessage: "ACKNOWLEDGE" }, reconfigure: { id: "modal_reconfigure", defaultMessage: "RECONFIGURE" }, exit: { id: "modal_exit", defaultMessage: "EXIT" }, }), g = Object(r.defineMessages)({ email: { id: "navigation_email", defaultMessage: "EMAIL" } }), w = Object(r.defineMessages)({ second: { id: "time_second", defaultMessage: "second" }, seconds: { id: "time_seconds", defaultMessage: "seconds" }, minute: { id: "time_minute", defaultMessage: "minute" }, minutes: { id: "time_minutes", defaultMessage: "minutes" }, startedAt: { id: "time_started_at", defaultMessage: "Started at: {time}" }, }), v = Object(r.defineMessages)({ connected: { id: "network_connected", defaultMessage: "Connected" }, disconnected: { id: "network_disconnected", defaultMessage: "Not connected" }, disabled: { id: "network_disabled", defaultMessage: "Disabled" }, EthTypeConfigured: { id: "network_ethernet_configured", defaultMessage: "Configured, but not connected. Check the ethernet cable connection." }, WifiTypeConfigured: { id: "network_wifi_configured", defaultMessage: "Configured, but not connected. Check your WiFi settings." }, GsmTypeConfigured: { id: "network_cellular_configured", defaultMessage: "Configured, but not connected. Ensure cellular network is available and there are no obstructions around antenna." }, warning: { id: "network_warning", defaultMessage: "Warning" }, }), f = Object(r.defineMessages)({ stop: { id: "control_stop", defaultMessage: "STOP" }, start: { id: "control_start", defaultMessage: "START" } }), h = Object(r.defineMessages)({ pass: { id: "label_pass", defaultMessage: "Pass" }, fail: { id: "label_fail", defaultMessage: "Fail" }, inconclusive: { id: "label_inconclusive", defaultMessage: "Inconclusive" } }), E = Object(r.defineMessages)({ email: { id: "input_title_email", defaultMessage: "Enter a valid email address: name@name.domain" } }), b = Object(r.defineMessages)({ accept: { id: "input_accept", defaultMessage: "I accept" }, decline: { id: "input_decline", defaultMessage: "I decline" }, consent: { id: "input_consent", defaultMessage: "I consent" }, confirm: { id: "input_confirm", defaultMessage: "I acknowledge all system warnings." }, noConsent: { id: "input_no_consent", defaultMessage: "I do not consent" }, }), y = Object(r.defineMessages)({ caution: { id: "caution", defaultMessage: "CAUTION" }, warning: { id: "warning", defaultMessage: "WARNING" }, offGrid: { id: "warning_off_grid", defaultMessage: "If the electrical system is off-grid, any backed up loads will be dropped within 5 minutes." }, onGrid: { id: "warning_on_grid", defaultMessage: "If the electrical system is on-grid, Powerwall will stop charging/discharging." }, sitemasterNotRunning: { id: "warning_sitemaster_container_not_running", defaultMessage: "The Sitemaster is not running" }, }), S = Object(r.defineMessages)({ starting: { id: "powerwall_starting", defaultMessage: "Starting Powerwall" } }), R = Object(r.defineMessages)({ details: { id: "error_details", defaultMessage: "Error Details" } }), T = Object(r.defineMessages)({ phone: { id: "validation_phone", defaultMessage: "Input a valid telephone number" } }), A = Object(r.defineMessages)({ title: { id: "meter_update_modal_title", defaultMessage: "Meter Update is Underway" }, footer: { id: "meter_update_modal_footer", defaultMessage: "Meter Update may take up to 2 Minutes" }, remainingTime: { id: "meter_update_modal_remaining_time", defaultMessage: "Time Remaining: {seconds} seconds" }, timeoutError: { id: "meter_update_modal_timeout_error", defaultMessage: "Error: Timeout occurred while updating the meter" }, fetchStatusError: { id: "meter_update_modal_fetch_status_error", defaultMessage: "Error: Unable to fetch meter update status" }, }), C = Object(r.defineMessages)({ [a.g.NETWORK_CONNECTION]: { id: "diagnostic_test_network_connection", defaultMessage: "Network Connection" }, [a.g.ENABLE_LINE]: { id: "diagnostic_test_enable_line", defaultMessage: "Enable Line" }, [a.g.METER_COMMUNICATIONS]: { id: "diagnostic_test_meter_comms", defaultMessage: "Meter Communications" }, }), I = Object(r.defineMessages)({ [c.ConnectionTypes.NEURIO_W1_WIFI]: { id: "meter_w1_wifi_id", defaultMessage: "METER {id}" }, [c.ConnectionTypes.NEURIO_W1_WIRED]: { id: "meter_w1_wired_id", defaultMessage: "WIRED METER {id}" }, [c.ConnectionTypes.NEURIO_W2_WIFI]: { id: "meter_w2_wifi_id", defaultMessage: "METER {id}" }, [c.ConnectionTypes.NEURIO_W2_WIRED]: { id: "meter_w2_wired_id", defaultMessage: "WIRED METER {id}" }, [c.ConnectionTypes.SYNCHROMETER_X]: { id: "meter_sync_x_id", defaultMessage: "INTERNAL PRIMARY METER X (GATEWAY) {id}" }, [c.ConnectionTypes.SYNCHROMETER_Y]: { id: "meter_sync_y_id", defaultMessage: "INTERNAL AUXILIARY METER Y (GATEWAY) {id}" }, [c.ConnectionTypes.MSA]: { id: "meter_msa_id", defaultMessage: "BACKUP SWITCH {id}" }, [c.ConnectionTypes.ACUVIM]: { id: "meter_acuvim_id", defaultMessage: "ACUVIM {id}" }, }), O = Object(r.defineMessages)({ id: { id: "phase_line_id", defaultMessage: "Line-{id}" }, [o.b.NON_BACKUP]: { id: "phase_line_status_configured", defaultMessage: "Non Backup" }, [o.b.BACKUP]: { id: "phase_line_status_backup", defaultMessage: "Backup" }, [o.b.NOT_CONFIGURED]: { id: "phase_line_status_not_configured", defaultMessage: "Not Configured" }, }), N = Object(r.defineMessages)({ [s.n[s.h.SOLAR]]: { id: "meter_aggregate_type_solar", defaultMessage: "Solar" }, [s.n[s.h.USAGE]]: { id: "meter_aggregate_type_load", defaultMessage: "Load" }, [s.n[s.h.GRID]]: { id: "meter_aggregate_type_site", defaultMessage: "Site" }, [s.n[s.h.BATTERY]]: { id: "meter_aggregate_type_battery", defaultMessage: "Battery" }, }), k = Object(r.defineMessages)({ formLegend: { id: "form_legend_text", defaultMessage: "denotes a required field" } }), P = Object(r.defineMessages)({ [_.e.BACKUP]: { id: "operation_mode_backup", defaultMessage: "Backup Charging Only" }, [_.e.SELF_CONSUMPTION]: { id: "operation_mode_self_consumption", defaultMessage: "Self-consumption Mode" }, [_.e.AUTONOMOUS]: { id: "operation_mode_autonomous", defaultMessage: "Autonomous Mode" }, [_.e.SITE_CONTROL]: { id: "operation_mode_site_control", defaultMessage: "Site Control" }, }), D = Object(r.defineMessages)({ conductorLimitExplanation: { id: "conductor_limit", defaultMessage: "Batteries are controlled to avoid exceeding configured current limits on each phase of the conductor CTs. Review conductor limit application note for more details about where this is used, and what limits should be configured.", }, conductorMinCurrent: { id: "conductor_min_current", defaultMessage: "Conductor Export Limit" }, }), L = Object(r.defineMessages)({ [l.a.backupMode]: { id: "can_reboot_message_backup", defaultMessage: "Backup Mode" }, [l.a.blockUpdate]: { id: "can_reboot_message_block_update", defaultMessage: "Block Update in progress" }, [l.a.initializing]: { id: "can_reboot_message_initializing", defaultMessage: "System Initializing" }, [l.a.enumeration]: { id: "can_reboot_message_enumeration", defaultMessage: "Enumeration in progress" }, [l.a.powerFlowIsTooHigh]: { id: "can_reboot_message_power_flow_is_too_high", defaultMessage: "Power flow is too high" }, [l.a.updating]: { id: "can_reboot_message_updating", defaultMessage: "Site Package Update in progress" }, }), M = Object(r.defineMessages)({ currentPassword: { id: "security_view_settings_old_password", defaultMessage: "CURRENT PASSWORD" }, newPassword: { id: "security_view_settings_new_password_label", defaultMessage: "NEW PASSWORD" }, }), z = Object(r.defineMessages)({ [a.a.audience]: { id: "diagnostic_alert_audience", defaultMessage: "Audience" }, [a.a.clearCondition]: { id: "diagnostic_alert_clear_condition", defaultMessage: "Clear Condition" }, [a.a.potentialImpact]: { id: "diagnostic_alert_potential_impact", defaultMessage: "Potential Impact" }, [a.a.isUrgent]: { id: "diagnostic_alert_urgent", defaultMessage: "Urgent" }, [a.a.isLatching]: { id: "diagnostic_alert_latching", defaultMessage: "Latching" }, [a.a.node]: { id: "diagnostic_alert_node", defaultMessage: "Node" }, [a.a.safetyReason]: { id: "diagnostic_alert_safety_reason", defaultMessage: "Safety Reason" }, [a.a.alertID]: { id: "diagnostic_alert_id", defaultMessage: "Alert ID" }, [a.a.payloadSignals]: { id: "diagnostic_alert_payload_signals", defaultMessage: "Payload Signals" }, [a.a.max]: { id: "diagnostic_alert_max", defaultMessage: "Max" }, [a.a.snaValue]: { id: "diagnostic_alert_sna_value", defaultMessage: "SNA Value" }, [a.a.offset]: { id: "diagnostic_alert_offset", defaultMessage: "Offset" }, [a.a.scale]: { id: "diagnostic_alert_scale", defaultMessage: "Scale" }, [a.a.name]: { id: "diagnostic_alert_name", defaultMessage: "Name" }, [a.a.min]: { id: "diagnostic_alert_min", defaultMessage: "Min" }, [a.a.units]: { id: "diagnostic_alert_units", defaultMessage: "Units" }, [a.a.alertName]: { id: "diagnostic_alert_alert_name", defaultMessage: "Alert Name" }, [a.a.uiID]: { id: "diagnostic_alert_uiID", defaultMessage: "UI ID" }, [a.a.signoff]: { id: "diagnostic_alert_signoff", defaultMessage: "Sign Off" }, [a.a.impactCategory]: { id: "diagnostic_alert_impact_category", defaultMessage: "Impact Category" }, [a.a.displayName]: { id: "diagnostic_alert_display_name", defaultMessage: "Display Name" }, [a.a.supplierDtcName]: { id: "diagnostic_alert_supplier_dtc_name", defaultMessage: "Supplier DTC Name" }, [a.a.alertType]: { id: "diagnostic_alert_alert_type", defaultMessage: "Alert Type" }, [a.a.description]: { id: "diagnostic_alert_description", defaultMessage: "Description" }, [a.a.signalName]: { id: "diagnostic_alert_signal_name", defaultMessage: "Signal Name" }, [a.a.setCondition]: { id: "diagnostic_alert_set_condition", defaultMessage: "Set Condition" }, }); }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.errors = t.labels = t.prompts = t.titles = t.buttons = void 0); const n = i(3); (t.buttons = (0, n.defineMessages)({ BACK: { id: "navigation_back", description: "Label for button that returns to the previous screen.", defaultMessage: "BACK" }, CANCEL: { id: "navigation_cancel", description: "Label for button that cancels or aborts the current action.", defaultMessage: "CANCEL" }, CONTINUE: { id: "navigation_forward", description: "Label for button that advances to the next screen.", defaultMessage: "CONTINUE" }, SKIP: { id: "navigation_skip", description: "Label for button that skips the current screen and advances to the next screen.", defaultMessage: "SKIP" }, CLOSE: { id: "modal_close", description: "Label for button that closes a modal dialog (e.g. a warning).", defaultMessage: "CLOSE" }, FINISH: { id: "label_button_finish", description: "Label for button that completes the current procedure (e.g. commissioning wizard).", defaultMessage: "FINISH" }, SAVE: { id: "modal_save", description: "Label for button that saves the settings shown on the current screen.", defaultMessage: "SAVE" }, EDIT: { id: "label_button_edit", description: "Label for button that edits the setting shown on the current screen.", defaultMessage: "EDIT" }, DELETE: { id: "control_delete", description: "Label for button that deletes or removes the specified item.", defaultMessage: "DELETE" }, CONNECT: { id: "control_connect", description: "Label for button that connects to the network or devices show on the current screen.", defaultMessage: "CONNECT" }, REFRESH: { id: "modal_refresh", description: "Label for button that refreshes or reloads the current list or screen.", defaultMessage: "REFRESH" }, UPLOAD: { id: "label_button_upload", description: "Label for button that uploads a file or data to the device or service.", defaultMessage: "UPLOAD" }, SCAN_BARCODE: { id: "label_button_scan_barcode", description: "Label for button that will scan a barcode using the camera.", defaultMessage: "SCAN BARCODE" }, SCAN_QRCODE: { id: "label_button_scan_qrcode", description: "Label for button that will scan a QR code using the camera.", defaultMessage: "SCAN QR CODE" }, ENTER_MANUALLY: { id: "label_button_enter_manually", description: "Label for button that enables manual data entry rather than scanning a barcode.", defaultMessage: "ENTER MANUALLY" }, FACTORY_RESET: { id: "button_label_factory_reset", description: "Button label for a factory reset action.", defaultMessage: "RESET TO FACTORY DEFAULTS" }, CONFIRM: { id: "button_label_confirm", description: "Button label for confirming an action.", defaultMessage: "CONFIRM" }, })), (t.titles = (0, n.defineMessages)({ gridCode: { id: "grid_code_container_title", description: "Grid Code is the techncial specification of the electric grid standard. This term may appear as the title of a screen or section showing the Grid Code settings and parameters.", defaultMessage: "Grid Code", }, ethernet: { id: "network_view_ethernet_title", description: "Title for a screen or section showing the device's Ethernet connection details or configuration options.", defaultMessage: "Ethernet" }, wifi: { id: "network_view_wifi_title", description: "Title for a screen or section showing the device's Wi-Fi connection details or configuration options.", defaultMessage: "Wi-Fi" }, cellular: { id: "network_view_gsm_title", description: "Title for a screen or section showing the device's cellular connection details or configuration options.", defaultMessage: "Cellular" }, metering: { id: "title_metering", description: "Title for a screen or section showing the device's metering configuration and connection status", defaultMessage: "Metering" }, networks: { id: "title_networks", description: "Title for a screen or section showing the device's networking devices, settings, and status.", defaultMessage: "Networks" }, service: { id: "title_service", description: "Title for a screen or section showing features accessible to a service person.", defaultMessage: "Service" }, siteInfo: { id: "title_site_info", description: "Site Info is a screen for configuring different items relating to the site. e.g. Inverter is connected to Solar Roof or PV Panels.", defaultMessage: "Site Info" }, siteMeter: { id: "title_site_meter", description: "Site Meter is an electrical meter that is installed at the interconnection point where the site connects to the electric grid. This term may appear as the title of a screen or section showing a Site Meter configuration, or denote ", defaultMessage: "Site Meter", }, softwareUpdate: { id: "title_software_update", description: "Title for a screen or section showing the device's software update status.", defaultMessage: "Software Update" }, software: { id: "title_software", description: "Title for a screen or section showing the device's software version and software update status.", defaultMessage: "Software" }, alerts: { id: "alert_container_title", description: "Title for a screen or section showing the device's alerts or alert status.", defaultMessage: "Alerts" }, installation: { id: "title_installation", description: "Title for a screen or section showing the device's installation parameters and settings.", defaultMessage: "Installation" }, summary: { id: "summary_container_title", description: "Title for a screen or section showing a summary of the device's configuration.", defaultMessage: "Summary" }, })), (t.prompts = (0, n.defineMessages)({ requiredField: { id: "prompt_required_field", description: "Prompt shown next to a field that is required.", defaultMessage: "This field is required." }, select: { id: "dropdown_default_selection", description: "Prompt shown in a dropdown selector that does not have a preselected value and a user selection is desired or required.", defaultMessage: "Select" }, })), (t.labels = (0, n.defineMessages)({ factoryReset: { id: "label_factory_reset", description: "Label for a factory reset.", defaultMessage: "FACTORY RESET" }, partNumber: { id: "label_part_number", description: "Label for the device part number", defaultMessage: "Part Number" }, partNumberTPN: { id: "label_part_number_psn", description: "Label for a Tesla part number. 'TPN' is how it is identified on the device enclosure.", defaultMessage: "Part Number (TPN)" }, serialNumber: { id: "label_serial_number", description: "Label for the device serial number", defaultMessage: "Serial Number" }, serialNumberTSN: { id: "label_serial_number_tsn", description: "Label for a Tesla serial number. 'TSN' is how it is identified on the device enclosure.", defaultMessage: "Serial Number (TSN)" }, model: { id: "label_model", description: "Label for the device model", defaultMessage: "Model" }, })), (t.errors = (0, n.defineMessages)({ invalidPassword: { id: "error_messages_invalid_password", description: "indicates an error due to an invalid password.", defaultMessage: "Invalid password. Please try again." } })); }, function (e, t, i) { "use strict"; i.d(t, "r", function () { return _; }), i.d(t, "e", function () { return l; }), i.d(t, "a", function () { return c; }), i.d(t, "f", function () { return d; }), i.d(t, "c", function () { return u; }), i.d(t, "b", function () { return m; }), i.d(t, "d", function () { return p; }), i.d(t, "o", function () { return g; }), i.d(t, "p", function () { return v; }), i.d(t, "l", function () { return f; }), i.d(t, "i", function () { return h; }), i.d(t, "j", function () { return E; }), i.d(t, "q", function () { return b; }), i.d(t, "k", function () { return y; }), i.d(t, "h", function () { return S; }), i.d(t, "m", function () { return T; }), i.d(t, "n", function () { return A; }), i.d(t, "g", function () { return I; }); var n = i(18), r = i.n(n), a = i(14), o = i(2), s = i(10); const _ = "Download is very slow or stalled.", l = (e) => e.filter((e) => [o.RECEIVE_SITEMASTER_SETTINGS_ERROR, o.RECEIVE_START_SITEMASTER_ERROR, o.RECEIVE_STOP_SITEMASTER_ERROR, o.RECEIVE_SYNC_CONFIG_ERROR].includes(e.getName())), c = (e) => e.filter((e) => [o.RECEIVE_LOGIN_ERROR, o.RECEIVE_CHANGE_PASSWORD_ERROR, o.RECEIVE_RESET_PASSWORD_ERROR, o.RECEIVE_GENERATE_PASSWORD_ERROR, o.RECEIVE_LOGOUT_ERROR].includes(e.getName())), d = (e) => e.filter((e) => [o.RECEIVE_CONNECT_SOLAR_INVERTER_ERROR].includes(e.getName())), u = (e) => e.filter((e) => [o.POWER_RATING_RANGE_ERROR, o.SUSTAINED_POWER_RANGE_ERROR].includes(e.getName())), m = (e) => e.filter((e) => e.isDetailed()), p = (e) => e.filter((e) => [o.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR].includes(e.getName())); function g(e) { let t = !1; if (e instanceof Error && null != e.response) { let i = e.response; null != i && (t = w(r()(i, (e) => e.status) || r()(i, (e) => e.code))); } else e instanceof a.default && (t = w(r()(e, (e) => e.context.code) || r()(e, (e) => e.context.status))); return v(e.message) || t; } function w(e) { return null != e && s.f.includes(e); } function v(e) { let t = e.toLowerCase(); return t.indexOf("unauthorized") > -1 || t.indexOf("forbidden") > -1 || t.indexOf("does not have adequate access") > -1 || f(t); } function f(e) { let t = e.toLowerCase(); return t.indexOf("invalid bearer token") > -1 || t.indexOf("token expired") > -1; } function h(e) { return E(e.message); } function E(e) { return e.toLowerCase().indexOf("failed to fetch") > -1; } function b(e) { return e.toLowerCase().indexOf("no update package available") > -1; } function y(e) { return e === _; } function S(e) { let t = !1; if (e instanceof Error && null != e.response) { let i = e.response; null != i && (t = R(r()(i, (e) => e.status) || r()(i, (e) => e.code))); } else e instanceof a.default && (t = R(r()(e, (e) => e.context.code) || r()(e, (e) => e.context.status))); return e.message.toLowerCase().indexOf("conflict") > -1 || t; } function R(e) { return 409 === e; } function T(e) { return !!e.response && 424 === e.response.code; } function A(e) { let t = !1; if (e instanceof Error && null != e.response) { let i = e.response; null != i && (t = C(r()(i, (e) => e.status) || r()(i, (e) => e.code))); } else e instanceof a.default && (t = C(r()(e, (e) => e.context.code) || r()(e, (e) => e.context.status))); return e.message.toLowerCase().indexOf("internal server error") > -1 || t; } function C(e) { return 500 === e; } function I(e) { const t = e.message.toLowerCase(); return t.indexOf("the network connection was lost") > -1 || t.indexOf("server with the specified hostname could not be found") > -1 || t.indexOf("the internet connection appears to be offline") > -1; } }, , , , , , , , function (e, t, i) { "use strict"; i.d(t, "h", function () { return r; }), i.d(t, "d", function () { return a; }), i.d(t, "a", function () { return o; }), i.d(t, "f", function () { return s; }), i.d(t, "g", function () { return _; }), i.d(t, "e", function () { return l; }), i.d(t, "b", function () { return c; }), i.d(t, "c", function () { return d; }), i.d(t, "i", function () { return u; }); var n = i(191); const r = n.SecurityType, a = n.NetworkInterfaceType, o = { ETHERNET: "ethernet", WIFI: "wifi", GSM: "cellular" }, s = { DHCP: "dhcp", STATIC: "manual" }, _ = { [r.NONE]: "None", [r.WEP]: "WEP", [r.WPA_WPA2_PERSONAL]: "WPA/WPA2 Personal", [r.WPA2_PERSONAL]: "WPA2 Personal", [r.DYNAMIC_WEP]: "Dynamic WEP", [r.WPA_WPA2_ENTERPRISE]: "WPA/WPA2 Enterprise", [r.WPA2_ENTERPRISE]: "WPA2 Enterprise", }, l = { ETHERNET: "Customer_Wired" }, c = /^0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$/, d = /^([0-9A-F]{2}-){5}([0-9A-F]){2}$/, u = /(Config|Hermes|Synergy|Tesla)/; }, , function (e, t, i) { "use strict"; i.d(t, "e", function () { return O; }), i.d(t, "d", function () { return N; }), i.d(t, "j", function () { return k; }), i.d(t, "h", function () { return q; }), i.d(t, "i", function () { return x; }), i.d(t, "b", function () { return B; }), i.d(t, "g", function () { return H; }), i.d(t, "k", function () { return Y; }), i.d(t, "c", function () { return Q; }), i.d(t, "l", function () { return Z; }), i.d(t, "a", function () { return J; }), i.d(t, "m", function () { return X; }), i.d(t, "f", function () { return $; }); var n = i(88), r = i(7), a = (i(10), i(127)), o = i(108), s = i(2), _ = i(5), l = i.n(_), c = i(6), d = i(4), u = i(15), m = i(45), p = i(128); function g(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function w(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? g(Object(i), !0).forEach(function (t) { v(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : g(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function v(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const f = Object(c.b)(s.REQUEST_LOGIN); function h(e) { return { type: s.RECEIVE_LOGIN_SUCCESS, receivedAt: Date.now(), email: e.email, roles: e.roles }; } const E = Object(c.b)(s.RECEIVE_LOGIN_ERROR), b = Object(c.b)(s.REQUEST_GENERATE_PASSWORD); const y = Object(c.b)(s.RECEIVE_GENERATE_PASSWORD_ERROR), S = Object(c.b)(s.REQUEST_RESET_PASSWORD); const R = Object(c.b)(s.RECEIVE_RESET_PASSWORD_ERROR), T = Object(c.b)(s.REQUEST_CHANGE_PASSWORD); const A = Object(c.b)(s.RECEIVE_CHANGE_PASSWORD_ERROR), C = Object(c.b)(s.REQUEST_LOGOUT), I = Object(c.b)(s.RECEIVE_LOGOUT_ERROR), O = Object(c.b)(s.CHANGE_USERNAME, "username"), N = Object(c.b)(s.CHANGE_LOGIN_TYPE, "selectedLoginType"), k = Object(c.b)(s.RESET_AUTHENTICATION), P = Object(c.b)(s.REQUEST_START_TOGGLE_AUTH), D = Object(c.b)(s.RECEIVE_START_TOGGLE_AUTH_SUCCESS), L = Object(c.b)(s.RECEIVE_START_TOGGLE_AUTH_ERROR), M = Object(c.b)(s.REQUEST_CANCEL_TOGGLE_AUTH), z = Object(c.b)(s.RECEIVE_CANCEL_TOGGLE_AUTH_SUCCESS), U = Object(c.b)(s.RECEIVE_CANCEL_TOGGLE_AUTH_ERROR), V = Object(c.b)(s.REQUEST_TOGGLE_AUTH_LOGIN), G = Object(c.b)(s.RECEIVE_TOGGLE_AUTH_LOGIN_SUCCESS), j = Object(c.b)(s.RECEIVE_TOGGLE_AUTH_LOGIN_ERROR), W = Object(c.b)(s.REQUEST_SUPPORTS_TOGGLE_AUTH); const F = Object(c.b)(s.RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR); function q(e, t, i, _ = !0) { return async (c) => { c(f()), c(Object(r.clearError)(s.RECEIVE_LOGIN_ERROR)); let m = i; _ || ((m = e), (e = "")); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(l.a.api.uri + "/login/Basic", { method: "POST", credentials: l.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username: m, password: t, email: e, clientInfo: { timezone: Object(o.d)() } }), }) .then(d.parseText) .then(d.parseResponseText) .then(d.checkResponseStatus) .then((e) => (Object(p.a)(a.a), c(h(e)), c(Object(n.replace)("/")), e)) ); } catch (e) { throw (c(Object(r.showError)(s.RECEIVE_LOGIN_ERROR, e.toString(), e.response)), c(E()), e); } }; } function x(e) { return (t) => ( t(C()), fetch(l.a.api.uri + "/logout", { credentials: l.a.credentials }) .then(d.checkStatus) .then(d.parseText) .then((i) => { Object(p.a)(a.a), Object(m.a)("AuthCookie"), t(k()), e && e(i); }) .catch((e) => { t(Object(r.showError)(s.RECEIVE_LOGOUT_ERROR, e.toString(), e.response)), t(I()); }) ); } function B() { return K("/password/changedefault"); } function H() { return K("/password/generate"); } function K(e) { return async (t) => { t(b()), t(Object(r.clearError)(s.RECEIVE_GENERATE_PASSWORD_ERROR)); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(`${l.a.api.uri}${e}`, { method: "POST", credentials: l.a.credentials }) .then(d.parseText) .then(d.parseResponseText) .then(d.checkResponseStatus) .then( (e) => ( t( (function (e) { return w({ type: s.RECEIVE_GENERATE_PASSWORD_SUCCESS, receivedAt: Date.now() }, e); })(e) ), e ) ) ); } catch (e) { throw (t(Object(r.showError)(s.RECEIVE_GENERATE_PASSWORD_ERROR, e.toString(), e.response)), t(y()), e); } }; } function Y(e, t, i) { return async (n) => { n(S()), n(Object(r.clearError)(s.RECEIVE_RESET_PASSWORD_ERROR)); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(l.a.api.uri + "/password/reset", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ old_password: e, new_password: t, toggled_pw: i }) }) .then(d.parseText) .then(d.parseResponseText) .then(d.checkResponseStatus) .then( (e) => ( n( (function (e) { return w({ type: s.RECEIVE_RESET_PASSWORD_SUCCESS, receivedAt: Date.now() }, e); })(e) ), e ) ) ); } catch (e) { throw (n(Object(r.showError)(s.RECEIVE_RESET_PASSWORD_ERROR, e.toString(), e.response)), n(R()), e); } }; } function Q(e, t, i) { return async (n) => { n(T()), n(Object(r.clearError)(s.RECEIVE_CHANGE_PASSWORD_ERROR)); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(l.a.api.uri + "/password/change", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ old_password: e, new_password: t, toggled_pw: i }) }) .then(d.parseText) .then(d.parseResponseText) .then(d.checkResponseStatus) .then( (e) => ( n( (function (e) { return w({ type: s.RECEIVE_CHANGE_PASSWORD_SUCCESS, receivedAt: Date.now() }, e); })(e) ), e ) ) ); } catch (e) { throw (n(Object(r.showError)(s.RECEIVE_CHANGE_PASSWORD_ERROR, e.toString(), e.response)), n(A()), e); } }; } function Z() { return async (e) => { e(P), e(Object(r.clearError)(s.RECEIVE_START_TOGGLE_AUTH_ERROR)); try { return await fetch(l.a.api.uri + "/auth/toggle/start", { method: "POST", credentials: "include" }) .then(d.checkResponseStatus) .then(() => { e(D()); }); } catch (t) { throw (e(Object(r.showError)(s.RECEIVE_START_TOGGLE_AUTH_ERROR, t.toString(), t.response)), e(L()), t); } }; } function J() { return async (e) => { e(M), e(Object(r.clearError)(s.RECEIVE_CANCEL_TOGGLE_AUTH_ERROR)); try { return await Object(u.e)( 35e3, new Error("Request timed out"), fetch(l.a.api.uri + "/auth/toggle/login", { method: "DELETE", credentials: "include" }) .then(d.checkResponseStatus) .then(() => { e(z()); }) ); } catch (t) { throw (e(Object(r.showError)(s.RECEIVE_CANCEL_TEST_ERROR, t.toString(), t.response)), e(U()), t); } }; } function X(e, t) { return async (i) => { i(V), i(Object(r.clearError)(s.RECEIVE_TOGGLE_AUTH_LOGIN_ERROR)); try { return await fetch(l.a.api.uri + "/auth/toggle/login", { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email: e, username: t }) }).then((e) => { if (417 !== e.status) return Object(d.parseText)(e) .then(d.parseResponseText) .then(d.checkResponseStatus) .then((e) => (Object(p.a)(a.a), i(h(e)), i(G()), i(Object(n.replace)("/")), e)); }); } catch (e) { throw (i(Object(r.showError)(s.RECEIVE_TOGGLE_AUTH_LOGIN_ERROR, e.toString(), e.response)), i(j()), e); } }; } function $() { return async (e) => { e(W), e(Object(r.clearError)(s.RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR)); try { return await fetch(l.a.api.uri + "/auth/toggle/supported") .then(d.checkResponseStatus) .then(d.parseJSON) .then((t) => { var i; return e(((i = t.toggle_auth_supported), { type: s.RECEIVE_SUPPORTS_TOGGLE_AUTH_SUCCESS, receivedAt: Date.now(), toggleAuthSupported: i })), t.toggle_auth_supported; }); } catch (t) { throw (e(Object(r.showError)(s.RECEIVE_SUPPORTS_TOGGLE_AUTH_ERROR, "", "")), e(F()), t); } }; } }, , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }); const n = { backupMode: "Backup Mode", blockUpdate: "Block Update in progress", enumeration: "Enumeration in progress", initializing: "", powerFlowIsTooHigh: "Power flow is too high", updating: "Site Package Update in progress", yes: "Yes", }; }, , function (e, t, i) { "use strict"; i.d(t, "d", function () { return r; }), i.d(t, "a", function () { return a; }), i.d(t, "e", function () { return o; }), i.d(t, "b", function () { return s; }), i.d(t, "c", function () { return _; }), i.d(t, "f", function () { return l; }); var n = i(3); const r = { CHECKING: "/clear_update_status", SUCCEEDED: "/update_succeeded", FAILED: "/update_failed", STAGED: "/update_staged", DOWNLOAD: "/download", DOWNLOADED: "/update_downloaded", UNKNOWN: "/update_unknown" }, a = (r.CHECKING, r.UNKNOWN, [r.CHECKING, r.DOWNLOAD, r.DOWNLOADED, r.UNKNOWN]), o = { IGNORING: "ignoring", ERROR: "error", NONACTIONABLE: "nonactionable" }, s = { INVALID: "FIRMWARE_UPDATE_URGENCY_INVALID", NONE: "FIRMWARE_UPDATE_URGENCY_NONE", OPTIONAL: "FIRMWARE_UPDATE_URGENCY_OPTIONAL", REQUIRED: "FIRMWARE_UPDATE_URGENCY_REQUIRED" }, _ = Object(n.defineMessages)({ [s.INVALID]: { id: "status_update_urgency_unknown", defaultMessage: "Unknown" }, [s.NONE]: { id: "status_update_urgency_none", defaultMessage: "Up To Date" }, [s.OPTIONAL]: { id: "status_update_urgency_optional", defaultMessage: "Update Optional" }, [s.REQUIRED]: { id: "status_update_urgency_required", defaultMessage: "Update Required" }, }); function l(e) { return e || (e = s.INVALID), _[e]; } }, function (e, t, i) { "use strict"; function n(e) { let t = e + "=", i = decodeURIComponent(document.cookie).split(";"); for (var n = 0; n < i.length; n++) { let e = i[n]; for (; " " === e.charAt(0); ) e = e.substring(1); if (0 === e.indexOf(t)) return e.substring(t.length, e.length); } return null; } function r(e, t, i) { let n = `${e}=${t};`; if (i) { let e = new Date(); e.setTime(e.getTime() + i), (n += "expires=" + e.toUTCString()); } document.cookie = n + ";path=/"; } function a(e) { document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; } i.d(t, "b", function () { return n; }), i.d(t, "c", function () { return r; }), i.d(t, "a", function () { return a; }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.isBackupGateway = t.isGateway2 = t.isResiGateway = t.isOnlyViewport = t.isViewport = t.getViewportSize = t.isSamsungAndroid = t.isMobile = t.isSafari = t.isChrome = t.isIOS = void 0); const n = i(56), r = ["xs", "sm", "md", "lg"]; function a() { let e = window.screen.width; return e < 768 ? r[0] : e >= 768 && e < 992 ? r[1] : e >= 992 && e < 1200 ? r[2] : r[3]; } (t.isIOS = function () { return /iPad|iPhone|iPod/.test(navigator.userAgent); }), (t.isChrome = function () { return /Chrome/.test(navigator.userAgent); }), (t.isSafari = function () { return /Safari/.test(navigator.userAgent); }), (t.isMobile = function () { return /Mobi/.test(navigator.userAgent); }), (t.isSamsungAndroid = function () { return /Samsung|SM-G/.test(navigator.userAgent); }), (t.getViewportSize = a), (t.isViewport = function (e) { return r.includes(e) && r.indexOf(a()) >= r.indexOf(e); }), (t.isOnlyViewport = function (e) { return r.indexOf(a()) === r.indexOf(e); }), (t.isResiGateway = function (e) { return e !== n.DEVICE_TYPE.SMC; }), (t.isGateway2 = function (e) { return e === n.DEVICE_TYPE.GW2; }), (t.isBackupGateway = function (e, t) { return e === n.DEVICE_TYPE.GW1 ? !!t : e === n.DEVICE_TYPE.GW2 && (null == t || t); }); }, , function (e, t, i) { "use strict"; i.r(t), i.d(t, "InstallationProblems", function () { return r; }), i.d(t, "installationProblemTitles", function () { return o; }), i.d(t, "installationProblemDetails", function () { return s; }), i.d(t, "isCriticalProblem", function () { return _; }); var n = i(3); const r = { MultipleControllers: "MultipleControllers", Miswired12v: "Miswired12v", PVACsWithNoSolarRGM: "PVACsWithNoSolarRGM", TooManySolarRGM: "TooManySolarRGM", TooFewSolarRGM: "TooFewSolarRGM", SiteShutdownExternalSwitch: "SiteShutdownExternalSwitch", SiteShutdownPvsRsdSwitch: "SiteShutdownPvsRsdSwitch", }, a = [r.MultipleControllers], o = Object(n.defineMessages)({ [r.MultipleControllers]: { id: "enumeration_warning_title_multiple_controllers", defaultMessage: "Multiple Site Controllers are Active" }, [r.PVACsWithNoSolarRGM]: { id: "installation_problem_title_pvacs_with_no_solar_rgm", defaultMessage: "Solar meter not measuring Powerwall+ inverter. Is this correct?" }, [r.TooManySolarRGM]: { id: "installation_problem_title_too_many_solar_rgm", defaultMessage: "Too many solar meters measuring Powerwall+ inverter" }, [r.TooFewSolarRGM]: { id: "installation_problem_title_too_few_solar_rgm", defaultMessage: "Too few solar meters measuring Powerwall+ inverter" }, [r.SiteShutdownExternalSwitch]: { id: "installation_problem_title_site_shutdown", defaultMessage: "Site shutdown circuit triggered. All Powerwalls and Powerwall+ solar inverters are disabled." }, [r.SiteShutdownPvsRsdSwitch]: { id: "installation_problem_title_site_shutdown_pvs_rsd_no_switch", defaultMessage: "Site shutdown circuit triggered by a Powerwall+ rapid shutdown. All Powerwalls and Powerwall+ solar inverters are disabled.", }, }), s = Object(n.defineMessages)({ [r.PVACsWithNoSolarRGM]: { id: "installation_problem_details_pvacs_with_no_solar_rgm", defaultMessage: "Solar meters are only required when measuring solar inverters that are not part of a Powerwall+ assembly. Meters that measure a Powerwall+ inverter should be marked as such on the Current Transformers page.", }, [r.TooManySolarRGM]: { id: "installation_problem_details_too_many_solar_rgm", defaultMessage: "The number of CTs measuring a Powerwall+ solar inverter should match the number of Powerwall+ solar inverters. Run wizard and adjust the CT configuration on the Current Transfomers page.", }, [r.TooFewSolarRGM]: { id: "installation_problem_details_too_few_solar_rgm", defaultMessage: "The number of CTs measuring a Powerwall+ solar inverter should match the number of Powerwall+ solar inverters. Run wizard, pair the Neurio meter if needed, and adjust the CT configuration on the Current Transfomers page.", }, }); function _(e) { return a.includes(e); } }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.classNames = void 0), (t.classNames = function e(...t) { return t .reduce((t, i) => { if (Array.isArray(i)) return t.concat(e(...i)); if (null == i) return t; if ("string" == typeof i) return t.push(i), t; if ("object" == typeof i) return t.concat(Object.entries(i).reduce((e, t) => (t[1] && e.push(t[0]), e), [])); throw new Error("Invalid arguments used in classNames"); }, []) .join(" ") .trim(); }); }, , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "showModal", function () { return a; }), i.d(t, "updateModal", function () { return o; }), i.d(t, "hideModal", function () { return s; }), i.d(t, "destroyModal", function () { return _; }); var n = i(2), r = i(6); function a(e, t = {}, i = {}) { return { type: n.SHOW_MODAL, modalType: e, modalProps: t, bootstrapProps: i }; } function o(e, t = {}, i = {}) { return { type: n.UPDATE_MODAL, modalType: e, modalProps: t, bootstrapProps: i }; } const s = Object(r.b)(n.HIDE_MODAL), _ = Object(r.b)(n.DESTROY_MODAL, "modalType"); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.SYNC_TYPE = t.DEVICE_TYPE = void 0), (function (e) { (e.GW1 = "hec"), (e.GW2 = "teg"), (e.SMC = "smc"); })(t.DEVICE_TYPE || (t.DEVICE_TYPE = {})), (function (e) { (e.V1 = "v1"), (e.V2 = "v2"), (e.V2_1 = "v2.1"); })(t.SYNC_TYPE || (t.SYNC_TYPE = {})); }, , function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }); const n = { BACK: "back", CANCEL: "cancel", FORWARD: "forward" }; }, function (e, t, i) { "use strict"; i.d(t, "b", function () { return v; }), i.d(t, "a", function () { return f; }), i.d(t, "c", function () { return h; }), i.d(t, "g", function () { return E; }), i.d(t, "f", function () { return b; }), i.d(t, "d", function () { return y; }), i.d(t, "e", function () { return S; }); var n = i(275), r = i.n(n), a = i(270), o = i.n(a), s = i(557), _ = i.n(s), l = i(76), c = i.n(l), d = i(1), u = i.n(d), m = i(3), p = i(26), g = i(37), w = i(96); i(50); function v(e, t = "", i = [], n, r = !1) { i.length && (e = _()(e, i)); let a = t; for (var o in e) { if ("string" == typeof e[o] && e[o]) (a += "\n"), r && (a += o + ": "), (a += e[o]); else if ("boolean" == typeof e[o]) a += `\n${o}: ${e[o]}`; else if ("object" == typeof e[o]) { if (Array.isArray(e[o]) && 0 === e[o].length) continue; (a += "\n"), r && (a += o + ": "), (a += JSON.stringify(e[o])); } else "number" == typeof e[o] && ((a += "\n"), r && (a += o + ": "), (a += e[o].toString())); n && n[o] && ((a += " "), r && (a += o + ": "), (a += n[o])); } return a; } function f(e, t = 1) { if (t > 0) { let i = Number(e + "e" + t), n = Number(Math.round(i) + "e-" + t) .toString() .split("."); return (1 !== n.length || ("-0" !== n[0] && "0" !== n[0] && !isNaN(n[0]))) && (2 !== n.length || "" !== n[1].replace(/0/g, "") || ("-0" !== n[0] && "0" !== n[0])) ? n.join(".") : "0"; } return Math.round(e).toString(); } function h(e) { const t = e.toString().match(/[^/^].+[^$/]/); return t && t.length ? t[0] : e.toString(); } function E(e, t = !1) { return e.replace(/([A-Z])/g, (e) => (t ? "-" : "_") + e.toLowerCase()); } const b = (e, t) => o()(t, (t) => ({ label: u.a.createElement(m.FormattedMessage, e[r()(t)]), value: t })); function y(e) { return e.toLowerCase().split(/[_-]+/)[0]; } function S(e, t, i = !1) { const n = Object(w.g)(e), r = c()(e, "interface"); if (c()(e, "active")) { if (i) return t.formatMessage(p.networkMessages.connected); const a = c()(e, "networkName"); if (r === g.d.WIFI && a) return a; if (n) return "IP: " + n; } return c()(e, "enabled") ? t.formatMessage(p.networkMessages[r + "Configured"]) : t.formatMessage(p.networkMessages.disconnected); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return d; }), i.d(t, "deviceTypeSelector", function () { return u; }), i.d(t, "isResiGatewaySelector", function () { return m; }), i.d(t, "syncTypeSelector", function () { return p; }), i.d(t, "leaderSelector", function () { return g; }), i.d(t, "followersSelector", function () { return w; }), i.d(t, "cellularDisabledSelector", function () { return v; }); var n = i(43), r = i(46), a = i(2), o = i(56); function s(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function _(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? s(Object(i), !0).forEach(function (t) { l(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : s(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function l(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const c = { isFetching: !1, isSyncing: !1, didInvalidate: !1, din: null, isNew: null, version: null, hash: null, persisted: !1, bootstrapped: !1, deviceType: o.DEVICE_TYPE.GW1, tegType: "", syncType: o.SYNC_TYPE.V1, leader: null, followers: [], cellularDisabled: !1, }; function d(e = c, t) { switch (t.type) { case n.b: return _(_({}, e), {}, { persisted: !0 }); case a.REQUEST_CONFIG_INITIALIZED: return _(_({}, e), {}, { isFetching: !0 }); case a.RECEIVE_CONFIG_INITIALIZED: return _( _({}, e), {}, { isFetching: !1, didInvalidate: !1, din: t.din, isNew: t.is_new, version: t.version, hash: t.git_hash, deviceType: t.device_type, tegType: t.teg_type, syncType: t.sync_type, leader: t.leader, followers: t.followers, cellularDisabled: t.cellular_disabled, bootstrapped: !0, } ); case a.RECEIVE_CONFIG_INITIALIZED_ERROR: return _(_({}, e), {}, { isFetching: !1, didInvalidate: !0, bootstrapped: !0 }); case a.REQUEST_SYNC_CONFIG: return _(_({}, e), {}, { isSyncing: !0 }); case a.RECEIVE_SYNC_CONFIG_SUCCESS: return _(_({}, e), {}, { isSyncing: !1, didInvalidate: !1, isNew: t.is_new, version: t.version, hash: t.git_hash, deviceType: t.device_type, tegType: t.teg_type, syncType: t.sync_type, bootstrapped: !0 }); case a.RECEIVE_SYNC_CONFIG_ERROR: return _(_({}, e), {}, { isSyncing: !1, didInvalidate: !0, bootstrapped: !0 }); default: return e; } } const u = ({ configuration: e }) => e.deviceType, m = ({ configuration: e }) => Object(r.isResiGateway)(e.deviceType), p = ({ configuration: e }) => e.syncType, g = ({ configuration: e }) => e.leader, w = ({ configuration: e }) => e.followers, v = (e) => e.configuration.cellularDisabled; }, , function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Vital = t.MissingValue = t.Attention = t.DeviceBody = t.DeviceHeader = t.DeviceView = void 0); const r = n(i(1)), a = i(3), o = n(i(580)); function s() { return r.default.createElement("div", { className: "device-attention" }); } (t.DeviceView = function (e) { return r.default.createElement( "div", { className: "system-device" }, r.default.createElement(o.default, { id: "device", isCollapsible: !e.doNotCollapse, collapsedOnMount: !1, collapsedHeader: e.children[0] }, e.children.slice(1)) ); }), (t.DeviceHeader = function (e) { var t, i; let n = null === (t = e.sitemanagerRunning) || void 0 === t || t, a = null === (i = e.device) || void 0 === i ? void 0 : i.needsAttentionRecursive(n); return r.default.createElement("div", { className: "system-device-header" }, a && r.default.createElement(s, null), e.children); }), (t.DeviceBody = function (e) { return r.default.createElement("div", { className: "system-device-body" }, e.children); }), (t.Attention = s), (t.MissingValue = r.default.createElement(a.FormattedMessage, { id: "system_vitals_missing_value", defaultMessage: "---", description: "This string is intended to convey the absence of a value" })), (t.Vital = function (e) { let i = e.value; return null == i || isNaN(i) ? t.MissingValue : r.default.createElement(a.FormattedNumber, { minimumSignificantDigits: 3, maximumSignificantDigits: 3, value: i }); }); }, , , , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return l; }); var n = i(1), r = i(0), a = i.n(r), o = i(17); i(799); function s() { return (s = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class l extends n.Component { constructor(e) { super(e), (this._onClick = this._onClick.bind(this)); } render() { const { className: e, title: t, subtitle: i, indicator: r, clickElementProps: a } = this.props; return n.createElement( "li", { "data-testid": "a7867b70-0e31-4ba4-a810-58baa590c313", className: e }, n.createElement(o.Link, s({ "data-testid": "eaba6587-b28a-437c-b6b1-981b253dd315" }, a, { onClick: this._onClick }), t, i, this._getIndicator(r)) ); } _onClick(e) { this.props.onClick && this.props.onClick(); } _getIndicator(e) { return void 0 !== e ? e : n.createElement("img", { "data-testid": "f51d4188-bb8b-421f-b576-b58a4292114d", className: "caret-right", src: i(153) }); } } _(l, "propTypes", { className: a.a.string.isRequired, onClick: a.a.func, clickElementProps: a.a.object, title: a.a.element, subtitle: a.a.element, indicator: a.a.element }), _(l, "defaultProps", { className: "menu-item", clickElementProps: {} }); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.StatusWarningIcon = void 0); const o = a(i(1)); i(578); t.StatusWarningIcon = (e) => { let t = e.inline ? "tds-icon-inline" : "tds-icon"; return ( e.className && (t += " " + e.className), o.createElement( "svg", { className: t, viewBox: "0 0 24 24", xmlns: "http://www.w3.org/2000/svg" }, o.createElement("circle", { fill: "#ffffff", cx: "12", cy: "12", r: "6" }), o.createElement("path", { d: "M21.586 16.476 14.591 4.498c-1.158-1.983-4.024-1.983-5.182 0L2.414 16.476c-1.169 2 .274 4.513 2.59 4.513h13.992c2.316 0 3.759-2.513 2.59-4.513zM11.25 9.73a.75.75 0 0 1 1.5 0v3.5a.75.75 0 0 1-1.5 0v-3.5zm.75 7.25a1 1 0 1 1 0-2 1 1 0 0 1 0 2z", fill: "#FBB01B", }) ) ); }; }, , , , , , function (e, t, i) { "use strict"; i.d(t, "c", function () { return r; }), i.d(t, "a", function () { return a; }), i.d(t, "b", function () { return o; }); var n = i(2); function r(e, t = {}) { return { type: n.SHOW_TOAST, name: e, toastProps: t }; } function a(e) { return { type: n.CLEAR_TOAST, name: e }; } function o() { return { type: n.CLEAR_TOASTS }; } }, , , function (e, t, i) { "use strict"; function n(e, t) { var i, n; return null !== (n = null !== (i = null == t ? void 0 : t.formatMessage(e)) && void 0 !== i ? i : e.defaultMessage) && void 0 !== n ? n : e.id; } function r(e) { return e.toLowerCase().replace("_", "-"); } Object.defineProperty(t, "__esModule", { value: !0 }), (t.negotiate = t.localizeWithFallback = t.localize = void 0), (t.localize = n), (t.localizeWithFallback = function (e, t, i) { return e ? n(e, t) : i; }), (t.negotiate = function (e, t) { let i = e.map(r); for (let n of t) { let t = r(n), a = i.indexOf(t); if (-1 !== a) return e[a]; if (t.includes("-") && ((a = i.indexOf(t.split("-")[0])), -1 !== a)) return e[a]; } return null; }); }, , , , , , , , , , , , , , , function (e, t, i) { "use strict"; i.d(t, "b", function () { return n; }), i.d(t, "c", function () { return r; }), i.d(t, "a", function () { return a; }); i(13); const n = { NON_BACKUP: "NonBackup", BACKUP: "Backup", NOT_CONFIGURED: "NotConfigured" }, r = 30, a = { ACPW: "ACPW", SolarPowerwall: "SolarPowerwall", bc: "bc" }; }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }), i.d(t, "e", function () { return r; }), i.d(t, "g", function () { return a; }), i.d(t, "d", function () { return o; }), i.d(t, "f", function () { return s; }), i.d(t, "b", function () { return _; }), i.d(t, "c", function () { return l; }); const n = "My Home", r = { BACKUP: "backup", SELF_CONSUMPTION: "self_consumption", AUTONOMOUS: "autonomous", SCHEDULER: "scheduler", SITE_CONTROL: "site_control", DIRECT: "direct" }, a = [r.BACKUP, r.SELF_CONSUMPTION, r.AUTONOMOUS], o = { BATTERY_OK: "battery_ok", NEVER: "never", PV_ONLY: "pv_only" }, s = [o.NEVER, o.PV_ONLY], _ = { HECO: "heco_battery_bonus" }, l = { POWER_RANGE: "power_range" }; }, , , function (e, t, i) { "use strict"; i.d(t, "l", function () { return d; }), i.d(t, "d", function () { return u; }), i.d(t, "c", function () { return m; }), i.d(t, "b", function () { return p; }), i.d(t, "a", function () { return g; }), i.d(t, "m", function () { return w; }), i.d(t, "h", function () { return v; }), i.d(t, "f", function () { return f; }), i.d(t, "i", function () { return h; }), i.d(t, "g", function () { return E; }), i.d(t, "j", function () { return b; }), i.d(t, "k", function () { return y; }), i.d(t, "e", function () { return S; }), i.d(t, "o", function () { return R; }), i.d(t, "n", function () { return T; }); var n = i(18), r = i.n(n), a = i(37), o = i(262); function s(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function _(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? s(Object(i), !0).forEach(function (t) { l(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : s(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function l(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const c = o.hasUsername, d = o.requiresPassword; function u(e) { return a.g[e] ? a.g[e] : e; } function m(e) { return a.h[e]; } function p(e) { return e.filter((e) => e.interface === a.d.WIFI); } function g(e) { return e.filter((e) => e.networkName); } function w(e) { return c(e); } function v(e, t) { return e.find((e) => e.interface === t && e.enabled); } function f(e, t) { return e.find((e) => e.interface === t && e.active); } function h(e, t, i) { return e.find((e) => e.interface === t && e.active && e.networkName === i); } function E(e) { return r()(e, (e) => e.ifaceNetworkInfo.ipNetworks[0].ip) || ""; } function b(e) { return e && null != e.signalStrength ? e.signalStrength : r()(e, (e) => e.ifaceNetworkInfo.signalStrength) || 0; } function y(e, t) { return (null != e && null == t) || (null == e && null != t) || (null != e && null != t && (e.active !== t.active || e.enabled !== t.enabled || E(e) !== E(t))); } function S(e) { let t = _(_({}, e), {}, { network_name: e.networkName, security_type: e.securityType, dns_servers: [] }); return "string" == typeof e.primaryDNS && "" !== e.primaryDNS && t.dns_servers.push(e.primaryDNS), "string" == typeof e.backupDNS && "" !== e.backupDNS && t.dns_servers.push(e.backupDNS), t; } function R(e) { let t = _(_({}, e), {}, { networkName: e.network_name, interface: e.interface, securityType: e.security_type, primaryDNS: void 0, backupDNS: void 0 }); e.dns_servers && e.dns_servers.length > 0 && ((t.primaryDNS = e.dns_servers[0]), e.dns_servers.length > 1 && (t.backupDNS = e.dns_servers[1])); const i = e.iface_network_info; return ( i && (t = _( _({}, t), {}, { ifaceNetworkInfo: _(_({}, i), {}, { ipNetworks: i.ip_networks ? i.ip_networks : null, stateReason: i.state_reason ? i.state_reason : "", signalStrength: i.signal_strength ? i.signal_strength : 0 }) } )), t ); } function T(e) { return { ssid: e.ssid, signalStrength: e.signal_strength, securityType: e.security_type }; } }, , , , , , , , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }), i.d(t, "b", function () { return r; }), i.d(t, "e", function () { return a; }), i.d(t, "f", function () { return o; }), i.d(t, "i", function () { return s; }), i.d(t, "j", function () { return _; }), i.d(t, "c", function () { return l; }), i.d(t, "d", function () { return c; }), i.d(t, "g", function () { return d; }), i.d(t, "h", function () { return u; }), i.d(t, "k", function () { return m; }), i.d(t, "m", function () { return p; }), i.d(t, "o", function () { return g; }), i.d(t, "l", function () { return w; }), i.d(t, "n", function () { return v; }), i.d(t, "q", function () { return f; }), i.d(t, "r", function () { return h; }), i.d(t, "p", function () { return E; }); const n = "RECEIVE_BATTERIES_ERROR", r = "RECEIVE_BATTERIES_SUCCESS", a = "RECEIVE_COMPONENTS_ERROR", o = "RECEIVE_COMPONENTS_SUCCESS", s = "RECEIVE_SUB_COMPONENTS_ERROR", _ = "RECEIVE_SUBB_COMPONENTS_SUCCESS", l = "RECEIVE_BATTERIES_UPDATE_ERROR", c = "RECEIVE_BATTERIES_UPDATE_SUCCESS", d = "RECEIVE_SCAN_BATTERIES_ERROR", u = "RECEIVE_SCAN_BATTERIES_SUCCESS", m = "REQUEST_BATTERIES", p = "REQUEST_COMPONENTS", g = "REQUEST_SUB_COMPONENTS", w = "REQUEST_BATTERIES_UPDATE", v = "REQUEST_SCAN_BATTERIES", f = "STORE_BATTERIES_IS_VALID", h = "STORE_BATTERIES_NEEDS_SCAN", E = "STOP_REQUEST_SUB_COMPONENTS"; }, , , function (e, t, i) { "use strict"; i.d(t, "d", function () { return a; }), i.d(t, "c", function () { return o; }), i.d(t, "a", function () { return s; }), i.d(t, "b", function () { return _; }); var n = i(266), r = i.n(n); function a() { return r.a.tz.guess(); } function o() { return r.a.tz.names(); } const s = 6e4, _ = 1e3; }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return b; }), i.d(t, "c", function () { return y; }), i.d(t, "d", function () { return S; }), i.d(t, "b", function () { return R; }); var n = i(7), r = i(2), a = i(14), o = i(5), s = i.n(o), _ = i(4), l = i(6), c = i(15); function d(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function u(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(i), !0).forEach(function (t) { m(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : d(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function m(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const p = Object(l.b)(r.REQUEST_SITEMASTER_SETTINGS); const g = Object(l.b)(r.RECEIVE_SITEMASTER_SETTINGS_ERROR), w = Object(l.b)(r.REQUEST_START_SITEMASTER); const v = Object(l.b)(r.REQUEST_STOP_SITEMASTER); const f = Object(l.b)(r.RECEIVE_STOP_SITEMASTER_ERROR), h = Object(l.b)(r.REQUEST_SITEMASTER_FOR_COMMISSIONING); const E = Object(l.b)(r.RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR); Object(l.b)(r.RESET_SITEMASTER_SETTINGS); function b() { return (e) => ( e(p()), e(Object(n.clearError)(r.RECEIVE_SITEMASTER_SETTINGS_ERROR)), Object(c.e)( c.a, new Error("Request timed out"), fetch(s.a.api.uri + "/sitemaster", { credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_SITEMASTER_SETTINGS_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(g(new a.default(r.RECEIVE_SITEMASTER_SETTINGS_ERROR, t.toString(), t.response))); }) ) ); } function y() { return (e) => ( e(w()), e(Object(n.clearError)(r.RECEIVE_START_SITEMASTER_ERROR)), e(Object(n.clearError)(r.RECEIVE_STOP_SITEMASTER_ERROR)), fetch(s.a.api.uri + "/sitemaster/run", { credentials: s.a.credentials }) .then((t) => { if (t.status < 200 || t.status >= 300) return Object(_.parseJSON)(t).then(_.checkResponseStatus); var i; e(((i = {}), u({ type: r.RECEIVE_START_SITEMASTER_SUCCESS, receivedAt: Date.now() }, i))), e(b()); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_START_SITEMASTER_ERROR, t.toString(), t.response)), e( (function (e) { return { type: r.RECEIVE_START_SITEMASTER_ERROR, receivedAt: Date.now(), error: e }; })(t.response ? t.response.error : "") ); }) ); } function S(e) { return (e) => ( e(v()), e(Object(n.clearError)(r.RECEIVE_START_SITEMASTER_ERROR)), e(Object(n.clearError)(r.RECEIVE_STOP_SITEMASTER_ERROR)), fetch(s.a.api.uri + "/sitemaster/stop", { credentials: s.a.credentials, method: "POST", body: JSON.stringify({ force: !0 }) }) .then(_.checkStatus) .then(() => { var t; e(((t = {}), u({ type: r.RECEIVE_STOP_SITEMASTER_SUCCESS, receivedAt: Date.now() }, t))), e(b()); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_STOP_SITEMASTER_ERROR, t.toString(), t.response)), e(f()); }) ); } function R() { return (e) => ( e(h()), fetch(s.a.api.uri + "/sitemaster/run_for_commissioning", { method: "POST", credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_SITEMASTER_FOR_COMMISSIONING_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR, t.toString(), t.response)), e(E()); }) ); } }, , , , function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.shouldDisplayAlert = t.DisabledReason = void 0); const r = n(i(1)), a = i(3); var o; !(function (e) { (e.FWUpdateInProgress = "FWUpdateInProgress"), (e.FWUpdateFailed = "FWUpdateFailed"), (e.GridCodeWriteFailed = "GridCodeWriteFailed"), (e.Config = "Config"), (e.DisabledUserRequested = "DisabledUserRequested"), (e.DisabledBatteryBreakerOpen = "DisabledBatteryBreakerOpen"), (e.DisabledExcessiveVoltageDrop = "DisabledExcessiveVoltageDrop"), (e.DisabledArcFaultLockout = "DisabledArcFaultLockout"); })((o = t.DisabledReason || (t.DisabledReason = {}))); const s = (0, a.defineMessages)({ [o.FWUpdateInProgress]: { id: "disabled_reason_checking_firmware_update", description: "Indicates that the unit is disabled because we are checking whether it needs an update.", defaultMessage: "Checking for firmware update", }, [o.FWUpdateFailed]: { id: "disabled_reason_firmware_update_failed", description: "Indicates that the unit is disabled because the firmware update failed.", defaultMessage: "Firmware update failed" }, [o.GridCodeWriteFailed]: { id: "disabled_reason_gridcode_write_failed", description: "Indicates that the unit is disabled because writing the gridcode to it failed.", defaultMessage: "Grid code setting failed" }, [o.Config]: { id: "disabled_reason_config", defaultMessage: "Disabled by configuration file" }, [o.DisabledUserRequested]: { id: "disabled_reason_user_requested", defaultMessage: "Disabled at user request" }, [o.DisabledBatteryBreakerOpen]: { id: "disabled_reason_battery_breaker_open", defaultMessage: "Battery breaker is open" }, [o.DisabledExcessiveVoltageDrop]: { id: "disabled_reason_excessive_voltage_drop", defaultMessage: "Excessive voltage drop" }, }), _ = (0, a.defineMessages)({ acFault: { id: "pvac_alert_ac_fault", defaultMessage: "Inverter AC Fault" }, dcFaultString1: { id: "pvac_alert_dc_fault_string1", defaultMessage: "Inverter DC Fault - String 1" }, dcFaultString2: { id: "pvac_alert_dc_fault_string2", defaultMessage: "Inverter DC Fault - String 2" }, dcFaultString3: { id: "pvac_alert_dc_fault_string3", defaultMessage: "Inverter DC Fault - String 3" }, dcFaultString4: { id: "pvac_alert_dc_fault_string4", defaultMessage: "Inverter DC Fault - String 4" }, overVoltage: { id: "pvac_alert_over_voltage", defaultMessage: "Grid Uncompliant - Over Voltage" }, underVoltage: { id: "pvac_alert_under_voltage", defaultMessage: "Grid Uncompliant - Under Voltage" }, overFreq: { id: "pvac_alert_over_freq", defaultMessage: "Grid Uncompliant - Over Frequency" }, underFreq: { id: "pvac_alert_under_freq", defaultMessage: "Grid Uncompliant - Under Frequency" }, freqChange: { id: "pvac_alert_freq_change", defaultMessage: "Grid Uncompliant - Frequency Change" }, overTemp: { id: "pvac_alert_over_temp", defaultMessage: "Inverter Over Temperature" }, internalComms: { id: "pvac_alert_internal_comms", defaultMessage: "Internal Communication Issue" }, }), l = (0, a.defineMessages)({ checkAC: { id: "pvac_alert_check_ac_note", defaultMessage: "Check AC wiring and grid connection. Reboot inverter and retry operation." }, checkDCString1: { id: "pvac_alert_check_dc_string1_note", defaultMessage: "Check String 1 DC wiring and panels. Reboot inverter and retry operation." }, checkDCString2: { id: "pvac_alert_check_dc_string2_note", defaultMessage: "Check String 2 DC wiring and panels. Reboot inverter and retry operation." }, checkDCString3: { id: "pvac_alert_check_dc_string3_note", defaultMessage: "Check String 3 DC wiring and panels. Reboot inverter and retry operation." }, checkDCString4: { id: "pvac_alert_check_dc_string4_note", defaultMessage: "Check String 4 DC wiring and panels. Reboot inverter and retry operation." }, confirmGridCode: { id: "pvac_alert_confirm_grid_code_note", defaultMessage: "Check AC wiring and grid connection. Confirm selected grid code." }, productionLimited: { id: "pvac_alert_production_limited_note", defaultMessage: "Production may be limited. Ensure proper wire terminations, sufficient airflow, and installation environment." }, reboot: { id: "pvac_alert_reboot_note", defaultMessage: "Reboot inverter, ensure system is up to date and fully commissioned." }, }), c = { PVAC_a001_inv_L1_HW_overcurrent: _.acFault, PVAC_a002_inv_L2_HW_overcurrent: _.acFault, PVAC_a003_inv_HVBus_HW_overvoltage: _.acFault, PVAC_a004_pv_HW_CMPSS_OC_STGA: _.dcFaultString1, PVAC_a005_pv_HW_CMPSS_OC_STGB: _.dcFaultString2, PVAC_a006_pv_HW_CMPSS_OC_STGC: _.dcFaultString3, PVAC_a007_pv_HW_CMPSS_OC_STGD: _.dcFaultString4, PVAC_a008_inv_HVBus_undervoltage: _.acFault, PVAC_a010_inv_AC_overvoltage: _.overVoltage, PVAC_a011_inv_AC_undervoltage: _.underVoltage, PVAC_a012_inv_AC_overfrequency: _.overFreq, PVAC_a013_inv_AC_underfrequency: _.underFreq, PVAC_a015_pv_HW_Allegro_OC_STGA: _.dcFaultString1, PVAC_a016_pv_HW_Allegro_OC_STGB: _.dcFaultString2, PVAC_a017_pv_HW_Allegro_OC_STGC: _.dcFaultString3, PVAC_a018_pv_HW_Allegro_OC_STGD: _.dcFaultString4, PVAC_a019_ambient_overtemperature: _.overTemp, PVAC_a020_dsp_overtemperature: _.overTemp, PVAC_a021_dcac_heatsink_overtemperature: _.overTemp, PVAC_a022_mppt_heatsink_overtemperature: _.overTemp, PVAC_a024_PVACrx_Command_mia: _.internalComms, PVAC_a025_PVS_Status_mia: _.internalComms, PVAC_a026_inv_AC_peak_overvoltage: _.overVoltage, PVAC_a027_inv_K1_relay_welded: _.acFault, PVAC_a028_inv_K2_relay_welded: _.acFault, PVAC_a031_VFCheck_OV: _.overVoltage, PVAC_a032_VFCheck_UV: _.underVoltage, PVAC_a033_VFCheck_OF: _.overFreq, PVAC_a034_VFCheck_UF: _.underFreq, PVAC_a035_VFCheck_RoCoF: _.freqChange, }, d = { PVAC_a001_inv_L1_HW_overcurrent: l.checkAC, PVAC_a002_inv_L2_HW_overcurrent: l.checkAC, PVAC_a003_inv_HVBus_HW_overvoltage: l.checkAC, PVAC_a004_pv_HW_CMPSS_OC_STGA: l.checkDCString1, PVAC_a005_pv_HW_CMPSS_OC_STGB: l.checkDCString2, PVAC_a006_pv_HW_CMPSS_OC_STGC: l.checkDCString3, PVAC_a007_pv_HW_CMPSS_OC_STGD: l.checkDCString4, PVAC_a008_inv_HVBus_undervoltage: l.checkAC, PVAC_a010_inv_AC_overvoltage: l.confirmGridCode, PVAC_a011_inv_AC_undervoltage: l.confirmGridCode, PVAC_a012_inv_AC_overfrequency: l.confirmGridCode, PVAC_a013_inv_AC_underfrequency: l.confirmGridCode, PVAC_a014_PVS_disabled_relay: l.checkAC, PVAC_a015_pv_HW_Allegro_OC_STGA: l.checkDCString1, PVAC_a016_pv_HW_Allegro_OC_STGB: l.checkDCString2, PVAC_a017_pv_HW_Allegro_OC_STGC: l.checkDCString3, PVAC_a018_pv_HW_Allegro_OC_STGD: l.checkDCString4, PVAC_a019_ambient_overtemperature: l.productionLimited, PVAC_a020_dsp_overtemperature: l.productionLimited, PVAC_a021_dcac_heatsink_overtemperature: l.productionLimited, PVAC_a022_mppt_heatsink_overtemperature: l.productionLimited, PVAC_a024_PVACrx_Command_mia: l.reboot, PVAC_a025_PVS_Status_mia: l.reboot, PVAC_a026_inv_AC_peak_overvoltage: l.confirmGridCode, PVAC_a027_inv_K1_relay_welded: l.checkAC, PVAC_a028_inv_K2_relay_welded: l.checkAC, PVAC_a031_VFCheck_OV: l.confirmGridCode, PVAC_a032_VFCheck_UV: l.confirmGridCode, PVAC_a033_VFCheck_OF: l.confirmGridCode, PVAC_a034_VFCheck_UF: l.confirmGridCode, PVAC_a035_VFCheck_RoCoF: l.confirmGridCode, }, u = (0, a.defineMessages)({ dcGroundFault: { id: "pvs_alert_dc_ground_fault", defaultMessage: "DC Ground Fault" }, dcOverVoltage: { id: "pvs_alert_dc_over_voltage", defaultMessage: "DC Over Voltage" }, dcIsolationString1: { id: "pvs_alert_dc_isolation_string1", defaultMessage: "DC Isolation Issue - String 1" }, dcIsolationString2: { id: "pvs_alert_dc_isolation_string2", defaultMessage: "DC Isolation Issue - String 2" }, dcIsolationString3: { id: "pvs_alert_dc_isolation_string3", defaultMessage: "DC Isolation Issue - String 3" }, dcIsolationString4: { id: "pvs_alert_dc_isolation_string4", defaultMessage: "DC Isolation Issue - String 4" }, dcArcFaultDetected: { id: "pvs_alert_dc_arc_fault_detected", defaultMessage: "DC Arc Fault - Detected" }, dcArcFaultLockout: { id: "pvs_alert_dc_arc_fault_lockout", defaultMessage: "DC Arc Fault - Lockout" }, rapidShutdown: { id: "pvs_alert_rapid_shutdown", defaultMessage: "Rapid Shutdown Initiated" }, }), m = (0, a.defineMessages)({ checkDC: { id: "pvs_alert_check_dc_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for ground fault issues." }, checkStrings: { id: "pvs_alert_check_dc_strings_note", defaultMessage: "Check DC wiring, connections, panels, and string configurations." }, checkDCString1: { id: "pvs_alert_check_dc_string1_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 1." }, checkDCString2: { id: "pvs_alert_check_dc_string2_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 2." }, checkDCString3: { id: "pvs_alert_check_dc_string3_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 3." }, checkDCString4: { id: "pvs_alert_check_dc_string4_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 4." }, checkArcFault: { id: "pvs_alert_check_arc_fault_note", defaultMessage: "Check DC wiring, connections, panels, and rapid shutdown devices for Arc fault issues." }, rapidShutdown: { id: "pvs_alert_rapid_shutdown_note", defaultMessage: "Check AC breaker and low-voltage rapid shutdown circuit." }, }), p = { PVS_a006_GfOvercurrent300: u.dcGroundFault, PVS_a009_GfOvercurrent030: u.dcGroundFault, PVS_a011_PvIsolationStringA: u.dcIsolationString1, PVS_a012_PvIsolationStringB: u.dcIsolationString2, PVS_a013_PvIsolationStringC: u.dcIsolationString3, PVS_a014_PvIsolationStringD: u.dcIsolationString4, PVS_a021_RapidShutdown: u.rapidShutdown, PVS_a030_VDcOv: u.dcOverVoltage, PVS_a035_PvArcDetected: u.dcArcFaultDetected, PVS_a036_PvArcLockout: u.dcArcFaultLockout, }, g = { PVS_a006_GfOvercurrent300: m.checkDC, PVS_a009_GfOvercurrent030: m.checkDC, PVS_a011_PvIsolationStringA: m.checkDCString1, PVS_a012_PvIsolationStringB: m.checkDCString2, PVS_a013_PvIsolationStringC: m.checkDCString3, PVS_a014_PvIsolationStringD: m.checkDCString4, PVS_a021_RapidShutdown: m.rapidShutdown, PVS_a030_VDcOv: m.checkStrings, PVS_a035_PvArcDetected: m.checkArcFault, PVS_a036_PvArcLockout: m.checkArcFault, }; function w(e) { return e.startsWith("PVAC_") ? e in c : !!e.startsWith("PVS_") && e in p; } (t.shouldDisplayAlert = w), (t.default = function ({ device: e, sitemanagerRunning: t }) { if (!e.needsAttention(null == t || t)) return null; if (e.isUpdating()) return null; if (e.isDisabled()) { let t = e.disabledReasons(); return r.default.createElement( "div", { className: "device-alert" }, r.default.createElement(a.FormattedMessage, { id: "system_device_alert_disabled", defaultMessage: "Device disabled" }), t.map((e) => r.default.createElement("div", { key: e, className: "device-alert-note" }, s[e] ? r.default.createElement(a.FormattedMessage, Object.assign({}, s[e])) : e)) ); } let i = e.alerts().filter(w), n = {}; for (let e of i) { let t = c[e] || p[e], i = d[e] || g[e]; n[t.id + "|" + (i ? i.id : "")] = { name: e, title: t, note: i }; } return r.default.createElement( r.default.Fragment, null, Object.values(n).map((e) => r.default.createElement( "div", { key: e.name, className: "device-alert" }, r.default.createElement(a.FormattedMessage, Object.assign({}, e.title)), e.note && r.default.createElement("div", { className: "alert-note" }, r.default.createElement(a.FormattedMessage, Object.assign({}, e.note))) ) ) ); }); }, , , , , , , , , , , , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return _; }), i.d(t, "b", function () { return l; }); var n = i(2); function r(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function a(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? r(Object(i), !0).forEach(function (t) { o(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function o(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { problems: [] }; function _(e = s, t) { switch (t.type) { case n.RECEIVE_INSTALLATION_PROBLEMS: return a(a({}, e), {}, { problems: t.problems }); default: return e; } } function l(e) { return e.troubleshooting.problems; } }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }); const n = "TESLA_CONFIG_REGISTRATION_FORM_SESSION"; }, function (e, t, i) { "use strict"; i.d(t, "c", function () { return n; }), i.d(t, "a", function () { return r; }), i.d(t, "b", function () { return a; }); function n(e, t, i = 0) { if (!e || !t) return; const n = "object" == typeof t ? JSON.stringify(t) : t; sessionStorage.setItem(e, n), i && sessionStorage.setItem(e + ":EXPIRATION", JSON.stringify({ expiration: i, timestamp: Date.now() })); } function r(e) { sessionStorage.removeItem(e), sessionStorage.removeItem(e + ":EXPIRATION"); } function a(e) { const t = sessionStorage.getItem(e), i = o(sessionStorage.getItem(e + ":EXPIRATION")), n = null != i && "object" == typeof i && Date.now() - i.timestamp >= i.expiration; return !t || n ? null : o(t); } function o(e) { if (!e) return null; try { return JSON.parse(e); } catch (t) { return e; } } }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return m; }); var n = i(1), r = i(0), a = i.n(r), o = i(3), s = i(15), _ = i(21), l = i(10); function c() { return (c = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } const d = Object(o.defineMessages)({ title: { id: "higher_order_login_title", defaultMessage: "Let's get started." }, login: { id: "higher_order_login_login_required", defaultMessage: "Login Required" } }), u = { intl: o.intlShape.isRequired, authentication: a.a.object.isRequired, changeSelectedLoginType: a.a.func.isRequired, updateHeader: a.a.func, updateModal: a.a.func, errors: a.a.array.isRequired }, m = { getLoginHeaderView: a.a.func.isRequired, handleChangeLoginHeader: a.a.func.isRequired, handleChangeLoginModal: a.a.func.isRequired, handleCheckForToggle: a.a.func.isRequired }; t.b = (e) => { var t, i, r, a, o; return ( (i = t = class extends n.Component { constructor(e) { super(e), (this.inToggleAuthLogin = !1), (this._getLoginHeaderView = this._getLoginHeaderView.bind(this)), (this._handleChangeLoginHeader = this._handleChangeLoginHeader.bind(this)), (this._handleChangeLoginModal = this._handleChangeLoginModal.bind(this)), (this._handleCheckForToggle = this._handleCheckForToggle.bind(this)), (this._checkForToggle = this._checkForToggle.bind(this)); } componentWillReceiveProps(e) { const { authentication: t, errors: i } = this.props; this.inToggleAuthLogin && Object(_.isAuthenticated)(e.authentication, e.errors) && (this.inToggleAuthLogin = !1); } componentWillUnmount() { this.inToggleAuthLogin = !1; } render() { return n.createElement( e, c({}, this.props, { getLoginHeaderView: this._getLoginHeaderView, handleChangeLoginHeader: this._handleChangeLoginHeader, handleChangeLoginModal: this._handleChangeLoginModal, handleCheckForToggle: this._handleCheckForToggle, }) ); } _handleCheckForToggle() { (this.inToggleAuthLogin = !0), this._checkForToggle(); } async _checkForToggle() { if (!this.checkingForToggle && this.inToggleAuthLogin) { this.checkingForToggle = !0; try { await this.props.toggleAuthLogin(this.props.authentication.username, this.props.authentication.selectedLoginType), await Object(s.d)(2e3), (this.checkingForToggle = !1), this._checkForToggle(); } catch (e) { this.checkingForToggle = !1; } } } _handleChangeLoginHeader(e) { e !== this.props.authentication.selectedLoginType && (this.props.changeSelectedLoginType(e), this.props.updateHeader && this.props.updateHeader("header-blank", { additionalView: this._getLoginHeaderView(e) })); } _handleChangeLoginModal(e) { e !== this.props.authentication.selectedLoginType && (this.props.changeSelectedLoginType(e), this.props.updateModal && this.props.updateModal(l.b, { headerView: n.cloneElement(this._getLoginHeaderView(e)) })); } _getLoginHeaderView() { let t = "WizardContainer" === e.name; return n.createElement( "div", { "data-testid": "b604333c-5ee6-4d23-ab77-5c0554260c05", className: "login-modal-title" }, t ? null : n.createElement("h2", { "data-testid": "0f11fe67-4b12-490a-aa87-c9d545f28fe5", className: "modal-title" }, this.props.intl.formatMessage(d.login)) ); } }), (o = u), (a = "propTypes") in (r = t) ? Object.defineProperty(r, a, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : (r[a] = o), i ); }; }, , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "showHeader", function () { return a; }), i.d(t, "updateHeader", function () { return o; }), i.d(t, "resetHeader", function () { return s; }); var n = i(2), r = i(6); function a(e, t = {}) { return { type: n.SHOW_HEADER, headerType: e, headerProps: t }; } function o(e, t = {}) { return { type: n.UPDATE_HEADER, headerType: e, headerProps: t }; } const s = Object(r.b)(n.RESET_HEADER); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.PhaseType = void 0), (function (e) { (e.SINGLE = "Single"), (e.SPLIT = "Split"), (e.THREE = "Three"), (e.TWO = "Two"), (e.WYE_LL = "WyeLL"); })(t.PhaseType || (t.PhaseType = {})); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "initializeConfig", function () { return v; }), i.d(t, "syncConfig", function () { return f; }), i.d(t, "getConfig", function () { return h; }); var n = i(7), r = i(2), a = i(5), o = i.n(a), s = i(6), _ = i(4), l = i(15); function c(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? c(Object(i), !0).forEach(function (t) { u(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : c(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function u(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const m = Object(s.b)(r.REQUEST_CONFIG_INITIALIZED); const p = Object(s.b)(r.RECEIVE_CONFIG_INITIALIZED_ERROR), g = Object(s.b)(r.REQUEST_SYNC_CONFIG); const w = Object(s.b)(r.RECEIVE_SYNC_CONFIG_ERROR); function v() { return (e) => ( e(m()), e(Object(n.clearError)(r.RECEIVE_CONFIG_INITIALIZED_ERROR)), fetch(o.a.api.uri + "/status") .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then((t) => { e( (function (e) { return d({ type: r.RECEIVE_CONFIG_INITIALIZED, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_CONFIG_INITIALIZED_ERROR, t.toString(), t.response)), e(p()); }) ); } function f() { return async (e) => { e(g()), e(Object(n.clearError)(r.RECEIVE_SYNC_CONFIG_ERROR)); try { return await Object(l.e)( l.a, new Error("Config sync timed out"), fetch(o.a.api.uri + "/config/completed", { credentials: o.a.credentials }) .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then((t) => { e( (function (e) { return d({ type: r.RECEIVE_SYNC_CONFIG_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) ); } catch (t) { e(Object(n.showError)(r.RECEIVE_SYNC_CONFIG_ERROR, t.toString(), t.response)), e(w()); } }; } async function h() { return fetch(o.a.api.uri + "/config", { credentials: o.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((e) => e) .catch((e) => { throw e; }); } }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.STANDARD_TOAST = t.WARNING_TOAST = void 0), (t.WARNING_TOAST = "WARNING_TOAST"), (t.STANDARD_TOAST = "STANDARD_TOAST"); }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.deviceTreeFromDeviceApiList = t.DeviceNode = t.DeviceType = t.Vitals = void 0); const n = i(113); class r { constructor(...e) { (this.numbers = new Map()), (this.strings = new Map()), (this.booleans = new Map()); for (let t of e) t && this.addVitals(t); } addVitals(e) { for (let t of e.vitals) { let e = t.name; if (e && t.value) switch (t.value.$case) { case "intValue": this.numbers.set(e, t.value.intValue); break; case "floatValue": this.numbers.set(e, t.value.floatValue); break; case "boolValue": this.booleans.set(e, t.value.boolValue); break; case "stringValue": this.strings.set(e, t.value.stringValue); } } } hasNumber(e) { return this.numbers.has(e); } getNumber(e) { return this.numbers.get(e); } hasString(e) { return this.strings.has(e); } getString(e) { return this.strings.get(e); } hasBoolean(e) { return this.booleans.has(e); } getBoolean(e) { return this.booleans.get(e); } size() { return this.numbers.size + this.strings.size + this.booleans.size; } } var a; (t.Vitals = r), (function (e) { (e.STSTSM = "STSTSM"), (e.THC = "TETHC"), (e.POD = "TEPOD"), (e.PINV = "TEPINV"), (e.PVAC = "PVAC"), (e.PVS = "PVS"), (e.SYNC = "TESYNC"), (e.MSA = "TEMSA"), (e.NEURIO = "NEURIO"), (e.ACPW = "ACPW"), (e.PVI = "PVI"), (e.SPW = "SPW"); })((a = t.DeviceType || (t.DeviceType = {}))); class o { constructor(e, t) { (this.children = []), (this.followers = []), (this.d = e), (this.customType = t), (this._vitals = new r(this.d)); } type() { var e, t, i, n; return ( this.customType || (null === (n = null === (i = null === (t = null === (e = this.d) || void 0 === e ? void 0 : e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.din) || void 0 === n ? void 0 : n.split("--")[0]) || "" ); } din() { var e, t, i; return this.customDin || (null === (i = null === (t = null === (e = this.d) || void 0 === e ? void 0 : e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.din) || ""; } partNumber() { return this.customPartNumber || this.din().split("--")[1] || ""; } serialNumber() { if (this.customSerialNumber) return this.customSerialNumber; let e = this.din().split("--"); return e[e.length - 1] || ""; } alerts() { var e; return (null === (e = this.d) || void 0 === e ? void 0 : e.alerts) || []; } vitals() { return this._vitals; } prefix() { const e = this.type(); return e.startsWith("TE") ? e.substring(2) : e; } addChild(e) { (e.parent = this), this.children.push(e); } addFollower(e) { (e.leader = this), this.followers.push(e); } disabledReasons() { var e; let t = this.type(), i = this.prefix() + "-DisabledReason", r = (null === (e = this.vitals().getString(i)) || void 0 === e ? void 0 : e.split(",")) || []; return t === a.PVI && r.includes(n.DisabledReason.DisabledUserRequested) && (r = r.filter((e) => e !== n.DisabledReason.DisabledUserRequested)), r; } isDisabled() { let e = this.type(), t = this.prefix() + "-DisabledReason", i = this.vitals().getString(t); return !!i && (i !== n.DisabledReason.DisabledUserRequested || e !== a.PVI); } isDisabledRecursive() { return this.isDisabled() || this.children.some((e) => e.isDisabledRecursive()); } isDisabledBecause(e) { return this.disabledReasons().includes(e); } isDisabledBecauseRecursive(e) { return this.isDisabledBecause(e) || this.children.some((t) => t.isDisabledBecauseRecursive(e)); } isUpdating() { let e = this.prefix() + "-Updating"; return this.vitals().getBoolean(e) || !1; } isUpdatingRecursive() { return this.isUpdating() || this.children.some((e) => e.isUpdatingRecursive()); } hasAlerts() { return this.alerts().filter(n.shouldDisplayAlert).length > 0; } hasAlertsRecursive() { return this.hasAlerts() || this.children.some((e) => e.hasAlertsRecursive()); } needsAttention(e) { return !(!e && this.type() === a.PVI) && (this.hasAlerts() || this.isUpdating() || this.isDisabled()); } needsAttentionRecursive(e) { return this.needsAttention(e) || this.children.some((t) => t.needsAttentionRecursive(e)); } } t.DeviceNode = o; class s extends o { constructor(e, t) { super(e, t), (this._vitals = new r()); } alerts() { return []; } } class _ extends o { constructor(e, t, ...i) { super(e, t), (this.additionalDevices = i.filter((e) => !!e)); for (let e of this.additionalDevices) this._vitals.addVitals(e); } alerts() { let e = [...this.d.alerts]; for (let t of this.additionalDevices) e.push(...t.alerts); return e; } } t.deviceTreeFromDeviceApiList = function (e, t) { const i = e.devices; let n = t ? a.STSTSM + "--" + t : void 0, r = p(a.STSTSM, n)[0]; if (!r) return null; let l = g(r), c = p(a.STSTSM, u(r)); for (let e of c) l.addFollower(g(e)); return l; function d(e) { var t, i, n; return null === (n = null === (i = null === (t = e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.din) || void 0 === n ? void 0 : n.split("--")[0]; } function u(e) { var t, i; return null === (i = null === (t = e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.din; } function m(e) { var t, i; return null === (i = null === (t = e.device) || void 0 === t ? void 0 : t.device) || void 0 === i ? void 0 : i.componentParentDin; } function p(e, t) { let n = []; for (let r of i) (void 0 !== e && e !== d(r)) || (m(r) === t && n.push(r)); return n; } function g(e) { let t = new o(e), i = p(void 0, u(e)); for (let n of i) d(n) === a.THC ? t.addChild(w(e, n)) : t.addChild(g(n)); return t; } function w(e, t) { let i = u(t), n = p(a.POD, i)[0], r = p(a.PINV, i)[0], o = p(a.PVAC, i)[0]; if (!o) return new _(t, a.ACPW, n, r); let l = new _(t, a.ACPW, n, r), c = new _(o, a.PVI, p(a.PVS, u(o))[0]), d = new s(t, a.SPW); return d.addChild(c), d.addChild(l), d; } }; }, , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Participant = t.AuthEnvelope = t.ExternalAuth = t.TeslaService = t.DeliveryChannel = t.ExternalAuthType = void 0); const n = i(40), r = { type: 0 }, a = {}, o = {}; !(function (e) { (e[(e.EXTERNAL_AUTH_TYPE_INVALID = 0)] = "EXTERNAL_AUTH_TYPE_INVALID"), (e[(e.EXTERNAL_AUTH_TYPE_PRESENCE = 1)] = "EXTERNAL_AUTH_TYPE_PRESENCE"), (e[(e.EXTERNAL_AUTH_TYPE_MTLS = 2)] = "EXTERNAL_AUTH_TYPE_MTLS"), (e[(e.EXTERNAL_AUTH_TYPE_HERMES_COMMAND = 4)] = "EXTERNAL_AUTH_TYPE_HERMES_COMMAND"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.ExternalAuthType || (t.ExternalAuthType = {})), (function (e) { (e[(e.DELIVERY_CHANNEL_INVALID = 0)] = "DELIVERY_CHANNEL_INVALID"), (e[(e.DELIVERY_CHANNEL_LOCAL_HTTPS = 1)] = "DELIVERY_CHANNEL_LOCAL_HTTPS"), (e[(e.DELIVERY_CHANNEL_HERMES_COMMAND = 2)] = "DELIVERY_CHANNEL_HERMES_COMMAND"), (e[(e.DELIVERY_CHANNEL_BLE = 3)] = "DELIVERY_CHANNEL_BLE"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.DeliveryChannel || (t.DeliveryChannel = {})), (function (e) { (e[(e.TESLA_SERVICE_INVALID = 0)] = "TESLA_SERVICE_INVALID"), (e[(e.TESLA_SERVICE_COMMAND = 1)] = "TESLA_SERVICE_COMMAND"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.TeslaService || (t.TeslaService = {})), (t.ExternalAuth = { encode: (e, t = n.Writer.create()) => (t.uint32(8).int32(e.type), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, r); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.type = i.int32(); break; default: i.skipType(7 & e); } } return o; }, }), (t.AuthEnvelope = { encode(e, i = n.Writer.create()) { var r; return i.uint32(10).bytes(e.payload), "externalAuth" === (null === (r = e.auth) || void 0 === r ? void 0 : r.$case) && t.ExternalAuth.encode(e.auth.externalAuth, i.uint32(18).fork()).ldelim(), i; }, decode(e, i) { const r = e instanceof Uint8Array ? new n.Reader(e) : e; let o = void 0 === i ? r.len : r.pos + i; const s = Object.assign({}, a); for (; r.pos < o; ) { const e = r.uint32(); switch (e >>> 3) { case 1: s.payload = r.bytes(); break; case 2: s.auth = { $case: "externalAuth", externalAuth: t.ExternalAuth.decode(r, r.uint32()) }; break; default: r.skipType(7 & e); } } return s; }, }), (t.Participant = { encode(e, t = n.Writer.create()) { var i, r, a, o; return ( "din" === (null === (i = e.id) || void 0 === i ? void 0 : i.$case) && t.uint32(10).string(e.id.din), "teslaService" === (null === (r = e.id) || void 0 === r ? void 0 : r.$case) && t.uint32(16).int32(e.id.teslaService), "local" === (null === (a = e.id) || void 0 === a ? void 0 : a.$case) && t.uint32(24).int32(e.id.local), "authorizedClient" === (null === (o = e.id) || void 0 === o ? void 0 : o.$case) && t.uint32(32).int32(e.id.authorizedClient), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, o); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.id = { $case: "din", din: i.string() }; break; case 2: a.id = { $case: "teslaService", teslaService: i.int32() }; break; case 3: a.id = { $case: "local", local: i.int32() }; break; case 4: a.id = { $case: "authorizedClient", authorizedClient: i.int32() }; break; default: i.skipType(7 & e); } } return a; }, }); }, , , , , , , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "showNavigation", function () { return a; }), i.d(t, "updateNavigation", function () { return o; }), i.d(t, "showBack", function () { return s; }), i.d(t, "hideBack", function () { return _; }), i.d(t, "showCancel", function () { return l; }), i.d(t, "hideCancel", function () { return c; }), i.d(t, "showForward", function () { return d; }), i.d(t, "hideForward", function () { return u; }), i.d(t, "resetNavigation", function () { return m; }); var n = i(2), r = i(6); function a(e, t) { return { type: n.SHOW_NAVIGATION, navigationType: e, backProps: t.back, cancelProps: t.cancel, forwardProps: t.forward }; } function o(e, t) { return { type: n.UPDATE_NAVIGATION, navigationType: e, backProps: t.back, cancelProps: t.cancel, forwardProps: t.forward }; } function s(e, t, i, r = "", a = {}) { return { type: n.SHOW_BACK, route: e, text: t, onClick: i, buttonClass: r, additionalProps: a }; } const _ = Object(r.b)(n.HIDE_BACK); function l(e, t, i, r = "", a = {}) { return { type: n.SHOW_CANCEL, route: e, text: t, onClick: i, buttonClass: r, additionalProps: a }; } const c = Object(r.b)(n.HIDE_CANCEL); function d(e, t, i, r = "", a = {}) { return { type: n.SHOW_FORWARD, route: e, text: t, onClick: i, buttonClass: r, additionalProps: a }; } const u = Object(r.b)(n.HIDE_FORWARD), m = Object(r.b)(n.RESET_NAVIGATION); }, function (e, t, i) { "use strict"; i.d(t, "e", function () { return o; }), i.d(t, "y", function () { return s; }), i.d(t, "r", function () { return _; }), i.d(t, "s", function () { return l; }), i.d(t, "u", function () { return c; }), i.d(t, "t", function () { return d; }), i.d(t, "v", function () { return u; }), i.d(t, "w", function () { return m; }), i.d(t, "q", function () { return p; }), i.d(t, "j", function () { return g; }), i.d(t, "g", function () { return w; }), i.d(t, "p", function () { return v; }), i.d(t, "d", function () { return f; }), i.d(t, "h", function () { return E; }), i.d(t, "m", function () { return b; }), i.d(t, "l", function () { return y; }), i.d(t, "n", function () { return S; }), i.d(t, "o", function () { return R; }), i.d(t, "k", function () { return T; }), i.d(t, "x", function () { return A; }), i.d(t, "i", function () { return C; }), i.d(t, "c", function () { return I; }), i.d(t, "a", function () { return O; }), i.d(t, "b", function () { return N; }), i.d(t, "f", function () { return k; }); var n = i(12), r = i(27), a = i(59); const o = (e) => e.filter((e) => (e.shortID && e.serial) || (p(e) && e.ipAddress)), s = (e) => e.connectionType === n.ConnectionTypes.SYNCHROMETER_X || e.connectionType === n.ConnectionTypes.SYNCHROMETER_Y, _ = (e) => e.connectionType === n.ConnectionTypes.SYNCHROMETER_X || e.connectionType === n.ConnectionTypes.SYNCHROMETER_Y || e.connectionType === n.ConnectionTypes.MSA, l = (e) => e === n.ConnectionTypes.NEURIO_W1_WIFI || e === n.ConnectionTypes.NEURIO_W1_WIRED || e === n.ConnectionTypes.NEURIO_W2_WIFI || e === n.ConnectionTypes.NEURIO_W2_WIRED, c = (e) => e === n.ConnectionTypes.NEURIO_W2_WIFI || e === n.ConnectionTypes.NEURIO_W2_WIRED, d = (e) => e === n.ConnectionTypes.NEURIO_W1_WIFI || e === n.ConnectionTypes.NEURIO_W1_WIRED, u = (e) => e === n.ConnectionTypes.NEURIO_W1_WIFI || e === n.ConnectionTypes.NEURIO_W2_WIFI, m = (e) => e === n.ConnectionTypes.NEURIO_W1_WIRED || e === n.ConnectionTypes.NEURIO_W2_WIRED, p = (e) => e.connectionType === n.ConnectionTypes.ACUVIM, g = (e) => e.filter((e) => s(e)), w = (e) => e.filter((e) => l(e.connectionType)), v = (e) => g(e).length > 0, f = (e) => e.filter((e) => null != e.connectionType), h = new Set([n.CurrentTransformerConnectionTypes.SITE, n.CurrentTransformerConnectionTypes.LOAD, n.CurrentTransformerConnectionTypes.SOLAR]), E = (e) => e.filter((e) => h.has(e.connectionType)); const b = (e) => ((e) => e.filter((e) => e.connectionType === n.CurrentTransformerConnectionTypes.SITE))(e).length > 0, y = (e) => ((e) => e.filter((e) => e.connectionType === n.CurrentTransformerConnectionTypes.LOAD))(e).length > 0, S = (e) => ((e) => e.filter((e) => null != e.connectionType && n.SolarLocationCurrentTransformerTypes.includes(e.connectionType)))(e).length > 0, R = (e) => { return ((t = e), t.filter((e) => e.connectionType === n.CurrentTransformerConnectionTypes.SOLAR_RGM)).length > 0; var t; }, T = (e) => ((e) => e.filter((e) => e.connectionType === n.CurrentTransformerConnectionTypes.CONDUCTOR))(e).length > 0, A = (e, t) => e === t || (null != e && null != t && n.SolarLocationCurrentTransformerTypes.includes(e) && n.SolarLocationCurrentTransformerTypes.includes(t)), C = (e, t) => (e === n.CurrentTransformerConnectionTypes.SOLAR_RGM ? (2 === t ? n.CurrentTransformerConnectionTypes.DOUBLED_SOLAR : n.CurrentTransformerConnectionTypes.SOLAR) : e), I = (e, t = null, i = 1) => { let o = Object(r.values)(n.PowerUnits), s = n.PowerUnits.WATTS; t && (o = o.slice(0, o.indexOf(t) + 1)); for (var _ = 0; _ < o.length - 1; _++) (Math.abs(e) > 1e3 || null != t) && ((e /= 1e3), (s = o[_ + 1])); return `${Object(a.a)(e, i)} ${s}`; }, O = (e, t) => Math.sqrt(Math.pow(e, 2) + Math.pow(t, 2)), N = (e, t) => { let i = O(e, t); return 0 === i ? 0 : Math.abs(e) / i; }, k = (e, t) => Object(r.findKey)(e, function (e) { return e === t; }); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetPowerwallConfig", function () { return A; }), i.d(t, "enumeratePowerwalls", function () { return G; }), i.d(t, "fetchPowerwalls", function () { return j; }), i.d(t, "getSOE", function () { return W; }), i.d(t, "startPowerwallsUpdate", function () { return F; }), i.d(t, "checkUpdateStatus", function () { return q; }), i.d(t, "getUpdateStatus", function () { return x; }), i.d(t, "checkPowerwallsStatus", function () { return B; }), i.d(t, "startPhaseDetection", function () { return H; }), i.d(t, "fetchPhaseInformation", function () { return K; }), i.d(t, "savePhaseUsages", function () { return Y; }), i.d(t, "enableInverterSolarMeterReadings", function () { return Q; }), i.d(t, "fetchPowerwallsPVISubPackageNumbers", function () { return Z; }); var n = i(7), r = i(2), a = i(13), o = (i(92), i(14)), s = i(5), _ = i.n(s), l = i(4), c = i(6), d = i(15); function u(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function m(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? u(Object(i), !0).forEach(function (t) { p(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : u(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function p(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const g = Object(c.b)(r.SCAN_POWERWALLS), w = Object(c.b)(r.REQUEST_POWERWALLS); function v(e) { return m({ type: r.RECEIVE_POWERWALLS, receivedAt: Date.now() }, e); } const f = Object(c.b)(r.RECEIVE_POWERWALLS_ERROR), h = Object(c.b)(r.REQUEST_SOE); const E = Object(c.b)(r.RECEIVE_SOE_ERROR), b = Object(c.b)(r.REQUEST_POWERWALLS_UPDATE); const y = Object(c.b)(r.RECEIVE_POWERWALLS_UPDATE_ERROR), S = Object(c.b)(r.REQUEST_POWERWALLS_STATUS); function R(e) { return m({ type: r.RECEIVE_POWERWALLS_STATUS_SUCCESS, receivedAt: Date.now() }, e); } const T = Object(c.b)(r.RECEIVE_POWERWALLS_STATUS_ERROR), A = Object(c.b)(r.RESET_POWERWALL_CONFIG), C = Object(c.b)(r.REQUEST_START_PHASE_DETECTION), I = Object(c.b)(r.RECEIVE_START_PHASE_DETECTION_SUCCESS), O = Object(c.b)(r.RECEIVE_START_PHASE_DETECTION_ERROR), N = Object(c.b)(r.REQUEST_FETCH_PHASE_INFORMATION); const k = Object(c.b)(r.RECEIVE_FETCH_PHASE_INFORMATION_ERROR), P = Object(c.b)(r.REQUEST_SAVE_PHASE_USAGES); const D = Object(c.b)(r.RECEIVE_SAVE_PHASE_USAGES_ERROR), L = Object(c.b)(r.REQUEST_ENABLE_INVERTER_SOLAR_METER_READINGS), M = Object(c.b)(r.RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_SUCCESS), z = Object(c.b)(r.RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_ERROR), U = Object(c.b)(r.REQUEST_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS); const V = Object(c.b)(r.RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS_ERROR); function G() { return (e) => ( e(g()), e(Object(n.clearError)(r.RECEIVE_POWERWALLS_ERROR)), fetch(_.a.api.uri + "/powerwalls/scan", { credentials: _.a.credentials, method: "POST" }) .then(l.parseJSON) .then(l.checkResponseStatus) .then((t) => { t ? e(v(t)) : (e(Object(n.showError)(r.RECEIVE_POWERWALLS_ERROR, "Could not retrieve Powerwalls")), e(f())); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_POWERWALLS_ERROR, t.toString(), t.response)), e(f()); }) ); } function j(e = !1) { return (t) => ( t(w()), t(Object(n.clearError)(r.REQUEST_POWERWALLS)), fetch(_.a.api.uri + "/powerwalls", { credentials: _.a.credentials }) .then(l.parseJSON) .then(l.checkResponseStatus) .then((i) => { i ? t(v(i)) : e || (t(Object(n.showError)(r.RECEIVE_POWERWALLS_ERROR, "Could not retrieve Powerwalls")), t(f())); }) .catch((i) => { e || (t(Object(n.showError)(r.RECEIVE_POWERWALLS_ERROR, i.toString(), i.response)), t(f())); }) ); } function W() { return (e) => ( e(h()), Object(d.e)( d.a, new Error("Request timed out"), fetch(_.a.api.uri + "/system_status/soe", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e( (function (e) { return m({ type: r.RECEIVE_SOE_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(E(new o.default(r.RECEIVE_SOE_ERROR, t.toString(), t.response))); }) ) ); } function F() { return (e) => ( e(b()), e(Object(n.clearError)(r.RECEIVE_POWERWALLS_UPDATE_ERROR)), fetch(_.a.api.uri + "/powerwalls/update", { credentials: _.a.credentials, method: "POST" }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { e({ type: r.RECEIVE_POWERWALLS_UPDATE_SUCCESS, receivedAt: Date.now() }); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_POWERWALLS_UPDATE_ERROR, t.toString(), t.response)), e(y()); }) ); } function q() { return fetch(_.a.api.uri + "/powerwalls/status", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => e) .catch((e) => { throw e; }); } function x() { return async (e) => { const t = await q(); return e(R(t)), t; }; } function B() { return async (e) => { e(S()); try { e(R(await q())); } catch (t) { e(Object(n.showError)(r.RECEIVE_POWERWALLS_STATUS_ERROR, t.toString(), t.response)), e(T()); } }; } function H() { return (e) => ( e(C()), e(Object(n.clearError)(r.RECEIVE_START_PHASE_DETECTION_ERROR)), fetch(_.a.api.uri + "/powerwalls/phase_detection", { credentials: _.a.credentials, method: "POST" }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => (e(I()), !0)) .catch((t) => { throw (e(Object(n.showError)(r.RECEIVE_START_PHASE_DETECTION_ERROR, t.toString(), t.response)), e(O()), t); }) ); } function K(e) { return (t) => ( t(N()), fetch(_.a.api.uri + "/powerwalls/phase_usages", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => { var i; t(((i = { lineStatuses: [e[a.i.PHASE_1], e[a.i.PHASE_2], e[a.i.PHASE_3]], lineVoltages: [e.Vl1n, e.Vl2n, e.Vl3n] }), m({ type: r.RECEIVE_FETCH_PHASE_INFORMATION_SUCCESS }, i))); }) .catch((i) => { e || t(Object(n.showError)(r.RECEIVE_FETCH_PHASE_INFORMATION_ERROR, i.toString(), i.response)), t(k()); }) ); } function Y(e) { return (t) => ( t(P()), fetch(_.a.api.uri + "/powerwalls/phase_usages", { credentials: _.a.credentials, method: "POST", body: JSON.stringify({ [a.i.PHASE_1]: e[0], [a.i.PHASE_2]: e[1], [a.i.PHASE_3]: e[2] }) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => { var i; return t(((i = { lineStatuses: [e[a.i.PHASE_1], e[a.i.PHASE_2], e[a.i.PHASE_3]], lineVoltages: [e.Vl1n, e.Vl2n, e.Vl3n] }), m({ type: r.RECEIVE_SAVE_PHASE_USAGES_SUCCESS }, i))), !0; }) .catch((e) => (t(Object(n.showError)(r.RECEIVE_SAVE_PHASE_USAGES_ERROR, e.toString(), e.response)), t(D()), !1)) ); } function Q() { return (e) => ( e(L()), fetch(_.a.api.uri + "/powerwalls/enable_inverter_solar_meter_readings", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" } }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { e(M()); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_ENABLE_INVERTER_SOLAR_METER_READINGS_ERROR, t.toString(), t.response)), e(z()); }) ); } function Z() { return (e) => ( e(U()), fetch(_.a.api.uri + "/powerwalls/pvi_sub_package_numbers", { method: "GET", credentials: _.a.credentials, headers: { "Content-Type": "application/json" } }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { e( (function (e) { return m({ type: r.RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS }, e); })(t) ); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS_ERROR, t.toString(), t.response)), e(V()); }) ); } }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAAAXNSR0IArs4c6QAAAPtJREFUGBljTk9PbzM1NdU8c+bMKQYsgOn///+L/v37VwlUWIRFnoH57Nmzb0xMTDYDFc4wNjZmB/KPICtkBnGAgu8sLS03/P37dwpQMR+QfxCmCKwAxDl16tQHoAnrGBkZ+4G0GFDRPpA4E4iAgVmzZj0CKrAD8kOBbuoCiTPCJJHptLQ0SaDC/UCx7SgmICkSATpaAMi/DXcDTDIjI8MQKLkbyK8GWjkTxYSsrCxTYJjsAkqWAiXngDTB3QB0lCVQ5xag3TkzZ85cDpIEAbAJmZmZtkD2VqBkOrIkSAEz0MWOQHo9ECcCJUE0CmAB6QIaHQu0cyuKDJQDAEimY7IetteGAAAAAElFTkSuQmCC"; }, function (e, t, i) { "use strict"; function n(e) { "textarea" !== e.target.type && 13 === e.which && e.preventDefault(); } function r(e) { e.preventDefault(), window.location.reload(); } i.d(t, "a", function () { return n; }), i.d(t, "b", function () { return r; }); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.KiloOhms = t.Ohms = t.KiloWattHours = t.KiloWatts = t.WattHours = t.Watts = t.Amps = t.Volts = t.Hertz = t.Phase = void 0); const o = a(i(1)), s = i(3), _ = i(577); function l(e) { return "number" == typeof e.value ? o.createElement(s.FormattedNumber, { value: e.value }) : e.value; } t.Phase = (e) => { let t = _.phaseMessages[e.value]; return t ? o.createElement(s.FormattedMessage, Object.assign({}, t)) : o.createElement(s.FormattedMessage, { id: "display_phase_type_unknown", description: "Shown when the phase type of the grid or installation is unrecognized or unknown.", defaultMessage: "unknown" }); }; t.Hertz = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.hertz, { values: { frequency: l(e) } })); t.Volts = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.volts, { values: { voltage: l(e) } })); t.Amps = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.amps, { values: { current: l(e) } })); t.Watts = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.watts, { values: { power: l(e) } })); t.WattHours = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.wattHours, { values: { energy: l(e) } })); t.KiloWatts = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.kiloWatts, { values: { power: l(e) } })); t.KiloWattHours = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.kiloWattHours, { values: { energy: l(e) } })); t.Ohms = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.ohms, { values: { resistance: l(e) } })); t.KiloOhms = (e) => o.createElement(s.FormattedMessage, Object.assign({}, _.unitMessages.kiloOhms, { values: { resistance: l(e) } })); }, , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3); t.default = function ({ device: e }) { if (!e) return null; const t = e.vitals(), i = e.prefix(), n = t.getBoolean(i + "-Updating"), o = t.getNumber(i + "-UpdateProgress"); if (!n || void 0 === o) return null; const s = t.getNumber(i + "-UpdateNumSteps"); let _ = t.getNumber(i + "-UpdateCurrentStep"); void 0 !== _ && (_ += 1); const l = (100 * o).toFixed(0); return r.default.createElement( "div", { className: "system-device-update-progress" }, r.default.createElement(a.FormattedMessage, { id: "system_firmware_update", defaultMessage: "Updating: {percent}% ({step}/{numSteps})", values: { step: _, numSteps: s, percent: l } }), r.default.createElement("progress", { value: o }) ); }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.CommonAPIFactoryResetRequest = t.CommonAPIPerformUpdateResponse = t.CommonAPIPerformUpdateRequest = t.CommonAPIClearUpdateResponse = t.CommonAPIClearUpdateRequest = t.CommonAPICheckForUpdateResponse = t.CommonAPICheckForUpdateRequest = t.CommonAPISetLocalSiteConfigResponse = t.CommonAPISetLocalSiteConfigRequest = t.CommonAPIGetSystemInfoResponse = t.CommonAPIGetSystemInfoRequest = t.ErrorResponse = t.RadioLegalInformation = t.ComplianceInformation = t.DeviceSignedPayload = t.RegistrationPayload = t.AcceptedPackage = t.LocallyAvailablePackage = t.SystemUpdate = t.ServerStagedPackage = t.WifiNetwork = t.WifiConfig = t.EncryptedMessage = t.CellularEID = t.WifiPassword = t.NetworkInterface = t.NetworkConnectivityStatus = t.Rssi = t.NetworkInterfaceIPv4Config = t.GridComplianceStatus = t.InstDCMeasurement = t.InstACMeasurement = t.AccumulatedEnergy = t.FirmwareVersion = t.Din = t.EcuId = t.DeviceCertFormat = t.WifiConfigureResult = t.DeviceSignatureType = t.WifiNetworkSecurityType = t.Cipher = t.CellularProfileType = t.NetworkDeviceStateReason = t.NetworkDeviceState = t.GridState = t.EnergyAccumulationType = t.LastUpdateResult = t.UpdateStatus = t.UpdateHandshakeResult = t.DeviceType = void 0), (t.AlertMatrix = t.AlertLog = t.CommonAPIPrepareRegistrationPayloadResponse = t.CommonAPIPrepareRegistrationPayloadRequest = t.CommonAPINegotiateUpdateWithLocallyAvailablePackagesResponse = t.CommonAPINegotiateUpdateWithLocallyAvailablePackagesRequest = t.CommonAPICheckForUpdateUrgencyResponse = t.CommonAPICheckForUpdateUrgencyRequest = t.CommonAPIDeviceCertResponse = t.CommonAPIDeviceCertRequest = t.CommonAPIConfigureWifiWithEncryptedPasswordResponse = t.CommonAPIConfigureWifiWithEncryptedPasswordRequest = t.CommonAPICheckInternetResponse = t.CommonAPICheckInternetRequest = t.CommonAPIForgetWifiNetworkResponse = t.CommonAPIForgetWifiNetworkRequest = t.CommonAPIConfigureEthernetResponse = t.CommonAPIConfigureEthernetRequest = t.CommonAPIConfigureWifiResponse = t.CommonAPIConfigureWifiRequest = t.CommonAPIWifiScanResponse = t.CommonAPIWifiScanRequest = t.CommonAPIGetCellularInfoResponse = t.CommonAPIGetCellularInfoRequest = t.CommonAPIGetNetworkingStatusResponse = t.CommonAPIGetNetworkingStatusRequest = t.CommonAPIFactoryResetResponse = void 0); const n = i(775), r = i(40), a = i(453), o = { partNumber: "", serialNumber: "" }, s = { value: "" }, _ = { version: "" }, l = { energyWh: 0, accumulationType: 0 }, c = { voltageVrms: 0, frequencyHz: 0 }, d = { voltageV: 0 }, u = { gridState: 0 }, m = { dhcpEnabled: !1, address: 0, subnetMask: 0, gateway: 0, dns: 0 }, p = { value: 0 }, g = { connectedPhysical: !1, connectedInternet: !1, connectedTesla: !1 }, w = { enabled: !1, activeRoute: !1, deviceState: 0, deviceStateReason: 0 }, v = { value: "" }, f = { value: "" }, h = { cipher: 0 }, E = { ssid: "", securityType: 0 }, b = { rssiValue: 0, ssid: "", securityType: 0 }, y = { downloadUrl: "", packageId: 0 }, S = { handshakeResult: 0, updateStatus: 0, totalBytes: 0, bytesOffset: 0, estimatedBytesPerSecond: 0, lastHandshakeTimestamp: 0, lastUpdateResult: 0 }, R = { packageId: 0, fileSizeBytes: 0 }, T = { packageId: 0, uploadEndpoint: "" }, A = {}, C = { deviceSignatureType: 0, deviceCertFormat: 0 }, I = {}, O = {}, N = {}, k = {}, P = { din: "", deviceType: 0 }, D = {}, L = {}, M = { downloadIfAvailable: !1 }, z = {}, U = {}, V = {}, G = {}, j = {}, W = {}, F = {}, q = {}, x = {}, B = {}, H = { supportedProfiles: 0 }, K = { maxScanDurationS: 0, desiredSecurityTypes: 0, maximumTotalAps: 0 }, Y = {}, Q = { enabled: !1 }, Z = {}, J = {}, X = {}, $ = { ssid: "" }, ee = {}, te = {}, ie = {}, ne = { enabled: !1 }, re = { result: 0 }, ae = {}, oe = { format: 0 }, se = {}, _e = {}, le = {}, ce = {}, de = {}, ue = {}, me = { data: 0 }, pe = { data: 0 }; function ge(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } !(function (e) { (e[(e.DEVICE_TYPE_INVALID = 0)] = "DEVICE_TYPE_INVALID"), (e[(e.DEVICE_TYPE_GEN3WC = 1)] = "DEVICE_TYPE_GEN3WC"), (e[(e.DEVICE_TYPE_PVCOM = 2)] = "DEVICE_TYPE_PVCOM"), (e[(e.DEVICE_TYPE_MSA = 3)] = "DEVICE_TYPE_MSA"), (e[(e.DEVICE_TYPE_SITECONTROLLER = 4)] = "DEVICE_TYPE_SITECONTROLLER"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.DeviceType || (t.DeviceType = {})), (function (e) { (e[(e.UPDATE_HANDSHAKE_RESULT_INVALID = 0)] = "UPDATE_HANDSHAKE_RESULT_INVALID"), (e[(e.UPDATE_HANDSHAKE_RESULT_UNDERWAY = 1)] = "UPDATE_HANDSHAKE_RESULT_UNDERWAY"), (e[(e.UPDATE_HANDSHAKE_RESULT_FAILED = 2)] = "UPDATE_HANDSHAKE_RESULT_FAILED"), (e[(e.UPDATE_HANDSHAKE_RESULT_NON_ACTIONABLE = 3)] = "UPDATE_HANDSHAKE_RESULT_NON_ACTIONABLE"), (e[(e.UPDATE_HANDSHAKE_RESULT_UPDATE_STAGED = 4)] = "UPDATE_HANDSHAKE_RESULT_UPDATE_STAGED"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.UpdateHandshakeResult || (t.UpdateHandshakeResult = {})), (function (e) { (e[(e.UPDATE_STATUS_INVALID = 0)] = "UPDATE_STATUS_INVALID"), (e[(e.UPDATE_STATUS_IDLE = 1)] = "UPDATE_STATUS_IDLE"), (e[(e.UPDATE_STATUS_DOWNLOADING = 2)] = "UPDATE_STATUS_DOWNLOADING"), (e[(e.UPDATE_STATUS_DOWNLOADED = 3)] = "UPDATE_STATUS_DOWNLOADED"), (e[(e.UPDATE_STATUS_STAGED = 4)] = "UPDATE_STATUS_STAGED"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.UpdateStatus || (t.UpdateStatus = {})), (function (e) { (e[(e.LAST_UPDATE_RESULT_INVALID = 0)] = "LAST_UPDATE_RESULT_INVALID"), (e[(e.LAST_UPDATE_RESULT_FAILED = 1)] = "LAST_UPDATE_RESULT_FAILED"), (e[(e.LAST_UPDATE_RESULT_SUCCEEDED = 2)] = "LAST_UPDATE_RESULT_SUCCEEDED"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.LastUpdateResult || (t.LastUpdateResult = {})), (function (e) { (e[(e.ENERGY_ACCUMULATION_TYPE_INVALID = 0)] = "ENERGY_ACCUMULATION_TYPE_INVALID"), (e[(e.ENERGY_ACCUMULATION_TYPE_LIFETIME = 1)] = "ENERGY_ACCUMULATION_TYPE_LIFETIME"), (e[(e.ENERGY_ACCUMULATION_TYPE_TODAY = 2)] = "ENERGY_ACCUMULATION_TYPE_TODAY"), (e[(e.ENERGY_ACCUMULATION_TYPE_SESSION = 3)] = "ENERGY_ACCUMULATION_TYPE_SESSION"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.EnergyAccumulationType || (t.EnergyAccumulationType = {})), (function (e) { (e[(e.GRID_STATE_INVALID = 0)] = "GRID_STATE_INVALID"), (e[(e.GRID_STATE_UNCOMPLIANT = 1)] = "GRID_STATE_UNCOMPLIANT"), (e[(e.GRID_STATE_QUALIFYING = 2)] = "GRID_STATE_QUALIFYING"), (e[(e.GRID_STATE_COMPLIANT = 3)] = "GRID_STATE_COMPLIANT"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.GridState || (t.GridState = {})), (function (e) { (e[(e.NETWORK_DEVICE_STATE_INVALID = 0)] = "NETWORK_DEVICE_STATE_INVALID"), (e[(e.NETWORK_DEVICE_STATE_UNMANAGED = 1)] = "NETWORK_DEVICE_STATE_UNMANAGED"), (e[(e.NETWORK_DEVICE_STATE_UNAVAILABLE = 2)] = "NETWORK_DEVICE_STATE_UNAVAILABLE"), (e[(e.NETWORK_DEVICE_STATE_IDLE = 3)] = "NETWORK_DEVICE_STATE_IDLE"), (e[(e.NETWORK_DEVICE_STATE_ASSOCIATION = 4)] = "NETWORK_DEVICE_STATE_ASSOCIATION"), (e[(e.NETWORK_DEVICE_STATE_CONFIGURATION = 5)] = "NETWORK_DEVICE_STATE_CONFIGURATION"), (e[(e.NETWORK_DEVICE_STATE_READY = 6)] = "NETWORK_DEVICE_STATE_READY"), (e[(e.NETWORK_DEVICE_STATE_DISCONNECT = 7)] = "NETWORK_DEVICE_STATE_DISCONNECT"), (e[(e.NETWORK_DEVICE_STATE_FAILURE = 8)] = "NETWORK_DEVICE_STATE_FAILURE"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.NetworkDeviceState || (t.NetworkDeviceState = {})), (function (e) { (e[(e.NETWORK_DEVICE_STATE_REASON_INVALID = 0)] = "NETWORK_DEVICE_STATE_REASON_INVALID"), (e[(e.NETWORK_DEVICE_STATE_REASON_NONE = 1)] = "NETWORK_DEVICE_STATE_REASON_NONE"), (e[(e.NETWORK_DEVICE_STATE_REASON_CONFIG_FAILED = 2)] = "NETWORK_DEVICE_STATE_REASON_CONFIG_FAILED"), (e[(e.NETWORK_DEVICE_STATE_REASON_DHCP_FAILED = 3)] = "NETWORK_DEVICE_STATE_REASON_DHCP_FAILED"), (e[(e.NETWORK_DEVICE_STATE_REASON_IP_ADDRESS_DUPLICATE = 4)] = "NETWORK_DEVICE_STATE_REASON_IP_ADDRESS_DUPLICATE"), (e[(e.NETWORK_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED = 5)] = "NETWORK_DEVICE_STATE_REASON_IP_CONFIG_EXPIRED"), (e[(e.NETWORK_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE = 6)] = "NETWORK_DEVICE_STATE_REASON_IP_CONFIG_UNAVAILABLE"), (e[(e.NETWORK_DEVICE_STATE_REASON_IP_METHOD_UNSUPPORTED = 7)] = "NETWORK_DEVICE_STATE_REASON_IP_METHOD_UNSUPPORTED"), (e[(e.NETWORK_DEVICE_STATE_REASON_NEW_ACTIVATION = 8)] = "NETWORK_DEVICE_STATE_REASON_NEW_ACTIVATION"), (e[(e.NETWORK_DEVICE_STATE_REASON_NO_SECRETS = 9)] = "NETWORK_DEVICE_STATE_REASON_NO_SECRETS"), (e[(e.NETWORK_DEVICE_STATE_REASON_PPP_FAILED = 10)] = "NETWORK_DEVICE_STATE_REASON_PPP_FAILED"), (e[(e.NETWORK_DEVICE_STATE_REASON_SSID_NOT_FOUND = 11)] = "NETWORK_DEVICE_STATE_REASON_SSID_NOT_FOUND"), (e[(e.NETWORK_DEVICE_STATE_REASON_SIM_PIN_INCORRECT = 12)] = "NETWORK_DEVICE_STATE_REASON_SIM_PIN_INCORRECT"), (e[(e.NETWORK_DEVICE_STATE_REASON_SUPPLICANT_FAILED = 13)] = "NETWORK_DEVICE_STATE_REASON_SUPPLICANT_FAILED"), (e[(e.NETWORK_DEVICE_STATE_REASON_REMOVED = 14)] = "NETWORK_DEVICE_STATE_REASON_REMOVED"), (e[(e.NETWORK_DEVICE_STATE_REASON_MODEM_FAILED = 15)] = "NETWORK_DEVICE_STATE_REASON_MODEM_FAILED"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.NetworkDeviceStateReason || (t.NetworkDeviceStateReason = {})), (function (e) { (e[(e.CELLULAR_PROFILE_TYPE_INVALID = 0)] = "CELLULAR_PROFILE_TYPE_INVALID"), (e[(e.CELLULAR_PROFILE_TYPE_TWILIO = 1)] = "CELLULAR_PROFILE_TYPE_TWILIO"), (e[(e.CELLULAR_PROFILE_TYPE_ATT = 2)] = "CELLULAR_PROFILE_TYPE_ATT"), (e[(e.CELLULAR_PROFILE_TYPE_KPN = 3)] = "CELLULAR_PROFILE_TYPE_KPN"), (e[(e.CELLULAR_PROFILE_TYPE_TELEFONICA = 4)] = "CELLULAR_PROFILE_TYPE_TELEFONICA"), (e[(e.CELLULAR_PROFILE_TYPE_TELSTRA = 5)] = "CELLULAR_PROFILE_TYPE_TELSTRA"), (e[(e.CELLULAR_PROFILE_TYPE_TELUS = 6)] = "CELLULAR_PROFILE_TYPE_TELUS"), (e[(e.CELLULAR_PROFILE_TYPE_DOCOMO = 7)] = "CELLULAR_PROFILE_TYPE_DOCOMO"), (e[(e.CELLULAR_PROFILE_TYPE_UNICOM = 8)] = "CELLULAR_PROFILE_TYPE_UNICOM"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.CellularProfileType || (t.CellularProfileType = {})), (function (e) { (e[(e.CIPHER_INVALID = 0)] = "CIPHER_INVALID"), (e[(e.CIPHER_RSA_OAEP_SHA256 = 2)] = "CIPHER_RSA_OAEP_SHA256"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.Cipher || (t.Cipher = {})), (function (e) { (e[(e.WIFI_NETWORK_SECURITY_TYPE_INVALID = 0)] = "WIFI_NETWORK_SECURITY_TYPE_INVALID"), (e[(e.WIFI_NETWORK_SECURITY_TYPE_NONE = 1)] = "WIFI_NETWORK_SECURITY_TYPE_NONE"), (e[(e.WIFI_NETWORK_SECURITY_TYPE_DYNAMIC_WEP = 2)] = "WIFI_NETWORK_SECURITY_TYPE_DYNAMIC_WEP"), (e[(e.WIFI_NETWORK_SECURITY_TYPE_WPA2_PERSONAL = 3)] = "WIFI_NETWORK_SECURITY_TYPE_WPA2_PERSONAL"), (e[(e.WIFI_NETWORK_SECURITY_TYPE_WPA2_ENTERPRISE = 4)] = "WIFI_NETWORK_SECURITY_TYPE_WPA2_ENTERPRISE"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.WifiNetworkSecurityType || (t.WifiNetworkSecurityType = {})), (function (e) { (e[(e.DEVICE_SIGNATURE_TYPE_INVALID = 0)] = "DEVICE_SIGNATURE_TYPE_INVALID"), (e[(e.DEVICE_SIGNATURE_TYPE_SHA256_ECDSA_ASN1 = 1)] = "DEVICE_SIGNATURE_TYPE_SHA256_ECDSA_ASN1"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.DeviceSignatureType || (t.DeviceSignatureType = {})), (function (e) { (e[(e.WIFI_CONFIGURE_RESULT_INVALID = 0)] = "WIFI_CONFIGURE_RESULT_INVALID"), (e[(e.WIFI_CONFIGURE_RESULT_SUCCESS = 1)] = "WIFI_CONFIGURE_RESULT_SUCCESS"), (e[(e.WIFI_CONFIGURE_RESULT_FAILURE_GENERIC = 2)] = "WIFI_CONFIGURE_RESULT_FAILURE_GENERIC"), (e[(e.WIFI_CONFIGURE_RESULT_FAILED_WITH_INVALID_CONFIG = 3)] = "WIFI_CONFIGURE_RESULT_FAILED_WITH_INVALID_CONFIG"), (e[(e.WIFI_CONFIGURE_RESULT_FAILED_TO_CONNECT = 4)] = "WIFI_CONFIGURE_RESULT_FAILED_TO_CONNECT"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.WifiConfigureResult || (t.WifiConfigureResult = {})), (function (e) { (e[(e.DEVICE_CERT_FORMAT_INVALID = 0)] = "DEVICE_CERT_FORMAT_INVALID"), (e[(e.DEVICE_CERT_FORMAT_DER = 1)] = "DEVICE_CERT_FORMAT_DER"), (e[(e.DEVICE_CERT_FORMAT_PEM = 2)] = "DEVICE_CERT_FORMAT_PEM"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.DeviceCertFormat || (t.DeviceCertFormat = {})), (t.EcuId = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.partNumber), t.uint32(18).string(e.serialNumber), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, o); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.partNumber = i.string(); break; case 2: a.serialNumber = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.Din = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, s); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.FirmwareVersion = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.version), t.uint32(18).bytes(e.githash), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, _); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.version = i.string(); break; case 2: a.githash = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.AccumulatedEnergy = { encode: (e, t = r.Writer.create()) => ( t.uint32(13).float(e.energyWh), t.uint32(16).int32(e.accumulationType), void 0 !== e.periodS && void 0 !== e.periodS && a.UInt64Value.encode({ value: e.periodS }, t.uint32(26).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, l); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.energyWh = i.float(); break; case 2: o.accumulationType = i.int32(); break; case 3: o.periodS = a.UInt64Value.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.InstACMeasurement = { encode: (e, t = r.Writer.create()) => ( t.uint32(13).float(e.voltageVrms), t.uint32(21).float(e.frequencyHz), void 0 !== e.currentArms && void 0 !== e.currentArms && a.FloatValue.encode({ value: e.currentArms }, t.uint32(26).fork()).ldelim(), void 0 !== e.realPowerW && void 0 !== e.realPowerW && a.FloatValue.encode({ value: e.realPowerW }, t.uint32(34).fork()).ldelim(), void 0 !== e.reactivePowerVar && void 0 !== e.reactivePowerVar && a.FloatValue.encode({ value: e.reactivePowerVar }, t.uint32(42).fork()).ldelim(), void 0 !== e.apparentPowerVa && void 0 !== e.apparentPowerVa && a.FloatValue.encode({ value: e.apparentPowerVa }, t.uint32(50).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, c); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.voltageVrms = i.float(); break; case 2: o.frequencyHz = i.float(); break; case 3: o.currentArms = a.FloatValue.decode(i, i.uint32()).value; break; case 4: o.realPowerW = a.FloatValue.decode(i, i.uint32()).value; break; case 5: o.reactivePowerVar = a.FloatValue.decode(i, i.uint32()).value; break; case 6: o.apparentPowerVa = a.FloatValue.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.InstDCMeasurement = { encode: (e, t = r.Writer.create()) => (t.uint32(13).float(e.voltageV), void 0 !== e.currentA && void 0 !== e.currentA && a.FloatValue.encode({ value: e.currentA }, t.uint32(18).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, d); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.voltageV = i.float(); break; case 2: o.currentA = a.FloatValue.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.GridComplianceStatus = { encode: (e, t = r.Writer.create()) => ( t.uint32(8).int32(e.gridState), void 0 !== e.qualifyingTimeRemainingS && void 0 !== e.qualifyingTimeRemainingS && a.UInt32Value.encode({ value: e.qualifyingTimeRemainingS }, t.uint32(18).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, u); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.gridState = i.int32(); break; case 2: o.qualifyingTimeRemainingS = a.UInt32Value.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.NetworkInterfaceIPv4Config = { encode(e, t = r.Writer.create()) { t.uint32(16).bool(e.dhcpEnabled), t.uint32(29).fixed32(e.address), t.uint32(37).fixed32(e.subnetMask), t.uint32(45).fixed32(e.gateway), t.uint32(50).fork(); for (const i of e.dns) t.fixed32(i); return t.ldelim(), t; }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, m); for (a.dns = []; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 2: a.dhcpEnabled = i.bool(); break; case 3: a.address = i.fixed32(); break; case 4: a.subnetMask = i.fixed32(); break; case 5: a.gateway = i.fixed32(); break; case 6: if (2 == (7 & e)) { const e = i.uint32() + i.pos; for (; i.pos < e; ) a.dns.push(i.fixed32()); } else a.dns.push(i.fixed32()); break; default: i.skipType(7 & e); } } return a; }, }), (t.Rssi = { encode: (e, t = r.Writer.create()) => ( t.uint32(8).sint32(e.value), void 0 !== e.signalStrengthPercent && void 0 !== e.signalStrengthPercent && a.UInt32Value.encode({ value: e.signalStrengthPercent }, t.uint32(18).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, p); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.value = i.sint32(); break; case 2: o.signalStrengthPercent = a.UInt32Value.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.NetworkConnectivityStatus = { encode: (e, i = r.Writer.create()) => ( i.uint32(8).bool(e.connectedPhysical), i.uint32(16).bool(e.connectedInternet), i.uint32(24).bool(e.connectedTesla), void 0 !== e.rssi && void 0 !== e.rssi && t.Rssi.encode(e.rssi, i.uint32(34).fork()).ldelim(), void 0 !== e.snr && void 0 !== e.snr && a.Int32Value.encode({ value: e.snr }, i.uint32(42).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === i ? n.len : n.pos + i; const s = Object.assign({}, g); for (; n.pos < o; ) { const e = n.uint32(); switch (e >>> 3) { case 1: s.connectedPhysical = n.bool(); break; case 2: s.connectedInternet = n.bool(); break; case 3: s.connectedTesla = n.bool(); break; case 4: s.rssi = t.Rssi.decode(n, n.uint32()); break; case 5: s.snr = a.Int32Value.decode(n, n.uint32()).value; break; default: n.skipType(7 & e); } } return s; }, }), (t.NetworkInterface = { encode: (e, i = r.Writer.create()) => ( i.uint32(10).bytes(e.macAddress), i.uint32(16).bool(e.enabled), i.uint32(24).bool(e.activeRoute), void 0 !== e.ipv4Config && void 0 !== e.ipv4Config && t.NetworkInterfaceIPv4Config.encode(e.ipv4Config, i.uint32(34).fork()).ldelim(), void 0 !== e.connectivityStatus && void 0 !== e.connectivityStatus && t.NetworkConnectivityStatus.encode(e.connectivityStatus, i.uint32(42).fork()).ldelim(), i.uint32(48).int32(e.deviceState), i.uint32(56).int32(e.deviceStateReason), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, w); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.macAddress = n.bytes(); break; case 2: o.enabled = n.bool(); break; case 3: o.activeRoute = n.bool(); break; case 4: o.ipv4Config = t.NetworkInterfaceIPv4Config.decode(n, n.uint32()); break; case 5: o.connectivityStatus = t.NetworkConnectivityStatus.decode(n, n.uint32()); break; case 6: o.deviceState = n.int32(); break; case 7: o.deviceStateReason = n.int32(); break; default: n.skipType(7 & e); } } return o; }, }), (t.WifiPassword = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, v); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CellularEID = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, f); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.EncryptedMessage = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.cipher), t.uint32(18).bytes(e.ciphertext), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, h); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.cipher = i.int32(); break; case 2: a.ciphertext = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.WifiConfig = { encode: (e, i = r.Writer.create()) => (void 0 !== e.password && void 0 !== e.password && t.WifiPassword.encode(e.password, i.uint32(18).fork()).ldelim(), i.uint32(10).string(e.ssid), i.uint32(24).int32(e.securityType), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, E); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 2: o.password = t.WifiPassword.decode(n, n.uint32()); break; case 1: o.ssid = n.string(); break; case 3: o.securityType = n.int32(); break; default: n.skipType(7 & e); } } return o; }, }), (t.WifiNetwork = { encode: (e, i = r.Writer.create()) => ( i.uint32(16).sint32(e.rssiValue), void 0 !== e.rssi && void 0 !== e.rssi && t.Rssi.encode(e.rssi, i.uint32(26).fork()).ldelim(), i.uint32(10).string(e.ssid), i.uint32(32).int32(e.securityType), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, b); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 2: o.rssiValue = n.sint32(); break; case 3: o.rssi = t.Rssi.decode(n, n.uint32()); break; case 1: o.ssid = n.string(); break; case 4: o.securityType = n.int32(); break; default: n.skipType(7 & e); } } return o; }, }), (t.ServerStagedPackage = { encode: (e, i = r.Writer.create()) => ( i.uint32(10).string(e.downloadUrl), i.uint32(16).uint64(e.packageId), i.uint32(26).bytes(e.packageSignature), void 0 !== e.serverStagedVersion && void 0 !== e.serverStagedVersion && t.FirmwareVersion.encode(e.serverStagedVersion, i.uint32(34).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, y); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.downloadUrl = n.string(); break; case 2: o.packageId = ge(n.uint64()); break; case 3: o.packageSignature = n.bytes(); break; case 4: o.serverStagedVersion = t.FirmwareVersion.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.SystemUpdate = { encode(e, i = r.Writer.create()) { i.uint32(8).int32(e.handshakeResult), i.uint32(16).int32(e.updateStatus), void 0 !== e.serverStagedVersion && void 0 !== e.serverStagedVersion && t.FirmwareVersion.encode(e.serverStagedVersion, i.uint32(26).fork()).ldelim(), i.uint32(32).uint64(e.totalBytes), i.uint32(40).uint64(e.bytesOffset), i.uint32(48).uint64(e.estimatedBytesPerSecond), i.uint32(56).uint64(e.lastHandshakeTimestamp), i.uint32(64).int32(e.lastUpdateResult); for (const n of e.serverStagedPackages) t.ServerStagedPackage.encode(n, i.uint32(74).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, S); for (o.serverStagedPackages = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.handshakeResult = n.int32(); break; case 2: o.updateStatus = n.int32(); break; case 3: o.serverStagedVersion = t.FirmwareVersion.decode(n, n.uint32()); break; case 4: o.totalBytes = ge(n.uint64()); break; case 5: o.bytesOffset = ge(n.uint64()); break; case 6: o.estimatedBytesPerSecond = ge(n.uint64()); break; case 7: o.lastHandshakeTimestamp = ge(n.uint64()); break; case 8: o.lastUpdateResult = n.int32(); break; case 9: o.serverStagedPackages.push(t.ServerStagedPackage.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.LocallyAvailablePackage = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.packageId), t.uint32(18).bytes(e.packageSignature), t.uint32(24).uint64(e.fileSizeBytes), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, R); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.packageId = ge(i.uint64()); break; case 2: a.packageSignature = i.bytes(); break; case 3: a.fileSizeBytes = ge(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.AcceptedPackage = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.packageId), t.uint32(18).bytes(e.packageSignature), t.uint32(26).string(e.uploadEndpoint), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, T); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.packageId = ge(i.uint64()); break; case 2: a.packageSignature = i.bytes(); break; case 3: a.uploadEndpoint = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.RegistrationPayload = { encode: (e, t = r.Writer.create()) => (t.uint32(10).bytes(e.customerRegistrationInfo), t.uint32(18).bytes(e.nonce), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, A); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.customerRegistrationInfo = i.bytes(); break; case 2: a.nonce = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.DeviceSignedPayload = { encode: (e, t = r.Writer.create()) => (t.uint32(10).bytes(e.payload), t.uint32(16).int32(e.deviceSignatureType), t.uint32(26).bytes(e.signature), t.uint32(32).int32(e.deviceCertFormat), t.uint32(42).bytes(e.deviceCert), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, C); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.payload = i.bytes(); break; case 2: a.deviceSignatureType = i.int32(); break; case 3: a.signature = i.bytes(); break; case 4: a.deviceCertFormat = i.int32(); break; case 5: a.deviceCert = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.ComplianceInformation = { encode(e, i = r.Writer.create()) { for (const n of e.radioLegalInformation) t.RadioLegalInformation.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, I); for (o.radioLegalInformation = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.radioLegalInformation.push(t.RadioLegalInformation.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.RadioLegalInformation = { encode: (e, t = r.Writer.create()) => ( void 0 !== e.manufacturer && void 0 !== e.manufacturer && a.StringValue.encode({ value: e.manufacturer }, t.uint32(10).fork()).ldelim(), void 0 !== e.model && void 0 !== e.model && a.StringValue.encode({ value: e.model }, t.uint32(18).fork()).ldelim(), void 0 !== e.fccId && void 0 !== e.fccId && a.StringValue.encode({ value: e.fccId }, t.uint32(26).fork()).ldelim(), void 0 !== e.icId && void 0 !== e.icId && a.StringValue.encode({ value: e.icId }, t.uint32(34).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, O); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.manufacturer = a.StringValue.decode(i, i.uint32()).value; break; case 2: o.model = a.StringValue.decode(i, i.uint32()).value; break; case 3: o.fccId = a.StringValue.decode(i, i.uint32()).value; break; case 4: o.icId = a.StringValue.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.ErrorResponse = { encode: (e, t = r.Writer.create()) => (void 0 !== e.status && void 0 !== e.status && n.Status.encode(e.status, t.uint32(10).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, N); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.status = n.Status.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return o; }, }), (t.CommonAPIGetSystemInfoRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, k); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIGetSystemInfoResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.deviceId && void 0 !== e.deviceId && t.EcuId.encode(e.deviceId, i.uint32(10).fork()).ldelim(), i.uint32(18).string(e.din), void 0 !== e.firmwareVersion && void 0 !== e.firmwareVersion && t.FirmwareVersion.encode(e.firmwareVersion, i.uint32(26).fork()).ldelim(), void 0 !== e.systemUpdate && void 0 !== e.systemUpdate && t.SystemUpdate.encode(e.systemUpdate, i.uint32(42).fork()).ldelim(), i.uint32(48).int32(e.deviceType), void 0 !== e.complianceInformation && void 0 !== e.complianceInformation && t.ComplianceInformation.encode(e.complianceInformation, i.uint32(58).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, P); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.deviceId = t.EcuId.decode(n, n.uint32()); break; case 2: o.din = n.string(); break; case 3: o.firmwareVersion = t.FirmwareVersion.decode(n, n.uint32()); break; case 5: o.systemUpdate = t.SystemUpdate.decode(n, n.uint32()); break; case 6: o.deviceType = n.int32(); break; case 7: o.complianceInformation = t.ComplianceInformation.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPISetLocalSiteConfigRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, D); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPISetLocalSiteConfigResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, L); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPICheckForUpdateRequest = { encode: (e, t = r.Writer.create()) => (t.uint32(8).bool(e.downloadIfAvailable), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, M); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.downloadIfAvailable = i.bool(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPICheckForUpdateResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, z); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIClearUpdateRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, U); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIClearUpdateResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, V); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIPerformUpdateRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, G); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIPerformUpdateResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, j); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIFactoryResetRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, W); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIFactoryResetResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, F); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIGetNetworkingStatusRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, q); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIGetNetworkingStatusResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(10).fork()).ldelim(), void 0 !== e.wifi && void 0 !== e.wifi && t.NetworkInterface.encode(e.wifi, i.uint32(18).fork()).ldelim(), void 0 !== e.eth && void 0 !== e.eth && t.NetworkInterface.encode(e.eth, i.uint32(26).fork()).ldelim(), void 0 !== e.gsm && void 0 !== e.gsm && t.NetworkInterface.encode(e.gsm, i.uint32(34).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, x); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; case 2: o.wifi = t.NetworkInterface.decode(n, n.uint32()); break; case 3: o.eth = t.NetworkInterface.decode(n, n.uint32()); break; case 4: o.gsm = t.NetworkInterface.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIGetCellularInfoRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, B); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIGetCellularInfoResponse = { encode(e, i = r.Writer.create()) { void 0 !== e.eid && void 0 !== e.eid && t.CellularEID.encode(e.eid, i.uint32(10).fork()).ldelim(), i.uint32(18).fork(); for (const t of e.supportedProfiles) i.int32(t); return i.ldelim(), i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, H); for (o.supportedProfiles = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.eid = t.CellularEID.decode(n, n.uint32()); break; case 2: if (2 == (7 & e)) { const e = n.uint32() + n.pos; for (; n.pos < e; ) o.supportedProfiles.push(n.int32()); } else o.supportedProfiles.push(n.int32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIWifiScanRequest = { encode(e, t = r.Writer.create()) { t.uint32(8).uint32(e.maxScanDurationS), t.uint32(18).fork(); for (const i of e.desiredSecurityTypes) t.int32(i); return t.ldelim(), t.uint32(24).uint32(e.maximumTotalAps), t; }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, K); for (a.desiredSecurityTypes = []; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.maxScanDurationS = i.uint32(); break; case 2: if (2 == (7 & e)) { const e = i.uint32() + i.pos; for (; i.pos < e; ) a.desiredSecurityTypes.push(i.int32()); } else a.desiredSecurityTypes.push(i.int32()); break; case 3: a.maximumTotalAps = i.uint32(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPIWifiScanResponse = { encode(e, i = r.Writer.create()) { for (const n of e.wifiNetworks) t.WifiNetwork.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, Y); for (o.wifiNetworks = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifiNetworks.push(t.WifiNetwork.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureWifiRequest = { encode: (e, i = r.Writer.create()) => (i.uint32(8).bool(e.enabled), void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(18).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, Q); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.enabled = n.bool(); break; case 2: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureWifiResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(10).fork()).ldelim(), void 0 !== e.wifi && void 0 !== e.wifi && t.NetworkInterface.encode(e.wifi, i.uint32(18).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, Z); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; case 2: o.wifi = t.NetworkInterface.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureEthernetRequest = { encode: (e, i = r.Writer.create()) => (void 0 !== e.ipv4Config && void 0 !== e.ipv4Config && t.NetworkInterfaceIPv4Config.encode(e.ipv4Config, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, J); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.ipv4Config = t.NetworkInterfaceIPv4Config.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureEthernetResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.eth && void 0 !== e.eth && t.NetworkInterface.encode(e.eth, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, X); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.eth = t.NetworkInterface.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIForgetWifiNetworkRequest = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.ssid), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, $); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.ssid = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPIForgetWifiNetworkResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, ee); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPICheckInternetRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, te); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPICheckInternetResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.wifi && void 0 !== e.wifi && t.NetworkInterface.encode(e.wifi, i.uint32(10).fork()).ldelim(), void 0 !== e.eth && void 0 !== e.eth && t.NetworkInterface.encode(e.eth, i.uint32(18).fork()).ldelim(), void 0 !== e.gsm && void 0 !== e.gsm && t.NetworkInterface.encode(e.gsm, i.uint32(26).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, ie); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifi = t.NetworkInterface.decode(n, n.uint32()); break; case 2: o.eth = t.NetworkInterface.decode(n, n.uint32()); break; case 3: o.gsm = t.NetworkInterface.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureWifiWithEncryptedPasswordRequest = { encode: (e, i = r.Writer.create()) => ( i.uint32(8).bool(e.enabled), void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(18).fork()).ldelim(), void 0 !== e.encryptedPassword && void 0 !== e.encryptedPassword && t.EncryptedMessage.encode(e.encryptedPassword, i.uint32(26).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, ne); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.enabled = n.bool(); break; case 2: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; case 3: o.encryptedPassword = t.EncryptedMessage.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIConfigureWifiWithEncryptedPasswordResponse = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.wifiConfig && void 0 !== e.wifiConfig && t.WifiConfig.encode(e.wifiConfig, i.uint32(10).fork()).ldelim(), void 0 !== e.wifi && void 0 !== e.wifi && t.NetworkInterface.encode(e.wifi, i.uint32(18).fork()).ldelim(), i.uint32(24).int32(e.result), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, re); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.wifiConfig = t.WifiConfig.decode(n, n.uint32()); break; case 2: o.wifi = t.NetworkInterface.decode(n, n.uint32()); break; case 3: o.result = n.int32(); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIDeviceCertRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, ae); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPIDeviceCertResponse = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.format), t.uint32(18).bytes(e.deviceCert), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, oe); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.format = i.int32(); break; case 2: a.deviceCert = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPICheckForUpdateUrgencyRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, se); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPICheckForUpdateUrgencyResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, _e); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.CommonAPINegotiateUpdateWithLocallyAvailablePackagesRequest = { encode(e, i = r.Writer.create()) { for (const n of e.locallyAvailablePackages) t.LocallyAvailablePackage.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, le); for (o.locallyAvailablePackages = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.locallyAvailablePackages.push(t.LocallyAvailablePackage.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPINegotiateUpdateWithLocallyAvailablePackagesResponse = { encode(e, i = r.Writer.create()) { for (const n of e.acceptedPackages) t.AcceptedPackage.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, ce); for (o.acceptedPackages = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.acceptedPackages.push(t.AcceptedPackage.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.CommonAPIPrepareRegistrationPayloadRequest = { encode: (e, t = r.Writer.create()) => (t.uint32(10).bytes(e.customerRegistrationInfo), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, de); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.customerRegistrationInfo = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }), (t.CommonAPIPrepareRegistrationPayloadResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.signedRegistrationPayload && void 0 !== e.signedRegistrationPayload && t.DeviceSignedPayload.encode(e.signedRegistrationPayload, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, ue); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.signedRegistrationPayload = t.DeviceSignedPayload.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.AlertLog = { encode: (e, t = r.Writer.create()) => (t.uint32(9).fixed64(e.data), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, me); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.data = ge(i.fixed64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.AlertMatrix = { encode: (e, t = r.Writer.create()) => (t.uint32(9).fixed64(e.data), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, pe); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.data = ge(i.fixed64()); break; default: i.skipType(7 & e); } } return a; }, }); }, , , , , , , , , , , , , , , function (e, t, i) { "use strict"; i.d(t, "a", function () { return b; }); var n = i(27), r = i(1), a = i(0), o = i.n(a), s = i(3), _ = i(17), l = i(28), c = i(281), d = i.n(c), u = i(50), m = i(77), p = i(209), g = i(59), w = i(45), v = i(10), f = i(26); i(738); function h(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const E = Object(s.defineMessages)({ language: { id: "login_view_language_label", defaultMessage: "LANGUAGE" }, emailPlaceholder: { id: "login_view_email_placeholder", defaultMessage: "Lead installer email" }, customerEmailPlaceholder: { id: "login_view_customer_email_placeholder", defaultMessage: "Customer email" }, usernamePlaceholder: { id: "login_view_username_placeholder", defaultMessage: "Username" }, forgotPassword: { id: "login_view_forgot_password", defaultMessage: "FORGOT PASSWORD" }, changeForgotPassword: { id: "login_view_change_forgot_password", defaultMessage: "CHANGE OR FORGOT PASSWORD" }, forgotPasswordExtended: { id: "login_view_forgot_password_login_type", defaultMessage: "Please select login type" }, passwordPlaceholder: { id: "login_view_password_placeholder", defaultMessage: "Enter your password" }, startToggleAuth: { id: "login_view_start_login_auth", defaultMessage: "START LOGIN PROCESS" }, cancelToggleAuth: { id: "login_view_cancel_login_auth", defaultMessage: "Cancel Login" }, howToEnableLineDescription: { id: "login_view_start_login_auth_how_to_enable_line_description", defaultMessage: "To login, toggle the Powerwall enable switch off and back on. With multi-Powerwall systems, you only need to toggle one switch", }, loginTypeLabel: { id: "login_view_login_type_label", defaultMessage: "LOGIN TYPE" }, [v.c.CUSTOMER]: { id: "login_type_customer", defaultMessage: "Customer" }, [v.c.INSTALLER]: { id: "login_type_installer", defaultMessage: "Installer" }, [v.c.ENGINEER]: { id: "login_type_engineer", defaultMessage: "Engineer" }, }); class b extends r.Component { constructor(e) { super(e), h(this, "translations", {}), h(this, "_handleLoginSelection", this._handleLoginSelection.bind(this)), h(this, "_handleLanguageSelection", this._handleLanguageSelection.bind(this)), h(this, "_handleUsernameChange", this._handleUsernameChange.bind(this)), h(this, "_handlePasswordSubmit", this._handlePasswordSubmit.bind(this)), h(this, "_handleSubmit", this._handleSubmit.bind(this)), h(this, "_handleForgotPassword", this._handleForgotPassword.bind(this)), h(this, "_handlerStartToggleAuth", this._handlerStartToggleAuth.bind(this)), (this.state = { selectedLoginState: e.selectedLoginType === v.c.KIOSK ? v.c.INSTALLER : e.selectedLoginType, selectLoginTypeFormError: !1, waitForToggle: !1 }); let t = [v.c.CUSTOMER, v.c.INSTALLER]; e.loginType === v.c.ENGINEER && (t = [v.c.ENGINEER]), (this.translations = Object(n.reduce)( t, function (t, i) { return (t[i] = Object(m.localize)(E[i], e.intl)), t; }, {} )); } render() { const { username: e, showSubmit: t, isFetching: n, enableForward: a, disableForward: o, intl: c, useShowPasswordIcon: w, isResi: h, cancelPendingToggleAuth: b, toggleAuthSupported: y, authenticated: S, waitForToggle: R, } = this.props, { formatMessage: T, locale: A } = c, { selectedLoginState: C, selectLoginTypeFormError: I } = this.state; if (h && R && y) return r.createElement( "div", { "data-testid": "530e53aa-49d6-4e5b-b92f-698ca2006d05" }, r.createElement("p", { "data-testid": "23d35517-dacb-4414-b8ce-c2faf0a6c518" }, T(E.howToEnableLineDescription)), r.createElement( "button", { "data-testid": "b82e24e0-ab80-4bab-af77-a4d8d3df2f9d", type: "button", className: "btn btn-link no-horizontal-padding line-breaks", onClick: b }, this.props.intl.formatMessage(E.cancelToggleAuth) ), r.createElement("img", { "data-testid": "3db80490-a693-4865-8f27-7ebfc89514a4", src: i(586), width: "100%" }) ); const O = h ? r.createElement( "div", { "data-testid": "46467e15-2cb7-4c2a-a94a-c89bbdfad2cc", className: "form-group" }, r.createElement("label", { "data-testid": "7f04037c-7f05-4226-8709-d258a41d41b6", className: "col-sm-2" }, r.createElement(s.FormattedMessage, { id: "login_view_email", defaultMessage: "EMAIL" })), r.createElement( "div", { "data-testid": "6e00c962-875e-4d1f-86e2-e6bd6a20d279", className: "col-sm-10" }, r.createElement("input", { "data-testid": "d0ac9191-a8ca-4b98-80b7-e0d517d97568", ref: "email", type: "email", name: "email", required: !0, placeholder: T(C === v.c.CUSTOMER ? E.customerEmailPlaceholder : E.emailPlaceholder), pattern: Object(g.c)(v.a), title: T(f.inputTitles.email), onInvalid: (e) => { e.target.setCustomValidity(T(f.inputTitles.email)); }, onInput: (e) => { e.target.setCustomValidity(""); }, className: "form-control", autoComplete: "email", autoCapitalize: "none", autoCorrect: "off", autoFocus: !0, onChange: this._handleUsernameChange, value: e, }) ) ) : r.createElement( "div", { "data-testid": "2b802fb0-a460-4395-a584-5cd411229b09", className: "form-group" }, r.createElement("label", { "data-testid": "29625d4a-9e09-4807-b1dd-4659ec1b4ac0", className: "col-sm-2" }, r.createElement(s.FormattedMessage, { id: "login_view_username", defaultMessage: "USERNAME" })), r.createElement( "div", { "data-testid": "e8b61640-d6c6-4e56-ba51-1c8874fa502a", className: "col-sm-10" }, r.createElement("input", { "data-testid": "f84bdfd4-0cc0-48bb-9a37-bd82af57db7b", ref: "username", type: "text", name: "username", required: !0, placeholder: T(E.usernamePlaceholder), className: "form-control", autoCapitalize: "none", autoCorrect: "off", autoFocus: !0, onChange: this._handleUsernameChange, value: e, }) ) ); let N = C !== v.c.ENGINEER; return ( h && (N = C === v.c.CUSTOMER || (!y && C === v.c.INSTALLER)), r.createElement( "div", { "data-testid": "71c75b82-f4d5-490b-ba18-1400a24b9ea9", className: "login" }, r.createElement( "form", { className: "form-horizontal", role: "form", onSubmit: this._handleSubmit }, r.createElement( "div", { "data-testid": "3d04af34-543d-4c62-8083-1e49cbe2724b", className: "form-group" }, r.createElement(p.c, { id: "locale", intl: c, label: T(E.language), labelClassName: "col-sm-2", dropdownClassName: "col-sm-10", list: Object.values(f.LocaleTextMap), initialSelection: f.LocaleTextMap[Object(g.d)(A)] || f.LocaleTextMap[Object(g.d)(f.Locales.ENGLISH)], onSelection: this._handleLanguageSelection, disabled: S, }) ), h && r.createElement( "div", { "data-testid": "e1ef0676-8db0-489f-ba7c-43992d61da67", className: "form-group " + (I ? "has-error" : "") }, r.createElement(p.c, { id: "login-type", intl: c, label: T(E.loginTypeLabel), labelClassName: "col-sm-2 control-label", dropdownClassName: "col-sm-10", list: Object.values(this.translations), initialSelection: Object(m.localizeWithFallback)(E[C], c, T(l.prompts.select)), onSelection: this._handleLoginSelection, disabled: S, }), I ? r.createElement( "span", { "data-testid": "02406596-3ede-4de9-880e-f804701a3564", className: "help-block col-sm-10" }, r.createElement("img", { "data-testid": "414132bd-4973-4a19-a721-71dbb1de0428", className: "warning", src: i(273), alt: "Warning" }), this.props.intl.formatMessage(E.forgotPasswordExtended) ) : null ), C !== v.c.ENGINEER && !S && O, N && !S && r.createElement( r.Fragment, null, r.createElement(d.a, { ref: "password", intl: c, isValidating: !!n, showForm: !1, showSubmittable: t, enableForward: a, disableForward: o, handleSubmit: this._handlePasswordSubmit, useShowPasswordIcon: w, inputProps: { name: "installer-password", placeholder: T(E.passwordPlaceholder) }, }), h && r.createElement( "div", { "data-testid": "540f7a2a-a7e6-4ecd-b2ca-50c75cfe6a05", className: "form-group forgot-form" }, r.createElement( "div", { "data-testid": "be69aaa9-5db7-42ec-836f-6999d810dfa7", className: "col-sm-12" }, r.createElement( "button", { "data-testid": "aeccef3b-8fba-4d36-86c9-d8fddc16016b", id: "forgot-password", type: "button", className: Object(u.classNames)("btn btn-link no-horizontal-padding line-breaks", { right: !w }), onClick: this._handleForgotPassword, }, this.props.intl.formatMessage(C === v.c.CUSTOMER ? E.changeForgotPassword : E.forgotPassword) ) ) ) ), !S && !N && r.createElement( "div", { "data-testid": "87bdcf11-bfa0-4324-8be8-685f90216e97", className: "form-group" }, r.createElement( "div", { "data-testid": "fa152db7-af4e-4fc1-b19e-886a5a5e8fb9", className: "col-sm-12 right" }, r.createElement( "button", { "data-testid": "a3cb2027-44cf-46ee-ad8f-e496e6ffcde1", id: "begin-toggle-auth", type: "button", className: "btn btn-action right", onClick: this._handlerStartToggleAuth }, this.props.intl.formatMessage(E.startToggleAuth) ) ) ), r.createElement( "div", { className: "form-group" }, r.createElement( "div", { className: "col-sm-12" }, r.createElement( _.Link, { id: "compliance", to: "/compliance", className: "btn btn-link no-horizontal-padding" }, r.createElement(s.FormattedMessage, { id: "login_view_compliance", defaultMessage: "COMPLIANCE" }) ) ) ), r.createElement("button", { "data-testid": "34c0e092-e1d5-4f41-8cd1-72d9a31b0fee", type: "submit", ref: "save" }, "SUBMIT") ) ) ); } _handlerStartToggleAuth() { this.props.changeLogin && this.props.changeLogin(v.c.INSTALLER), this.props.startToggleAuth(); } _handleForgotPassword(e) { let t = "/password"; const i = this.state.selectedLoginState; (i !== v.c.INSTALLER && i !== v.c.ENGINEER) || (t += "?mode=" + v.c.INSTALLER), _.browserHistory.push(t); } _handleLoginSelection(e) { let t = Object(n.findKey)(this.translations, (t) => t === e); this.setState({ selectedLoginState: t, selectLoginTypeFormError: !1 }), this.props.changeLogin && this.props.changeLogin(t); } _handleLanguageSelection(e) { Object(w.c)("Locale", f.LocaleMap[e]), window.location.reload(); } _handleUsernameChange(e) { let t = e.target.value.trim(); this.props.changeUsername && this.props.changeUsername(t); } _handlePasswordSubmit() { this.refs.save.click(); } _handleSubmit(e) { e.preventDefault(), e.stopPropagation(), this.state.selectedLoginState ? this.props.username && this.refs.password && this.refs.password.state.passwordInput && this.state.selectedLoginState && this.props.handleSubmit && this.props.handleSubmit(this.props.username, this.refs.password.state.passwordInput, this.state.selectedLoginState) : this.setState({ selectLoginTypeFormError: !0 }); } } h(b, "propTypes", { intl: s.intlShape.isRequired, enableForward: o.a.func, disableForward: o.a.func, changeUsername: o.a.func, changeLogin: o.a.func, handleSubmit: o.a.func, startToggleAuth: o.a.func.isRequired, cancelPendingToggleAuth: o.a.func.isRequired, username: o.a.string.isRequired, showSubmit: o.a.bool.isRequired, loginType: o.a.oneOf(Object.values(v.c)).isRequired, selectedLoginType: o.a.oneOf(Object.values(v.c)).isRequired, isFetching: o.a.bool, useShowPasswordIcon: o.a.bool.isRequired, toggleAuthSupported: o.a.bool.isRequired, isResi: o.a.bool, waitForToggle: o.a.bool, authenticated: o.a.bool, }), h(b, "defaultProps", { showSubmit: !1 }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.subnetMaskRegex = t.ipAddressRegex = t.NetworkInterfaceName = t.NetworkInterfaceType = t.SecurityType = void 0), (function (e) { (e.NONE = "NONE"), (e.WEP = "WEP"), (e.WPA_WPA2_PERSONAL = "WPAorWPA2_Personal"), (e.WPA2_PERSONAL = "WPA2_Personal"), (e.DYNAMIC_WEP = "Dynamic_WEP"), (e.WPA_WPA2_ENTERPRISE = "WPAorWPA2_Enterprise"), (e.WPA2_ENTERPRISE = "WPA2_Enterprise"); })(t.SecurityType || (t.SecurityType = {})), (function (e) { (e.ETHERNET = "EthType"), (e.WIFI = "WifiType"), (e.GSM = "GsmType"); })(t.NetworkInterfaceType || (t.NetworkInterfaceType = {})), (function (e) { (e.ETHERNET = "ethernet"), (e.WIFI = "wi-fi"), (e.GSM = "gsm"); })(t.NetworkInterfaceName || (t.NetworkInterfaceName = {})), (t.ipAddressRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/), (t.subnetMaskRegex = /^(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}$/); }, function (e, t, i) { "use strict"; function n(e) { return e.registered; } i.d(t, "a", function () { return n; }); }, , , , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return m; }), i.d(t, "loginTypeSelector", function () { return p; }); var n = i(18), r = i.n(n), a = i(43), o = i(2), s = i(10); function _(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function l(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? _(Object(i), !0).forEach(function (t) { c(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : _(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function c(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const d = { isFetching: !1, isGenerating: !1, isSaving: !1, didInvalidate: !1 }, u = l(l({}, d), {}, { loginType: s.c.KIOSK, selectedLoginType: s.c.KIOSK, lastLoginAt: null, username: "", toggleAuthSupported: !1, waitForToggle: !1 }); function m(e = u, t) { switch (t.type) { case a.b: return l(l(l({}, e), r()(t, (e) => e.payload.authentication) || {}), d); case o.CHANGE_USERNAME: return l(l({}, e), {}, { username: t.username }); case o.CHANGE_LOGIN_TYPE: return l(l({}, e), {}, { selectedLoginType: t.selectedLoginType }); case o.REQUEST_LOGIN: return l(l({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case o.RECEIVE_LOGIN_SUCCESS: let i = e.loginType; if (t.roles && t.roles.length) switch (t.roles[0]) { case s.e.HOME_OWNER: i = s.c.CUSTOMER; break; case s.e.PROVIDER_ENGINEER: i = s.c.INSTALLER; break; case s.e.TESLA_ENGINEER: i = s.c.ENGINEER; } return l(l({}, e), {}, { email: t.email, loginType: i, isFetching: !1, didInvalidate: !1, waitForToggle: !1, lastLoginAt: t.receivedAt }); case o.REQUEST_LOGOUT: return l(l({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case o.RECEIVE_LOGIN_ERROR: case o.RECEIVE_LOGOUT_ERROR: return l(l({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case o.REQUEST_GENERATE_PASSWORD: return l(l({}, e), {}, { isGenerating: !0, didInvalidate: !1 }); case o.RECEIVE_GENERATE_PASSWORD_SUCCESS: return l(l({}, e), {}, { isGenerating: !1, didInvalidate: !1 }); case o.RECEIVE_GENERATE_PASSWORD_ERROR: return l(l({}, e), {}, { isGenerating: !1, didInvalidate: !0 }); case o.REQUEST_CHANGE_PASSWORD: case o.REQUEST_RESET_PASSWORD: return l(l({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case o.RECEIVE_CHANGE_PASSWORD_SUCCESS: case o.RECEIVE_RESET_PASSWORD_SUCCESS: return l(l({}, e), {}, { isSaving: !1, didInvalidate: !1 }); case o.RECEIVE_CHANGE_PASSWORD_ERROR: case o.RECEIVE_RESET_PASSWORD_ERROR: return l(l({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case o.REQUEST_START_TOGGLE_AUTH: case o.REQUEST_CANCEL_TOGGLE_AUTH: case o.REQUEST_TOGGLE_AUTH_LOGIN: return l(l({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case o.RECEIVE_START_TOGGLE_AUTH_ERROR: case o.RECEIVE_CANCEL_TOGGLE_AUTH_ERROR: return l(l({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case o.RECEIVE_TOGGLE_AUTH_LOGIN_ERROR: return l(l({}, e), {}, { isFetching: !1, didInvalidate: !0, waitForToggle: !1 }); case o.RECEIVE_START_TOGGLE_AUTH_SUCCESS: return l(l({}, e), {}, { isFetching: !1, didInvalidate: !1, waitForToggle: !0 }); case o.RECEIVE_CANCEL_TOGGLE_AUTH_SUCCESS: return l(l({}, e), {}, { isSaving: !1, didInvalidate: !1, waitForToggle: !1 }); case o.RECEIVE_SUPPORTS_TOGGLE_AUTH_SUCCESS: return l(l({}, e), {}, { toggleAuthSupported: t.toggleAuthSupported }); case o.RESET_ALL: case o.RESET_AUTHENTICATION: return l(l({}, u), {}, { username: e.username, toggleAuthSupported: e.toggleAuthSupported }); default: return e; } } const p = ({ authentication: e }) => e.loginType; }, function (e, t, i) { "use strict"; i.d(t, "a", function () { return n; }); const n = "STORE_SITEMASTER_STATUS"; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.UpgradeBannerView = void 0); const s = a(i(1)), _ = i(3), l = i(17), c = o(i(587)); i(739); t.UpgradeBannerView = () => s.createElement( "div", { className: "modal-banner-container" }, s.createElement( "div", { className: "banner-content-container" }, s.createElement("div", { className: "banner-img-container" }, s.createElement("img", { src: c.default })), s.createElement( "div", { className: "banner-text-container" }, s.createElement( "h4", null, s.createElement(_.FormattedMessage, { id: "upgrade_to_tesla_pros_banner_title", description: "text prompt in modal banner to download the new Tesla Pros app", defaultMessage: "Tesla Pros is a better commissioning experience", }) ) ) ), s.createElement( "button", { onClick: () => l.browserHistory.push("/upgrade"), className: "btn banner-content-button" }, s.createElement(_.FormattedMessage, { id: "upgrade_to_tesla_pros_download_prompt", description: "text for button to learn more about the Tesla Pros app", defaultMessage: "UPGRADE NOW" }) ) ); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "receiveCheckUpdate", function () { return m; }), i.d(t, "updateDownloadProgressAction", function () { return p; }), i.d(t, "cancelUpdate", function () { return E; }), i.d(t, "checkForUpdate", function () { return b; }), i.d(t, "startUpdate", function () { return y; }), i.d(t, "checkFirmwareUpdateUrgency", function () { return S; }); var n = i(7), r = i(74), a = (i(39), i(2)), o = (i(44), i(5)), s = i.n(o), _ = i(6), l = i(4); function c(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function d(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? c(Object(i), !0).forEach(function (t) { u(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : c(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function u(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } function m(e) { return d({ type: a.RECEIVE_CHECK_UPDATE }, e); } function p(e, t) { return d({ type: e ? a.DOWNLOAD_STALLED_ERROR : a.DOWNLOAD_PROGRESSING }, t); } const g = Object(_.b)(a.RECEIVE_CHECK_UPDATE_ERROR), w = Object(_.b)(a.RECEIVE_START_UPDATE_ERROR), v = Object(_.b)(a.REQUEST_CHECK_UPDATE_URGENCY), f = Object(_.a)(a.RECEIVE_CHECK_UPDATE_URGENCY), h = Object(_.a)(a.RECEIVE_CHECK_UPDATE_URGENCY_ERROR); function E() { return { type: a.CANCEL_UPDATE }; } function b() { return (e) => ( e(Object(n.clearError)(a.RECEIVE_CHECK_UPDATE_ERROR)), e(Object(r.a)(a.RECEIVE_CHECK_UPDATE_ERROR)), fetch(s.a.api.uri + "/system/update?force=true", { credentials: s.a.credentials }) .then(l.checkStatus) .catch((t) => { e(Object(n.showError)(a.RECEIVE_CHECK_UPDATE_ERROR, t.toString(), t.response)), e(g()); }) ); } function y() { return (e) => ( e(Object(n.clearError)(a.RECEIVE_START_UPDATE_ERROR)), e(Object(r.a)(a.RECEIVE_START_UPDATE_ERROR)), e({ type: a.REQUEST_INSTALL_UPDATE }), fetch(s.a.api.uri + "/system/update", { method: "POST", credentials: s.a.credentials }) .then(l.checkStatus) .catch((t) => { e(Object(n.showError)(a.RECEIVE_START_UPDATE_ERROR, t.toString(), t.response)), e(w()); }) ); } function S() { return (e) => ( e(v()), fetch(s.a.api.uri + "/system/update/urgency", { credentials: s.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e(f(t)); }) .catch((t) => { e(h(t)); }) ); } }, function (e, t, i) { "use strict"; i.d(t, "c", function () { return n; }), i.d(t, "b", function () { return r; }), i.d(t, "a", function () { return a; }), i.d(t, "d", function () { return o; }); const n = "REQUEST_DEBUG_MODBUS", r = "RECEIVE_DEBUG_MODBUS_SUCCESS", a = "RECEIVE_DEBUG_MODBUS_ERROR", o = "STORE_SITEMASTER_STATUS"; }, , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetOperationSettings", function () { return N; }), i.d(t, "getSiteName", function () { return M; }), i.d(t, "fetchSiteInfo", function () { return z; }), i.d(t, "saveSiteName", function () { return U; }), i.d(t, "saveExportMode", function () { return V; }), i.d(t, "fetchOperationSettings", function () { return G; }), i.d(t, "getExtraPrograms", function () { return j; }), i.d(t, "saveExtraProgram", function () { return W; }), i.d(t, "saveOperationSettings", function () { return F; }), i.d(t, "fetchTimezone", function () { return q; }), i.d(t, "saveTimezone", function () { return x; }); var n = i(7), r = i(2), a = i(93), o = i(5), s = i.n(o), _ = i(4), l = i(6), c = i(108); function d(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function u(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(i), !0).forEach(function (t) { m(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : d(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function m(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const p = Object(l.b)(r.REQUEST_SITE_NAME); const g = Object(l.b)(r.RECEIVE_SITE_NAME_ERROR), w = Object(l.b)(r.REQUEST_SITE_INFO); const v = Object(l.b)(r.RECEIVE_SITE_INFO_ERROR), f = Object(l.b)(r.REQUEST_SAVE_SITE_NAME); const h = Object(l.b)(r.RECEIVE_SAVE_SITE_NAME_ERROR), E = Object(l.b)(r.REQUEST_SAVE_EXPORT_MODE); const b = Object(l.b)(r.RECEIVE_SAVE_EXPORT_MODE_ERROR), y = Object(l.b)(r.REQUEST_OPERATION_SETTINGS); const S = Object(l.b)(r.RECEIVE_OPERATION_SETTINGS_ERROR), R = Object(l.b)(r.REQUEST_SAVE_OPERATION_SETTINGS); const T = Object(l.b)(r.RECEIVE_SAVE_OPERATION_SETTINGS_ERROR), A = Object(l.b)(r.REQUEST_TIMEZONE); const C = Object(l.b)(r.RECEIVE_TIMEZONE_ERROR), I = Object(l.b)(r.REQUEST_SAVE_TIMEZONE); const O = Object(l.b)(r.RECEIVE_SAVE_TIMEZONE_ERROR), N = Object(l.b)(r.RESET_OPERATION_SETTINGS), k = Object(l.b)(r.REQUEST_GET_EXTRA_PROGRAMS), P = Object(l.b)(r.RECEIVE_GET_EXTRA_PROGRAMS_ERROR); const D = Object(l.b)(r.REQUEST_POST_EXTRA_PROGRAM), L = Object(l.b)(r.RECEIVE_POST_EXTRA_PROGRAM_ERROR); function M() { return (e) => ( e(p()), fetch(s.a.api.uri + "/site_info/site_name", { credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_SITE_NAME_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch(() => { e(g()); }) ); } function z() { return (e) => ( e(w()), fetch(s.a.api.uri + "/site_info", { credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_SITE_INFO_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch(() => { e(v()); }) ); } function U({ siteName: e }) { return (t) => { t(f()); let i = { site_name: e }; return fetch(s.a.api.uri + "/site_info/site_name", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(i) }) .then(_.checkStatus) .then(() => { const i = { siteName: e }; var n; return t(((n = i), u({ type: r.RECEIVE_SAVE_SITE_NAME_SUCCESS, receivedAt: Date.now() }, n))), i; }) .catch((e) => { throw (t(Object(n.showError)(r.RECEIVE_SAVE_SITE_NAME_ERROR, e.toString(), e.response)), t(h()), e); }); }; } function V(e) { return (t) => { t(E()); let i = { net_meter_mode: e }; return fetch(s.a.api.uri + "/site_info/export_mode", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(i) }) .then(_.checkStatus) .then(() => { t({ type: r.RECEIVE_SAVE_EXPORT_MODE_SUCCESS, receivedAt: Date.now() }); }) .catch((e) => { throw (t(Object(n.showError)(r.RECEIVE_SAVE_EXPORT_MODE_ERROR, e.toString(), e.response)), t(b()), e); }); }; } function G() { return (e) => ( e(y()), fetch(s.a.api.uri + "/operation", { credentials: s.a.credentials }) .then(_.checkStatus) .then(_.parseJSON) .then((t) => { e( (function (e) { return u({ type: r.RECEIVE_OPERATION_SETTINGS_SUCCESS, receivedAt: Date.now() }, e); })(u(u({}, t), {}, { mode: t.real_mode })) ); }) .catch((t) => { e(Object(n.showError)(r.RECEIVE_OPERATION_SETTINGS_ERROR, t.toString(), t.response)), e(S()); }) ); } function j() { return (e) => ( e(k()), fetch(s.a.api.uri + "/site_info/extra_programs", { method: "GET", credentials: s.a.credentials, headers: { "Content-Type": "application/json" } }) .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then( (t) => ( e( (function (e) { return { type: r.RECEIVE_GET_EXTRA_PROGRAMS_SUCCESS, receivedAt: Date.now(), extraPrograms: [...e] }; })(t) ), t ) ) .catch((t) => { throw (e(P()), t); }) ); } function W(e) { return (t) => ( t(D()), fetch(s.a.api.uri + "/site_info/extra_programs", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(e) }) .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then((e) => (t({ type: r.RECEIVE_POST_EXTRA_PROGRAM_SUCCESS, receivedAt: Date.now() }), e)) .catch((e) => { throw (t(Object(n.showError)(r.RECEIVE_POST_EXTRA_PROGRAM_ERROR, e.toString(), e.response)), t(L()), e); }) ); } function F({ mode: e, backupReserve: t, generationLimit: i, solarLimit: o, batteryLimit: l }) { return ( "string" == typeof i && (i = parseFloat(i)), "string" == typeof o && (o = parseFloat(o)), "string" == typeof l && (l = parseFloat(l)), (c) => { c(R()), c(Object(n.clearError)(r.RECEIVE_SAVE_OPERATION_SETTINGS_ERROR)); let d = { max_pv_export_power_kW: o }; return ( e && (d.real_mode = e), null != t && a.g.includes(d.real_mode) && (d.backup_reserve_percent = t), fetch(s.a.api.uri + "/operation", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(d) }) .then(_.parseText) .then(_.parseResponseText) .then(_.checkResponseStatus) .then((n) => { const a = { mode: e, backupReserve: t, generationLimit: i, solarLimit: o, batteryLimit: l }; return ( c( (function (e) { return u({ type: r.RECEIVE_SAVE_OPERATION_SETTINGS_SUCCESS, receivedAt: Date.now() }, e); })(a) ), a ); }) .catch((e) => { throw (c(Object(n.showError)(r.RECEIVE_SAVE_OPERATION_SETTINGS_ERROR, e.toString(), e.response)), c(T()), e); }) ); } ); } function q() { return (e) => { e(A()); try { let i = Object(c.d)(); i ? e(((t = { time_zone: i }), u({ type: r.RECEIVE_TIMEZONE_SUCCESS, receivedAt: Date.now() }, t))) : (e(Object(n.showError)(r.RECEIVE_TIMEZONE_ERROR, "Could not guess timezone")), e(C())); } catch (t) { e(Object(n.showError)(r.RECEIVE_TIMEZONE_ERROR, t.toString(), t.response)), e(C()); } var t; }; } function x(e) { return (t) => { t(I()); let i = { timezone: e }; return fetch(s.a.api.uri + "/site_info/timezone", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(i) }) .then(_.checkStatus) .then(() => { var i; t(((i = { timezone: e }), u({ type: r.RECEIVE_SAVE_TIMEZONE_SUCCESS, receivedAt: Date.now() }, i))); }) .catch((e) => { t(Object(n.showError)(r.RECEIVE_SAVE_TIMEZONE_ERROR, e.toString(), e.response)), t(O()); }); }; } }, function (e, t, i) { "use strict"; i.d(t, "b", function () { return f; }), i.d(t, "a", function () { return E; }), i.d(t, "c", function () { return y; }); var n = i(66), r = i.n(n), a = i(1), o = i(20), s = i.n(o), _ = i(0), l = i.n(_), c = i(3), d = i(18), u = i.n(d), m = i(211), p = i(28), g = i(46); i(656), i(657); function w() { return (w = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function v(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const f = "__select_all", h = () => {}, E = "Not Listed", b = Object(c.defineMessages)({ placeholder: { id: "dropdown_default_placeholder", defaultMessage: "Type..." }, select: { id: "dropdown_list_view_select_field", defaultMessage: "Please select a field." }, showComplete: { id: "dropdown_list_view_show_complete", defaultMessage: "SWITCH TO COMPLETE LIST" }, showSearchable: { id: "dropdown_list_view_show_searchable", defaultMessage: "SWITCH TO SEARCHABLE LIST" }, [f]: { id: "dropdown_list_view_select_all", defaultMessage: "Select All" }, notListedLabel: { id: "dropdown_list_view_not_listed_label", defaultMessage: 'Not Listed: "{searchText}"' }, }); class y extends a.Component { constructor(e) { super(e), (this.state = { collapsed: !1, selection: this.getDefaultSelection(e.initialSelection), multiSelections: e.initialSelections ? e.initialSelections : [], placeholder: this.getDefaultPlaceholder(e.initialPlaceholder), searchable: e.isSearchable, input: "", }), (this.ui = {}), (this._handleClickDefault = this._handleClickDefault.bind(this)), (this._handleClickSearchable = this._handleClickSearchable.bind(this)), (this._handleMultiSelection = this._handleMultiSelection.bind(this)), (this._handleChange = this._handleChange.bind(this)), (this._handleBlur = this._handleBlur.bind(this)), (this._handleFocus = this._handleFocus.bind(this)), (this._getIndicator = this._getIndicator.bind(this)), (this._handleFocusSearchable = this._handleFocusSearchable.bind(this)), (this._handleBlurSearchable = this._handleBlurSearchable.bind(this)), (this._getNotListedLabel = this._getNotListedLabel.bind(this)), (this._handleNotListed = this._handleNotListed.bind(this)), (this._handleInputChangeSearchable = this._handleInputChangeSearchable.bind(this)), (this._toggleView = this._toggleView.bind(this)); } componentDidMount() { this._bindElements(); } componentWillReceiveProps(e) { let t = {}, i = !0; this.props.initialSelection !== e.initialSelection && ((t.selection = this.getDefaultSelection(e.initialSelection)), (i = !1)), this.props.initialPlaceholder !== e.initialPlaceholder && ((t.placeholder = this.getDefaultPlaceholder(e.initialPlaceholder)), (i = !1)), i || this.setState(t); } componentWillUnmount() { this._unbindElements(); } getDefaultSelection(e) { return e || this.props.intl.formatMessage(p.prompts.select); } getDefaultPlaceholder(e) { return null == e ? this.props.intl.formatMessage(b.placeholder) : e; } resetSelection(e, t) { e || (e = this.getDefaultSelection()), this.setState({ selection: e }, () => { this.refs.select && (this.refs.select.selectedIndex = null === t ? -1 : t + 1); }); } render() { const { id: e, label: t, labelClassName: i, dropdownClassName: n } = this.props, r = e.toString().replace(" ", "").toLowerCase() + "-dropdown"; return a.createElement( "div", { "data-testid": "975ae069-3ec6-4a34-b0d2-00ff744904dc", className: `dropdown-list ${r}-list` }, this._getLabel(r, t, i), a.createElement("div", { "data-testid": "07f3ea02-6aa1-4ba7-8c12-fccd285748b4", className: n }, this._getDropdown(r)) ); } showTooltip() { u()(this.ui, (e) => e.tooltip.tooltip) && this.ui.tooltip.length && this.ui.tooltip.tooltip("show"); } hideTooltip() { u()(this.ui, (e) => e.tooltip.tooltip) && this.ui.tooltip.length && this.ui.tooltip.tooltip("hide"); } _bindElements() { this.refs.select && (this.ui.select = r()(this.refs.select)), this.refs.button && (this.ui.button = r()(this.refs.button)), this.refs.dropdown && (this.ui.tooltip = r()(this.refs.dropdown)), u()(this.ui, (e) => e.tooltip.tooltip) && this.ui.tooltip.length && this.ui.tooltip.tooltip({ trigger: "manual" }); } _unbindElements() { this.ui = {}; } _getLabel(e, t, i) { return e && t ? a.createElement("label", { "data-testid": "9ef23149-3371-449b-8279-934954a388f2", htmlFor: e, className: i }, t.toUpperCase()) : null; } _getDropdown(e) { const { intl: t, list: i, lineBreaks: n, isMultiSelect: r, isToggleable: o, disabled: s } = this.props, { selection: _, multiSelections: l, searchable: c, placeholder: d, input: u } = this.state; let p; if ( (o && !s && (p = a.createElement( "a", { "data-testid": "d87ac571-5d59-4152-81bb-b3838235e451", className: "btn btn-link no-horizontal-padding", onClick: this._toggleView }, t.formatMessage(c ? b.showComplete : b.showSearchable) )), c) ) { const e = this._getOptionsSearchable(r, t), i = { ref: "search", className: s ? "disabled" : "", isDisabled: s, searchPromptText: this.getDefaultPlaceholder(), placeholder: d, options: e, arrowRenderer: this._getIndicator, onBlur: this._handleBlurSearchable, onFocus: this._handleFocusSearchable, clearable: !1, }; return r ? a.createElement( m.default, w({}, i, { name: "dropdown-multi-search", multi: r, value: l, onChange: (...t) => { this._handleMultiSelection(...t, e); }, }) ) : a.createElement( a.Fragment, null, a.createElement( m.default.Creatable, w({}, i, { name: "dropdown-search", value: _, onChange: this._handleClickSearchable, isValidNewOption: () => !!u.length, promptTextCreator: this._getNotListedLabel, onNewOptionClick: this._handleNotListed, onInputChange: this._handleInputChangeSearchable, }) ), p ); } const v = t.formatMessage(b.select), f = [], h = []; return ( i.forEach((e, t) => { n && n.has(t) && f.push( a.createElement( "li", { "data-testid": "2b7e465d-c7cf-449d-a6e1-84b542bd9c14", key: "line-break-" + t.toString() }, a.createElement("option", { "data-testid": "6cae4087-0f87-4d95-941f-8fe01351e579", disabled: !0 }) ) ), f.push( a.createElement( "li", { "data-testid": "14a18e4c-1e0a-458c-ab84-88e6049db06d", key: t.toString() }, a.createElement("a", { "data-testid": "ee86e230-6728-4b82-a07d-57b71b82da4a", href: "#", value: e, onClick: (i) => this._handleClickDefault(i, t, e) }, e) ) ), h.push(a.createElement("option", { "data-testid": "3786b219-f597-41bf-867e-89b2778df0a7", key: t.toString(), value: e }, e)); }), a.createElement( a.Fragment, null, a.createElement( "div", { "data-testid": "30186a91-ddc0-41af-899d-a0316e23991a", className: "dropdown", ref: "dropdown", "data-placement": "bottom", title: v, "data-original-title": v }, a.createElement( "select", { ref: "select", value: _, onChange: this._handleChange, onFocus: this._handleFocus, disabled: s }, a.createElement("option", { "data-testid": "112c7abc-a2e1-4bb9-80c3-12ed7566386e", value: this.getDefaultSelection(), className: "hidden", disabled: !0 }, this.getDefaultSelection()), h ), a.createElement( "button", { "data-testid": "c0b9d7b0-6d00-47df-8e18-c7a3970d490d", className: `dropdown-toggle ${Object(g.isIOS)() ? "ios" : ""} ${s ? "disabled" : ""}`, type: "button", ref: "button", "data-toggle": "dropdown", "aria-haspopup": "true", "aria-expanded": "true", onBlur: this._handleBlur, }, _, this._getIndicator() ), a.createElement("ul", { "data-testid": "bd5133cc-45a7-497e-a370-a0554c3364c7", className: "dropdown-menu", "aria-labelledby": e }, f) ), p ) ); } _getIndicator() { return this.props.disabled ? null : a.createElement("img", { "data-testid": "fd5c9144-72c8-43c6-92ce-81945685dc61", src: i(658), className: this.state.collapsed ? "caret-up" : "caret-down", alt: "indicator" }); } _getOptionsSearchable(e = !1, t) { const i = []; return ( this.props.list.forEach((n, r) => { n !== E && i.push({ value: n, label: b[n] ? t.formatMessage(b[n]) : n, index: r, clearableValue: e }); }), i ); } _getNotListedLabel() { return this.props.intl.formatMessage(b.notListedLabel, { searchText: this.state.input }); } _handleNotListed() { this.setState({ placeholder: E, selection: E }, () => { this.props.onNotListed && this.props.onNotListed(this.state.input), this.refs.search.select.blurInput(); }); } _handleClickDefault(e, t, i) { e.preventDefault(), this.setState({ selection: i }, () => { this.props.onSelection && this.props.onSelection(i, t); }); } _handleClickSearchable(e) { Object.keys(e).length && this.setState({ selection: e.label, collapsed: !1 }, () => { this.props.onSelection && this.props.onSelection(e.label, e.index); }); } _handleMultiSelection(e, t) { const i = e.find((e) => e.value === f) ? t.slice(1, t.length) : e; this.setState({ multiSelections: i, collapsed: !1 }, () => { let e = this.props.onMultiSelection; e && e( i.map((e) => e.label), t.map((e) => e.label) ); }); } _handleInputChangeSearchable(e) { this.setState({ input: e }); } _handleBlurSearchable(e) { this.setState({ collapsed: !1, placeholder: this.getDefaultPlaceholder(this.props.initialPlaceholder) }); } _handleFocusSearchable(e) { this.setState({ collapsed: !0, placeholder: "" }, () => { if (!Object(g.isOnlyViewport)("xs")) return; const e = s.a.findDOMNode(this); e && e.scrollIntoView(); }); } _toggleView(e) { const t = !this.state.searchable; this.setState({ searchable: t }, () => { t ? this._unbindElements() : this._bindElements(), this.props.onToggle && this.props.onToggle(t); }); } _handleChange(e) { const t = e.target.value, i = e.target.selectedIndex - 1; t && this.setState({ selection: t }, () => { this.props.onSelection && this.props.onSelection(t, i); }); } _handleBlur(e) { this.ui.select.show(h), this.setState({ collapsed: !1 }); } _handleFocus(e) { Object(g.isIOS)() || (this.ui.select.hide(), this.ui.button.focus(), this.ui.button.dropdown("toggle"), this.hideTooltip(), this.setState({ collapsed: !0 })); } } v(y, "propTypes", { intl: c.intlShape.isRequired, list: l.a.arrayOf(l.a.oneOfType([l.a.string])).isRequired, lineBreaks: l.a.instanceOf(Set), id: l.a.oneOfType([l.a.string, l.a.number]).isRequired, label: l.a.string.isRequired, labelClassName: l.a.string.isRequired, dropdownClassName: l.a.string.isRequired, initialSelection: l.a.string, initialPlaceholder: l.a.string, isSearchable: l.a.bool.isRequired, isMultiSelect: l.a.bool.isRequired, isToggleable: l.a.bool.isRequired, disabled: l.a.bool.isRequired, onSelection: l.a.func, onMultiSelection: l.a.func, onToggle: l.a.func, onNotListed: l.a.func, }), v(y, "defaultProps", { list: [], id: "default", label: "default", labelClassName: "col-sm-3", dropdownClassName: "col-sm-9", isSearchable: !1, isMultiSelect: !1, isToggleable: !1, disabled: !1 }); }, function (e, t, i) { "use strict"; var n = i(1), r = i(3); function a() { return (a = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function o(e, t) { if (null == e) return {}; var i, n, r = (function (e, t) { if (null == e) return {}; var i, n, r = {}, a = Object.keys(e); for (n = 0; n < a.length; n++) (i = a[n]), t.indexOf(i) >= 0 || (r[i] = e[i]); return r; })(e, t); if (Object.getOwnPropertySymbols) { var a = Object.getOwnPropertySymbols(e); for (n = 0; n < a.length; n++) (i = a[n]), t.indexOf(i) >= 0 || (Object.prototype.propertyIsEnumerable.call(e, i) && (r[i] = e[i])); } return r; } t.a = (e) => { const { messages: t, id: i } = e, s = o(e, ["messages", "id"]); return t && t[i] ? n.createElement(r.FormattedMessage, a({}, t[i], s)) : i; }; }, , function (e, t, i) { "use strict"; i.d(t, "g", function () { return r; }), i.d(t, "c", function () { return a; }), i.d(t, "b", function () { return o; }), i.d(t, "h", function () { return s; }), i.d(t, "a", function () { return _; }), i.d(t, "d", function () { return l; }), i.d(t, "e", function () { return c; }), i.d(t, "f", function () { return d; }); var n = i(13); function r(e, t) { return (e && e.toLowerCase() === n.j) || (null != t && t.toLowerCase().indexOf(n.j) > -1); } function a(e, t) { return (e && e.toLowerCase() === n.f) || (null != t && t.toLowerCase().indexOf(n.f) > -1); } function o(e, t) { return (e && e.toLowerCase() === n.c) || (null != t && t.toLowerCase().indexOf(n.c) > -1); } function s(e, t) { return (e && e.toLowerCase() === n.k) || (null != t && t.toLowerCase().indexOf(n.k) > -1); } function _(e, t) { return (e && e.toLowerCase() === n.a) || (null != t && t.toLowerCase().indexOf(n.a) > -1); } function l(e, t) { return (e && e.toLowerCase() === n.g) || (null != t && t.toLowerCase().indexOf(n.g) > -1); } function c(e, t) { return ( s(e, t) || (function (e, t) { return (e && e.toLowerCase() === n.b) || (null != t && t.toLowerCase().indexOf(n.b) > -1); })(e, t) ); } function d(e, t) { return _(e, t) || l(e, t); } }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.isValidSubnetMask = t.isValidIpAddress = t.requiresPassword = t.hasUsername = void 0); const n = i(191); (t.hasUsername = function (e) { return e === n.SecurityType.WPA_WPA2_ENTERPRISE || e === n.SecurityType.WPA2_ENTERPRISE; }), (t.requiresPassword = function (e) { return e !== n.SecurityType.NONE; }), (t.isValidIpAddress = function (e) { return void 0 !== e && n.ipAddressRegex.test(e); }), (t.isValidSubnetMask = function (e) { return void 0 !== e && n.subnetMaskRegex.test(e); }); }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(446), s = i(48); t.default = function ({ problem: e, location: t, hasMSA: n, hasSYNC: _, hasSolarPowerwall: l }) { if (e === s.InstallationProblems.Miswired12v) return r.default.createElement( "div", { className: "installation-problem" }, r.default.createElement("div", { className: "installation-problem-title" }, r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_title_miswired_12v", defaultMessage: "12v Wiring Error" })), r.default.createElement("div", { className: "installation-problem-image" }, r.default.createElement("img", { src: i(790) })), r.default.createElement( "div", { className: "installation-problem-details" }, r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_miswired_12v", defaultMessage: "When connecting two Powerwall+, only the unit connected to Gateway/Backup Switch should have 12V applied. Remove 12V from all subsequent Powerwall+ in the chain, then Rescan Devices (at the bottom of this page) to clear this warning.", }) ) ); if (e === s.InstallationProblems.MultipleControllers) { const e = r.default.createElement(a.FormattedMessage, Object.assign({}, s.installationProblemTitles[s.InstallationProblems.MultipleControllers])), l = r.default.createElement("img", { src: i(791) }); let c; return ( (c = t === o.SiteControllerLocation.Gateway ? r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_multiple_controllers_gateway", defaultMessage: "Unplug the power harness of all Powerwall+ site controllers, located in the top-right of the Solar Assembly.", }) : t === o.SiteControllerLocation.SolarPowerwall && _ ? r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_multiple_controllers_powerwall_with_sync", defaultMessage: "Unplug the power harness of all Powerwall+ site controllers, located in the top-right of the Solar Assembly. Commission the system by connecting to the Backup Gateway.", }) : t === o.SiteControllerLocation.SolarPowerwall && n ? r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_multiple_controllers_powerwall_with_msa", defaultMessage: "Unplug the power harness of the Expansion Powerwall+ site controller (not connected to Backup Switch), located in the top-right of the Solar Assembly.", }) : r.default.createElement(a.FormattedMessage, { id: "enumeration_warning_details_multiple_controllers_unknown_with_details", defaultMessage: "Only a single site controller must be active. When using Backup Gateway, unplug all Powerwall+ controllers. When using a Backup Switch, unplug all but one Powerwall+ controller. Run Wizard is disabled until there is only one site controller active.", })), r.default.createElement( "div", { className: "installation-problem" }, r.default.createElement("div", { className: "installation-problem-title" }, e), r.default.createElement("div", { className: "installation-problem-image" }, l), r.default.createElement("div", { className: "installation-problem-details" }, c) ) ); } if (e === s.InstallationProblems.PVACsWithNoSolarRGM || e === s.InstallationProblems.TooManySolarRGM || e === s.InstallationProblems.TooFewSolarRGM) return r.default.createElement( "div", { className: "installation-problem" }, r.default.createElement("div", { className: "installation-problem-title" }, r.default.createElement(a.FormattedMessage, Object.assign({}, s.installationProblemTitles[e]))), r.default.createElement("div", { className: "installation-problem-details" }, r.default.createElement(a.FormattedMessage, Object.assign({}, s.installationProblemDetails[e]))) ); if (e === s.InstallationProblems.SiteShutdownExternalSwitch || e === s.InstallationProblems.SiteShutdownPvsRsdSwitch) { let t = r.default.createElement("img", { src: i(792) }); e === s.InstallationProblems.SiteShutdownExternalSwitch && (l ? (t = r.default.createElement("img", { src: i(793) })) : r.default.createElement("img", { src: i(794) })); const n = e === s.InstallationProblems.SiteShutdownPvsRsdSwitch ? r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch", defaultMessage: "Site shutdown circuit triggered by a Powerwall+ rapid shutdown.", description: "Title to the detailed card explaining how to re-enable a site that has been shut down due to an installation issue", }) : r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_title_site_shutdown", defaultMessage: "Site Shutdown circuit triggered", description: "Title to the detailed card explaining how to re-enable a site that has been shut down due to an installation issue", }); return r.default.createElement( "div", { className: "installation-problem" }, r.default.createElement("div", { className: "installation-problem-title" }, n), r.default.createElement("div", { className: "installation-problem-image" }, t), r.default.createElement( "div", { className: "installation-problem-details" }, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_0", defaultMessage: "To re-enable system:", description: "Start of a list of steps that will help installers re-enable a site that has been shut down due to an installation issue", }), r.default.createElement( "ul", null, r.default.createElement( "li", null, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_1", defaultMessage: "Turn on all Powerwall ON/OFF switches", description: "Part of a list of steps to re-enable a site that has shut down. The ON/OFF switches are present on all powerwalls in a system and must be set to ON", }) ), r.default.createElement( "li", null, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_2", defaultMessage: "Close E-Stops", description: "Part of a list of steps to re-enable a site that has shut down.", }) ), r.default.createElement( "li", null, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_3", defaultMessage: "Ensure Rapid shutdown jumpers are properly installed", description: "Part of a list of steps to re-enable a site that has shut down. The rapid shutdown jumpers are connections in the Gateway", }) ), r.default.createElement( "li", null, r.default.createElement(a.FormattedMessage, { id: "installation_problem_detail_site_shutdown_4", defaultMessage: "Check shutdown circuit wiring.", description: "Part of a list of steps to re-enable a site that has shut down.", }) ) ) ) ); } return console.error("Unknown enumeration warning:", e), null; }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.VITALS_FETCH_INTERVAL = void 0); const s = o(i(450)), _ = a(i(40)); (_.util.Long = s.default), _.configure(); const l = a(i(1)), c = i(3), d = i(35), u = i(17), m = i(28), p = i(283), g = i(588), w = i(138), v = o(i(773)), f = o(i(447)), h = o(i(446)), E = o(i(774)), b = i(135), y = i(133), S = i(150), R = o(i(5)), T = i(455), A = i(21), C = i(4), I = i(152); i(787); const O = (0, c.defineMessages)({ header: { id: "vitals_header_title", defaultMessage: "System" } }); (t.VITALS_FETCH_INTERVAL = 3e3), (t.default = (0, d.connect)(function (e) { var t, i, n, r, a; return { din: e.configuration.din, isEngineer: (0, A.isEngineer)(e.authentication), leader: (null === (t = e.configuration) || void 0 === t ? void 0 : t.leader) || "", followers: (null === (i = e.configuration) || void 0 === i ? void 0 : i.followers) || [], sitemanagerRunning: (null === (n = e.sitemaster) || void 0 === n ? void 0 : n.running) || !1, commissioned: !(null === (r = e.configuration) || void 0 === r ? void 0 : r.isNew), isEnumerating: (null === (a = e.system) || void 0 === a ? void 0 : a.isEnumerating) || !1, }; })( (0, c.injectIntl)(function (e) { const { dispatch: i, intl: n, din: r, isEngineer: a, leader: o, followers: s, sitemanagerRunning: _, commissioned: d, isEnumerating: A } = e, N = t.VITALS_FETCH_INTERVAL + 1e3; let [k, P] = (0, l.useState)(null), [D, L] = (0, l.useState)(0), M = (null == k ? void 0 : k.isUpdatingRecursive()) || !1, z = (null == k ? void 0 : k.isDisabledBecauseRecursive("FWUpdateFailed")) || !1; (0, l.useEffect)(() => { i((0, y.showHeader)("header-default", { title: n.formatMessage(O.header), subtitle: l.default.createElement(v.default, Object.assign({}, { updating: M, updateFailed: z })) })); }, [M, z]), (0, l.useEffect)(() => { i((0, S.showBack)(null, "< " + n.formatMessage(m.buttons.BACK), u.browserHistory.goBack)); }, []), (0, l.useEffect)(() => { let e, n = !0; return ( (function r() { fetch(R.default.api.uri + "/devices/vitals", { method: "GET", credentials: R.default.credentials }) .then(C.checkStatus) .then((e) => e.arrayBuffer()) .then((e) => { let t = new Uint8Array(e), i = g.DevicesWithVitals.decode(t), n = (0, w.deviceTreeFromDeviceApiList)(i, o); P(n); }) .catch((e) => { console.error("Error querying or parsing device details:", e); }) .finally(() => { n && (e = setTimeout(r, t.VITALS_FETCH_INTERVAL)); }), i((0, b.initializeConfig)()), i((0, I.fetchPowerwalls)()); })(), function () { clearTimeout(e), (n = !1); } ); }, []); const U = window.location.search.includes("wifi"), V = (0, l.useMemo)(() => (0, T.getTEDAPI)({ din: r, isEngineer: a }), [r, a]); let G = (null == k ? void 0 : k.followers) || [], j = s.filter((e) => !G.some((t) => t.din() === "STSTSM--" + e)); return l.default.createElement( "div", { className: "system-container" }, !k && l.default.createElement(p.LoadingSpinner, { className: "spinner system-loading-spinner" }), k && l.default.createElement(h.default, { root: k, sitemanagerRunning: _ }), k && k.followers.map((e) => l.default.createElement(h.default, { root: e, key: e.din(), sitemanagerRunning: _ })), k && j.map((e) => l.default.createElement( f.default, { key: e, din: e }, l.default.createElement(c.FormattedMessage, { id: "system-device-follower-not-responding", defaultMessage: "WiFi-paired device is not currently responding" }) ) ), d && U && l.default.createElement(E.default, { tedapi: V, followers: s }), !_ && (!A && Date.now() - D > N ? l.default.createElement( "a", { className: "powerwall-scanning-link", onClick: function () { L(Date.now()), i((0, I.enumeratePowerwalls)()); }, }, l.default.createElement(c.FormattedMessage, { id: "system_rescan_button_text", defaultMessage: "Rescan Devices" }) ) : l.default.createElement( "p", { className: "powerwall-scanning-link powerwall-scanning-link-disabled" }, l.default.createElement(c.FormattedMessage, { id: "system_scanning_label_text", defaultMessage: "Scanning for Devices..." }) )) ); }) )); }, , , , , function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABcCAYAAADu8aIfAAAAAXNSR0IArs4c6QAADiFJREFUeAHtnQtwVNUZx++9+8prk2xeQDQYI5AQKC0g6mitglWpr0aqGWltZqSKtGB9jOgMio2tMlOrSIvYltpimaodZgTqCJROJ2A1KKAiDoSNAbMkJJtN9pXdbJJ93Hv6/5a9cRPy2GzuZhN2z8zNOffuOd/5zi/ffvd1zrc8N4ESY0zT1dVVKopiKdQqxT7lJdiyeJ7XI5c3FDk3bahDeSe2r1GnHnm9SqWqz8jIqMe+H/sTIvHx1AKQhM7OzgXQYTG2Jdi/Hnm6Qjp5APpDyKrBdiArK+tz7EsKyR61mLiAdjqdCwG1CgNfjjw/XGsca8AxI3KyTiOsswFlh9/vd6Ps1uv17jqujityF+lh+XqNRqNHfQPKM1G/DOVS1Kec9vsSjnXg2DvIt2dnZ3/W98E4FcYNNAaZCetdifwBjK1cHh8GfgblGuQ1AHkAX3mL/NlYcrigKYC/GP0tgRz6tlwRJq8O/W2DlW9F7go7HrNizEEDbo4kSY9hQI9gsNk0EpQt2N7B8e0Gg+FYzEYXJtjhcMwXBKEKOtC3aEpIDyfKm3F8E6Dbw6pPniIGkA4XsQEDdGNjtGH/AMDfjs/U8RoJ9U06kC6yXqQj6Uo6x0uvqPqF4suwNckDwSD2uFyua6MSFsNGpBPpJusZ0nlZDLtURnRPT89lUHyfrDjKR2A9i5SRHjsppCPpGqb3PhpL7Hocg2QoWQFlkQVdhB3lVfgqCmMQOa5Nq1m1AKVXOZxOe2gMNJaKcVViuM4AUwuFNpFytAHwLrfb3e+Sbbj2E+0zM3S3Ox27rHYbszvsNKZNNMa46gkflwewn4QAe/EVfDSuCinYeUen7TGr0+a1OmwM+SetrtY8BcVHLirkj+tDkBsB/MrIW0+OmuZO6yKL09posbezDqfN6Bhvvw3XMBeAW0KQP6ebg8mBbvRa0thaHe3HzIBtcXS02Lvs3xq9lChaEGRYr3zCqIH/yoxCzKRqYsMYz9nbDrbY2xig29tiDZvcRZgl7wJk3aQiNgZl8QBG1+Qwv9dka2XNNnOro8dRPAZxQzcNnfhkn0yWnDCQZSoE+6y95QOTrYU1O831DWZzxFdXEV3n0uUNnku8j3wWnlEcw3OBCuReWYFEyWdizHou9S5O4I6LkjhLm8L2nIzw0i8i0PDJLwHy1YBrUqvVP0A+Lk+8JuI/MCcnp5NpNEtFjmsKMHFRurN1oyJ6widXhK4uvBfjJVy0kJq7267+yn7W22A/yxpsZ++JVk6wXehaGZwd7GK6GRkTlLDGp13Na422RvaV3eQ09bRdHvbR6Iqw4OADIuS7RtcycWobnaY9dbavmdFh+u9wox7SR8OKl8EvL4U/duDNx8rhhCTyZ1q1tIKpeKdfDNxUZz9931AsBgUNwPQAfFOo0Tq8p+sYSkCiHy/JKLEEROl5xjPOL7FX2ll7RsRM4CrozQg9iTsC6IP+MyIWlgAVidFxR8OxY7Z6dsJxZtCrkAsg4qSXg4aPEB+4jdXY4vaKfrL8j4iRxPg1Esc4r+hf+amr/oInfReAphepGGAGGu/FjcnRyTLYeOs5P2dGrchYjciJ6XyAPT1Qn36gYcmZABy0ZrwZfnFg5eT+8ARUHP8iWXWASSsbHY3BN/5yi36g4TZo3kU2YB/MzMw8JFdK5pERWJhXVgN/+0mABTI7uN5fhrfqBxqQaXIL+eaXwysly5ETwESZjSIncT7R/9PwVn2gcYWxEB+UA7IF1rw/vFKyHDmB7pzyXXAfNsCecdR+4jq5ZR9oWHMVHQRomp8WkCsk89ERWAx2Kl7YLTKR8/Fshdw6CBqQBcBdTgdpmpb8YTKPjoBWo/0ruY9eyXc3sSUpwT84CS7AgXzAPjNec+GiG8LkaHV15uyPGc+dC0iiodbxZdB9BEFD/cWhIdBc4mRSgADP+EN4Xs15pcCtJE4GvYR2YNFJ0ARCgcRzrAZWzfl56QYSJ8BlaLDRTHuO5idTnkxjJ6AR2F7cJXI+yb/wJDupFWjNCMSmw5oblJoEPnY1J7+EG3KvauZ4rhmwU53d7NtCaGEOB6s2Tv7hTbARML6Rrj5cHs888tFk0eSfk6AV/j/xvHBGZBInqths8tFB0OiDFuckk4IEeIGdoisPn+grJYsuIdk4ETYo2EdSFDHl1EYJb14CPJtOoLOIClyHg/JkUo4Ar2ZWCT7aL/n1dOutJ9G0jk+5LpKSiIDX4+0kHw2rTiOLDoKG60iCVtg+UjLTHCJeBPi5wDegaUWqwv0kvDhduxugRYCWUsmikylWBIrxNBQnQ/LTBDpoyZhgHnQhseozEeW6rJoc8tFIPX2gaQF7IsKI5Zj9gs9ALwBEifXSDUvQoilKQCw7TUTZEs8b6Bac41kPrcmmoCL0rMOQiDBiOWZfQJx63nXwHnIdX1NnoXgXsew34WR7+cBsCYQFjrXQDYv8jEN+5pFwQGI14AAXKCeL1qg0DWTRQdBwHWWx6jBR5XrE3hl0MhQYd0rAHWEQNCw7CVphi+jl/NPpZKhVa78QKJoW5Htg0TMv5hWwCjMcUdz2tv2Xe1hvAZ7W+XINviPko/3YKJoWnRDlt+EjCkpWGJ5AF++7hyY8pvKaU7fxt3nJR1MKvv2GVS85v5v8O1YCHr73++Q2UvmUWpIlg5bffidBj5VwqL1T9Cwki9aJqj19oDHhnILvUVy4K7CkYr5CfSWsmD/b9t7i4XpzBV7w5HzYs78PNCBLgPxO8ABCliUsIYUGbhdda+j62cClH6isrMQi229cB73K2k4HAJziwsUtXBrpMJnTDrZDaxE7F5N/1gspf5THIvtoLhRGsg6QpyCSwa1yhWQ+OgLn2lUP9jBvRhqvbV9TULFXbt0Hmg7AqrdRDthPUp5MoydgYc7HaYqBgdfvDm/dDzROihSrk8JI3kjB98IrJssjE9jUvvNei+icoeJV3qL0nPXhLfqBBmQXIG+mCpiQ/kx4xWR5ZALnRGs1+eZC3vCvKv2t7eEt+oGmDyggKrIuAL8NE9QnfBTG8MHEs7zRuvOHrZKjXCUI/nxJf4HrvQA03Icdlh20asDegu2COvEc0ETsG1caqtP+1tfpJeylfO6e1ZdUNA/Uc1CIgE2LOZsBeRGtPRzYKLnfn8CpDv8r8M2FOkHrLk6d+rP+n57fGxQ0LNqDj2mpMqUNkzkE5vkhxO7vq5Z3S+r8zavImmeoCl98MGupfbDeBgVNFbFoaCeA/xtWTWHdtw7WOHmM405Lbe91s17dFMHQsL5g+W+HYjIkaGqg0+lWATZd7lXAhVw0cUeHgjHa4+va/vYXk2SZo+FVvlJN4ZBBUUjusKBTU1PPAvIDVBH5S1hdeyWVk4njftP61rIvRNMKLLDn5grFzz2e/6PPh+OCdUMjJzzRo0u+R2HdFI7tmkRf6/JKx85Ztf6Tn3WK3Rnl6uk1m6f9/KaRKA5r0XJjPAd5CpAPw6qLA4HAPuSZ8meJlm/p2jP1sO9UrV3sypiqym6byy69MxIGEYEGZB9uZO5A/hUgz4e/3o1cF0kHF1OdLe07MmpdJ46YJWdelpDu+k7a5dc+XHhndyRjjAg0CULEAytOjreg2ArIiwH7n4kEmyAfFps+axQtRamctvdabflNa7MrGyOBTHUiBk2V6eSIOXrBEG2ATFciCeFGXu14d9pB/2mjMXBulo7X+K9Pm3P30/n3fEpMIk0RnQwHCqMY0vDV9IqmEO7kGMUrvVhPkBusb5fVeutrzaI9J4tP771RN3fZrwru3zeQyUj7UYEmoRRO0+v1/geWTRF4TTh0L06ao/ovk5yJnNaZ36z8WDJus4vutHwhq+t7KeVLnsu7P6qAXlGDJkAUUzoU7pgi8fqwPYXnJL+fyPAi1e0Xra/94yPJuBzhi4ViVb71GnX5Neun3Hcm0vYD640JNAmDRWtxI/MSisE7R8DejWlmKydr9Mfqc3+f9aWqed9J39kSrHzlFqlmHpqnKrhl7dQqev4TdRozaLln3NRQ8O5tAE9RxmjN4rrQGxvMxJ74iR51HrS0b/0oYKzyiD3qdCElsEQ974VN0x5+XgntFQNNyoT89p8AeyntA/hRbKsBPCq/RjLGIz3Z9saPj/rrt5iYNRtre7hydVHLVbrSZdV5PzmiVP+KgpaVgnXTD3vRbXsRHQPsvRSwcKLF0nui/Y0VJ/yNvz4ZaLoEWnJ5fJbvenXZ714rXP0s6a1kigloUhBWnY7r7GeQP4LdYARaAD+I7WUK94Y8LpHI/sD26hrMprVfSqZHjWJLHmZtcamCTrpOU/a/OVxx5bpplTGJLBwz0LI1ALYiPxypM911OxbfVINLGZQ2YpVTtbf4veC8Nrmv4fLHzVsrm1jHk18EGuc7JHdwgpBeSBOv05R+UMIXPvjC1KqI7/KG62eoz2IOWu4Ylh31T6ESZMyrel+WJecqjrtjKNjrbW/OafN2PtTK7DefFltnmJlTS9aLbxJ3GZ/XM09dvL9MW7zm2bzKFlleLPNxAx0+CIoaCfAj/bgvBWqhn55uuMS+4vVu5p0TLoPKuB02PpRy8zM+Xix0+3sWuoXu2daA6zJMYslpEq1aTP4+3wSAc9V6cYFwxXFA3ri5cPVbA2XFej8uoOVBAXZEP1dd7HoYSxJ65WYj54xxaYKOzVFNt07n8w9PUWfv+G5B7tuV/PkJhyMLUL5GXEEPHA7AD/oD7Dd4nl1QF2hOG1hfK2ikIi7Xly7ovAZObzUIGWey+bTjGULqoekFhv1P8JU9A9vEa39CgR4KQjQ+eihZ8To+qsek8VKSTnh04sOJ7FOczbooH+5EGC89h+v3/390L88XVTm0AAAAAElFTkSuQmCC"; }, , function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAYAAACN1PRVAAAAAXNSR0IArs4c6QAAAx5JREFUSA2tlt9LU2EYx7ezuTbTTRkb6TJWMIjwwstaMdRusouyLrxQ6jKvKyKIErsp6g8o6Id0I8UssAl64ahkFMwka1CBGDKtzS1t/mKTuWmfVxK2naPTPAfePe/zPN/n+9378xytpsiTSqUOpNPp5rW1tVNAndhqbIlWq41gf2Lf6nS63rKyslARKo12M8DCwsLh1dXVu+SP03ySJPVBPAZpJBaLZUwmUxXCTnLiTzTTEvjXKisr39Hf/pNIJG7Pzc3FsFcg2FOsEowWfAttnPYCv7RYjQaQCfArRIYWFxdtRQsKANQbZmdnn8IxmkwmHQXpfBfQS1o3RSX5me171GpnZmZu0L7RL1OsnJ+f72BEAfHvFAE7DE5PTz+Ox+P9sjKEXIzoN1NnlyX/M8Cf1kej0S9sprY8CoS8tOt5QRWcqamp05OTkxMI69bpxEKKUREwqcAvowiHw8FIJNIqEhIH9gxC/ZyhlAypTqB3eXn5/LoYQk0I9anDK2fh8PesrKw0rIvxc4jr5rscpk7EbrePcxPtHRkZsUiMqgonqg61Mguz98doNDr1pEvNZnNSGaZOlGlMMyiLBF2Uc1alDq0yC5vQmslkwhJDjHCj71eG7T4KfyliRp/P90us2ftsNnty97TKDKFQqBXBH52dnRkGJfkQPKsM3X10aWmpBRa/YJLKy8s/YM3cix4RUPMJBoMH2Q8neOE+FLxiGtdoN5nKe2oKCS7e9o/Y8kN1dXVfhS92o8ZisTzHaHnFXBW+Go/f729nVG6DwdAu4xMXMmK/ADTJkjsMDAwM1Hd3d6cCgcCFTUsROsobIIa9uCmoSIItfqmrqys1ODh4vxAq+7r691UlLuY33Jm32EDxwiIl3+v17uOmeMbua3C5XJcbGxsfFOJkYgLAubAg2oEVI3xC66moqPgkcrkPAjqmX3xTtrME9Q6HY7ympqbN7XaP5uI2+opiG0kInOxUscDnICynP0Y/wnocE19fCJmsVmuWm/0zQnc8Hs/rjVolu6VYboEQxndyCVQPDw8f0ev1EzabLVRbW/sxF7dV/y9IlJ1Y7C0+lwAAAABJRU5ErkJggg=="; }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "addMeter", function () { return E; }), i.d(t, "removeMeter", function () { return b; }), i.d(t, "resetMeterConfig", function () { return y; }), i.d(t, "resetMeterCurrentTransformerReadings", function () { return S; }), i.d(t, "cancelMeter", function () { return U; }), i.d(t, "detectWiredMeters", function () { return se; }), i.d(t, "deleteMeter", function () { return _e; }), i.d(t, "createMeter", function () { return le; }), i.d(t, "commissionMeter", function () { return ce; }), i.d(t, "fetchMeterConfig", function () { return de; }), i.d(t, "checkMeterConnectivity", function () { return pe; }), i.d(t, "pingMeterStatus", function () { return ge; }), i.d(t, "setMeterCts", function () { return we; }), i.d(t, "deleteMeterCts", function () { return ve; }), i.d(t, "getMeterReadings", function () { return fe; }), i.d(t, "fetchMeterAmpRatings", function () { return he; }), i.d(t, "setMeterAmpRatings", function () { return Ee; }), i.d(t, "flipMeterCt", function () { return be; }), i.d(t, "getMeterAggregates", function () { return ye; }), i.d(t, "setSyncCTVoltageReferences", function () { return Se; }), i.d(t, "fetchSyncCTVoltageReferences", function () { return Re; }), i.d(t, "fetchSyncCTVoltageReferenceOptions", function () { return Te; }), i.d(t, "setEnableInverterMeterReadings", function () { return Ae; }), i.d(t, "fetchEnableInverterMeterReadings", function () { return Ce; }); var n = i(27), r = i(7), a = i(2), o = i(14), s = i(5), _ = i.n(s), l = i(4), c = i(15), d = i(29), u = i(6), m = i(151), p = i(12); function g(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function w(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? g(Object(i), !0).forEach(function (t) { v(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : g(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function v(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } let f = null; const h = { [p.Statuses.FAILED_METER]: "Failed to Add Meter", [p.Statuses.ADD_METER_ERROR]: "Verifying Meter", [p.Statuses.VERIFY_METER_ERROR]: "Verifying Meter" }, E = Object(u.b)(a.ADD_METER, "id"), b = Object(u.b)(a.REMOVE_METER, "id"), y = Object(u.b)(a.RESET_METER_CONFIG), S = Object(u.b)(a.RESET_METER_CURRENT_TRANSFORMER_READINGS), R = Object(u.b)(a.REQUEST_DETECT_METER), T = Object(u.b)(a.RECEIVE_DETECT_METER_ERROR), A = Object(u.b)(a.REQUEST_DELETE_METER); const C = Object(u.b)(a.RECEIVE_DELETE_METER_ERROR), I = Object(u.b)(a.REQUEST_CREATE_METER); const O = Object(u.b)(a.RECEIVE_CREATE_METER_ERROR), N = Object(u.b)(a.REQUEST_COMMISSION_METER); function k(e) { return w({ type: a.RECEIVE_COMMISSION_METER_UPDATE }, e); } const P = Object(u.b)(a.RECEIVE_COMMISSION_METER_ERROR), D = Object(u.b)(a.REQUEST_METER_CONFIG); function L(e) { return w({ type: a.RECEIVE_METER_CONFIG_UPDATE }, e); } function M(e, t = null) { return { type: a.RECEIVE_METER_CONFIG_SUCCESS, receivedAt: Date.now(), meters: e, isFetching: t }; } const z = Object(u.b)(a.RECEIVE_METER_CONFIG_ERROR); function U() { return Object(c.b)(), (f = null), { type: a.CANCEL_METER }; } const V = Object(u.b)(a.REQUEST_SET_METER_CTS); const G = Object(u.b)(a.RECEIVE_SET_METER_CTS_ERROR), j = Object(u.b)(a.REQUEST_DELETE_METER_CTS); const W = Object(u.b)(a.RECEIVE_DELETE_METER_CTS_ERROR), F = Object(u.b)(a.REQUEST_METER_AMP_RATINGS); const q = Object(u.b)(a.RECEIVE_METER_AMP_RATINGS_ERROR), x = Object(u.b)(a.REQUEST_SET_METER_AMP_RATINGS); const B = Object(u.b)(a.RECEIVE_SET_METER_AMP_RATINGS_ERROR), H = Object(u.b)(a.REQUEST_METER_READINGS); const K = Object(u.b)(a.RECEIVE_METER_READINGS_ERROR), Y = Object(u.b)(a.REQUEST_METER_FLIP_CT); const Q = Object(u.b)(a.RECEIVE_METER_FLIP_CT_ERROR), Z = Object(u.b)(a.REQUEST_METER_AGGREGATES); const J = Object(u.b)(a.RECEIVE_METER_AGGREGATES_ERROR), X = Object(u.b)(a.REQUEST_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS); const $ = Object(u.b)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR), ee = Object(u.b)(a.REQUEST_SYNC_CT_VOLTAGE_REFERENCES); const te = Object(u.b)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR), ie = Object(u.b)(a.REQUEST_SET_SYNC_CT_VOLTAGE_REFERENCES); const ne = Object(u.b)(a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR), re = Object(u.b)(a.REQUEST_ENABLE_INVERTER_METER_READINGS); function ae(e) { return { type: a.RECEIVE_ENABLE_INVERTER_METER_READINGS_SUCCESS, enabled: e, receivedAt: Date.now() }; } const oe = Object(u.b)(a.RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR); function se() { return (e) => ( e(R()), e(Object(r.clearError)(a.RECEIVE_DETECT_METER_ERROR)), fetch(_.a.api.uri + "/meters/detect_wired_meters", { method: "POST", credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e(M(t, !1)); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_DETECT_METER_ERROR, "Unable to detect any wired meters", t.response)), e(T()); }) ); } function _e(e, t) { return (i) => ( i(A()), fetch(_.a.api.uri + "/meters", { method: "DELETE", credentials: _.a.credentials, body: JSON.stringify({ location: t.location, type: t.connectionType, ip_address: t.ipAddress, serial: t.serial }) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { var n; i(((n = { id: e, serial: t.serial }), w({ type: a.RECEIVE_DELETE_METER_SUCCESS, receivedAt: Date.now() }, n))); }) .catch((e) => { i(Object(r.showError)(a.RECEIVE_DELETE_METER_ERROR, e.toString(), e.response)), i(C()); }) ); } function le(e, t, i, n, o, s, c) { return (d) => ( d(I()), d(Object(r.clearError)(a.RECEIVE_CREATE_METER_ERROR)), d(Object(r.clearError)(a.RECEIVE_COMMISSION_METER_ERROR)), fetch(_.a.api.uri + "/meters", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ type: s, serial: i, short_id: t, location: c, ip_address: o, mac: n }) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((r) => { d( (function (e) { return w({ type: a.RECEIVE_CREATE_METER_SUCCESS, receivedAt: Date.now() }, e); })({ id: e, shortID: t, location: c, serial: r.serial, macAddress: n, ipAddress: o, connectionType: s, connected: r.connected, currentTransformersResponse: r.cts }) ), r.connected || d(ce(e, t, i, n, o, s)); }) .catch((e) => { d(Object(r.showError)(a.RECEIVE_CREATE_METER_ERROR, e.toString(), e.response)), d(O()); }) ); } function ce(e, t, i, n, o, s) { return async (c) => { c(N()), c(Object(r.clearError)(a.RECEIVE_COMMISSION_METER_ERROR)); let d = { short_id: t, serial: i }; return ( "" !== o && "" !== n && ((d.mac = n), (d.ip_address = o)), fetch(`${_.a.api.uri}/meters/${i}/commission`, { method: "POST", credentials: _.a.credentials, body: JSON.stringify(d) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { c(me(e, i, t, n, o, s)); }) .catch((e) => { c(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, e.toString(), e.response)), c(P()); }) ); }; } function de() { return (e) => ( e(D()), fetch(_.a.api.uri + "/meters", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then(async (t) => { let i = null; if (t && t.length) { for (let n = 0; n < t.length; n++) Object(m.s)(t[n].type) && e(he(t[n].serial)), t[n].connected || null != i || (i = n + 1); let n = null == i; if ((e(M(t, !n)), n)) return; } null == i && (i = 1), await Object(c.d)(500); let { response: n, error: o } = await ue(); if (n && null != n.status) { let t = { status: n.status, id: i }; n.serial && (t.serial = n.serial), n.short_id && (t.short_id = n.short_id), n.mac && (t.mac = n.mac), n.ip_address && (t.ip_address = n.ip_address), n.location && (t.location = n.location), [p.Statuses.STARTED_WIFI_ADD, p.Statuses.SENDING_CREDENTIALS, p.Statuses.VERIFYING_METER, p.Statuses.ADD_METER_ERROR].includes(n.status) ? (e(L(t)), e(me(i, t.serial, t.short_id, t.mac, t.ip_address, p.ConnectionTypes.NEURIO_W1_WIFI, 0))) : ((t.isFetching = !1), e(L(t))); } else e(o ? Object(r.showError)(a.RECEIVE_METER_CONFIG_ERROR, o.toString(), o.response) : Object(r.showError)(a.RECEIVE_METER_CONFIG_ERROR, "Fetch meter config error. Invalid response.")), e(z()); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_METER_CONFIG_ERROR, t.toString(), t.response)), e(z()); }) ); } async function ue() { try { return { response: await ge(), error: null }; } catch (e) { return { response: null, error: e }; } } function me(e, t, i, n, s, _, l = 1e4) { return async (u) => { f = 0; try { await Object(c.d)(l); for (let l = 0; l < 180; l++) { if (null == f) return; let { response: l, error: g } = await ue(); if (l && null != l.status) { if (l.status === p.Statuses.FAILED_METER) return l.serial ? u(k({ status: l.status, id: e })) : u(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, h[l.status])), void u(P()); if (l.status === p.Statuses.SUCCESS_METER) return void u( ((m = { id: e, connectionType: _, shortID: l.short_id || i, serial: l.serial || t, macAddress: l.mac || n, ipAddress: l.ip_address || s, status: l.status, location: l.location, verified: !0 }), w({ type: a.RECEIVE_COMMISSION_METER_SUCCESS, receivedAt: Date.now() }, m)) ); u(k(w(w({}, l), {}, { id: e }))); } else { if (!g || (!Object(d.i)(g) && !Object(d.g)(g))) { let t = "Invalid response"; return g && (o.default.error(g), (t = g.toString())), u(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, `Commission meter ${e} error: ${t}.`)), void u(P()); } u(k({ status: p.Statuses.RECONNECTING, id: e })); } await Object(c.d)(1e3); } u(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, `Meter connection timeout. Could not commission meter ${e}, please check the connection.`)), u(P()); } catch (e) { u(Object(r.showError)(a.RECEIVE_COMMISSION_METER_ERROR, e.toString(), e.response)), u(P()); } var m; }; } async function pe(e) { return Object(c.e)( c.a, new Error("Request timed out"), fetch(_.a.api.uri + "/meters/verify", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ location: e.location, type: e.connectionType, ip_address: e.ipAddress, serial: e.serial }), }) .then(l.checkStatus) .then(() => {}) .catch((e) => { throw e; }) ); } async function ge() { return fetch(_.a.api.uri + "/meters/status", { method: "GET", credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => e) .catch((e) => { throw e; }); } function we(e, t) { return (i) => { let n = null != e, o = n ? e : t; if (null == o) return; i(V()); let s = []; for (let e = 1; e <= 4; e++) o.ids.includes(e) ? s.push(!0) : s.push(!1); let c = { type: o.connectionType === p.CurrentTransformerConnectionTypes.DOUBLED_SOLAR ? p.CurrentTransformerConnectionTypes.SOLAR : o.connectionType, real_power_scale_factor: o.realPowerScaleFactor, valid: s }; return fetch(`${_.a.api.uri}/meters/${o.serial}/cts`, { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(c) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { const e = n && null != t; var r; i(((r = w(w({}, o), {}, { isSetting: e })), w({ type: a.RECEIVE_SET_METER_CTS_SUCCESS, receivedAt: Date.now() }, r))), e && i(we(null, t)); }) .catch((e) => { i(Object(r.showError)(a.RECEIVE_SET_METER_CTS_ERROR, e.toString(), e.response)), i(G()); }); }; } function ve(e) { return (t) => ( t(j()), fetch(`${_.a.api.uri}/meters/${e}/cts`, { method: "DELETE", credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((i) => { t( (function (e) { return w({ type: a.RECEIVE_DELETE_METER_CTS_SUCCESS, receivedAt: Date.now() }, e); })({ serial: e }) ); }) .catch((e) => { t(Object(r.showError)(a.RECEIVE_DELETE_METER_CTS_ERROR, e.toString(), e.response)), t(W()); }) ); } function fe() { return (e, t) => { const { meter: i } = t(); return ( e(H()), fetch(_.a.api.uri + "/meters/readings", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { if (Object(n.isEmpty)(t)) null != i.lastReadingUpdatedAt && Date.now() - i.lastReadingUpdatedAt > 5e3 && e(S()); else { let i = !1; Object(n.each)(t, (t, n) => { null != t.error && null != t.error.Err && ((i = !0), e(Object(r.showError)(a.RECEIVE_METER_READINGS_ERROR, `Unable to read meter ${n}: Error Code ${t.error.Err}`, w(w({}, t.error), {}, { serial: n, detailed: !0 })))); }), i || e(Object(r.clearError)(a.RECEIVE_METER_READINGS_ERROR)); } e( (function (e) { return { type: a.RECEIVE_METER_READINGS_SUCCESS, receivedAt: Date.now(), readings: e }; })(t) ); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_METER_READINGS_ERROR, t.toString(), t.response)), e(K()); }) ); }; } function he(e, t = !0) { return (i) => ( i(F()), fetch(`${_.a.api.uri}/meters/${e}/ct_config`, { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { i( (function (e, t) { return { type: a.RECEIVE_METER_AMP_RATINGS_SUCCESS, serial: t, ampRatings: e }; })(t.amp_ct_type, e) ); }) .catch((e) => { t || (i(Object(r.showError)(a.RECEIVE_METER_AMP_RATINGS_ERROR, e.toString(), e.response)), i(q())); }) ); } function Ee(e, t) { return (i) => ( i(x()), i(Object(r.clearError)(a.RECEIVE_SET_METER_AMP_RATINGS_ERROR)), fetch(`${_.a.api.uri}/meters/${e}/ct_config`, { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ amp_ct_type: t }) }) .then(l.checkStatus) .then(l.parseText) .then((n) => { var r; i(((r = { serial: e, ampRatings: t }), w({ type: a.RECEIVE_SET_METER_AMP_RATINGS_SUCCESS }, r))); }) .catch((e) => { i(Object(r.showError)(a.RECEIVE_SET_METER_AMP_RATINGS_ERROR, e.toString(), e.response)), i(B()); }) ); } function be(e, t) { return (i) => { i(Y()); for (let e = t.length; e < 4; e++) t.push(!1); return fetch(`${_.a.api.uri}/meters/${e}/invert_cts`, { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(t) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then(() => { var n; i(((n = { serial: e, inverted: t }), w({ type: a.RECEIVE_METER_FLIP_CT_SUCCESS }, n))); }) .catch((e) => { i(Object(r.showError)(a.RECEIVE_METER_FLIP_CT_ERROR, e.toString(), e.response)), i(Q()); }); }; } function ye() { return async (e) => { e(Z()); try { return await Object(c.e)( c.a, new Error("Request timed out"), fetch(_.a.api.uri + "/meters/aggregates", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e( (function (e) { return { type: a.RECEIVE_METER_AGGREGATES_SUCCESS, receivedAt: Date.now(), aggregates: e }; })(t) ); }) ); } catch (t) { e(J(new o.default(a.RECEIVE_METER_AGGREGATES_ERROR, t.toString(), t.response))); } }; } function Se(e) { return async (t) => ( t(ie()), t(Object(r.clearError)(a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR)), fetch(_.a.api.uri + "/synchrometer/ct_voltage_references", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(e) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((e) => { t( (function (e) { return { type: a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS, pairing: e, receivedAt: Date.now() }; })(e) ); }) .catch((e) => { t(Object(r.showError)(a.RECEIVE_SET_SYNC_CT_VOLTAGE_REFERENCES_ERROR, e.toString(), e.response)), t(ne()); }) ); } function Re() { return async (e) => ( e(ee()), e(Object(r.clearError)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR)), fetch(_.a.api.uri + "/synchrometer/ct_voltage_references", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { e( (function (e) { return { type: a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_SUCCESS, pairing: e, receivedAt: Date.now() }; })(t) ); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCES_ERROR, t.toString(), t.response)), e(te()); }) ); } function Te() { return async (e) => ( e(X()), e(Object(r.clearError)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR)), fetch(_.a.api.uri + "/synchrometer/ct_voltage_references/options", { credentials: _.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { e( (function (e) { return { type: a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_SUCCESS, options: e, receivedAt: Date.now() }; })(t) ); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_SYNC_CT_VOLTAGE_REFERENCE_OPTIONS_ERROR, t.toString(), t.response)), e($()); }) ); } function Ae(e) { return (t) => ( t(re()), fetch(_.a.api.uri + "/meters/inverter_meter_readings", { method: "POST", credentials: _.a.credentials, body: JSON.stringify({ enabled: e }) }) .then(l.checkStatus) .then(l.parseJSON) .then((e) => { t(ae(e.enabled)); }) .catch((e) => { t(Object(r.showError)(a.RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR, e.toString(), e.response)), t(oe()); }) ); } function Ce() { return (e) => ( e(re()), fetch(_.a.api.uri + "/meters/inverter_meter_readings", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e(ae(t.enabled)); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_ENABLE_INVERTER_METER_READINGS_ERROR, t.toString(), t.response)), e(oe()); }) ); } }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAAXNSR0IArs4c6QAAAbdJREFUOBGtVTtOQzEQnDwQFIlAoqOgIIQSikjAAYIQJQ25Ax0XQBQcghOkIBUlBWlpgCBBQZEQbgCIBCQQv5lgo5f31vwSS47Xs7Nj7/PaySDQzoG5Z2AtA5RIKbwDOdod2k3atRFgfx64sMLJ623HQJ7gDtEiezUCDl6A6yxw8wBMDAPTb8AqfWX2OhfYWgBatO12Aqywt06BzQYwarM+UfnFE19xJtcJNrjTRZMQAMVnbCMlrJQJtv4q6NdxworPewwUrCiVL8Aw6D86A9YNVxdyn6KiSaRT5lgcA3a73vDPI13qZnPxRelFKhuyqrPAk8l2IE+5w94OcVx8VXoRy2dZZRMie5y89us3ouJJh7wSR8yoDn1waJQoycGdKs7pFCKmlMuysENiHpfoOHDv59YoHekp/Y5uikWKY0x97w64jWNJWzrSU/pXunpJQnI+BExyF1NJPD53Ok2lf+juctyfssnZpvBSyhEDpEO9GlRXLP7Ln+56LNY0FS+dbp2656vOE9gw2b8EXXzd6QG6swO/+9oMRfXsDe6V8hk64b7fU5ZVb9OnINjXy58S9UvoFP/7H/UBvHyjEZxnGH8AAAAASUVORK5CYII="; }, , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetGridCodeConfig", function () { return y; }), i.d(t, "fetchGridCodes", function () { return S; }), i.d(t, "saveGridCode", function () { return R; }), i.d(t, "checkGridStatus", function () { return T; }), i.d(t, "getGridStatus", function () { return A; }), i.d(t, "saveOffGrid", function () { return C; }); var n = i(27), r = i(7), a = i(2), o = i(14), s = i(5), _ = i.n(s), l = i(4), c = i(6), d = i(15); function u(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function m(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? u(Object(i), !0).forEach(function (t) { p(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : u(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function p(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const g = Object(c.b)(a.REQUEST_GRID_CODES); const w = Object(c.b)(a.RECEIVE_GRID_CODES_ERROR); const v = Object(c.b)(a.RECEIVE_SAVE_GRID_CODE_ERROR), f = Object(c.b)(a.REQUEST_GRID_STATUS); const h = Object(c.b)(a.RECEIVE_GRID_STATUS_ERROR), E = Object(c.b)(a.REQUEST_SAVE_OFF_GRID); const b = Object(c.b)(a.RECEIVE_SAVE_OFF_GRID_ERROR), y = Object(c.b)(a.RESET_GRID_CODE_CONFIG); function S() { return (e) => ( e(g()), fetch(_.a.api.uri + "/site_info/grid_regions", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { null == t || Object(n.isEmpty)(t) ? (e(Object(r.showError)(a.RECEIVE_GRID_CODES_ERROR, "Error: Could not retrieve grid codes")), e(w())) : e( (function (e) { return { type: a.RECEIVE_GRID_CODES_SUCCESS, receivedAt: Date.now(), gridRegions: e }; })(t) ); }) .catch((t) => { e(Object(r.showError)(a.RECEIVE_GRID_CODES_ERROR, t.toString(), t.response)), e(w()); }) ); } function R(e, t = !1) { return (i) => ( i( (function (e) { return { type: a.REQUEST_SAVE_GRID_CODE, isSetting: e }; })(t) ), fetch(_.a.api.uri + "/site_info/grid_code", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(e) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then( (e) => ( i( (function (e) { return m({ type: a.RECEIVE_SAVE_GRID_CODE_SUCCESS, receivedAt: Date.now() }, e); })(e) ), !0 ) ) .catch((e) => (i(Object(r.showError)(a.RECEIVE_SAVE_GRID_CODE_ERROR, e.toString(), e.response)), i(v()), !1)) ); } async function T() { return fetch(_.a.api.uri + "/system_status/grid_status", { credentials: _.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((e) => e) .catch((e) => { throw e; }); } function A() { return async (e) => { e(f()); try { e( (function (e) { return m({ type: a.RECEIVE_GRID_STATUS_SUCCESS, receivedAt: Date.now() }, e); })(await Object(d.e)(d.a, new Error("Request timed out"), T())) ); } catch (t) { e(h(new o.default(a.RECEIVE_GRID_STATUS_ERROR, t.toString(), t.response))); } }; } function C(e) { return (t) => ( t(E()), fetch(_.a.api.uri + "/site_info/offgrid", { method: "POST", credentials: _.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ offgrid: e }) }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((i) => { t( (function (e) { return m({ type: a.RECEIVE_SAVE_OFF_GRID_SUCCESS, receivedAt: Date.now() }, e); })({ offGrid: e }) ); }) .catch((e) => { t(Object(r.showError)(a.RECEIVE_SAVE_OFF_GRID_ERROR, e.toString(), e.response)), t(b()); }) ); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "requestNetworks", function () { return E; }), i.d(t, "receiveNetworks", function () { return b; }), i.d(t, "receiveNetworksError", function () { return y; }), i.d(t, "requestAccessPoints", function () { return S; }), i.d(t, "receiveAccessPointsSuccess", function () { return R; }), i.d(t, "receiveAccessPointsError", function () { return T; }), i.d(t, "resetNetworkConfig", function () { return L; }), i.d(t, "requestClientProtocols", function () { return M; }), i.d(t, "receiveClientProtocolsError", function () { return z; }), i.d(t, "cancelNetwork", function () { return V; }), i.d(t, "fetchNetworks", function () { return G; }), i.d(t, "scanWifiNetworks", function () { return j; }), i.d(t, "connectWifi", function () { return W; }), i.d(t, "enableWifi", function () { return F; }), i.d(t, "connectEthernet", function () { return q; }), i.d(t, "disconnectNetwork", function () { return x; }), i.d(t, "deleteNetwork", function () { return B; }), i.d(t, "editNetworkService", function () { return Q; }), i.d(t, "enableNetworkService", function () { return Z; }), i.d(t, "startInternetConnectivityCheck", function () { return J; }), i.d(t, "checkInternetConnectivity", function () { return X; }), i.d(t, "pingNetworks", function () { return $; }), i.d(t, "setClientProtocols", function () { return ee; }), i.d(t, "fetchClientProtocols", function () { return te; }); var n = i(18), r = i.n(n), a = i(7), o = i(2), s = i(14), _ = i(37), l = i(5), c = i.n(l), d = i(6), u = i(96), m = i(4), p = i(15), g = i(29); function w(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function v(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? w(Object(i), !0).forEach(function (t) { f(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : w(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function f(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } let h = null; const E = Object(d.b)(o.REQUEST_NETWORKS); function b(e) { return { type: o.RECEIVE_NETWORKS_SUCCESS, receivedAt: Date.now(), networks: e }; } const y = Object(d.b)(o.RECEIVE_NETWORKS_ERROR), S = Object(d.b)(o.REQUEST_ACCESS_POINTS); function R(e) { return { type: o.RECEIVE_ACCESS_POINTS_SUCCESS, receivedAt: Date.now(), accessPoints: e }; } const T = Object(d.b)(o.RECEIVE_ACCESS_POINTS_ERROR), A = Object(d.b)(o.REQUEST_SCAN_WIFI_NETWORKS); const C = Object(d.b)(o.RECEIVE_SCAN_WIFI_NETWORKS_ERROR); const I = Object(d.b)(o.RECEIVE_CONNECT_WIFI_ERROR); const O = Object(d.b)(o.RECEIVE_CONNECT_ETHERNET_SUCCESS), N = Object(d.b)(o.RECEIVE_CONNECT_ETHERNET_ERROR), k = Object(d.b)(o.REQUEST_DISCONNECT_NETWORK); const P = Object(d.b)(o.RECEIVE_DISCONNECT_NETWORK_ERROR), D = Object(d.b)(o.REQUEST_DELETE_NETWORK); const L = Object(d.b)(o.RESET_NETWORK_CONFIG), M = Object(d.b)(o.REQUEST_CLIENT_PROTOCOLS), z = Object(d.b)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR); function U(e) { return { type: o.RECEIVE_CLIENT_PROTOCOLS_SUCCESS, receivedAt: Date.now(), clientProtocols: e }; } function V() { return Object(p.b)(), (h = null), { type: o.CANCEL_NETWORK }; } function G() { return (e) => ( e(E()), e(Object(a.clearError)(o.RECEIVE_NETWORKS_ERROR)), fetch(c.a.api.uri + "/networks", { credentials: c.a.credentials }) .then(m.parseJSON) .then(m.checkResponseStatus) .then((t) => { e(b(t.map(u.o))); }) .catch((t) => { Object(g.g)(t) ? e(y(new s.default(o.RECEIVE_NETWORKS_ERROR, t.toString(), t.response))) : (e(Object(a.showError)(o.RECEIVE_NETWORKS_ERROR, t.toString(), t.response)), e(y())); }) ); } function j() { return (e) => ( e(A()), e(Object(a.clearError)(o.RECEIVE_SCAN_WIFI_NETWORKS_ERROR)), fetch(c.a.api.uri + "/networks/request_scan_wifi", { method: "POST", credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then(() => { e({ type: o.RECEIVE_SCAN_WIFI_NETWORKS_SUCCESS, receivedAt: Date.now() }), e(G()); }) .catch((t) => { Object(g.g)(t) ? e(C(new s.default(o.RECEIVE_SCAN_WIFI_NETWORKS_ERROR, t.toString(), t.response))) : (e(Object(a.showError)(o.RECEIVE_SCAN_WIFI_NETWORKS_ERROR, t.toString(), t.response)), e(C())); }) ); } function W(e, t, i, n, r) { return async (s) => { s( (function (e) { return { type: o.REQUEST_CONNECT_WIFI, startedAt: Date.now(), networkName: e, interface: _.d.WIFI }; })(e) ), s(Object(a.clearError)(o.RECEIVE_CONNECT_WIFI_ERROR)); let l = { networkName: e, interface: _.d.WIFI, username: n, password: i, securityType: t }; try { await Y(l, 6e4), s(F(e, n, r)); } catch (t) { if (Object(g.n)(t)) return s(Object(a.showError)(o.RECEIVE_CONNECT_WIFI_ERROR, t.toString(), t.response)), s(I()), !1; s(F(e, n, r)); } return !0; }; } function F(e, t, i, n = 1e3, r = 45) { return async (s) => { try { await Object(p.d)(n); for (let n = 0; n < r; n++) { if (null == h) return; const n = await H(e, i); if (n) return s(((_ = v(v({}, n), {}, { ssid: e, username: t })), v({ type: o.RECEIVE_CONNECT_WIFI_SUCCESS, receivedAt: Date.now() }, _))), void s(G()); await Object(p.d)(1e3); } throw new Error("Connection timeout. Please check the wifi connectivity and/or credentials."); } catch (e) { s(Object(a.showError)(o.RECEIVE_CONNECT_WIFI_ERROR, e.toString(), e.response)), s(I()); } var _; }; } function q(e, t, i, n, r, s, l = 1e3, c = 45) { return async (d) => { d({ type: o.REQUEST_CONNECT_ETHERNET, startedAt: Date.now(), networkName: _.e.ETHERNET, interface: _.d.ETHERNET }), d(Object(a.clearError)(o.RECEIVE_CONNECT_ETHERNET_ERROR)); const u = { networkName: _.e.ETHERNET, interface: _.d.ETHERNET, dhcp: e, ip: t, primaryDNS: r, backupDNS: s, subnet: i, gateway: n }; try { await Object(p.d)(l), await Q(u), await Y(u, 6e4); for (let e = 0; e < c; e++) { if (null == h) return; if (await K(_.d.ETHERNET)) return void d(O()); await Object(p.d)(1e3); } throw new Error("Connection timeout. Please check the ethernet connectivity and/or settings."); } catch (e) { d(Object(a.showError)(o.RECEIVE_CONNECT_ETHERNET_ERROR, e.toString(), e.response)), d(N()); } }; } function x(e, t) { return (t) => ( t(k()), fetch(`${c.a.api.uri}/networks/${e}/disconnect`, { method: "DELETE", credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then(() => { var i; t(((i = { device: e }), v({ type: o.RECEIVE_DISCONNECT_NETWORK_SUCCESS, receivedAt: Date.now() }, i))), t(G()); }) .catch((e) => { t(Object(a.showError)(o.RECEIVE_DISCONNECT_NETWORK_ERROR, e.toString(), e.response)), t(P()); }) ); } function B(e, t, i) { return (i) => ( i(D()), i(Object(a.clearError)(o.RECEIVE_DELETE_NETWORK_ERROR)), fetch(c.a.api.uri + "/networks", { method: "DELETE", credentials: c.a.credentials, body: JSON.stringify({ network_name: e, interface: t }) }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then(() => { var t; i(((t = { networkName: e }), v({ type: o.RECEIVE_DELETE_NETWORK_SUCCESS, receivedAt: Date.now() }, t))), i(G()); }) .catch((e) => { i(Object(a.showError)(o.RECEIVE_DELETE_NETWORK_ERROR, e.toString(), e.response)); }) ); } async function H(e, t) { try { return (await $()).find((i) => { const n = i.interface === _.d.WIFI && i.networkName === e && !0 === i.active; return t ? n && r()(i, (e) => e.iface_network_info.ip_networks[0].ip) : n; }); } catch (e) { return; } } async function K(e, t = !1) { try { return (await $()).find((i) => { const n = i.interface === e && !0 === i.active; return t ? n && r()(i, (e) => e.iface_network_info.ip_networks[0].ip) : n; }); } catch (e) { return; } } async function Y(e, t = 1e3) { return ( (h = 0), Object(p.e)( t, new Error("Request timed out"), fetch(c.a.api.uri + "/networks/connect", { method: "POST", credentials: c.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(Object(u.e)(e)) }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then((e) => e) .catch((e) => { throw e; }) ) ); } async function Q(e) { return ( (h = 0), fetch(c.a.api.uri + "/networks", { method: "POST", credentials: c.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(Object(u.e)(e)) }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .catch((e) => { throw e; }) ); } async function Z(e) { return fetch(`${c.a.api.uri}/networks/enable_${e}`, { method: "POST", credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .catch((e) => { throw e; }); } async function J() { return fetch(c.a.api.uri + "/system/networks/conn_tests", { method: "POST", credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .catch((e) => { throw e; }); } async function X() { return fetch(c.a.api.uri + "/system/networks/conn_tests", { credentials: c.a.credentials }) .then(m.parseText) .then(m.parseResponseText) .then(m.checkResponseStatus) .then((e) => e) .catch((e) => { throw e; }); } async function $(e = 2e3) { return Object(p.e)( e, new Error("Request timed out"), fetch(c.a.api.uri + "/networks", { credentials: c.a.credentials }) .then(m.parseJSON) .then(m.checkResponseStatus) .then((e) => e.map(u.o)) .catch((e) => { throw e; }) ); } function ee(e) { return (t) => ( t(Object(a.clearError)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR)), t(M()), fetch(c.a.api.uri + "/networks/client_protocols", { method: "POST", credentials: c.a.credentials, body: JSON.stringify(e) }) .then(m.parseJSON) .then(m.checkResponseStatus) .then((e) => { t(U(e)); }) .catch((e) => { t(z()), t(Object(a.showError)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR, e.toString(), e.response)); }) ); } function te() { return (e) => ( e(Object(a.clearError)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR)), e(M()), fetch(c.a.api.uri + "/networks/client_protocols", { credentials: c.a.credentials }) .then(m.parseJSON) .then(m.checkResponseStatus) .then((t) => { e(U(t)); }) .catch((t) => { e(Object(a.showError)(o.RECEIVE_CLIENT_PROTOCOLS_ERROR, t.toString(), t.response)), e(z()); }) ); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return l; }), i.d(t, "sitemasterRunningSelector", function () { return c; }), i.d(t, "isResiSelector", function () { return d; }); var n = i(203), r = i(46); function a(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function o(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? a(Object(i), !0).forEach(function (t) { s(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : a(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function s(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const _ = { entities: {}, running: !0 }; function l(e = _, { type: t, payload: i }) { switch (t) { case n.b: return o(o({}, e), {}, { entities: o({}, i) }); case n.a: return o(o({}, e), {}, { entities: {} }); case n.d: return o(o({}, e), {}, { running: i.running }); default: return e; } } const c = ({ modbus: e }) => e.running, d = ({ configuration: e }) => Object(r.isResiGateway)(e.deviceType); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetCustomerInformation", function () { return E; }), i.d(t, "getCustomerInformation", function () { return S; }), i.d(t, "registerCustomerInformation", function () { return R; }), i.d(t, "saveLegalInformation", function () { return T; }), i.d(t, "getRegistration", function () { return A; }); var n = i(2), r = i(7), a = i(127), o = i(5), s = i.n(o), _ = i(6), l = i(4), c = i(15), d = i(128); function u(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function m(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? u(Object(i), !0).forEach(function (t) { p(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : u(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function p(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const g = Object(_.b)(n.REQUEST_CUSTOMER_INFORMATION_CONFIG); const w = Object(_.b)(n.RECEIVE_CUSTOMER_INFORMATION_CONFIG_ERROR), v = Object(_.b)(n.REQUEST_SAVE_LEGAL_INFORMATION); const f = Object(_.b)(n.RECEIVE_SAVE_LEGAL_INFORMATION_ERROR), h = Object(_.b)(n.REQUEST_REGISTER_CUSTOMER_INFORMATION); const E = Object(_.b)(n.RESET_CUSTOMER_INFORMATION), b = Object(_.b)(n.REQUEST_REGISTRATION); const y = Object(_.b)(n.RECEIVE_REGISTRATION_ERROR); function S() { return (e) => ( e(g()), fetch(s.a.api.uri + "/customer", { method: "GET", credentials: s.a.credentials }) .then(l.parseText) .then(l.parseResponseText) .then(l.checkResponseStatus) .then((t) => { e( (function (e) { return m({ type: n.RECEIVE_CUSTOMER_INFORMATION_CONFIG_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(w(t)); }) ); } function R({ given_name: e, family_name: t, email: i, phone: o, street: _, city: u, state: p, zip: g, country: w }) { return async (v) => { v(h()), v(Object(r.clearError)(n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR)); const f = { given_name: e, family_name: t, email: i, phone: o, street: _, city: u, state: p, zip: g, country: w }; try { await Object(c.e)( 75e3, new Error("Request timed out"), fetch(s.a.api.uri + "/customer", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(f) }) .then(l.parseJSON) .then(l.checkResponseStatus) .then( (e) => ( Object(d.a)(a.a), v( (function (e) { return m({ type: n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_SUCCESS, receivedAt: Date.now() }, e); })(e) ), null ) ) ); } catch (e) { return ( v(Object(r.showError)(n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR, e.toString(), e.response)), v( (function (e, t) { return m({ type: n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR, error: e }, t); })(e, f) ), e ); } }; } function T({ marketing: e, privacyNotice: t, limitedWarranty: i, gridServices: a, consent: o }) { return (_) => { _(v()), _(Object(r.clearError)(n.RECEIVE_SAVE_LEGAL_INFORMATION_ERROR)); let c = { marketing: e, privacy_notice: t, limited_warranty: i, grid_services: a }; return fetch(s.a.api.uri + "/customer/registration/legal", { method: "POST", credentials: s.a.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify(c) }) .then(l.parseJSON) .then(l.checkResponseStatus) .then((e) => { _( (function (e) { return m({ type: n.RECEIVE_SAVE_LEGAL_INFORMATION_SUCCESS, receivedAt: Date.now() }, e); })(m(m({}, e), {}, { consent: o })) ); }) .catch((e) => { _(Object(r.showError)(n.RECEIVE_SAVE_LEGAL_INFORMATION_ERROR, e.toString(), e.response)), _(f(e)); }); }; } function A() { return (e) => ( e(b()), fetch(s.a.api.uri + "/customer/registration", { credentials: s.a.credentials }) .then(l.checkStatus) .then(l.parseJSON) .then((t) => { e( (function (e) { return m({ type: n.RECEIVE_REGISTRATION_SUCCESS, receivedAt: Date.now() }, e); })(t) ); }) .catch((t) => { e(y(t)); }) ); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return _; }), i.d(t, "sitemasterStatusSelector", function () { return l; }); var n = i(200); function r(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function a(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? r(Object(i), !0).forEach(function (t) { o(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function o(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { running: !0 }; function _(e = s, { type: t, payload: i }) { switch (t) { case n.a: return a(a({}, e), {}, { running: i.running }); default: return e; } } const l = ({ meterValidation: e }) => e.running; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const s = a(i(1)), _ = i(3), l = o(i(579)), c = o(i(153)), d = o(i(585)), u = o(i(271)), m = o(i(653)), p = o(i(654)), g = o(i(273)), w = i(50); i(655); class v extends s.Component { constructor() { super(...arguments), (this.state = { passwordInput: "", showPassword: !1 }); } getPassword() { return this.state.passwordInput; } setPassword(e) { this.setState({ passwordInput: e }); } render() { var e, t; let i = null !== (e = this.props.className) && void 0 !== e ? e : "password-input", n = null !== (t = this.props.formClassName) && void 0 !== t ? t : "form-horizontal"; const { customLabel: r, formError: a, showForm: o } = this.props; let l = s.createElement( "div", { className: "form-group form-password " + (a ? "has-error" : ""), key: "fp" }, s.createElement( "label", { className: "col-sm-2 control-label" }, r ? s.createElement("span", null, r) : s.createElement("span", null, s.createElement(_.FormattedMessage, { id: "password_input_view_password", defaultMessage: "PASSWORD" })) ), s.createElement("div", { className: "col-sm-10" }, this._getShowPasswordIcon(), this._getPasswordInput()), a ? s.createElement("span", { className: "help-block col-sm-10" }, s.createElement("img", { className: "warning", src: g.default, alt: "Warning" }), a) : null ); return o ? s.createElement( "div", { className: i }, s.createElement("form", { role: "form", className: n, onSubmit: this._handlePasswordSubmit.bind(this) }, l, this._getShowPasswordButton(), s.createElement("button", { type: "submit" })) ) : s.createElement("div", { className: i }, l, this._getShowPasswordButton()); } _getShowPasswordIcon() { if (!this.props.useShowPasswordIcon) return null; const { showPassword: e } = this.state, { showSubmittable: t } = this.props; return s.createElement("img", { src: e ? m.default : p.default, className: (0, w.classNames)("eye-icon py-3 pl-5 pr-4", { "eye-icon-submittable": t }), onClick: this._handleShowPasswordChange.bind(this), alt: "" + (e ? "Show password" : "Hide password"), }); } _getShowPasswordButton() { return this.props.useShowPasswordIcon ? null : s.createElement( "div", { className: "checkbox", key: "cb" }, s.createElement( "label", null, s.createElement("input", { type: "checkbox", onChange: this._handleShowPasswordChange.bind(this), defaultChecked: this.state.showPassword }), s.createElement("span", null, s.createElement(_.FormattedMessage, { id: "password_input_view_show_password", defaultMessage: "Show Password" })) ) ); } _getPasswordInput() { var e; let t = this.state.passwordInput; const { showSubmittable: i, useShowPasswordIcon: n, isValidating: r, inputProps: a } = this.props; let o = Object.assign( Object.assign( { type: this.state.showPassword ? "text" : "password", name: "input-password", autoCapitalize: "none", autoComplete: "current-password", autoCorrect: "off", value: t, onChange: this._handlePasswordChange.bind(this), required: !0, }, a ), { className: (0, w.classNames)(null !== (e = null == a ? void 0 : a.className) && void 0 !== e ? e : "form-control", { "password-field-with-icon": !!n }) } ); if (!i) return s.createElement("input", Object.assign({}, o)); let _ = "input-group-default", m = c.default, p = ""; return ( t.length && ((_ = "input-group-action"), (m = d.default)), r && ((_ = "disabled " + (n ? "input-group-validation" : "input-group-default")), (m = u.default), (p = "spinner")), s.createElement(l.default, { inputProps: o, inputAddonProps: { className: "input-group-addon relative " + _, onClick: this._handlePasswordSubmit.bind(this) }, inputAddonView: s.createElement("img", { className: p, src: m, alt: "Password Submit" }), }) ); } _handlePasswordChange(e) { let t = e.target.value; t ? this.props.enableForward && this.props.enableForward(t) : this.props.disableForward && this.props.disableForward(), this.setState({ passwordInput: t }); } _handleShowPasswordChange() { let e = !this.state.showPassword; this.setState({ showPassword: e }), this.props.onShowPasswordChange && this.props.onShowPasswordChange(e); } _handlePasswordSubmit(e) { e.preventDefault(), this.state.passwordInput && this.props.handleSubmit && this.props.handleSubmit(); } } t.default = v; }, , function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.LoadingSpinner = void 0); const s = a(i(1)), _ = o(i(583)); t.LoadingSpinner = (e) => s.createElement("img", { className: e.className, src: _.default }); }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "resetTests", function () { return h; }), i.d(t, "cancelTest", function () { return E; }), i.d(t, "fetchTestResults", function () { return b; }), i.d(t, "runInverterTest", function () { return y; }), i.d(t, "fetchAlerts", function () { return S; }); var n = i(2), r = i(14), a = i(7), o = i(22), s = i(5), _ = i.n(s), l = i(6), c = i(4); function d(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function u(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const m = Object(l.b)(n.REQUEST_TEST_RESULTS); function p(e) { return (function (e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? d(Object(i), !0).forEach(function (t) { u(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : d(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; })({ type: n.RECEIVE_TEST_RESULTS, receivedAt: Date.now() }, e); } const g = Object(l.b)(n.REQUEST_RUN_INVERTER_TEST); const w = Object(l.b)(n.REQUEST_CANCEL_TEST); const v = Object(l.b)(n.REQUEST_TEST_ALERTS); const f = Object(l.b)(n.RECEIVE_TEST_ALERTS_ERROR), h = Object(l.b)(n.RESET_TESTS); function E() { return (e) => ( e(w()), e(Object(a.clearErrors)()), fetch(_.a.api.uri + "/system/testing", { method: "DELETE", credentials: _.a.credentials }) .then(c.parseText) .then(c.parseResponseText) .then(c.checkResponseStatus) .then(() => { e({ type: n.RECEIVE_CANCEL_TEST_SUCCESS, receivedAt: Date.now() }); }) .catch((t) => { e(Object(a.showError)(n.RECEIVE_CANCEL_TEST_ERROR, t.toString(), t.response)); }) ); } function b() { return (e) => ( e(m()), e(Object(a.clearErrors)()), fetch(_.a.api.uri + "/system/testing", { credentials: _.a.credentials }) .then(c.parseText) .then(c.parseResponseText) .then(c.checkResponseStatus) .then((t) => { e(p(t)); }) .catch((t) => { e( (function (e) { let t = e.getContext(); return { type: n.RECEIVE_TEST_RESULTS_ERROR, errors: null != t ? t.error : null }; })(new r.default(n.RECEIVE_TEST_RESULTS_ERROR, t.toString(), t.response)) ); }) ); } function y() { return (e) => ( e(g()), e(Object(a.clearErrors)()), fetch(_.a.api.uri + "/system/testing/PINV_TEST", { method: "POST", credentials: _.a.credentials }) .then(c.parseText) .then(c.parseResponseText) .then(c.checkResponseStatus) .then(() => { e({ type: n.RECEIVE_RUN_INVERTER_TEST_SUCCESS, receivedAt: Date.now(), running: !0, status: o.o.INIT }); }) .catch((t) => { e(Object(a.showError)(n.RECEIVE_RUN_INVERTER_TEST_ERROR, t.toString(), t.response)), e( (function (e) { let t = e.getContext(); return { type: n.RECEIVE_RUN_INVERTER_TEST_ERROR, errors: null != t ? t.error : null }; })(new r.default(n.RECEIVE_RUN_INVERTER_TEST_ERROR, t.toString(), t.response)) ); }) ); } function S() { return (e) => ( e(v()), fetch(_.a.api.uri + "/system_status/grid_faults", { credentials: _.a.credentials }) .then(c.checkStatus) .then(c.parseJSON) .then((t) => { e( (function (e) { return { type: n.RECEIVE_TEST_ALERTS_SUCCESS, receivedAt: Date.now(), alerts: e }; })(t) ); }) .catch((t) => { e(f(new r.default(n.RECEIVE_TEST_ALERTS_ERROR, t.toString(), t.response))); }) ); } }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return l; }), i.d(t, "hasSolarPowerwallSelector", function () { return d; }); var n = i(13), r = i(92); function a(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function o(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? a(Object(i), !0).forEach(function (t) { s(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : a(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function s(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const _ = { isChecking: !1, isFetching: !1, isEnumerating: !1, isUpdating: !1, isDetectingGrid: !1, isDetectingPhase: !1, isSettingPhase: !1, didInvalidate: !1, gridQualifying: !1, gridCodeValidating: !1, detectedOnGrid: null, soe: null, hasBackupDisconnect: !1, hasSync: !1, syncStatus: null, items: [], lineStatuses: [], lineVoltages: [0, 0, 0], phaseDetectionNotAvailable: !1, pviSubPackageNumbers: null, }; function l(e = _, t) { switch (t.type) { case "REQUEST_POWERWALLS_UPDATE": return o(o({}, e), {}, { isUpdating: !0, didInvalidate: !1 }); case "REQUEST_POWERWALLS_STATUS": return o(o({}, e), {}, { isChecking: !0 }); case "REQUEST_START_PHASE_DETECTION": return o(o({}, e), {}, { isDetectingPhase: !0, didInvalidate: !1 }); case "REQUEST_SAVE_PHASE_USAGES": return o(o({}, e), {}, { isSettingPhase: !0 }); case "REQUEST_POWERWALLS": return o(o({}, e), {}, { isFetching: !0 }); case "SCAN_POWERWALLS": return o(o({}, e), {}, { isEnumerating: !0, isFetching: !0, didInvalidate: !1 }); case "RECEIVE_POWERWALLS": return o( o({}, e), {}, { isEnumerating: !1, isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, hasBackupDisconnect: !!t.sync || !!t.msa, hasSync: !!t.sync, syncStatus: t.sync_status, isUpdating: t.updating, isDetectingGrid: t.checking_if_offgrid, detectedOnGrid: t.is_on_grid, isDetectingPhase: t.running_phase_detection, gridQualifying: t.grid_qualifying, gridCodeValidating: t.grid_code_validating, phaseDetectionNotAvailable: t.phase_detection_not_available, msa: t.msa ? { partNumber: t.msa.PackagePartNumber || "", serialNumber: t.msa.PackageSerialNumber || "" } : null, items: t.powerwalls ? t.powerwalls.map((e) => ({ partNumber: e.PackagePartNumber || "", serialNumber: e.PackageSerialNumber || "", type: e.type, status: e.status, line: c(e.phase), gridState: e.grid_state, gridReconnectDurationSeconds: null != e.grid_reconnection_time_seconds ? Math.round(e.grid_reconnection_time_seconds) : e.grid_reconnection_time_seconds, })) : [], } ); case "RECEIVE_POWERWALLS_STATUS_SUCCESS": return o( o({}, e), {}, { isChecking: !1, isEnumerating: t.enumerating, isUpdating: t.updating, isDetectingGrid: t.checking_if_offgrid, detectedOnGrid: t.is_on_grid, isDetectingPhase: t.running_phase_detection, gridQualifying: t.grid_qualifying, gridCodeValidating: t.grid_code_validating, phaseDetectionNotAvailable: t.phase_detection_not_available, } ); case "RECEIVE_FETCH_PHASE_INFORMATION_SUCCESS": return o(o({}, e), {}, { didInvalidate: !1, lineStatuses: t.lineStatuses, lineVoltages: t.lineVoltages }); case "RECEIVE_SAVE_PHASE_USAGES_SUCCESS": return o(o({}, e), {}, { lineStatuses: t.lineStatuses, lineVoltages: t.lineVoltages, isSettingPhase: !1 }); case "RECEIVE_SOE_SUCCESS": return o(o({}, e), {}, { soe: t.percentage }); case "RECEIVE_START_PHASE_DETECTION_SUCCESS": return o({}, e); case "RECEIVE_POWERWALLS_STATUS_ERROR": return o(o({}, e), {}, { isChecking: !1 }); case "RECEIVE_POWERWALLS_ERROR": return o(o({}, e), {}, { isEnumerating: !1, isFetching: !1, didInvalidate: !0 }); case "RECEIVE_POWERWALLS_UPDATE_ERROR": return o(o({}, e), {}, { isUpdating: !1, didInvalidate: !0 }); case "RECEIVE_START_PHASE_DETECTION_ERROR": return o(o({}, e), {}, { isDetectingPhase: !1, didInvalidate: !0 }); case "RECEIVE_SAVE_PHASE_USAGES_ERROR": return o(o({}, e), {}, { isSettingPhase: !1 }); case "RECEIVE_FETCH_PHASE_INFORMATION_ERROR": return o(o({}, e), {}, { didInvalidate: !0, lineStatuses: [], lineVoltages: [0, 0, 0] }); case "RECEIVE_POWERWALLS_PVI_SUB_PACKAGE_NUMBERS": return o(o({}, e), {}, { pviSubPackageNumbers: t.pvi_sub_package_numbers }); case "RESET_ALL": case "RESET_POWERWALL_CONFIG": return _; default: return e; } } function c(e) { switch (e) { case n.i.PHASE_1: case n.h[n.i.PHASE_1]: return 0; case n.i.PHASE_2: case n.h[n.i.PHASE_2]: return 1; case n.i.PHASE_3: case n.h[n.i.PHASE_3]: return 2; default: return 0; } } function d({ powerwall: e }) { return e.items.some((e) => e.type === r.a.SolarPowerwall); } }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3); t.default = () => r.default.createElement( "div", { className: "not-found" }, r.default.createElement(a.FormattedMessage, { tagName: "h3", id: "not_found_title", defaultMessage: "404 page not found" }), r.default.createElement(a.FormattedMessage, { tagName: "p", id: "not_found_description", defaultMessage: "We are sorry but the page you are looking for does not exist." }) ); }, , , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return d; }), i.d(t, "errorSelector", function () { return u; }); var n = i(27), r = i(2), a = i(14), o = i(29); function s(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function _(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? s(Object(i), !0).forEach(function (t) { l(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : s(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function l(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const c = { items: [] }; function d(e = c, t) { switch (t.type) { case r.SHOW_ERROR: return _(_({}, e), {}, { items: Object(n.uniqBy)([...e.items, new a.default(t.name, t.message, t.context, t.logError)], (e) => e.getName() + " - " + e.getMessage()) }); case r.CLEAR_ERROR: return _(_({}, e), {}, { items: e.items.filter((e) => (t.context ? !(e.getName() === t.name && Object(n.isEqual)(t.context, e.getContext())) : e.getName() !== t.name)) }); case r.CLEAR_ERRORS: return _(_({}, e), {}, { items: [] }); case r.RECEIVE_LOGIN_SUCCESS: return _(_({}, e), {}, { items: e.items.filter((e) => !Object(o.o)(e)) }); case r.RESET_ALL: case r.RESET_ERROR_CONFIG: return c; default: return e; } } const u = ({ error: e }) => e; }, , , , , , , function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAAXNSR0IArs4c6QAAAZVJREFUOBGtlbtKA0EYhbPipQkIipjWYCHCNhZCGi2ExTJvYCPY5hUE38AXsLFJ5QMY0U5r8YZRLNJqZWO1fmeZ2Uz0342XDRz+f845c3ZnmNlEtYJfmqYxUhtsgWVQB++gD3rgJIqia+r4H2FNcAzuwD5ogQaYdlVj8dLla5amYkjAM+iAmTKzdOeTPzG9EsAjWDcNBaT8bt5oMKSWrCf+KtA/R/Pc/OFWQGhvOt5kVfQ5i/ec5isnG9PEQJv+bQ/hpsABuHF4oe74oLDCa4+VE08i6Nh0OR4focn1G1Txa9KZsEJ/Qb1ifO88WXF6l0G7hkGmVmgo6/Fegm3LoxxwrtABaFimkMMzC/aAtmA+1HwPr/M8mIDQTXnzglUxbsLfglWQsNRXywennPqP3pRQHZnDgqCcxpO/6RPsUq7YzQP0kS2NsMrpa/mnwNz4wL5IvxCMi1rl9LT8wnPqZ+LZBWd+bFX0/JxmOsTYG2UFhRwZwxslAaL6u++Cq/1K+WXwxtV+T4Pgf3/5Ix/2tfLWf/6P+gSsbLdeCWlBGQAAAABJRU5ErkJggg=="; }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) {}, , , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.SiteControllerLocation = void 0); const r = n(i(1)), a = i(138), o = i(3), s = n(i(748)), _ = n(i(263)), l = i(48), c = n(i(750)), d = n(i(447)), u = n(i(752)), m = n(i(753)), p = n(i(754)); var g; !(function (e) { (e.Gateway = "Gateway"), (e.SolarPowerwall = "SolarPowerwall"); })((g = t.SiteControllerLocation || (t.SiteControllerLocation = {}))), (t.default = function (e) { const t = e.root, i = `${t.partNumber()}--${t.serialNumber()}`; let n = !1, w = !1, v = 0, f = t.vitals().getString("STSTSM-Location"); t.followers.length > 0 ? (n = !0) : t.leader && (w = !0); let h = !1, E = !1; for (const e of t.children) { const t = e.type(); t === a.DeviceType.SYNC ? (E = !0) : t === a.DeviceType.MSA && (h = !0); } let b = t.children.map((i) => { const o = i.din(); switch (i.type()) { case a.DeviceType.SPW: let _ = v; return v++, r.default.createElement(p.default, { device: i, key: o, leader: n, follower: w, index: _, sitemanagerRunning: e.sitemanagerRunning }); case a.DeviceType.ACPW: return r.default.createElement(m.default, { device: i, key: o }); case a.DeviceType.MSA: return r.default.createElement(c.default, { device: i, key: o }); case a.DeviceType.SYNC: return h ? r.default.createElement(s.default, { device: i, key: o, overrideSerialNumber: f === g.Gateway ? t.serialNumber() : void 0 }) : r.default.createElement(c.default, { device: i, key: o, overrideSerialNumber: f === g.Gateway ? t.serialNumber() : void 0 }); case a.DeviceType.NEURIO: return r.default.createElement(u.default, { device: i, key: o }); } }), y = []; for (let e in l.InstallationProblems) t.vitals().getBoolean("STSTSM-" + e) && y.push(r.default.createElement(_.default, { key: e, problem: e, location: f, hasMSA: h, hasSYNC: E, hasSolarPowerwall: v > 0 })); return ( (b = b.filter((e) => !!e)), r.default.createElement( "div", { className: "system-sitecontroller" }, f === g.Gateway && r.default.createElement(o.FormattedMessage, { id: "system_gateway_din", defaultMessage: "Gateway: {din}", values: { din: r.default.createElement("b", null, i) } }), f === g.SolarPowerwall && r.default.createElement(o.FormattedMessage, { id: "system_controller_din", defaultMessage: "Controller: {din}", values: { din: r.default.createElement("b", null, i) } }), y, b, 0 === b.length && r.default.createElement(d.default, { din: i }, r.default.createElement(o.FormattedMessage, { id: "system-device-unknown-sitecontroller", defaultMessage: "Device has not yet discovered its children" })) ) ); }); }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(62); t.default = function ({ din: e, children: t }) { return r.default.createElement( "div", { className: "system-sitecontroller missing" }, r.default.createElement(a.DeviceView, { doNotCollapse: !0 }, r.default.createElement(a.DeviceHeader, null, e), r.default.createElement(a.DeviceBody, null, t)) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(155), o = i(3), s = i(62), _ = (0, o.defineMessages)({ PINV_ACStageFault: { id: "vitals_powerwall_state_ac_fault", defaultMessage: "AC Stage Fault" }, PINV_DCStageFault: { id: "vitals_powerwall_state_dc_fault", defaultMessage: "DC Stage Fault" }, PINV_GridForming: { id: "vitals_powerwall_state_grid_forming", defaultMessage: "Grid Forming" }, PINV_GridFollowing: { id: "vitals_powerwall_state_grid_following", defaultMessage: "Grid Following" }, PINV_SupportDC: { id: "vitals_powerwall_state_support_dc", defaultMessage: "Support DC" }, PINV_Standby: { id: "vitals_powerwall_state_standby", defaultMessage: "Standby" }, PINV_Init: { id: "vitals_powerwall_state_init", defaultMessage: "Initializing" }, PINV_Off: { id: "vitals_powerwall_state_off", defaultMessage: "Off" }, }); t.default = function (e) { const t = e.device.vitals(); let i, n = t.getString("PINV_State"), l = n && _[n], c = l ? r.default.createElement(o.FormattedMessage, Object.assign({}, l)) : s.MissingValue, d = t.getNumber("POD_nom_energy_remaining"), u = t.getNumber("POD_nom_full_pack_energy"); void 0 !== d && void 0 !== u && (i = (100 * d) / u); let m = t.getNumber("PINV_Vout"), p = t.getNumber("PINV_Pout"); return ( p && (p *= 1e3), r.default.createElement( r.default.Fragment, null, r.default.createElement("p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_state", defaultMessage: "Powerwall State: {state}", values: { state: c } })), r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_charge", defaultMessage: "Charge Level: {charge}%", values: { charge: r.default.createElement(s.Vital, { value: i }) } }) ), r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_voltage", defaultMessage: "AC Voltage: {voltage}", values: { voltage: r.default.createElement(a.Volts, { value: r.default.createElement(s.Vital, { value: m }) }) }, }) ), !p && r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_power", defaultMessage: "AC Power: {power}", values: { power: r.default.createElement(a.Watts, { value: r.default.createElement(s.Vital, { value: p }) }) }, }) ), void 0 !== p && p > 0 && r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_power_discharging", defaultMessage: "AC Power: {power} Discharging", values: { power: r.default.createElement(a.Watts, { value: r.default.createElement(s.Vital, { value: p }) }) }, }) ), void 0 !== p && p < 0 && r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(o.FormattedMessage, { id: "system_acpw_vitals_power_charging", defaultMessage: "AC Power: {power} Charging", values: { power: r.default.createElement(a.Watts, { value: r.default.createElement(s.Vital, { value: -p }) }) }, }) ) ) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.powerStatusMessages = t.PowerStatus = void 0); const s = a(i(1)), _ = i(3), l = i(50), c = o(i(5)), d = i(264); var u; !(function (e) { (e.UNSET = "unset"), (e.ON = "on"), (e.OFF = "off"), (e.DC_ONLY = "dc_only"); })((u = t.PowerStatus || (t.PowerStatus = {}))), (t.powerStatusMessages = (0, _.defineMessages)({ [u.OFF]: { id: "pvi-power-status-disabled", description: "Label for button that sets the PV Inverter's power status to off (i.e. disconnect from DC strings and do not push power on AC).", defaultMessage: "Disabled" }, [u.DC_ONLY]: { id: "pvi-power-status-dc-only", description: "Label for button that sets the PV Inverter's power status to DC connected (i.e. connect on DC but do not push power on AC).", defaultMessage: "DC Only" }, [u.ON]: { id: "pvi-power-status-enabled", description: "Label for button that sets the PV Inverter's power status to A/C producing (i.e. connect on DC and push power on AC).", defaultMessage: "Enabled" }, })), (t.default = function ({ device: e, powerwallId: i, follower: n, sitemanagerRunning: r }) { let a = !r; i.startsWith("STSTSM--") && (i = i.substring(8)); let [o, m] = (0, s.useState)(u.UNSET), [p, g] = (0, s.useState)(0); function w(t) { var r; if (t === o) return; let a = null === (r = e.parent) || void 0 === r ? void 0 : r.din(); (null == a ? void 0 : a.startsWith("TETHC--")) && (a = a.substring(7)); const s = c.default.api.uri + "/powerwalls/pvi_power_status", _ = { pvi_power_status: t, battery_din: a, follower_din: n ? i : "" }; fetch(s, { method: "POST", credentials: c.default.credentials, body: JSON.stringify(_) }), m(t), g(Date.now()); } (0, s.useEffect)(() => { const t = d.VITALS_FETCH_INTERVAL + 1e3; let i = e.vitals().getString("PVI-PowerStatusSetpoint"); i === u.UNSET ? (i = u.ON) : i || (i = u.UNSET), i !== o && (o === u.UNSET || Date.now() - p > t) && m(i); }, [e]); let v = { className: (0, l.classNames)("inverter-power-button-left", { "inverter-power-button-selected": o === u.OFF }), onClick: () => w(u.OFF), disabled: a }, f = { className: (0, l.classNames)("inverter-power-button-center", { "inverter-power-button-selected": o === u.DC_ONLY }), onClick: () => w(u.DC_ONLY), disabled: a }, h = { className: (0, l.classNames)("inverter-power-button-right", { "inverter-power-button-selected": o === u.ON }), onClick: () => w(u.ON), disabled: a }; return s.default.createElement( "div", { className: "inverter-power-buttons" }, s.default.createElement("button", Object.assign({}, v), s.default.createElement(_.FormattedMessage, Object.assign({}, t.powerStatusMessages[u.OFF]))), s.default.createElement("button", Object.assign({}, f), s.default.createElement(_.FormattedMessage, Object.assign({}, t.powerStatusMessages[u.DC_ONLY]))), s.default.createElement("button", Object.assign({}, h), s.default.createElement(_.FormattedMessage, Object.assign({}, t.powerStatusMessages[u.ON]))) ); }); }, , , , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.BytesValue = t.StringValue = t.BoolValue = t.UInt32Value = t.Int32Value = t.UInt64Value = t.Int64Value = t.FloatValue = t.DoubleValue = void 0); const n = i(40), r = { value: 0 }, a = { value: 0 }, o = { value: 0 }, s = { value: 0 }, _ = { value: 0 }, l = { value: 0 }, c = { value: !1 }, d = { value: "" }, u = {}; function m(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } (t.DoubleValue = { encode: (e, t = n.Writer.create()) => (t.uint32(9).double(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, r); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.value = i.double(); break; default: i.skipType(7 & e); } } return o; }, }), (t.FloatValue = { encode: (e, t = n.Writer.create()) => (t.uint32(13).float(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, a); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.value = i.float(); break; default: i.skipType(7 & e); } } return o; }, }), (t.Int64Value = { encode: (e, t = n.Writer.create()) => (t.uint32(8).int64(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, o); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = m(i.int64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.UInt64Value = { encode: (e, t = n.Writer.create()) => (t.uint32(8).uint64(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, s); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = m(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.Int32Value = { encode: (e, t = n.Writer.create()) => (t.uint32(8).int32(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, _); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.int32(); break; default: i.skipType(7 & e); } } return a; }, }), (t.UInt32Value = { encode: (e, t = n.Writer.create()) => (t.uint32(8).uint32(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, l); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.uint32(); break; default: i.skipType(7 & e); } } return a; }, }), (t.BoolValue = { encode: (e, t = n.Writer.create()) => (t.uint32(8).bool(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, c); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.bool(); break; default: i.skipType(7 & e); } } return a; }, }), (t.StringValue = { encode: (e, t = n.Writer.create()) => (t.uint32(10).string(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, d); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.BytesValue = { encode: (e, t = n.Writer.create()) => (t.uint32(10).bytes(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let r = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, u); for (; i.pos < r; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.value = i.bytes(); break; default: i.skipType(7 & e); } } return a; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.EnergySiteNetAPIGetConfigResponse = t.EnergySiteNetAPIGetConfigRequest = t.EnergySiteNetAPIRemoveDeviceResponse = t.EnergySiteNetAPIRemoveDeviceRequest = t.EnergySiteNetAPIAddDeviceResponse = t.EnergySiteNetAPIAddDeviceRequest = t.EnergySiteNetConfig = t.EnergySiteNetUnpairedDevice = t.EnergySiteNetRecentlyRemovedDevice = t.EnergySiteNetRecentlyAddedDevice = t.EnergySiteNetDevice = t.EnergySiteNetRemovalStatus = t.EnergySiteNetAdditionStatus = void 0); const n = i(175), r = i(40), a = {}, o = { status: 0 }, s = { status: 0 }, _ = {}, l = {}, c = {}, d = {}, u = {}, m = {}, p = {}, g = {}; !(function (e) { (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_INVALID = 0)] = "ENERGY_SITE_NET_ADDITION_STATUS_INVALID"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_IN_PROGRESS = 1)] = "ENERGY_SITE_NET_ADDITION_STATUS_IN_PROGRESS"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_ADDED = 2)] = "ENERGY_SITE_NET_ADDITION_STATUS_ADDED"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_FOUND = 3)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_FOUND"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CANNOT_JOIN = 4)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CANNOT_JOIN"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NO_RESPONSE = 5)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NO_RESPONSE"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_BAD_RESPONSE = 6)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_BAD_RESPONSE"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_INTERNAL_ERROR = 7)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_INTERNAL_ERROR"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CHANGES_PROHIBITED = 8)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CHANGES_PROHIBITED"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_MAX_DEVICES = 9)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_MAX_DEVICES"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_LEADER = 10)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_LEADER"), (e[(e.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_EXISTS = 11)] = "ENERGY_SITE_NET_ADDITION_STATUS_FAILED_EXISTS"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.EnergySiteNetAdditionStatus || (t.EnergySiteNetAdditionStatus = {})), (function (e) { (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_INVALID = 0)] = "ENERGY_SITE_NET_REMOVAL_STATUS_INVALID"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_IN_PROGRESS = 1)] = "ENERGY_SITE_NET_REMOVAL_STATUS_IN_PROGRESS"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_REMOVED = 2)] = "ENERGY_SITE_NET_REMOVAL_STATUS_REMOVED"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_NO_SUCH_DEVICE = 3)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_NO_SUCH_DEVICE"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_INTERNAL_ERROR = 4)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_INTERNAL_ERROR"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_CHANGES_PROHIBITED = 5)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_CHANGES_PROHIBITED"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_AM_LEADER = 6)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_AM_LEADER"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_AM_SOLO = 7)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_AM_SOLO"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_NOT_LEADER = 8)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_NOT_LEADER"), (e[(e.ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_LEADER_AVAILABLE = 9)] = "ENERGY_SITE_NET_REMOVAL_STATUS_FAILED_LEADER_AVAILABLE"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.EnergySiteNetRemovalStatus || (t.EnergySiteNetRemovalStatus = {})), (t.EnergySiteNetDevice = { encode: (e, t = r.Writer.create()) => ( void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), void 0 !== e.wifiApConfig && void 0 !== e.wifiApConfig && n.WifiConfig.encode(e.wifiApConfig, t.uint32(18).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, a); for (; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.din = n.Din.decode(i, i.uint32()); break; case 2: s.wifiApConfig = n.WifiConfig.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return s; }, }), (t.EnergySiteNetRecentlyAddedDevice = { encode: (e, t = r.Writer.create()) => (void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), t.uint32(16).int32(e.status), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, o); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.din = n.Din.decode(i, i.uint32()); break; case 2: s.status = i.int32(); break; default: i.skipType(7 & e); } } return s; }, }), (t.EnergySiteNetRecentlyRemovedDevice = { encode: (e, t = r.Writer.create()) => (void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), t.uint32(16).int32(e.status), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, s); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.din = n.Din.decode(i, i.uint32()); break; case 2: o.status = i.int32(); break; default: i.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetUnpairedDevice = { encode: (e, t = r.Writer.create()) => (void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, _); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.din = n.Din.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetConfig = { encode(e, i = r.Writer.create()) { for (const n of e.devices) t.EnergySiteNetDevice.encode(n, i.uint32(10).fork()).ldelim(); void 0 !== e.recentlyAdded && void 0 !== e.recentlyAdded && t.EnergySiteNetRecentlyAddedDevice.encode(e.recentlyAdded, i.uint32(18).fork()).ldelim(), void 0 !== e.recentlyRemoved && void 0 !== e.recentlyRemoved && t.EnergySiteNetRecentlyRemovedDevice.encode(e.recentlyRemoved, i.uint32(26).fork()).ldelim(); for (const n of e.unpairedDevices) t.EnergySiteNetUnpairedDevice.encode(n, i.uint32(34).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, l); for (o.devices = [], o.unpairedDevices = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.devices.push(t.EnergySiteNetDevice.decode(n, n.uint32())); break; case 2: o.recentlyAdded = t.EnergySiteNetRecentlyAddedDevice.decode(n, n.uint32()); break; case 3: o.recentlyRemoved = t.EnergySiteNetRecentlyRemovedDevice.decode(n, n.uint32()); break; case 4: o.unpairedDevices.push(t.EnergySiteNetUnpairedDevice.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIAddDeviceRequest = { encode: (e, i = r.Writer.create()) => (void 0 !== e.device && void 0 !== e.device && t.EnergySiteNetDevice.encode(e.device, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, c); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.device = t.EnergySiteNetDevice.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIAddDeviceResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.recentlyAdded && void 0 !== e.recentlyAdded && t.EnergySiteNetRecentlyAddedDevice.encode(e.recentlyAdded, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, d); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.recentlyAdded = t.EnergySiteNetRecentlyAddedDevice.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIRemoveDeviceRequest = { encode: (e, t = r.Writer.create()) => (void 0 !== e.din && void 0 !== e.din && n.Din.encode(e.din, t.uint32(10).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, u); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.din = n.Din.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIRemoveDeviceResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.recentlyRemoved && void 0 !== e.recentlyRemoved && t.EnergySiteNetRecentlyRemovedDevice.encode(e.recentlyRemoved, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, m); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.recentlyRemoved = t.EnergySiteNetRecentlyRemovedDevice.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.EnergySiteNetAPIGetConfigRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, p); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.EnergySiteNetAPIGetConfigResponse = { encode: (e, i = r.Writer.create()) => (void 0 !== e.config && void 0 !== e.config && t.EnergySiteNetConfig.encode(e.config, i.uint32(10).fork()).ldelim(), i), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, g); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.config = t.EnergySiteNetConfig.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }); }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.EnergyDeviceAPI = t.getTEDAPI = void 0); const r = i(777); Object.defineProperty(t, "EnergyDeviceAPI", { enumerable: !0, get: function () { return r.EnergyDeviceAPI; }, }); const a = n(i(5)); t.getTEDAPI = function (e) { let t, i = { din: e.din, host: a.default.api.host, credentials: a.default.credentials }; return (t = e.isEngineer ? (0, r.createHermesClient)(i) : (0, r.createLocalClient)(i)), (0, r.createEnergyDeviceAPIClient)(t); }; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF0AAABgCAYAAAB/lX6wAAAAAXNSR0IArs4c6QAAGG1JREFUeAHtnQu01VWdx8998DRBQBDQtEF0hhAne+AjVoKJs2TUmiasyZRaFU6ao46TykvFiwKCotGYj8xGx7KhrOVktkoUXJqY0kPFxMsI+UADeZlenvfe+Xz2/e/j/9wLl3Puufeeg7DX+t393vu3v/u3f/t5/jeT2Wc6HYGKTq+xwAqvuuqqytWrV1dt2LChYcGCBfVkz/JMXNZtsfgbU8U3jh8/vqpPnz6VgwcPrieuIRVXUmcO0yXlJFU5AFXirVy2bFkjQDfgl8/KrVu39u7WrdsRuIdCh0ADoe6NmIqKincaGhrWVlZWvkLYii1bttR27979r7jNbwdUDh8+vAK3HZfuHLyda8oN9IoEnAhKV+AYCpj/CJhjcX8I6pcnRGtJ9wfoV9DP161bt7Jfv37bzUtnVtiZOGM9BneaKRvQ09KNRPYGgVOgf0WIP44UV6cQEaiGRLq1lPLQjsQZRgVp0m3bTtxi6BY6byFxb0GOJkdBp6sdKy61UbqrVAEw0nPYsGFnYj8K/RA6ETyrAGsH7npsAdqBrYoQePE2PgJsmHExvWl1V5PuZAD/Mf5HGDmfqqur62Gd1k18zI+z402nVraT5qhjbXSmvr5+GKDMBRwlPAM4DbgFsBp3kG4BTuLqcaclPrajkqRE5aSrSMLstCrigqDhvh/3Zaia2s7W9ZFZ29KpBrBtvNQdyfscgF+PuzdgKM0CrgQLbgRNFfEO3pXYy7BrSfcyeTdjW877oIGED4WGk+Zw/D1xd8FtOy3XdKFsbMtdT/wFmzZt+mnv3r23w5OdbGd2qEnryg6tqFnhsbMPpOGXAfhFxNvY7YCgZCuxAqB5G/o9tIC4XwLMSwbuzpDuUDrkk6RTXY2EekEReJyhrr7Y9wD4Ndg3omo2dMYEGxsvE51lVCkV27dvf3+XLl1qqPRsAM6qEvxBV2NvhB4G6OtJvwR3NHGFU8H6PYd/1uONcZlJ4qzETps27e+rqqoupp5TCT8QitKuzg8qB/sW6qoh/186GvgcpmOrOtCOgB1MI2to5DnUhbNJEWOpTtS9z0KXX3311QvlBdDTGySlNQuo8TsxoWPdVKU3RoB/LODPIf1Iyhds54go/aobgZ9O2BrqtI7d1UOSwk2ngS5wro+HDh3alw3OFFi9kEba4Gh0v02j/wsdO2nevHmbI9i33XabK5C2AlAxceLE6jT4lHstdX+NMg8QeNxx2Snw17IJm+vGinQdouM7CnTLjSCFOmiAdlf07Lno8BuT+Ljss92v22Ck+zvEBaCKBJticg3gd4ngX3HFFRMA/CpSHIotb3a6kq/5CqPk7uTowfDYlhBZ7J9YSbHlhPxKZv/+/SvPPPPMytGjR2cWLVoUwt1lDhgwwGXhCQD+PdroZKkqCfVjvwpNmz59+h2WQd6q66+/XuluV7N06dIG+Xv++eczixcv/sOJJ564Gn4+QiVuxsLkDR92wOj999//IXheHdvQnowEKSyywKingzSgGrqxGuhGmdUM01A+6sRhegh0A/RJAN9G27rgVorWQFcD9i3YoSwmsrhyIaj9jR1rqdjuSL+EcwbkOY7Au4Ly+OF/ofOg1aSxbe0m7cVIupNVkGw2F5bj8utodOHnsCfC/HnV1dXnQhNwn0HYaTRmNLYmdAb+bbhvppzrDMOuuPnmm+2IDjVIbyOjqUIphpR4Jf1j8OPO1Q6Rv7+FnoWWkbbRtO1l2irpUSIbJk+ePLBr165K7/kwfFwejJE0TFxav16/fv2n58+fvw3APQpod5XSGj/UVw2FUYX9AGlPgdLS/kf8nyXu/7A17SLtBUs6DATp9pz69NNPH4FOvBWwL4FUHwIZl30yqNQGIl5/lHBXCSugSXPmzFnhBNcROpz6WjVIb4N1o+vrkeY/k/gTUF94jbiocp4dMWLEsnHjxjW0l7QH3dYqZ6lIAcdbOXDgwGpIlfEYDJ6ELdjb/CPDWGENjNvhKhkm4LETlOiHWKk8gl3higK7JCZZIanaHoOBX8Hn1oSRMOrwT+jVq9eA9mSuINBdZ7sL5Fz6n5DwH8PIfjAVwe4CuEqwALqbXI37ZQn3G0T9FTucAhL2JEtHJ84MjVWt2BmlMo3ykFT+XfhU4jUBG/yj2DkfTppwEdIUVdzfMNzzKYJKYweNArRHYMa8SoOrEHeR+l+FnibqAZaHv2f3tw5/Je5BhI2EToA247+1pqbmCeLM0y56knKKMVk+aOcPaMt4+FSAHLkub2dgu5OtI16hKornfA+8ZCrjeQmrkfkw4GTjsq8r9g5sGXkC6Z0KmI+btplZhV+Qb2oWXhTzzcoqxhvO1ZOl6i9oz0m0qz92HIGjKfw7AO5oLdrkBbqbG2rqguSeAyNHJ0ALuAdHSvmPsL8M4DKpfgzD1cMnOfS8WptwR0Zc+ZRMj8tLcyOPgG7wo7RnHe05KGmfYUfv2LFjf+zVXnoknZMdHSYoxAQwdpMhFA5gH4CJJ2HGSUXA7Ah19IPsJE+3jAsuuKCbyz+cu5LgWN+u4i2mJCYFZubKK698kHb+A21TvUS1OmHbtm2/Znm8Dixc4lZCsR3Rzov3WOAuE3tYROFdSXBKCnBXI1b0EmGXmNk0AO7M3xoDxrUWb1ElMUhvGKVJ5S/SPC9HNJHfGwF8Pir0X6ZOnTqM8J5G0m4FKQqTQbs1uwXd5dzmzZt7UNI4S0vAdi0uwD+j0hchO0YJ35NNdhVDG1+2fZDNjYLSh8b9M6u276Nmfw7453NU/EFWc1WqX9q/WywjOLtLqH5uoJLuZPiwmWQEy3wbWYX8yDCXkdp7uontANjltGVL0p44mapSfcKhyhlCmlnQfexXPs980C9JmxcOrYIO4KEQCu9Lhw9KCtYyfCOdsUyPR6Dae7pJNmm2zbcyi6A3IUewYWHTpxssXBA42o8Em7vw1zDRelajQJpW2qVpFXRzOWwo3MP+sNKhAisV5DeIC9JAT0e9t8uK9oQI2tOQqAqB/ioq5Ju0+1bcC6Fa3EHPY8cddpT8iQjgd1E3HyOdaqpV0FtdMroDFVAKjDs2yqQbm3SdFb7njMtBVzIAV0fj7k4og/+jCNt4/CfTfifSblB4HoLfpfMJwPRDgD+LtE8SJ/A7FcZWJV3AKcCMb1NhOIvArVH6+8hck/e99VfgaXdl0r4gtfifZml8GWrkM7T2Ntr/Z2yssDMPm0X8h6Nu/hvgj8EdHzLhzDWtSnqStJGd6Fp2ovZ8L+oIeotOGESnvB8GVzkicovd832AHOcpFxMKp+Slh2BfhP0w9mToWNUtuLhZdJc+FIn/T+K/QNyr4CM2ORLfmqRWeLXF8W0vDnw+Qw96qmiPWoiTSCM673muvZ7heq7KY1LC35OGtnmJ4dGuI7868S/nOPhRGnwUWAxJgFeIVbuHQfvzdG/h2LFj602PP2t2ql4o2KHl0+LePXr0uBDAPREM+sucAo5Rp3lbtFcZsAlq1nN43C/S+C+CxaNgEhcY4qQAfoVbtHGkUVXlCPfOQPf4tgrAPbZ1tzkdsqccQkq5xpPF5+gMZ3WfHuf0pGHvcdPIObzP8LpCq9mvTASrZ2Obgck1vev5GVOmTBmM206I2GWfHGTT2yvchOv/upmSXhPwuPXfRtzD+GtIG15eebu+NxrURr0SzxudNWPGjFkNBidD3cHG95Oq4APR7+sQysd9IUH6oIJzJF2VApA70NVjyDxXwMloZgHX3kS4r6DGk+4h3Bp7cG+T9NBw/3jzBBbidj9eL3Y0YhUl+zy0Rn/CsnNeGvSQiMyHkN6nEuZzmKijtN+iM+awbLqYNG9BThp7NeC0X6PAiaN4zYZeAS9xMUzcDoZOS6/wsgreNSk9YgFeMo8no5cT8W2K7hsAfIbpRo0aVV2Ki2R4K0uj2lAIoQ0851CHj4yMgpsrvl68/bl3yZIlYRLOSjrrScX/UBKcj+0kEGdj0/yCAjWVvgJwEomF7rNzEQC2O6FNUFagSTGSB1ieXQVtkgVdfU7gOST2cMth4a4TZ+NK7En4PU2s2ge4SLQ0CKSYuZF6AcyWCZypsJwXe6Kaj08wDnonlDBkyBB/yfCF4Gn6E27uyXA3BYUz8zIDXKkJkpPiuZTO9Hn8InDzeZ7GzsiwvD5WLRHc/gHUSm5FjsIZjidNidsEazgCuAO7HNfiSpJUNsDH83h4+i3kDw6yvOEeztFx8MezF1XJJ0ioiYld9jx+zTXXvGKnQNklT1OykvyVaSXqADYkB3Nn+ers2bNdxobwknCUqhRQg0pBqmsBWUnfT36TJB/gt6wB9CDu9hAJPQuOxk5wsgxrcXU57pg5pulsOwDL/eThNMjfKX2bbfaldMCQhLfQoM5mKl1famf+JviFs/eUtA/kkda7oLOcEfwjLcBEGpwub35nWOxB3SUyAXAAfh87PCf7y6HR0GT4+SLhXhKXXNUkS24h2gKO8WJbv4v4cJGtO0h60gOHJJE2UNrC+/JXDEv1oN5ON4AqPxnOsn0p5lm1JkrSMYYbENPpLrWBzyAoKT4aebsf2hFATyJ6aaeGw9uMgHcMS/Wg3lIa+Q08w6cbN002rMlbur+pXadSLQWQE47qWKs36XwDkh5IJ6BNTb9STjKUhcVFSuTL4RrnmAbDy4FBhDNiOABGfbaS5vMNJtJ3QU96IK2DzNyTz3eEjKkeLIe2BR5oVGigwxj1EhtbUv5SS8a/gy0PCd3rRIFYhRp/F/SkB15KOHZp6Gy6HzdGQwyLi/okfp+1cwTS7+zHkcRXce5GI+i/0W/WoB+ZMPW8aECSSH81K4U4aRm1z7SCgJM41HDppZd6GTEaCnsgBD2ewXj38C7oyZIwLA+JiE/nVKBj9BMfzhV07zM7RyDZy2R69uw5Ftw8zg0AI8SeMq7B/7SdYu4g6UmCxwzA+HMVdaQ9NYofch1k4nhYY4J9pgUCWdUCwF8n1meIUWvodJO5XocmgJ70wDNkWEVYOFrEVh8dxMrg87izb8x17zO5CCQvmz1T/zQx/uJEPe5EGlQL9l34g5SbM0q67rdI/BMdiTGuK2ETKawv5K12PKuJafZ62ztS1e+kSZP6Ae40APG0VpXixY8YPsWcuSS9AsyCLqiYO0m8hcRR+ds7RxL2TWx7T39ZLM/go+RGIRRw7AY2kjUw9CGwi6uViO0sDuXeSjMbIzJkZLFSVUvkvZDAevbiwZfuLxF/BuQQskP2euDBwVEvHtJFCOZZCeBKuSeM2r/kbf9CMUtu5siSq17MbOLZhG8ggzrJVYsd4w6rxleppNnhpIqd7TDi9yqTPDQKEg4O3wCbywDAbb9Ai5krv41gOSk5elZDxBHwrk4nc3wmvJyrJT+AI6gBWNyaoxkJN5HuOHrNgjNWrr23GITN17zxjriRz5dMA9wptH8A+KgBBFftIE0i7R+TPIZnTc7E6BAgYRWK/y5ukvzN52dJ6bm64NpTx0PfJs1cSDUUdLx5EncGd7ZHCSvGtEc5bVaDtCPkdQL0TAV/vcIGZRjxwxHASQB+Ohh5UWHaCLjum3jHeI+rGt/FNAchB3QibaiTwgZse/FQCvU5QQQeZ+Yj0Cx+gXY8cb5O9f60RcEmbKOJP3m0EfJTkZ75WyuzWbrm5bSWtUUcbTIsdLxAa3gi53fHJgg2Xi99An/4gxoGDwG/kxut2StXrqxLTmdDGYRnTXPQM1SmtKuzX6BHv0GP3kHqERScnljtjHMJP550j6KOHuQmZyluf55erPH7ukF9UVCQNiUtNjzPws2XLifPbDnJAli0aTDtO4b2jSH2BOiDtN1Plbj50RIXv4WgKr4dmlFbW7sGfv0gcwvAiW86H9CRNlQUepAf4z4F8F+jwhso1AoNtxI7y1e79vZRxJ9Bp/wF6X+ZdGsJC/esuHdaKfE7NZRhK9yULcW+Dz7C7zWR4LzKUbKgcJ9LXneFqscPQ4VO+o4yP5zs5YgXJ/21oXDqik1UVrr9JoIBMzjtvIWR8HoC9i55biHpFKgxgwBUAPyTNMCt7X9AZ0M+jpSp8MYR28YdQcVHYJtvGyRwWIWZmIfy1+I+lNzXKQBQJl9JN31Sq/z6rd5+lFUQM+TxlFXpDQuFJLvlSrZdKY/Y1eK9imPwB3hW7sfWYjqT7dS0JgGR+QwF+Qx4MnQB/CjNzs6hUvz+TF3JdgTIkMulbm0l81O2gJ9GvYdg+63FQkBrRPceRv2nkvdgynLpK3jymxeRx/Rik20bZUSV56JBegeax4byLOx7BRxbk8Wtydvyb+ytljFNIaEAGu/s/Ro/Q7/9gAMOeBJ14hnDOTDnY9N0GSE9Ybsqr9VwGqYhexiu3bAdNQUbhvhWMgUptbykgNYEbJd1BGZyY1+jzJ+g5+9DnTw3c+bMdUTHOnYLuEXlxQiAhyHFzcd29TyMzKFSgT8fBvxS80uQaay8zUS5YQRRlhuLO5Fwf4fvL0Lyagx1Z0xPvrXwdyfeDZTjyLGdbeILXuqg56C7KHMikv0pygOGmsXJKq8gwOUxLaX6WzNBt5JAqfeBz1Ik/zk64n4Y6QMjfjd3MOFecOfVmaRrYRhFfsi4lvKWosddF1tfbFiL9M0DSGsHuQK7B/tP0FAo3OJg52UA13dA27HXYb+ORG/CvTF+jIFCQgcmdeUtELHyQkA3T6wgVKrkU/FrhL9qJO5qrv6qCM8bJPOljVeHyYcdYrB1FlJe4BFePGRahO01WWW8FI6F7s6mDY187sr9SbbNlJXmI4bvrqgW8YWCHguIDYv+yEwDgMUJJ8YVbNO4sOwrOGOzDJZDkL+UKBggAZbIrx3bG8uJdrMa8/O2FfRYek7lMBfDi7IpJ8whRRVC5qScKBAFFUfe2LZoF5S/tcTFgt687HZnsHkFbfCXHU9tnvDa0Ph9WRIE9oFeAlFob/VSaBOcpKp8GeUzENzuajvEUHZ1qh4n+5KpnVKCHia4ZkCHFQNh7TKR2nuU5UqoeYeGVUmpgC8V6DZaIPxQ5kfZCB3Hhug37PI8Hs542+LGSNCKMalbG+vyXuA46nucenxYpaQHPoqpoy15S6HTgzT7OUF2eWdzXv9TQL+and8PAOY8wQBwd5RFCYT5LcfyuFbzoO4eaDr1/Ay/PyTwd/1R4tuCXZvzlAL0DI1tYMd3GGBPhPODIX9Pfzj2VAHCVgq9s/U0r2BD+XZYABz3RQA9hfL/hjDr8ZDuq2ztD5OPggtvhwxFSVOR9fuQKdzAUI636HgrvOCdDBiOhm8R7pWbwOc96SXpHSkNdKD/ZsefyvSzjoQ8C+8NeR5TElMqSbfeVdD/JK0OkpkA7y3N5CjxiYrIi08fcSaqKQAOsAFwy4WcI4KQodYW8B5lFX7VS6ebvBrTzlw5qUnvcIF7K2B8C3A80vWmBm8AyI8Lq2oupO7wD6OwA0CEtwDKX2JQXmXyqUJ1+MWolEkk9ambWfwT7zHnEXf73Llz65J25T2K2guHUoAu74JUwQXum/w4eBb++ZCIC2jQswImcKT7N6Q3u662V0iTNdFPuvCfebH/nbzecvlz+1BeYlv+jd7UJ+f0xuWUlS20gx2lAj0jSF5OeHNOG6+FbgKsHIknzDP6KUpugoP85vBMHm+Igtog3SW4L4cC4MTlSLgdbEdbr/WTriSmTauD9uKUT3Y08sUf37XUcQ34O5aPAngcBF5NqgbbG/hj+aTHVqR0CWlOJWwYpPR7//kMj6PuPemkk84lbCrUp1l+O2keNOuFF15YV2rA4SNcsGqXzETgAbMOUFsAL2MA6VJvGLr7QOy+BA1LGHZk/Inwo7G/DB2UpPdJBN7wiFOVMnP58uXrywHwwF/CfMkthntUG6oUJ8GLYEqdqxowTjteVPvsI+rkLbgF2fcnjtyY3vh5jIKZ3GV6eRxUmnapTUnVS7rxSjzfOVTVbOYnlk+ragDRt5NhMsR2Le8KxPW1YRpt3+GElQm2KkfpDypFwFesWLHef+FWSh0uo2kTmU+HldQdJR7A+nERPBkA0xIfN0ppvh0N+gPgugHfF2kzcYff+ZQT4PBUep0uE2kTJR4dvEWJR1+7MjkeIE0WX5WlswiyR8JBwgUcHX4t+TeWm4RHptMSE8PKwo4SDzNOnK67XTZGHZ9Wi77CQrDDpBkAT96jZMpNwuE/mDTzMaws7CjxMLMZVfMUAi+vJyjxABwnyzTgcwm/lnQbbUC5Ai5vZQu6zAm8H1keNGiQ3y14CvK11scFHuPTufB6C7+Aq8M3MhF3yn96lIG2mrIG3UbxSdmwqsHJw9gtv0WS1d2jIAFXn1+H5Y7WV2eZzvjXmtZTjCl70G1cVDUAvpWflTzBctLncmLuFz9vwx1ezJazSrEd0fw/N43F+KDRMcsAAAAASUVORK5CYII="; }, , function (e, t, i) { "use strict"; i.r(t), i.d(t, "saveSystemInfo", function () { return a; }), i.d(t, "resetSystemInfo", function () { return o; }), i.d(t, "resetAll", function () { return s; }); var n = i(2), r = i(6); const a = Object(r.b)(n.SAVE_SYSTEM_INFO, "version"), o = Object(r.b)(n.RESET_SYSTEM_INFO), s = Object(r.b)(n.RESET_ALL); }, function (e, t, i) { "use strict"; i.d(t, "b", function () { return n; }), i.d(t, "a", function () { return r; }); function n(e, t, i, n, a, o) { if (null == o || null == i || null == n || null == a) return !1; let s = Math.round(a / 1e3), _ = e - Math.round(n / 1e3) > t, l = e - s > 60, c = r(i, o), d = !1; return null != c && (d = c > 900), _ || ((0 === i || d) && l); } function r(e, t) { let i = 0, n = 0; if (null == t) return null; if (null == e || 0 === e) return null; try { if (((i = parseInt(t.expected_bytes[0])), 0 === i)) return null; if (((n = parseFloat(t.got_bytes[0]) + parseInt(t.offset_bytes[0])), n < 0.01 * i)) return null; } catch (e) { return null; } let r = i - n; return r < 0 && (r = 0), r / e; } }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; i.r(t); var n = i(4), r = i(5), a = i.n(r); const o = Object(r.toApi)("sitemaster"); var s = i(6), _ = i(200); const l = Object(s.a)(_.a); var c = i(14); i.d(t, "requestSitemasterStatusThunk", function () { return d; }); const d = () => async (e) => { try { await u(e); } catch (e) { c.default.error(e); } }, u = async (e) => { const t = await fetch(o, { method: "GET", credentials: a.a.credentials }); Object(n.checkStatus)(t); const i = await t.json(); e(l(i)); }; }, function (e, t, i) { "use strict"; var n = i(76), r = i.n(n), a = i(46), o = i(4), s = i(459), _ = i(29), l = i(136), c = i(2), d = i(202), u = i(7), m = i(74), p = i(21), g = i(5), w = i.n(g); const v = Object(g.toApi)("system/update/status"); var f = i(44); i.d(t, "a", function () { return b; }), i.d(t, "b", function () { return S; }); const h = { [f.e.ERROR]: "Update Failed: Connectivity issue. Please retry the updater." }, E = { [f.e.NONACTIONABLE]: "No update package available" }, b = () => async (e, t) => { try { await y(e, t); } catch (t) { e(Object(u.showError)(c.RECEIVE_CHECK_UPDATE_ERROR, t.toString(), t.response)); } }, y = async (e, t) => { const i = await fetch(v, { credentials: w.a.credentials }); Object(o.checkStatus)(i); const n = await i.json(), { update: a } = t(); let p = r()(n, "info.status[0]", "Unknown error"); if (n && null != n.state) if ( (n.state === f.d.FAILED && p !== f.e.IGNORING && (E[p] ? ((p = E[p]), e(Object(m.c)(c.RECEIVE_CHECK_UPDATE_ERROR, { type: l.WARNING_TOAST, header: "Update Failed", message: p }))) : (h[p] && (p = h[p]), e(Object(u.showError)(c.RECEIVE_CHECK_UPDATE_ERROR, p, n)))), e(Object(d.receiveCheckUpdate)(n)), n.state === f.d.DOWNLOAD) ) { const t = Math.round(new Date().getTime() / 1e3), i = Object(s.b)(t, 60, n.estimated_bytes_per_second, n.last_download_status_time, n.start_time, n.info); e(Object(d.updateDownloadProgressAction)(i, n)), i ? e(Object(u.showError)(c.DOWNLOAD_STALLED_ERROR, _.r)) : a.downloadStalled && e(Object(u.clearError)(c.DOWNLOAD_STALLED_ERROR)); } else a.downloadStalled && e(Object(u.clearError)(c.DOWNLOAD_STALLED_ERROR)); }; function S() { return async (e, t) => { try { const { authentication: i, configuration: n, error: r, update: o } = t(), s = Object(p.isAuthenticated)(i, r.items), _ = !0 === n.isNew, l = Object(a.isResiGateway)(n.deviceType), c = o.isCheckingUpdateUrgency || o.updateUrgency; if (!s || !_ || !l || c) return; e(Object(d.checkFirmwareUpdateUrgency)()); } catch (t) { e(Object(u.showError)(c.RECEIVE_CHECK_UPDATE_URGENCY_ERROR, t.toString(), t.response)); } }; } }, , , , , , function (e, t) {}, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.TranslationsProvider = void 0); const o = a(i(1)), s = i(3), _ = i(77), l = { zh_CN: "zh-Hans", zh_TW: "zh-Hant" }, c = (e) => o.createElement("span", Object.assign({}, e, { style: { display: "inline-block", transform: "scale(-1, 1)" } }), e.children); t.TranslationsProvider = (e) => { var t, i, n; let r, a, d; if (("tsla_MIRROR" === e.override && (d = c), e.translations)) { let o = null !== (i = null !== (t = e.languages) && void 0 !== t ? t : navigator.languages) && void 0 !== i ? i : [navigator.language]; e.override && (o = [e.override].concat(o)), (r = null !== (n = (0, _.negotiate)(["en"].concat(Object.keys(e.translations)), o)) && void 0 !== n ? n : void 0), (a = r ? e.translations[r] : void 0); } return r && r in l && (r = l[r]), o.createElement(s.IntlProvider, { locale: r, messages: a, textComponent: d }, e.children); }; }, , , , function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return _; }); var n = i(2); function r(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function a(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? r(Object(i), !0).forEach(function (t) { o(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function o(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { isFetching: !1, didInvalidate: !1, running: null, connectedToTesla: null, powerSupplyMode: !1, canReboot: "", smStartError: "" }; function _(e = s, t) { switch (t.type) { case "REQUEST_SITEMASTER_FOR_COMMISSIONING": case "REQUEST_SITEMASTER_SETTINGS": case "REQUEST_START_SITEMASTER": case "REQUEST_STOP_SITEMASTER": return a(a({}, e), {}, { isFetching: !0, didInvalidate: !1, smStartError: "" }); case n.RECEIVE_SITEMASTER_FOR_COMMISSIONING_SUCCESS: case "RECEIVE_SITEMASTER_SETTINGS_SUCCESS": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, running: t.running, connectedToTesla: t.connected_to_tesla, powerSupplyMode: t.power_supply_mode, canReboot: t.can_reboot }); case "RECEIVE_START_SITEMASTER_SUCCESS": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !1, smStartError: "" }); case "RECEIVE_STOP_SITEMASTER_SUCCESS": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !1 }); case "RECEIVE_SITEMASTER_SETTINGS_ERROR": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !0, running: null, powerSupplyMode: !1 }); case "RECEIVE_START_SITEMASTER_ERROR": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !0, smStartError: t.error }); case "RECEIVE_SITEMASTER_FOR_COMMISSIONING_ERROR": case "RECEIVE_STOP_SITEMASTER_ERROR": return a(a({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case "RESET_ALL": case "RESET_SITEMASTER_SETTINGS": return s; default: return e; } } }, , , , , , , , function (e) { e.exports = JSON.parse( '{"alert_container_title":"Warnungen","alerts_view_no_active_alerts":"Keine aktiven Warnungen","barcode_reader_checksum_error":"Barcode ungültig. Bitte erneut versuchen und sicherstellen, dass der richtige Barcode übermittelt wird.","barcode_reader_format_error":"Barcode-Format falsch. Bitte erneut versuchen und sicherstellen, dass der richtige Barcode übermittelt wird.","barcode_reader_internal_error":"Barcode-Scanner nicht verfügbar. Bitte geben Sie die Informationen manuell ein.","barcode_reader_not_found":"Barcode wurde nicht erkannt. Bitte erneut versuchen und darauf achten, dass der Barcode scharf und ausreichend groß ist.","button_factory_reset":"ZURÜCKSETZEN","button_label_confirm":"BESTÄTIGEN","button_label_factory_reset":"AUF WERKSEINSTELLUNGEN ZURÜCKSETZEN","connection_details_network_configured":"Konfiguriert","connection_details_network_configured_ip":"Konfiguriertes Netzwerk: {ipAddress}","connection_details_network_configured_ssid":"Konfiguriertes Netzwerk: {ssid}","connection_details_network_configured_ssid_ip":"Konfiguriertes Netzwerk: {ssid} ({ipAddress})","connection_details_network_not_connected":"Nicht verbunden","connection_modal_description":"Dies wird erwartet, wenn Sie das Gerät aus- und einschalten, ein Software-Update ausführen oder Änderungen an bestimmten Geräte-Konfigurationen vornehmen.{br}{br}Sie müssen zum Fortfahren möglicherweise die Verbindung zum WLAN-Access-Point des Geräts wiederherstellen.","connection_modal_title":"Verbindung zum Gerät verloren","connection_status_network_configured":"Konfiguriert","connection_status_network_connected":"Verbunden","connection_status_network_connection_problem":"Verbindungsproblem","connection_status_network_disabled":"Deaktiviert","connection_status_network_no_internet":"Keine Verbindung zum Internet. Prüfen Sie die IP-Adresskonfiguration und den Internet-Uplink.","connection_status_network_no_ip":"Keine IP-Adresse erhalten. Prüfen Sie die Router-Konfiguration auf Blocklisten für MAC-Adressen oder ähnliches.","connection_status_network_no_tesla":"Keine Verbindung zu Tesla. Prüfen Sie die Router- und Firewall-Einstellungen.","connection_status_network_not_connected":"Nicht verbunden","control_connect":"VERBINDEN","control_delete":"ENTFERNEN","country_name_ad":"Andorra","country_name_ae":"Vereinigte Arabische Emirate","country_name_am":"Armenien","country_name_at":"Österreich","country_name_au":"Australien","country_name_ba":"Bosnien-Herzegowina","country_name_be":"Belgien","country_name_bg":"Bulgarien","country_name_ca":"Kanada","country_name_ch":"Schweiz","country_name_cn":"China","country_name_cy":"Zypern","country_name_cz":"Tschechien","country_name_de":"Deutschland","country_name_dk":"Dänemark","country_name_ee":"Estland","country_name_es":"Spanien","country_name_fi":"Finnland","country_name_fr":"Frankreich","country_name_gb":"Vereinigtes Königreich","country_name_gi":"Gibraltar","country_name_gr":"Griechenland","country_name_hk":"Hongkong","country_name_hr":"Kroatien","country_name_hu":"Ungarn","country_name_ie":"Irland","country_name_il":"Israel","country_name_is":"Island","country_name_it":"Italien","country_name_jp":"Japan","country_name_kr":"Südkorea","country_name_li":"Liechtenstein","country_name_lt":"Litauen","country_name_lu":"Luxemburg","country_name_lv":"Lettland","country_name_mc":"Monaco","country_name_mo":"Macao","country_name_mt":"Malta","country_name_mx":"Mexiko","country_name_nl":"Niederlande","country_name_no":"Norwegen","country_name_nz":"Neuseeland","country_name_pl":"Polen","country_name_pt":"Portugal","country_name_ro":"Rumänien","country_name_rs":"Serbien","country_name_ru":"Russland","country_name_se":"Schweden","country_name_sg":"Singapur","country_name_sk":"Slowakei","country_name_sm":"San Marino","country_name_tw":"Taiwan","country_name_uk":"Ukraine","country_name_us":"Vereinigte Staaten von Amerika","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energy}kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_meter_site_export_power":"{realPower} Export","display_meter_site_import_power":"{realPower} Import","display_meter_solar_generation_power":"{realPower} Erzeugung","display_phase_type_unknown":"unbekannt","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"Auswählen","error_boundary_label_error_details":"Fehlerdetails:","error_boundary_subtitle":"Nun, das ist peinlich. Wir sind in der App auf einen Fehler gestoßen.","error_boundary_title":"Oh, nein! Es ist ein Fehler aufgetreten.","error_messages_invalid_password":"Ungültiges Passwort. Bitte erneut versuchen.","factory_reset_subtitle":"Löscht alle Netzwerk- und Geräteeinstellungen. Es wird versucht, alle gekoppelten Geräte zu trennen. Lebensdauer-Daten werden nicht beinträchtigt.","grid_code_container_title":"Netzstandard","grid_code_point_PINVrx_SmartInvSelect":"Aktivierte Smart Inverter-Funktionen","grid_code_point_nominal_grid_frequency":"Nennfrequenz des Stromnetzes","grid_code_point_nominal_grid_voltage":" Nennspannung im Stromnetz (L-N)","grid_code_point_nominal_pinv_voltage":"Nennspannung der angeschlossenen Powerwalls im Stromnetz","grid_code_point_vf_limit_over_frequency_0_grid_following":"Neuverbindungslimit bei zu hoher Frequenz","grid_code_point_vf_limit_over_frequency_1_grid_following":"Over Frequency Trip 1 - Limit","grid_code_point_vf_limit_over_voltage_0_grid_following":"Neuverbindungslimit bei zu hoher Spannung","grid_code_point_vf_limit_over_voltage_1_grid_following":"Over Voltage Trip 1 - Limit","grid_code_point_vf_limit_under_frequency_0_grid_following":"Neuverbindungslimit bei zu geringer Frequenz","grid_code_point_vf_limit_under_frequency_1_grid_following":"Under Frequency Trip 1 - Limit","grid_code_point_vf_limit_under_voltage_0_grid_following":"Neuverbindungslimit bei zu geringer Spannung","grid_code_point_vf_limit_under_voltage_1_grid_following":"Under Voltage Trip 1 - Limit","grid_code_point_vf_param_allow_charging_while_qualifying":"Laden der Batterie während der Qualifizierung des Stromnetzes ermöglichen","grid_code_point_vf_timing_over_frequency_1_grid_following":"Over Frequency Trip 1 - Timing","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Inverternetz-Requalifizierungszeit","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Volt","grid_code_unit_V_pu":"V / V_nominal","grid_code_unit_bool":"0 = Nein, 1 = Ja","grid_code_unit_enum":"Nummerierter Wert, siehe Handbuch","grid_code_unit_s":"Sekunden","grid_code_view_advanced_label":"ERWEITERTE EINSTELLUNGEN","grid_code_view_confirmation":"Bestätigen Sie, dass der ausgewählte Netz Standard den lokalen Bestimmungen entspricht","grid_code_view_country_label":"LAND","grid_code_view_distributor_label":"NETZBETREIBER","grid_code_view_filter_freq":"Diese Installation ist nicht ans Netz angeschlossen. Auswahl aus allen Netz Standards erlauben.","grid_code_view_filter_freq_warning":"Bitte den entsprechenden Standard sorgfältig auswählen um sicherzustellen, dass das System mit vorgesehener Spannung und Frequenz arbeitet.","grid_code_view_frequency":"Frequenz","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Bestätigen Sie, dass der vorkonfigurierte Netzcode für diesen Standort gültig ist","grid_code_view_preconfigured_label":"VORKONFIGURIERTER NETZCODE","grid_code_view_region_label":"REGION","grid_code_view_reset_modal_body":"Für diesen Standort gelten benutzerdefinierte Einstellungen für den Netzcode. Diese konfigurierten Einstellungen werden gelöscht, wenn der Netzcode geändert oder zurückgesetzt wird.","grid_code_view_reset_modal_cancel_button":"Abbrechen","grid_code_view_reset_modal_confirm_button":"Einstellungen löschen und fortfahren","grid_code_view_reset_modal_header":"AUSWAHL FÜR NETZCODE ZURÜCKSETZEN?","grid_code_view_reset_selection":"AUSWAHL FÜR NETZCODE ZURÜCKSETZEN","grid_code_view_retailer_label":"STROMVERSORGER","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"NETZ STANDARD","grid_code_view_utility_label":"ENERGIEVERSORGER","grid_code_view_volt_freq_label":"SPANNUNG/FREQUENZ","grid_code_view_voltage":"Spannung","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"BEARBEITEN","label_button_enter_manually":"MANUELL EINGEBEN","label_button_finish":"BEENDEN","label_button_scan_barcode":"BARCODE SCANNEN","label_button_scan_qrcode":"QR-CODE SCANNEN","label_button_upload":"HOCHLADEN","label_factory_reset":"AUF WERKSZUSTAND ZURÜCKSETZEN","label_form_input_file":"DATEI","label_form_input_software_update":"SOFTWARE-UPDATE","label_model":"Modell","label_part_number":"Teilenummer","label_part_number_psn":"Teilenummer (TPN)","label_serial_number":"Seriennummer","label_serial_number_tsn":"Seriennummer (TSN)","menu_card_label_active_alerts":"Aktiv: {alertCount}","menu_card_label_no_active_alerts":"Keine aktiv","menu_card_label_version":"Version: {version}","modal_close":"SCHLIESSEN","modal_refresh":"NEU LADEN","modal_save":"SPEICHERN","navigation_back":"ZURÜCK","navigation_cancel":"ABBRECHEN","navigation_forward":"FORTFAHREN","navigation_skip":"AUSLASSEN","network_view_cable_connected_label":"Kabel angeschlossen:","network_view_connection_heading":"Verbindung","network_view_connection_not_supported_label":"Verbindung (Nicht unterstützt)","network_view_disable_button_label":"Deaktivieren","network_view_dns_label_":"DNS:","network_view_edit_button_label":"Bearbeiten","network_view_enable_button_label":"Aktivieren","network_view_enabled_info_label":"Aktiviert:","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Mobilfunk","network_view_internet_connection_label":"Mit Internet verbunden:","network_view_ip_address_label":"Adresse:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"MAC-Adresse","network_view_mac_address_label":"MAC-Adresse:","network_view_primary_connection_label":"Aktiv:","network_view_signal_strength_label":"Signalstärke:","network_view_ssid_label":"Konfiguriertes Netzwerk:","network_view_subnet_mask_label":"Subnetz:","network_view_tesla_connection_label":"Mit Tesla verbunden:","network_view_wifi_title":"WLAN","network_view_wireless_connected_label":"Verbunden:","not_found_description":"Tut uns leid. Die Seite, die Sie aufgerufen haben, wurde nicht gefunden.","not_found_title":"404 Seite nicht gefunden","password_input_view_password":"PASSWORT","password_input_view_show_password":"Passwort zeigen","phase_type_single":"Einphasig","phase_type_split":"Spaltphase","phase_type_three":"Dreiphasig","phase_type_two":"Zweiphasig","phase_type_wye_ll":"Wye L-L","prompt_required_field":"Dies ist ein Pflichtfeld.","service_factory_reset_confirmation":"Die lokalen Einstellungen werden gelöscht und das Gerät wird neu gestartet. Bitte bestätigen.","sideload_container_subtitle":"Wählen Sie eine .bin-Datei aus","summary_container_title":"Zusammenfassung","title_installation":"Installation","title_metering":"Messungen","title_networks":"Netzwerke","title_service":"Service","title_site_info":"Standort-Informationen","title_site_meter":"Anlagenmessgerät","title_software":"Software","title_software_update":"Software-Update","update_handshake_result_failed":"Der Server konnte nicht erreicht werden. Prüfen Sie bitte die Internetverbindung des Geräts und versuchen Sie es erneut.","update_handshake_result_non_actionable":"Keine Updates verfügbar.","update_handshake_result_update_staged":"Eine neue Software-Version ist verfügbar.","update_handshake_result_update_staged_version":"Software-Version {version} ist verfügbar.","update_last_update_result_failed":"Das letzte Software-Update ist fehlgeschlagen. Versuchen Sie es noch einmal oder wenden Sie sich an den Tesla Service.","update_status_downloading":"Update wird heruntergeladen ...","update_view_button_label_check_for_update":"NACH UPDATE SUCHEN","update_view_button_label_install":"INSTALLIEREN","update_view_check_notice_not_internet_connected":"Kann ohne Internetverbindung nicht auf Updates prüfen. Prüfen Sie bitte die Netzwerk-Konfiguration des Geräts.","update_view_handshake_failed":"Konnte keinen Kontakt zum Server herstellen, um nach einem Update zu suchen.","update_view_handshake_non_actionable":"Es sind keine Updates verfügbar.","update_view_handshake_update_staged":"Ein Update ist verfügbar. Es wird im Hintergrund heruntergeladen.","update_view_install_notice_not_internet_connected":"Das Software-Update kann ohne eine Internetverbindung nicht heruntergeladen werden. Prüfen Sie bitte die Netzwerk-Konfiguration des Geräts.","update_view_label_current_version":"Aktuelle Version: {version} ({identifier})","update_view_latest_version":"Aktuellste Version: {version}","update_view_not_yet_checked":"Noch keine Suche nach Updates.","update_view_notice_automatic_update":"Klicken Sie, um es jetzt anzuwenden. Andernfalls wird das Update später im Hintergrund installiert.","update_view_result_failed":"Das letzte Software-Update ist fehlgeschlagen. Versuchen Sie es noch einmal oder wenden Sie sich an den Tesla Service.","update_view_result_succeeded":"Das letzte Software-Update war erfolgreich.","update_view_status_downloaded":"Download abgeschlossen. Update zur Installation bereit.","update_view_status_downloading":"Update wird heruntergeladen ...","update_view_status_staged":"Update zur Installation bereit. Klicken Sie auf die Schaltfläche „Installieren“, um fortzufahren.","wifi_page_available_networks":"Verfügbare Netzwerke","wifi_page_cancel_button_label":"Abbrechen","wifi_page_check_password":"Die Verbindung konnte nicht hergestellt werden, bitte überprüfen Sie das WLAN-Passwort.","wifi_view_available_networks_subtitle":"VERFÜGBARE NETZWERKE","wifi_view_button_label_join":"VERBINDEN","wifi_view_button_label_manual":"NETZWERK MANUELL EINGEBEN","wifi_view_input_label_ssid":"NETZWERK (SSID)","wifi_view_label_connecting_ssid":"Verbinde mit {ssid}","wifi_view_mac_address_label":"MAC-Adresse: {mac}","wifi_view_no_networks":"Kein WLAN Netzwerk gefunden!","wifi_view_no_password_placeholder":"Kein Passwort","wifi_view_notice_joining":"Dieser Prozess kann einige Minuten dauern und möglicherweise zu einem Neustart des Geräts führen. Sie müssen möglicherweise die Verbindung zum WLAN-Access-Point des Geräts wiederherstellen, um mit der Installation fortzufahren.","wifi_view_password_label":"PASSWORT","wifi_view_prompt_network_types":"Verbindung zu verfügbaren 2,4-GHz-WPA-Netzwerken herstellen.","wifi_view_reconnect_notice":"Während dieses Vorgangs müssen Sie möglicherweise die Verbindung mit dem WLAN-Zugriffspunkt des Geräts wieder herstellen, um mit der Installation fortzufahren.","wifi_view_rescan":"NEU SCANNEN","wifi_view_username_label":"BENUTZER NAME","wifi_view_wpa2_password_label":"WPA2-PASSWORT"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"Allarmi","alerts_view_no_active_alerts":"Nessun avviso attivo","barcode_reader_checksum_error":"Codice a barre non valido. Controllare di aver inserito il codice a barre corretto e riprovare.","barcode_reader_format_error":"Formato non corretto del codice a barre. Verificare di aver inserito il codice a barre corretto e riprovare.","barcode_reader_internal_error":"Lettore del codice a barre non disponibile. Inserire le informazioni manualmente.","barcode_reader_not_found":"Impossibile rilevare il codice a barre. Controllare che il codice a barre sia a fuoco e sufficientemente ingrandito e riprovare.","button_factory_reset":"RIPRISTINA","button_label_confirm":"CONFERMA","button_label_factory_reset":"RIPRISTINO DELLE IMPOSTAZIONI PREDEFINITE DI FABBRICA","connection_details_network_configured":"Configurata","connection_details_network_configured_ip":"Rete configurata: {ipAddress}","connection_details_network_configured_ssid":"Rete configurata: {ssid}","connection_details_network_configured_ssid_ip":"Rete configurata: {ssid} ({ipAddress})","connection_details_network_not_connected":"Non connessa","connection_modal_description":"Questo si verifica quando si esegue un ciclo di accensione del dispositivo, si applica un aggiornamento software o si apportano modifiche alla configurazione di un determinato dispositivo.{br}{br}Per continuare, potrebbe essere necessario doversi ricollegare all\'Access Point Wi-Fi del dispositivo.","connection_modal_title":"Il collegamento al dispositivo è stato interrotto","connection_status_network_configured":"Configurata","connection_status_network_connected":"Connessa","connection_status_network_connection_problem":"Problema di connessione","connection_status_network_disabled":"Disattivata","connection_status_network_no_internet":"Nessuna connessione a Internet. Controllare la configurazione dell\'indirizzo IP e l\'uplink a Internet.","connection_status_network_no_ip":"Indirizzo IP non assegnato. Controllare se nella configurazione del router sono presenti elenchi di blocco di indirizzi MAC o simili.","connection_status_network_no_tesla":"Nessun collegamento a Tesla. Controllare le impostazioni del router e del firewall.","connection_status_network_not_connected":"Non connessa","control_connect":"COLLEGARE","control_delete":"RIMUOVI","country_name_ad":"Andorra","country_name_ae":"Emirati Arabi Uniti","country_name_am":"Armenia","country_name_at":"Austria","country_name_au":"Australia","country_name_ba":"Bosnia ed Erzegovina","country_name_be":"Belgio","country_name_bg":"Bulgaria","country_name_ca":"Canada","country_name_ch":"Svizzera","country_name_cn":"Cina","country_name_cy":"Cipro","country_name_cz":"Repubblica Ceca","country_name_de":"Germania","country_name_dk":"Danimarca","country_name_ee":"Estonia","country_name_es":"Spagna","country_name_fi":"Finlandia","country_name_fr":"Francia","country_name_gb":"Regno Unito","country_name_gi":"Gibilterra","country_name_gr":"Grecia","country_name_hk":"Hong Kong","country_name_hr":"Croazia","country_name_hu":"Ungheria","country_name_ie":"Irlanda","country_name_il":"Israele","country_name_is":"Islanda","country_name_it":"Italia","country_name_jp":"Giappone","country_name_kr":"Corea del Sud","country_name_li":"Liechtenstein","country_name_lt":"Lituania","country_name_lu":"Lussemburgo","country_name_lv":"Lettonia","country_name_mc":"Monaco","country_name_mo":"Macao","country_name_mt":"Malta","country_name_mx":"Messico","country_name_nl":"Paesi Bassi","country_name_no":"Norvegia","country_name_nz":"Nuova Zelanda","country_name_pl":"Polonia","country_name_pt":"Portogallo","country_name_ro":"Romania","country_name_rs":"Serbia","country_name_ru":"Russia","country_name_se":"Svezia","country_name_sg":"Singapore","country_name_sk":"Slovacchia","country_name_sm":"San Marino","country_name_tw":"Taiwan","country_name_uk":"Ucraina","country_name_us":"Stati Uniti","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energia}kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_meter_site_export_power":"Esportazione di {realPower}","display_meter_site_import_power":"Importazione di {realPower}","display_meter_solar_generation_power":"Generazione di {realPower}","display_phase_type_unknown":"sconosciuto","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"Seleziona","error_boundary_label_error_details":"Dettagli errore:","error_boundary_subtitle":"Siamo spiacenti. Si è verificato un errore nell\'app.","error_boundary_title":"Spiacenti! Si è verificato un errore.","error_messages_invalid_password":"Password non valida. Riprovare.","factory_reset_subtitle":"Cancella tutte le impostazioni di rete e del dispositivo. Verrà fatto il possibile per scollegare qualsiasi dispositivo associato. I dati sulla durata non saranno modificati.","grid_code_container_title":"Tipologia di Rete","grid_code_point_PINVrx_SmartInvSelect":"Funzionalità inverter intelligente abilitate","grid_code_point_nominal_grid_frequency":"Frequenza nominale della rete","grid_code_point_nominal_grid_voltage":" Tensione nominale della rete (L-N)","grid_code_point_nominal_pinv_voltage":"Tensione nominale della rete dei Powerwall connessi","grid_code_point_vf_limit_over_frequency_0_grid_following":"Limite riconnessione sovra-frequenza","grid_code_point_vf_limit_over_frequency_1_grid_following":"Over Frequency Trip 1 - Limit","grid_code_point_vf_limit_over_voltage_0_grid_following":"Limite riconnessione sovratensione","grid_code_point_vf_limit_over_voltage_1_grid_following":"Over Voltage Trip 1 - Limit","grid_code_point_vf_limit_under_frequency_0_grid_following":"Limite riconnessione sottofrequenza","grid_code_point_vf_limit_under_frequency_1_grid_following":"Under Frequency Trip 1 - Limit","grid_code_point_vf_limit_under_voltage_0_grid_following":"Limite riconnessione sottotensione","grid_code_point_vf_limit_under_voltage_1_grid_following":"Under Voltage Trip 1 - Limit","grid_code_point_vf_param_allow_charging_while_qualifying":"Consentire caricamento batteria durante periodo qualificazione della rete","grid_code_point_vf_timing_over_frequency_1_grid_following":"Over Frequency Trip 1 - Timing","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Inverter-Tempo di riqualificazione della rete ","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Volt","grid_code_unit_V_pu":"V/V_nominal","grid_code_unit_bool":"0 = no, 1 = sì","grid_code_unit_enum":"valore enumerato, vedere manuale","grid_code_unit_s":"secondi","grid_code_view_advanced_label":"IMPOSTAZIONI AVANZATE","grid_code_view_confirmation":"Conferma che il tipologia di rete selezionato è corretto per questo sito","grid_code_view_country_label":"STATO","grid_code_view_distributor_label":"DISTRIBUTORE","grid_code_view_filter_freq":"Questo Sito è disconnesso dalla Rete. Permetti selezione di qualsiasi Tipologia di Rete.","grid_code_view_filter_freq_warning":"Si prega di scegliere attentamente il Tipologia di Rete adatto, per garantire che il sistema funzioni a Voltaggio e Frequenza corretti.","grid_code_view_frequency":"Frequenza","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Confermare che il codice rete preconfigurato è valido per questo luogo d\'installazione","grid_code_view_preconfigured_label":"CODICE RETE PRECONFIGURATO","grid_code_view_region_label":"REGIONE","grid_code_view_reset_modal_body":"Questo sito ha impostazioni personalizzate del codice rete. Le impostazioni configurate saranno cancellate quando il codice rete viene cambiato o ripristinato.","grid_code_view_reset_modal_cancel_button":"Annulla","grid_code_view_reset_modal_confirm_button":"Cancellare le impostazioni e continuare","grid_code_view_reset_modal_header":"RESETTARE LA SELEZIONE DEL CODICE RETE?","grid_code_view_reset_selection":"RESETTARE SELEZIONE CODICE RETE","grid_code_view_retailer_label":"FORNITORE","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"CODICE DI RETE","grid_code_view_utility_label":"SOCIETÁ DI DISTRIBUZIONE ENERGIA","grid_code_view_volt_freq_label":"TENSIONE/FREQUENZA","grid_code_view_voltage":"Tensione","grid_code_view_voltage_reading_split":"{voltageLN}/{voltageLL}","label_button_edit":"MODIFICA","label_button_enter_manually":"INSERIRE MANUALMENTE","label_button_finish":"FINE","label_button_scan_barcode":"SCANSIONA CODICE A BARRE","label_button_scan_qrcode":"SCANSIONA QR CODE","label_button_upload":"CARICA","label_factory_reset":"RIPRISTINO AI PARAMETRI DI FABBRICA","label_form_input_file":"FILE","label_form_input_software_update":"AGGIORNA SOFTWARE","label_model":"Modello","label_part_number":"Numero parte ","label_part_number_psn":"Numero di parte (TPN)","label_serial_number":"Numero di serie","label_serial_number_tsn":"Numero di serie (TSN)","menu_card_label_active_alerts":"Attivi: {alertCount}","menu_card_label_no_active_alerts":"Nessuno attivo","menu_card_label_version":"Versione: {version}","modal_close":"CHIUDI","modal_refresh":"AGGIORNA","modal_save":"SALVA","navigation_back":"INDIETRO","navigation_cancel":"ANNULLA","navigation_forward":"CONTINUA","navigation_skip":"IGNORA","network_view_cable_connected_label":"Cavo collegato:","network_view_connection_heading":"Collegamento","network_view_connection_not_supported_label":"Connessione (non supportata)","network_view_disable_button_label":"Disattiva","network_view_dns_label_":"DNS:","network_view_edit_button_label":"Modifica","network_view_enable_button_label":"Attiva","network_view_enabled_info_label":"Attivata:","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Cellulare","network_view_internet_connection_label":"Connesso a Internet:","network_view_ip_address_label":"Indirizzo:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"Indirizzo MAC","network_view_mac_address_label":"Indirizzo MAC:","network_view_primary_connection_label":"Attivo:","network_view_signal_strength_label":"Forza del segnale:","network_view_ssid_label":"Rete configurata:","network_view_subnet_mask_label":"Subnet:","network_view_tesla_connection_label":"Connesso a Tesla:","network_view_wifi_title":"Wi-Fi","network_view_wireless_connected_label":"Connesso:","not_found_description":"Ci spiace ma la pagina che cercavi non è disponibile","not_found_title":"404, pagina non disponibile","password_input_view_password":"PASSWORD","password_input_view_show_password":"Mostra Password","phase_type_single":"Monofase","phase_type_split":"Bifase","phase_type_three":"Trifase","phase_type_two":"Due fasi","phase_type_wye_ll":"Wye L-L","prompt_required_field":"Questo campo è obbligatorio.","service_factory_reset_confirmation":"Verranno rilevate le impostazioni locali e il dispositivo verrà riavviato. Confermare.","sideload_container_subtitle":"Selezionare un file .bin","summary_container_title":"Riepilogo","title_installation":"Installazione","title_metering":"Misurazioni","title_networks":"Reti","title_service":"Assistenza","title_site_info":"Informazioni sul sito","title_site_meter":"Contatore del sito (meter)","title_software":"Software","title_software_update":"Aggiornamento software","update_handshake_result_failed":"Impossibile contattare il server. Verificare che il dispositivo sia connesso a Internet e riprovare.","update_handshake_result_non_actionable":"Non sono disponibili aggiornamenti.","update_handshake_result_update_staged":"È disponbile una nuova versione software.","update_handshake_result_update_staged_version":"È disponibile la versione software {version}.","update_last_update_result_failed":"Ultimo aggiornamento software non riuscito. Riprovare o contattare l\'Assistenza Tesla.","update_status_downloading":"Download aggiornamento...","update_view_button_label_check_for_update":"CONTROLLA AGGIORNAMENTI","update_view_button_label_install":"INSTALLA","update_view_check_notice_not_internet_connected":"Impossibile controllare gli aggiornamenti senza una connessione a Internet. Controllare la configurazione di rete del dispositivo.","update_view_handshake_failed":"Impossibile contattare il server per controllare gli aggiornamenti.","update_view_handshake_non_actionable":"Non sono disponibili aggiornamenti.","update_view_handshake_update_staged":"È disponibile un aggiornamento e sarà scaricato in background.","update_view_install_notice_not_internet_connected":"Impossibile scaricare l\'aggiornamento software senza una connessione a Internet. Controllare la configurazione di rete del dispositivo.","update_view_label_current_version":"Versione corrente: {version} ({identifier})","update_view_latest_version":"Ultima versione: {version}","update_view_not_yet_checked":"Disponibilità aggiornamenti mai controllata","update_view_notice_automatic_update":"Fare clic per installare ora. In caso contrario, l\'aggiornamento verrà installato in background più avanti.","update_view_result_failed":"Ultimo aggiornamento software non riuscito. Riprovare o contattare l\'Assistenza Tesla.","update_view_result_succeeded":"Ultimo aggiornamento software riuscito.","update_view_status_downloaded":"Download completato. Installazione temporanea aggiornamento...","update_view_status_downloading":"Download aggiornamento...","update_view_status_staged":"Aggiornamento installato temporaneamente. Fare clic sul pulsante per procedere.","wifi_page_available_networks":"Reti disponibili","wifi_page_cancel_button_label":"Annulla","wifi_page_check_password":"Impossibile connettersi, controlla la password del Wi-Fi.","wifi_view_available_networks_subtitle":"RETI DISPONIBILI","wifi_view_button_label_join":"ASSOCIA","wifi_view_button_label_manual":"INSERIRE MANUALMENTE LA RETE","wifi_view_input_label_ssid":"RETE (SSID)","wifi_view_label_connecting_ssid":"Collegamento a {ssid}","wifi_view_mac_address_label":"Indirizzo MAC: {mac}","wifi_view_no_networks":"Non ho trovato reti Wi-Fi!","wifi_view_no_password_placeholder":"Non è necessaria una password","wifi_view_notice_joining":"Questa procedura può richiedere alcuni minuti e il dispositivo potrebbe essere riavviato. Per continuare l\'installazione potrebbe essere necessario doversi ricollegare all\'Access Point Wi-Fi del dispositivo.","wifi_view_password_label":"PASSWORD","wifi_view_prompt_network_types":"Connettersi alle reti WPA 2.4 GHz disponibili.","wifi_view_reconnect_notice":"Durante questa procedura potrebbe essere necessario riconnettersi all\'Access Point Wi-Fi del dispositivo per continuare l\'installazione.","wifi_view_rescan":"RIPETI SCANSIONE","wifi_view_username_label":"NOME UTENTE","wifi_view_wpa2_password_label":"PASSWORD WPA2"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"Alertas","alerts_view_no_active_alerts":"No hay alertas activas","barcode_reader_checksum_error":"Código de barras no válido. Inténtelo de nuevo, asegurándose de enviar el código de barras correcto.","barcode_reader_format_error":"Formato de código de barras incorrecto. Inténtelo de nuevo y asegúrese de enviar el código de barras correcto.","barcode_reader_internal_error":"Escáner de código de barras no disponible. Proporcione la información manualmente.","barcode_reader_not_found":"No se ha podido detectar el código de barras. Inténtelo de nuevo asegurándose de que el código de barras se ve claramente y es lo suficientemente grande.","button_factory_reset":"RESTABLECER","button_label_confirm":"CONFIRMAR","button_label_factory_reset":"RESTABLECER VALORES DE FÁBRICA","connection_details_network_configured":"Configurada","connection_details_network_configured_ip":"Red configurada: {ipAddress}","connection_details_network_configured_ssid":"Red configurada: {ssid}","connection_details_network_configured_ssid_ip":"Red configurada: {ssid} ({ipAddress})","connection_details_network_not_connected":"No conectada","connection_modal_description":"Esto es lo esperado al apagar y después encender el dispositivo, se aplica una actualización de software o se realizan cambios en determinada configuración del dispositivo.{br}{br}Para continuar, es posible que tenga que volver a conectarse al punto de acceso wifi del dispositivo.","connection_modal_title":"Se ha perdido la conexión con el dispositivo","connection_status_network_configured":"Configurada","connection_status_network_connected":"Conectado","connection_status_network_connection_problem":"Problema de conexión","connection_status_network_disabled":"Discapacitado","connection_status_network_no_internet":"No hay conexión a Internet. Compruebe la configuración de la dirección IP y del enlace de subida a Internet.","connection_status_network_no_ip":"No se ha obtenido una dirección IP. Compruebe en la configuración del router si la dirección MAC está en alguna lista de bloqueo o similar.","connection_status_network_no_tesla":"No hay conexión con Tesla. Compruebe la configuración del router y del firewall.","connection_status_network_not_connected":"No conectada","control_connect":"CONECTAR","control_delete":"BORRAR","country_name_ad":"Andorra","country_name_ae":"Emiratos Árabes Unidos","country_name_am":"Armenia","country_name_at":"Austria","country_name_au":"Australia","country_name_ba":"Bosnia y Herzegovina","country_name_be":"Bélgica","country_name_bg":"Bulgaria","country_name_ca":"Canadá","country_name_ch":"Suiza","country_name_cn":"China","country_name_cy":"Chipre","country_name_cz":"República Checa","country_name_de":"Alemania","country_name_dk":"Dinamarca","country_name_ee":"Estonia","country_name_es":"España","country_name_fi":"Finlandia","country_name_fr":"Francia","country_name_gb":"Reino Unido","country_name_gi":"Gibraltar","country_name_gr":"Grecia","country_name_hk":"Hong Kong","country_name_hr":"Croacia","country_name_hu":"Hungría","country_name_ie":"Irlanda","country_name_il":"Israel","country_name_is":"Islandia","country_name_it":"Italia","country_name_jp":"Japón","country_name_kr":"Corea del Sur","country_name_li":"Liechtenstein","country_name_lt":"Lituania","country_name_lu":"Luxemburgo","country_name_lv":"Letonia","country_name_mc":"Mónaco","country_name_mo":"Macao","country_name_mt":"Malta","country_name_mx":"México","country_name_nl":"Países Bajos","country_name_no":"Noruega","country_name_nz":"Nueva Zelanda","country_name_pl":"Polonia","country_name_pt":"Portugal","country_name_ro":"Rumanía","country_name_rs":"Serbia","country_name_ru":"Rusia","country_name_se":"Suecia","country_name_sg":"Singapur","country_name_sk":"Eslovaquia","country_name_sm":"San Marino","country_name_tw":"Taiwán","country_name_uk":"Ucrania","country_name_us":"Estados Unidos","display_current_amps":"{current} A","display_energy_kilowatt_hours":"{energy} kWh","display_energy_watt_hours":"{energy} Wh","display_frequency_hertz":"{frequency} Hz","display_meter_site_export_power":"Exportación: {realPower} ","display_meter_site_import_power":"Importación: {realPower}","display_meter_solar_generation_power":"Generación: {realPower}","display_phase_type_unknown":"desconocido","display_power_kilowatts":"{power} kW","display_power_watts":"{power} W","display_resistance_kiloohms":"{resistance} kΩ","display_resistance_ohms":"{resistance} Ω","display_voltage_volts":"{voltage} V","dropdown_default_selection":"Seleccionar","error_boundary_label_error_details":"Detalles del error:","error_boundary_subtitle":"Bueno, esto es vergonzoso... Encontrado un error en la aplicación.","error_boundary_title":"¡Vaya! Algo salio mal","error_messages_invalid_password":"Contraseña no válida. Vuelva a intentarlo.","factory_reset_subtitle":"Borra toda la configuración de red y dispositivo. Se hara todo lo posible para desvincular los dispositivos emparejados Los datos de vida útil no se verán afectados.","grid_code_container_title":"Código de red ( Código de cuadrícula) ","grid_code_point_PINVrx_SmartInvSelect":"Funciones de inversor inteligente habilitadas","grid_code_point_nominal_grid_frequency":"Frecuencia nominal de la red","grid_code_point_nominal_grid_voltage":" Voltaje nominal de la red (L-N)","grid_code_point_nominal_pinv_voltage":"Tensión nominal de la red en las Powerwalls conectadas","grid_code_point_vf_limit_over_frequency_0_grid_following":"Límite de reconexiones por sobre frecuencia","grid_code_point_vf_limit_over_frequency_1_grid_following":"Disparo por sobrefrecuencia 1 - Límite","grid_code_point_vf_limit_over_voltage_0_grid_following":"Límite de reconexiones por sobretensión","grid_code_point_vf_limit_over_voltage_1_grid_following":"Disparo por Sobre voltaje 1 - Límite","grid_code_point_vf_limit_under_frequency_0_grid_following":"Límite de reconexiones por subfrecuencia","grid_code_point_vf_limit_under_frequency_1_grid_following":"Disparo por baja frecuencia 1 - Límite","grid_code_point_vf_limit_under_voltage_0_grid_following":"Límite de reconexiones por bajo voltaje","grid_code_point_vf_limit_under_voltage_1_grid_following":"Disparo por bajo voltaje 1 - Límite","grid_code_point_vf_param_allow_charging_while_qualifying":"Permite la carga de la batería durante el periodo de calificación de la red","grid_code_point_vf_timing_over_frequency_1_grid_following":"Disparo por sobrefrecuencia 1 - Temporización","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Tiempo de recalificación de la red del inversor","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Voltios","grid_code_unit_V_pu":"V / V_nominal","grid_code_unit_bool":"0 = no, 1 = sí","grid_code_unit_enum":"valor enumerado; consulte el manual","grid_code_unit_s":"segundos","grid_code_view_advanced_label":"CONFIGURACIÓN AVANZADA","grid_code_view_confirmation":"Confirmar que el código de red seleccionado corresponde a esta ubicación","grid_code_view_country_label":"PAÍS","grid_code_view_distributor_label":"Operador de red de distribución (DNO)","grid_code_view_filter_freq":"Actualmente, este sitio se encuentra fuera de la red. Permitir selección de todos los códigos de red.","grid_code_view_filter_freq_warning":"Seleccione cuidadosamente el código de red adecuado para asegurarse de que el sistema funcionará con el voltaje y la frecuencia correctos.","grid_code_view_frequency":"Frecuencia","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Confirme que el código de red preconfigurada se aplica a esta ubicación","grid_code_view_preconfigured_label":"CÓDIGO DE RED PRECONFIGURADA","grid_code_view_region_label":"REGIÓN","grid_code_view_reset_modal_body":"Este sitio tiene una configuración de código de red personalizada. Estos parámetros configurados se borran cuando se cambia o restablece el código de red.","grid_code_view_reset_modal_cancel_button":"Cancelar","grid_code_view_reset_modal_confirm_button":"Borrar ajustes y continuar","grid_code_view_reset_modal_header":"¿RESTABLECER SELECCIÓN DE CÓDIGO DE RED?","grid_code_view_reset_selection":"RESTABLECER SELECCIÓN DE CÓDIGO DE RED","grid_code_view_retailer_label":"COMERCIANTE","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"ESTÁNDAR","grid_code_view_utility_label":"RED ELÉCTRICA","grid_code_view_volt_freq_label":"VOLTAJE/FRECUENCIA","grid_code_view_voltage":"Voltaje","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"EDITAR","label_button_enter_manually":"INTRODUCIR MANUALMENTE","label_button_finish":"FINALIZAR","label_button_scan_barcode":"ESCANEAR CÓDIGO DE BARRAS","label_button_scan_qrcode":"ESCANEAR CÓDIGO QR","label_button_upload":"CARGAR","label_factory_reset":"RESTABLECIMIENTO DE FÁBRICA","label_form_input_file":"ARCHIVO","label_form_input_software_update":"ACTUALIZACIÓN DE SOFTWARE","label_model":"Modelo","label_part_number":"Número de pieza","label_part_number_psn":"Número de pieza (TPN)","label_serial_number":"Número de serie","label_serial_number_tsn":"Número de serie (TSN)","menu_card_label_active_alerts":"Activas: {alertCount}","menu_card_label_no_active_alerts":"Ninguna activa","menu_card_label_version":"Versión: {version}","modal_close":"CERRAR","modal_refresh":"ACTUALIZAR","modal_save":"GUARDAR","navigation_back":"ATRÁS","navigation_cancel":"CANCELAR","navigation_forward":"CONTINUAR","navigation_skip":"SALTAR","network_view_cable_connected_label":"Cable conectado:","network_view_connection_heading":"Conexión","network_view_connection_not_supported_label":"Conexión (no se admite)","network_view_disable_button_label":"Desactivar","network_view_dns_label_":"DNS:","network_view_edit_button_label":"Editar","network_view_enable_button_label":"Habilitar","network_view_enabled_info_label":"Habilitada:","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Móvil","network_view_internet_connection_label":"Conectado a Internet:","network_view_ip_address_label":"Dirección:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"Dirección MAC","network_view_mac_address_label":"Dirección MAC:","network_view_primary_connection_label":"Activo:","network_view_signal_strength_label":"Intensidad de la señal:","network_view_ssid_label":"Red configurada:","network_view_subnet_mask_label":"Subred:","network_view_tesla_connection_label":"Conectado a Tesla:","network_view_wifi_title":"Wi-Fi","network_view_wireless_connected_label":"Conectado:","not_found_description":"Disculpe, la página que busca no existe.","not_found_title":"404 No se encuentra esa página","password_input_view_password":"CONTRASEÑA","password_input_view_show_password":"Mostrar contraseña","phase_type_single":"Monofásica","phase_type_split":"Fase dividida","phase_type_three":"Trifásica","phase_type_two":"Bifásica","phase_type_wye_ll":"Conexión en Y L-L","prompt_required_field":"Este campo es obligatorio.","service_factory_reset_confirmation":"La configuración local se borrará y se reiniciará el dispositivo. Por favor, confirme.","sideload_container_subtitle":"Seleccione un archivo .bin","summary_container_title":"Resumen","title_installation":"Instalación","title_metering":"Medición","title_networks":"Redes","title_service":"Servicio","title_site_info":"Información del sitio","title_site_meter":"Medidor del emplazamiento","title_software":"Software","title_software_update":"Actualización de software","update_handshake_result_failed":"No se puede contactar con el servidor. Compruebe la conexión a internet del dispositivo e inténtelo de nuevo.","update_handshake_result_non_actionable":"No hay actualizaciones disponibles.","update_handshake_result_update_staged":"Hay una nueva versión de software disponible.","update_handshake_result_update_staged_version":"La versión de software {version} está disponible.","update_last_update_result_failed":"No se ha podido completar la actualización del software. Inténtelo de nuevo o póngase en contacto con el equipo de servicio de Tesla.","update_status_downloading":"Descargando actualización...","update_view_button_label_check_for_update":"BUSCAR ACTUALIZACIONES","update_view_button_label_install":"INSTALAR","update_view_check_notice_not_internet_connected":"Sin conexión a Internet no se puede comprobar si hay actualizaciones. Compruebe la configuración de red del dispositivo.","update_view_handshake_failed":"No se puede contactar con el servidor para comprobar si hay actualizaciones.","update_view_handshake_non_actionable":"No hay actualizaciones disponibles.","update_view_handshake_update_staged":"Hay una actualización disponible y se descargará en segundo plano.","update_view_install_notice_not_internet_connected":"No se puede descargar la actualización de software sin una conexión a internet. Compruebe la configuración de red del dispositivo.","update_view_label_current_version":"Versión actual: {version} ({identifier})","update_view_latest_version":"Versión más reciente: {version}","update_view_not_yet_checked":"Todavía no se ha comprobado si hay alguna actualización.","update_view_notice_automatic_update":"Haga clic para aplicar ahora. De otro modo, la actualización se instalará más tarde en segundo plano.","update_view_result_failed":"No se ha podido completar la actualización del software. Inténtelo de nuevo o póngase en contacto con el equipo de servicio de Tesla.","update_view_result_succeeded":"Se ha completado correctamente la actualización del software.","update_view_status_downloaded":"Descarga completada. Preparando actualización...","update_view_status_downloading":"Descargando actualización...","update_view_status_staged":"Actualización preparada. Haga clic en el botón de instalación para continuar.","wifi_page_available_networks":"Redes disponibles","wifi_page_cancel_button_label":"Cancelar","wifi_page_check_password":"No se puede conectar, compruebe la contraseña de Wi-Fi.","wifi_view_available_networks_subtitle":"REDES DISPONIBLES","wifi_view_button_label_join":"CONECTARSE","wifi_view_button_label_manual":"INTRODUCIR RED MANUALMENTE","wifi_view_input_label_ssid":"RED (SSID)","wifi_view_label_connecting_ssid":"Conectándose a {ssid}","wifi_view_mac_address_label":"Dirección MAC: {mac}","wifi_view_no_networks":"No se ha encontrado ninguna red Wi-Fi.","wifi_view_no_password_placeholder":"No se necesita contraseña","wifi_view_notice_joining":"Este proceso puede tardar unos minutos y es posible que el dispositivo se reinicie. Para continuar con la instalación, es posible que tenga que volver a conectarse al punto de acceso wifi.","wifi_view_password_label":"CONTRASEÑA","wifi_view_prompt_network_types":"Conectarse a redes WPA de 2,4 GHz disponibles.","wifi_view_reconnect_notice":"Durante el proceso es posible que tenga que volver a conectarse al punto de acceso Wi-Fi del dispositivo antes de continuar con la instalación.","wifi_view_rescan":"VOLVER A ESCANEAR","wifi_view_username_label":"NOMBRE DE USUARIO","wifi_view_wpa2_password_label":"CONTRASEÑA WPA2"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"Waarschuwingen","alerts_view_no_active_alerts":"Geen actieve waarschuwingen","barcode_reader_checksum_error":"Ongeldige barcode. Probeer het opnieuw en zorg ervoor dat u de juiste barcode indient.","barcode_reader_format_error":"Onjuiste barcode-indeling. Probeer het opnieuw en zorg ervoor dat u de juiste barcode indient.","barcode_reader_internal_error":"Barcodescanner niet beschikbaar. Geef de informatie handmatig op.","barcode_reader_not_found":"Barcode kon niet worden gedetecteerd. Probeer het opnieuw en zorg ervoor dat de barcode scherp en groot genoeg is.","button_factory_reset":"RESET","button_label_confirm":"BEVESTIGEN","button_label_factory_reset":"STANDAARD FABRIEKSINSTELLINGEN TERUGZETTEN","connection_details_network_configured":"Geconfigureerd","connection_details_network_configured_ip":"Geconfigureerd netwerk: {ipAddress}","connection_details_network_configured_ssid":"Geconfigureerd netwerk: {ssid}","connection_details_network_configured_ssid_ip":"Geconfigureerd netwerk: {ssid} ({ipAddress})","connection_details_network_not_connected":"Niet verbonden","connection_modal_description":"Dit is te verwachten wanneer het apparaat uit en weer aan word gezet, bij het toepassen van een software-update of wanneer bepaalde apparaatconfiguratie wordt gewijzigd.{br}{br}Mogelijk moet u opnieuw verbinding maken met het wifitoegangspunt van het apparaat om door te gaan.","connection_modal_title":"Verbinding met apparaat verbroken","connection_status_network_configured":"Geconfigureerd","connection_status_network_connected":"Verbonden","connection_status_network_connection_problem":"Verbindingsprobleem","connection_status_network_disabled":"Uitgeschakeld","connection_status_network_no_internet":"Geen verbinding met internet. Controleer IP-adresconfiguratie en internet-uplink.","connection_status_network_no_ip":"Geen IP-adres gekregen. Controleer de routerconfiguratie voor MAC-adresblokkeringslijsten of gelijkaardige instellingen.","connection_status_network_no_tesla":"Geen verbinding met Tesla. Controleer de router- en firewall-instellingen.","connection_status_network_not_connected":"Niet verbonden","control_connect":"AANSLUITEN","control_delete":"VERWIJDEREN","country_name_ad":"Andorra","country_name_ae":"Verenigde Arabische Emiraten","country_name_am":"Armenië","country_name_at":"Oostenrijk","country_name_au":"Australië","country_name_ba":"Bosnië en Herzegovina","country_name_be":"België","country_name_bg":"Bulgarije","country_name_ca":"Canada","country_name_ch":"Zwitserland","country_name_cn":"China","country_name_cy":"Cyprus","country_name_cz":"Tsjechië","country_name_de":"Duitsland","country_name_dk":"Denemarken","country_name_ee":"Estland","country_name_es":"Spanje","country_name_fi":"Finland","country_name_fr":"Frankrijk","country_name_gb":"Verenigd Koninkrijk","country_name_gi":"Gibraltar","country_name_gr":"Griekenland","country_name_hk":"Hongkong","country_name_hr":"Kroatië","country_name_hu":"Hongarije","country_name_ie":"Ierland","country_name_il":"Israël","country_name_is":"IJsland","country_name_it":"Italië","country_name_jp":"Japan","country_name_kr":"Zuid-Korea","country_name_li":"Liechtenstein","country_name_lt":"Litouwen","country_name_lu":"Luxemburg","country_name_lv":"Letland","country_name_mc":"Monaco","country_name_mo":"Macao","country_name_mt":"Malta","country_name_mx":"Mexico","country_name_nl":"Nederland","country_name_no":"Noorwegen","country_name_nz":"Nieuw-Zeeland","country_name_pl":"Polen","country_name_pt":"Portugal","country_name_ro":"Roemenië","country_name_rs":"Servië","country_name_ru":"Rusland","country_name_se":"Zweden","country_name_sg":"Singapore","country_name_sk":"Slowakije","country_name_sm":"San Marino","country_name_tw":"Taiwan","country_name_uk":"Oekraïne","country_name_us":"Verenigde Staten","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energy} kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_phase_type_unknown":"onbekend","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"Selecteren","error_boundary_label_error_details":"Foutdetails:","error_boundary_subtitle":"Wat is dit vervelend! Er is een fout opgetreden in de app.","error_boundary_title":"Oeps! Er is iets fout gegaan.","error_messages_invalid_password":"Ongeldig wachtwoord. Probeer het opnieuw.","factory_reset_subtitle":"Hiermee worden alle netwerk- en apparaatinstellingen gewist. Er wordt zo goed mogelijk geprobeerd om eventuele gekoppelde apparaten te ontkoppelen. Dit heeft geen invloed op levensduurgegevens.","grid_code_container_title":"Netcode","grid_code_point_PINVrx_SmartInvSelect":"Ingeschakelde functies voor slimme omvormer","grid_code_point_nominal_grid_frequency":"Nominale netfrequentie","grid_code_point_nominal_grid_voltage":" Nominale netspanning (L-N)","grid_code_point_nominal_pinv_voltage":"Nominale netspanning van aangesloten Powerwalls","grid_code_point_vf_limit_over_frequency_0_grid_following":"Bovenlimiet heraansluitingsfrequentie","grid_code_point_vf_limit_over_frequency_1_grid_following":"Over Frequency Trip 1 - Limit","grid_code_point_vf_limit_over_voltage_0_grid_following":"Bovenlimiet heraansluitingsspanning","grid_code_point_vf_limit_over_voltage_1_grid_following":"Over Voltage Trip 1 - Limit","grid_code_point_vf_limit_under_frequency_0_grid_following":"Onderlimiet heraansluitingsfrequentie","grid_code_point_vf_limit_under_frequency_1_grid_following":"Under Frequency Trip 1 - Limit","grid_code_point_vf_limit_under_voltage_0_grid_following":"Onderlimiet heraansluitingsspanning","grid_code_point_vf_limit_under_voltage_1_grid_following":"Under Voltage Trip 1 - Limit","grid_code_point_vf_param_allow_charging_while_qualifying":"Opladen van de batterij toestaan tijdens de kwalificatieperiode van het net","grid_code_point_vf_timing_over_frequency_1_grid_following":"Over Frequency Trip 1 - Timing","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Omvormer herkwalificatietijd net","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Volt","grid_code_unit_V_pu":"V / V_nominal","grid_code_unit_bool":"0 = nee, 1 = ja","grid_code_unit_enum":"genummerde waarde, zie handleiding","grid_code_unit_s":"seconden","grid_code_view_advanced_label":"GEAVANCEERDE INSTELLINGEN","grid_code_view_confirmation":"Bevestig dat de geselecteerde netcode van toepassing is op deze locatie","grid_code_view_country_label":"LAND","grid_code_view_distributor_label":"NETBEHEERDER","grid_code_view_filter_freq":"Deze locatie is momenteel niet met het elektriciteitsnet verbonden. Keuze uit alle netcodes toestaan.","grid_code_view_filter_freq_warning":"Selecteer zorgvuldig de juiste netcode om ervoor te zorgen dat het systeem op de gewenste spanning en frequentie draait.","grid_code_view_frequency":"Frequentie","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Bevestig dat de voorgeconfigureerde netcode van toepassing is op deze locatie","grid_code_view_preconfigured_label":"VOORGECONFIGUREERDE NETCODE","grid_code_view_region_label":"REGIO","grid_code_view_reset_modal_body":"Deze locatie heeft aangepaste instellingen voor de netcode. Deze geconfigureerde instellingen worden gewist wanneer de netcode wordt gewijzigd of gereset.","grid_code_view_reset_modal_cancel_button":"Annuleren","grid_code_view_reset_modal_confirm_button":"Instellingen wissen en doorgaan","grid_code_view_reset_modal_header":"SELECTIE VAN NETCODE RESETTEN?","grid_code_view_reset_selection":"SELECTIE VAN NETCODE RESETTEN","grid_code_view_retailer_label":"ENERGIELEVERANCIER","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"NETCODE","grid_code_view_utility_label":"ENERGIEMAATSCHAPPIJ","grid_code_view_volt_freq_label":"SPANNING/FREQUENTIE","grid_code_view_voltage":"Spanning","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"BEWERKEN","label_button_enter_manually":"HANDMATIG INVOEREN","label_button_finish":"VOLTOOIEN","label_button_scan_barcode":"BARCODE SCANNEN","label_button_scan_qrcode":"QR-CODE SCANNEN","label_button_upload":"UPLOADEN","label_factory_reset":"INSTELLINGEN WISSEN","label_form_input_file":"BESTAND","label_form_input_software_update":"SOFTWARE-UPDATE","label_model":"Model","label_part_number":"Onderdeelnummer","label_part_number_psn":"Onderdeelnummer (TPN)","label_serial_number":"Serienummer","label_serial_number_tsn":"Serienummer (TSN)","menu_card_label_active_alerts":"Actief: {alertCount}","menu_card_label_no_active_alerts":"Geen actief","menu_card_label_version":"Versie: {version}","modal_close":"SLUITEN","modal_refresh":"VERNIEUWEN","modal_save":"OPSLAAN","navigation_back":"TERUG","navigation_cancel":"ANNULEREN","navigation_forward":"DOORGAAN","navigation_skip":"OVERSLAAN","network_view_cable_connected_label":"Kabel aangesloten:","network_view_connection_heading":"Verbinding","network_view_connection_not_supported_label":"Verbinding (niet ondersteund)","network_view_disable_button_label":"Uitschakelen","network_view_dns_label_":"DNS:","network_view_edit_button_label":"Bewerken","network_view_enable_button_label":"Inschakeling","network_view_enabled_info_label":"Ingeschakeld:","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Mobiel","network_view_internet_connection_label":"Verbonden met internet:","network_view_ip_address_label":"Adres:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"MAC-adres","network_view_mac_address_label":"MAC-adres:","network_view_primary_connection_label":"Actief:","network_view_signal_strength_label":"Signaalsterkte:","network_view_ssid_label":"Geconfigureerd netwerk:","network_view_subnet_mask_label":"Subnet:","network_view_tesla_connection_label":"Verbonden met Tesla:","network_view_wifi_title":"Wifi","network_view_wireless_connected_label":"Verbonden:","not_found_description":"Het spijt ons, maar de pagina die u zoekt bestaat niet.","not_found_title":"404 pagina niet gevonden","password_input_view_password":"PASWOORD","password_input_view_show_password":"Paswoord tonen","phase_type_single":"Enkele fase","phase_type_split":"Gesplitste fasen","phase_type_three":"Drie fasen","phase_type_two":"Twee fasen","phase_type_wye_ll":"Wye L-L","prompt_required_field":"Dit veld is vereist.","service_factory_reset_confirmation":"De lokale instellingen worden verwijderd en het apparaat wordt opnieuw opgestart. Bevestig.","sideload_container_subtitle":"Selecteer een .bin-bestand","summary_container_title":"Overzicht","title_installation":"Installatie","title_networks":"Netwerken","title_service":"Service","title_site_meter":"Locatiemeter","title_software":"Software","title_software_update":"Software-update","update_handshake_result_failed":"Kan geen contact maken met de server. Controleer de internetverbinding van het apparaat en probeer het opnieuw.","update_handshake_result_non_actionable":"Geen updates beschikbaar.","update_handshake_result_update_staged":"Er is een nieuwe softwareversie beschikbaar.","update_handshake_result_update_staged_version":"Softwareversie {version} is beschikbaar.","update_last_update_result_failed":"De nieuwste software-update is mislukt. Probeer het opnieuw of neem contact op met Tesla Service.","update_status_downloading":"Update downloaden...","update_view_button_label_check_for_update":"CONTROLEREN OP UPDATE","update_view_button_label_install":"INSTALLEREN","update_view_check_notice_not_internet_connected":"Kan niet zoeken naar updates zonder internetverbinding. Controleer de netwerkconfiguratie van het apparaat.","update_view_handshake_failed":"Kan geen contact maken met de server om te controleren of er een update is.","update_view_handshake_non_actionable":"Er zijn geen updates beschikbaar.","update_view_handshake_update_staged":"Er is een update beschikbaar, die in de achtergrond wordt gedownload.","update_view_install_notice_not_internet_connected":"Kan de software-update niet downloaden zonder internetverbinding. Controleer de netwerkconfiguratie van het apparaat.","update_view_label_current_version":"Huidige versie: {version} ({identifier})","update_view_latest_version":"Nieuwste versie: {version}","update_view_not_yet_checked":"Nog niet gecontroleerd op update.","update_view_notice_automatic_update":"Klik om nu toe te passen. Anders wordt de update later in de achtergrond geïnstalleerd.","update_view_result_failed":"De nieuwste software-update is mislukt. Probeer het opnieuw of neem contact op met Tesla Service.","update_view_result_succeeded":"De laatste software-update is geslaagd.","update_view_status_downloaded":"Download voltooid. Tijdelijk opslaan update...","update_view_status_downloading":"Update downloaden...","update_view_status_staged":"Update tijdelijk opgeslagen. Klik op de installatieknop om door te gaan.","wifi_view_available_networks_subtitle":"BESCHIKBARE NETWERKEN","wifi_view_button_label_join":"VERBINDEN","wifi_view_button_label_manual":"HANDMATIG NETWERK INVOEREN","wifi_view_input_label_ssid":"NETWERK (SSID)","wifi_view_label_connecting_ssid":"Verbinding maken met {ssid}","wifi_view_mac_address_label":"MAC-adres: {mac}","wifi_view_no_networks":"Geen wifinetwerken gevonden!","wifi_view_no_password_placeholder":"Geen paswoord vereist","wifi_view_notice_joining":"Het proces kan enkele minuten duren en kan ervoor zorgen dat het apparaat opnieuw wordt opgestart. Mogelijk moet u opnieuw verbinding maken met het wifitoegangspunt van het apparaat om door te gaan met de installatie.","wifi_view_password_label":"PASWOORD","wifi_view_prompt_network_types":"Maak verbinding met beschikbare 2,4 GHz WPA-netwerken.","wifi_view_reconnect_notice":"Tijdens dit proces moet u mogelijk opnieuw verbinding maken met het wifi-toegangspunt van het apparaat om de installatie voort te zetten.","wifi_view_rescan":"OPNIEUW SCANNEN","wifi_view_username_label":"GEBRUIKERSNAAM","wifi_view_wpa2_password_label":"WPA2-WACHTWOORD"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"Alertes","alerts_view_no_active_alerts":"Pas d\'alerte active","barcode_reader_checksum_error":"Code-barres non valide. Veuillez réessayer en vous assurant que le code-barres correct est envoyé.","barcode_reader_format_error":"Format de code-barres incorrect. Veuillez réessayer en vous assurant que le code-barres correct est envoyé.","barcode_reader_internal_error":"Lecteur de code-barres indisponible. Feuillez fournir les informations manuellement.","barcode_reader_not_found":"Le code-barres n\'a pas pu être détecté. Veuillez réessayer en vous assurant que le code-barres est centré et suffisamment large.","button_factory_reset":"RÉINITIALISER","button_label_confirm":"CONFIRMER","button_label_factory_reset":"RÉTABLIR LES PARAMÈTRES D\'USINE","connection_details_network_configured":"Configuré","connection_details_network_configured_ip":"Réseau configuré: {AdresseIP}","connection_details_network_configured_ssid":"Réseau configuré: {ssid}","connection_details_network_configured_ssid_ip":"Réseau configuré : {ssid} ({AdresseIP})","connection_details_network_not_connected":"Déconnecté","connection_modal_description":"Ce comportement est prévisible lors de la mise sous tension de l\'appareil, de la mise en œuvre d\'une mise à jour logicielle, ou lorsque des modifications sont apportées à une certaine configuration de l\'appareil.{br}{br}Vous devrez peut-être vous reconnecter au point d\'accès Wi-Fi de l\'appareil pour continuer.","connection_modal_title":"Perte de la connexion à l\'appareil","connection_status_network_configured":"Configuré","connection_status_network_connected":"Connecté","connection_status_network_connection_problem":"Problème de connexion","connection_status_network_disabled":"Désactivé","connection_status_network_no_internet":"Pas de connexion à Internet. Vérifiez la configuration de l\'adresse IP et la liaison montante vers Internet.","connection_status_network_no_ip":"N\'a pas obtenu d\'adresse IP. Vérifiez la configuration du routeur pour les listes de blocs d\'adresses MAC ou semblables.","connection_status_network_no_tesla":"Pas de connexion avec Tesla. Vérifiez les paramètres du routeur et du pare-feu.","connection_status_network_not_connected":"Déconnecté","control_connect":"RELIER","control_delete":"SUPPRIMER","country_name_ad":"Andorre","country_name_ae":"Émirats arabes unis","country_name_am":"Arménie","country_name_at":"Autriche","country_name_au":"Australie","country_name_ba":"Bosnie-Herzégovine","country_name_be":"Belgique","country_name_bg":"Bulgarie","country_name_ca":"Canada","country_name_ch":"Suisse","country_name_cn":"Chine","country_name_cy":"Chypre","country_name_cz":"Tchéquie","country_name_de":"Allemagne","country_name_dk":"Danemark","country_name_ee":"Estonie","country_name_es":"Espagne","country_name_fi":"Finlande","country_name_fr":"France","country_name_gb":"Royaume-Uni","country_name_gi":"Gibraltar","country_name_gr":"Grèce","country_name_hk":"Hong Kong","country_name_hr":"Croatie","country_name_hu":"Hongrie","country_name_ie":"Irlande","country_name_il":"Israël","country_name_is":"Islande","country_name_it":"Italie","country_name_jp":"Japon","country_name_kr":"Corée du Sud","country_name_li":"Liechtenstein","country_name_lt":"Lituanie","country_name_lu":"Luxembourg","country_name_lv":"Lettonie","country_name_mc":"Monaco","country_name_mo":"Macao","country_name_mt":"Malte","country_name_mx":"Mexique","country_name_nl":"Pays-Bas","country_name_no":"Norvège","country_name_nz":"Nouvelle Zélande","country_name_pl":"Pologne","country_name_pt":"Portugal","country_name_ro":"Roumanie","country_name_rs":"Serbie","country_name_ru":"Russie","country_name_se":"Suède","country_name_sg":"Singapour","country_name_sk":"Slovaquie","country_name_sm":"Saint-Marin","country_name_tw":"Taïwan","country_name_uk":"Ukraine","country_name_us":"États-Unis","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energy}kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_meter_site_export_power":"{realPower} Exportation","display_meter_site_import_power":"{realPower} Importation","display_meter_solar_generation_power":"{realPower} Génération","display_phase_type_unknown":"inconnu","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"Sélectionner","error_boundary_label_error_details":"Détails de l\'erreur :","error_boundary_subtitle":"C\'est assez embarrassant. Nous avons rencontré une erreur dans l\'application.","error_boundary_title":"Mince alors ! Une erreur s’est produite.","error_messages_invalid_password":"Mot de passe non valide. Veuillez réessayer.","factory_reset_subtitle":"Supprime tous les paramètres du réseau et de l\'appareil. Nous tenterons de désapparier tout appareil associé. Les données relatives à la durée de vie ne seront pas affectées.","grid_code_container_title":"Norme électrique","grid_code_point_PINVrx_SmartInvSelect":"Caractéristiques de l\'onduleur intelligent activé","grid_code_point_nominal_grid_frequency":"Fréquence nominale du réseau","grid_code_point_nominal_grid_voltage":" Tension nominale du réseau (L-N)","grid_code_point_nominal_pinv_voltage":"Tension nominale du réseau des Powerwalls","grid_code_point_vf_limit_over_frequency_0_grid_following":"Limite de reconnexion de surfréquence","grid_code_point_vf_limit_over_frequency_1_grid_following":"Over Frequency Trip 1 - Limit","grid_code_point_vf_limit_over_voltage_0_grid_following":"Limite de reconnexion de surtension","grid_code_point_vf_limit_over_voltage_1_grid_following":"Over Voltage Trip 1 - Limit","grid_code_point_vf_limit_under_frequency_0_grid_following":"Limite de reconnexion de sous-fréquence","grid_code_point_vf_limit_under_frequency_1_grid_following":"Under Frequency Trip 1 - Limit","grid_code_point_vf_limit_under_voltage_0_grid_following":"Limite de reconnexion de sous tension","grid_code_point_vf_limit_under_voltage_1_grid_following":"Under Voltage Trip 1 - Limit","grid_code_point_vf_param_allow_charging_while_qualifying":"Permet la recharge de la batterie pendant la période de qualification du réseau","grid_code_point_vf_timing_over_frequency_1_grid_following":"Over Frequency Trip 1 - Timing","grid_code_point_vf_timing_over_voltage_1_grid_following":"Over Voltage Trip 1 - Timing","grid_code_point_vf_timing_qualifying_time_grid_following":"Heure de requalification du réseau de l\'onduleur","grid_code_point_vf_timing_under_frequency_1_grid_following":"Under Frequency Trip 1 - Timing","grid_code_point_vf_timing_under_voltage_1_grid_following":"Under Voltage Trip 1 - Timing","grid_code_unit_Hz":"Hz","grid_code_unit_V":"Volts","grid_code_unit_V_pu":"V / V_nominal","grid_code_unit_bool":"0 = non, 1 = oui","grid_code_unit_enum":"valeur énumérée, voir le manuel","grid_code_unit_s":"secondes","grid_code_view_advanced_label":"PARAMÈTRES AVANCÉS","grid_code_view_confirmation":"Confirmez que la norme électrique sélectionnée s’applique à ce lieu","grid_code_view_country_label":"PAYS","grid_code_view_distributor_label":"DISTRIBUTEUR","grid_code_view_filter_freq":"Le Powerwall n\'est pas actuellement connecté au réseau électrique. Veuillez parcourir les normes électriques disponibles afin de sélectionner celle qui s\'applique à votre localisation.","grid_code_view_filter_freq_warning":"Sélectionnez la norme électrique pour vous assurer que le système fonctionne à la tension et à la fréquence correcte.","grid_code_view_frequency":"Fréquence","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"Confirme que le code de réseau sélectionné s’applique à ce lieu","grid_code_view_preconfigured_label":"CODE DE RÉSEAU PRÉCONFIGURÉ","grid_code_view_region_label":"RÉGION","grid_code_view_reset_modal_body":"Ce site utilise des paramètres de code de réseau personnalisés. Ces paramètres personnalisés sont effacés lorsque le code de réseau est modifié ou réinitialisé.","grid_code_view_reset_modal_cancel_button":"Annuler","grid_code_view_reset_modal_confirm_button":"Effacer les paramètres et continuer","grid_code_view_reset_modal_header":"RÉINITIALISER LA SÉLECTION DE CODE DE RÉSEAU ?","grid_code_view_reset_selection":"RÉINITIALISER LA SÉLECTION DE CODE DE RÉSEAU","grid_code_view_retailer_label":"FOURNISSEUR","grid_code_view_settings_summary":"{voltage} {fréquence} {phase}","grid_code_view_standard_label":"NORME ELECTRIQUE","grid_code_view_utility_label":"PRODUCTEUR","grid_code_view_volt_freq_label":"TENSION/FRÉQUENCE","grid_code_view_voltage":"Tension","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"ÉDITER","label_button_enter_manually":"SAISIR MANUELLEMENT","label_button_finish":"TERMINER","label_button_scan_barcode":"SCANNER LE CODE-BARRES","label_button_scan_qrcode":"SCANNER LE QR CODE","label_button_upload":"TRANSFÉRER","label_factory_reset":"RESTAURATION D\'USINE","label_form_input_file":"FICHIER","label_form_input_software_update":"METTRE À JOUR","label_model":"Modèle","label_part_number":"Référence","label_part_number_psn":"Référence (TPN)","label_serial_number":"Numéro de série","label_serial_number_tsn":"N° de série (TSN)","menu_card_label_active_alerts":"Actif : {alertCount}","menu_card_label_no_active_alerts":"Aucune active","menu_card_label_version":"Version : {version}","modal_close":"FERMER","modal_refresh":"ACTUALISER","modal_save":"ENREGISTRER","navigation_back":"RETOUR","navigation_cancel":"ANNULER","navigation_forward":"CONTINUER","navigation_skip":"IGNORER","network_view_cable_connected_label":"Câble connecté :","network_view_connection_heading":"Connexion","network_view_connection_not_supported_label":"Connexion (non prise en charge)","network_view_disable_button_label":"Désactiver","network_view_dns_label_":"DNS :","network_view_edit_button_label":"Modifier","network_view_enable_button_label":"Activer","network_view_enabled_info_label":"Activé :","network_view_ethernet_title":"Ethernet","network_view_gsm_title":"Cellulaire","network_view_internet_connection_label":"Connecté à Internet :","network_view_ip_address_label":"Adresse :","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"Adresse MAC","network_view_mac_address_label":"Adresse MAC :","network_view_primary_connection_label":"Actif :","network_view_signal_strength_label":"Puissance du signal :","network_view_ssid_label":"Réseau configuré :","network_view_subnet_mask_label":"Sous-réseau :","network_view_tesla_connection_label":"Connecté à Tesla :","network_view_wifi_title":"Wi-Fi","network_view_wireless_connected_label":"Connecté :","not_found_description":"Désolé, la page que vous cherchez n’existe pas.","not_found_title":"404 page introuvable","password_input_view_password":"MOT DE PASSE","password_input_view_show_password":"Afficher le mot de passe","phase_type_single":"Monophasé","phase_type_split":"Phase auxiliaire","phase_type_three":"Triphasé","phase_type_two":"Biphasé","phase_type_wye_ll":"Wye L-L","prompt_required_field":"Ce champ est obligatoire.","service_factory_reset_confirmation":"Les paramètres locaux seront supprimés et l\'appareil redémarrera. Veuillez S.V.P. Confirmer.","sideload_container_subtitle":"Sélectionner un fichier .bin","summary_container_title":"Synthèse","title_installation":"Installation","title_metering":"Comptage","title_networks":"Réseaux","title_service":"Entretien","title_site_info":"Informations sur le site","title_site_meter":"Compteur de site","title_software":"Logiciel","title_software_update":"Mise à jour du logiciel","update_handshake_result_failed":"Impossible de contacter le serveur. Vérifiez la connexion Internet de l\'appareil et réessayez.","update_handshake_result_non_actionable":"Aucune mise à jour disponible.","update_handshake_result_update_staged":"Une nouvelle version du logiciel est disponible.","update_handshake_result_update_staged_version":"La version {version} du logiciel est disponible.","update_last_update_result_failed":"La dernière mise à jour du logiciel a échoué. Veuillez réessayer ou contacter l\'assistance Tesla.","update_status_downloading":"Téléchargement de la mise à jour...","update_view_button_label_check_for_update":"VÉRIFIER LES MISES À JOUR","update_view_button_label_install":"INSTALLER","update_view_check_notice_not_internet_connected":"Impossible de rechercher des mises à jour sans connexion Internet. Vérifiez la configuration de la mise en réseau de l\'appareil.","update_view_handshake_failed":"Impossible de contacter le serveur pour vérifier la mise à jour.","update_view_handshake_non_actionable":"Pas de mise à jour disponible.","update_view_handshake_update_staged":"Une mise à jour est disponible et sera téléchargée en arrière-plan.","update_view_install_notice_not_internet_connected":"Téléchargement d\'une mise à jour logicielle impossible sans connexion Internet. Vérifiez la configuration de la mise en réseau de l\'appareil.","update_view_label_current_version":"Version actuelle : {version} ({identifier})","update_view_latest_version":"Dernière version : {version}","update_view_not_yet_checked":"Vérification de mise à jour pas encore effectuée.","update_view_notice_automatic_update":"Cliquez ici pour appliquer maintenant. Dans le cas contraire, la mise à jour sera installée ultérieurement en arrière-plan.","update_view_result_failed":"La dernière mise à jour du logiciel a échoué. Veuillez réessayer ou contacter l\'assistance Tesla.","update_view_result_succeeded":"La dernière mise à jour du logiciel a réussi.","update_view_status_downloaded":"Téléchargement terminé. Organisation de la mise à jour...","update_view_status_downloading":"Téléchargement de la mise à jour...","update_view_status_staged":"Mise à jour organisée. Cliquez sur le bouton d\'installation pour poursuivre.","wifi_page_available_networks":"Réseaux disponibles","wifi_page_cancel_button_label":"Annuler","wifi_page_check_password":"Impossible de se connecter, veuillez vérifier le mot de passe du Wi-Fi.","wifi_view_available_networks_subtitle":"RÉSEAUX DISPONIBLES","wifi_view_button_label_join":"REJOINDRE","wifi_view_button_label_manual":"SAISIR MANUELLEMENT LE RÉSEAU","wifi_view_input_label_ssid":"RÉSEAU (SSID)","wifi_view_label_connecting_ssid":"Connexion à {ssid}","wifi_view_mac_address_label":"Adresse MAC : {mac}","wifi_view_no_networks":"Aucun réseau Wi-Fi trouvé !","wifi_view_no_password_placeholder":"Aucun mot de passe requis","wifi_view_notice_joining":"Ce processus peut prendre plusieurs minutes et entraîner un redémarrage de l\'appareil. Il se peut que vous deviez vous reconnecter au point d\'accès Wi-Fi de l\'appareil pour continuer l\'installation.","wifi_view_password_label":"MOT DE PASSE","wifi_view_prompt_network_types":"Connectez-vous aux réseaux WPA de 2,4 Ghz disponibles.","wifi_view_reconnect_notice":"Pendant ce processus, il se peut que vous deviez vous reconnecter au point d\'accès Wi-Fi pour continuer l\'installation.","wifi_view_rescan":"RELANCER LA RECHERCHE","wifi_view_username_label":"NOM D\'UTILISATEUR","wifi_view_wpa2_password_label":"MOT DE PASSE WPA2"}' ); }, function (e) { e.exports = JSON.parse( '{"alert_container_title":"アラート","alerts_view_no_active_alerts":"アクティブなアラートがありません","barcode_reader_checksum_error":"無効なバーコードです。正しいバーコードを送信していることを確認したうえでやり直してください。","barcode_reader_format_error":"無効なバーコードのフォーマットです。正しいバーコードを送信していることを確認したうえでやり直してください。","barcode_reader_internal_error":"バーコード スキャナが使用できません。情報を手入力してください。","barcode_reader_not_found":"バーコードを検出できませんでした。バーコードは、確実に焦点を当て、十分な大きさになるようにしてください。","button_factory_reset":"リセット","button_label_confirm":"確定","button_label_factory_reset":"工場デフォルトにリセット","connection_details_network_configured":"構成済み","connection_details_network_configured_ip":"構成済みのネットワーク: {ipAddress}","connection_details_network_configured_ssid":"構成済みのネットワーク: {ssid}","connection_details_network_configured_ssid_ip":"構成済みのネットワーク: {ssid} ({ipAddress})","connection_details_network_connected":"接続されています","connection_details_network_connected_ip":"({ipAddress})に接続されています","connection_details_network_connected_to_ssid":"{ssid}に接続されています","connection_details_network_connected_to_ssid_ip":"{ssid}({ipAddress})に接続されています","connection_details_network_not_connected":"接続されていません","connection_modal_description":"これは、デバイスの電源を入れ直した場合、ソフトウェアを更新した場合、特定のデバイスの設定を変更した場合に起こりえます。{br}{br}継続するにはそのデバイスのWi-Fiアクセス ポイントに再接続する必要がある場合があります。","connection_modal_title":"デバイスへの接続が失われました","connection_status_network_configured":"設定済み","connection_status_network_connected":"接続されました","connection_status_network_connection_problem":"接続問題","connection_status_network_disabled":"無効になっています","connection_status_network_no_internet":"インターネットと接続されていません。IPアドレスの構成とインターネット アップリンクを確認してください。","connection_status_network_no_ip":"IPアドレスが割り当てられていません。ルーター構成でMACアドレス ブロック リストなどの情報を確認してください。","connection_status_network_no_tesla":"Teslaに接続されていません。ルーターとファイアウォールの設定を確認してください。","connection_status_network_not_connected":"接続されていません","control_connect":"接続","control_delete":"削除","country_name_ad":"アンドラ","country_name_ae":"アラブ首長国連邦","country_name_am":"アメリカ","country_name_at":"オーストリア","country_name_au":"オーストラリア","country_name_ba":"ボスニア・ヘルツェゴビナ","country_name_be":"ベルギー","country_name_bg":"ブルガリア","country_name_ca":"カナダ","country_name_ch":"スイス","country_name_cn":"中国","country_name_cy":"キプロス","country_name_cz":"チェコ共和国","country_name_de":"ドイツ","country_name_dk":"デンマーク","country_name_ee":"エストニア","country_name_es":"スペイン","country_name_fi":"フィンランド","country_name_fr":"フランス","country_name_gb":"英国","country_name_gi":"ジブラルタル","country_name_gr":"ギリシャ","country_name_hk":"香港","country_name_hr":"クロアチア","country_name_hu":"ハンガリー","country_name_ie":"アイルランド","country_name_il":"イスラエル","country_name_is":"アイスランド","country_name_it":"イタリア","country_name_jp":"日本","country_name_kr":"韓国","country_name_li":"リヒテンシュタイン","country_name_lt":"リトアニア","country_name_lu":"ルクセンブルク","country_name_lv":"ラトビア","country_name_mc":"モナコ","country_name_mo":"マカオ","country_name_mt":"マルタ","country_name_mx":"メキシコ","country_name_nl":"オランダ","country_name_no":"ノルウェー","country_name_nz":"ニュージーランド","country_name_pl":"ポーランド","country_name_pt":"ポルトガル","country_name_ro":"ルーマニア","country_name_rs":"セルビア","country_name_ru":"ロシア","country_name_se":"スウェーデン","country_name_sg":"シンガポール","country_name_sk":"スロバキア","country_name_sm":"サンマリノ","country_name_tw":"台湾","country_name_uk":"ウクライナ","country_name_us":"米国","display_current_amps":"{current}A","display_energy_kilowatt_hours":"{energy}kWh","display_energy_watt_hours":"{energy}Wh","display_frequency_hertz":"{frequency}Hz","display_meter_site_export_power":"{realPower}エクスポート","display_meter_site_import_power":"{realPower}インポート","display_meter_solar_generation_power":"{realPower}生成","display_phase_type_unknown":"不明","display_power_kilowatts":"{power}kW","display_power_watts":"{power}W","display_resistance_kiloohms":"{resistance}kΩ","display_resistance_ohms":"{resistance}Ω","display_voltage_volts":"{voltage}V","dropdown_default_selection":"選択","error_boundary_label_error_details":"エラーの内容:","error_boundary_subtitle":"アプリケーションにエラーが発生しました。","error_boundary_title":"問題が発生しました。","error_messages_invalid_password":"パスワードが無効です。もう一度実行してください。","factory_reset_subtitle":"すべてのネットワーク設定とデバイス設定をクリアします。ペアリングされているデバイスのペアリング解除のためにベストエフォートが実施されます。寿命データは影響を受けません。","grid_code_container_title":"グリッドコード:","grid_code_point_PINVrx_SmartInvSelect":"スマート インバーター機能が有効です","grid_code_point_nominal_grid_frequency":"公称配電網周波数","grid_code_point_nominal_grid_voltage":" 公称配電網電圧(L-N)","grid_code_point_nominal_pinv_voltage":"接続されているPowerwallの公称配電網電圧","grid_code_point_vf_limit_over_frequency_0_grid_following":"周波数再接続限度を超えています","grid_code_point_vf_limit_over_frequency_1_grid_following":"OFR","grid_code_point_vf_limit_over_voltage_0_grid_following":"電圧再接続限度を超えています","grid_code_point_vf_limit_over_voltage_1_grid_following":"OVR","grid_code_point_vf_limit_under_frequency_0_grid_following":"周波数再接続限度に達していません","grid_code_point_vf_limit_under_frequency_1_grid_following":"UFR","grid_code_point_vf_limit_under_voltage_0_grid_following":"電圧再接続限度に達していません","grid_code_point_vf_limit_under_voltage_1_grid_following":"UVR","grid_code_point_vf_param_allow_charging_while_qualifying":"配電網認定期間はバッテリー充電ができます","grid_code_point_vf_timing_over_frequency_1_grid_following":"OFR 時限","grid_code_point_vf_timing_over_voltage_1_grid_following":"OVR 時限","grid_code_point_vf_timing_qualifying_time_grid_following":"インバーター再接続時間","grid_code_point_vf_timing_under_frequency_1_grid_following":"UFR 時限","grid_code_point_vf_timing_under_voltage_1_grid_following":"UVR 時限","grid_code_unit_Hz":"Hz","grid_code_unit_V":"ボルト","grid_code_unit_V_pu":"p.u.","grid_code_unit_bool":"0 = いいえ、1 = はい","grid_code_unit_enum":"列挙値については、マニュアルを参照してください","grid_code_unit_s":"秒","grid_code_view_advanced_label":"詳細設定","grid_code_view_confirmation":"選択されたグリッド コードがこの場所に適用されることを確認します。","grid_code_view_country_label":"国","grid_code_view_distributor_label":"DNO","grid_code_view_filter_freq":"このサイトは、現在オフグリッドです。すべてのグリッド コードからの選択を許可。","grid_code_view_filter_freq_warning":"システムが意図した電圧および周波数で動作することを保証するために適切なグリッド コードを慎重に選択してください。","grid_code_view_frequency":"周波数","grid_code_view_missing_reading":"--","grid_code_view_preconfigured_confirmation":"事前設定済みグリッド コードがこの場所に適用されることを確認します。","grid_code_view_preconfigured_label":"事前設定済みグリッド コード","grid_code_view_region_label":"都道府県","grid_code_view_reset_modal_body":"特定のグリットコードの設定がされています。設定は変更・リセットすると初期化されます。","grid_code_view_reset_modal_cancel_button":"キャンセル","grid_code_view_reset_modal_confirm_button":"設定を取り消して次に進む","grid_code_view_reset_modal_header":"グリットコードの設定をリセットしますか?","grid_code_view_reset_selection":"グリッド コードの選択をリセットします","grid_code_view_retailer_label":"電力小売り事業者","grid_code_view_settings_summary":"{voltage} {frequency} {phase}","grid_code_view_standard_label":"規格","grid_code_view_utility_label":"電力会社","grid_code_view_volt_freq_label":"電圧/周波数","grid_code_view_voltage":"電圧","grid_code_view_voltage_reading_split":"{voltageLN} / {voltageLL}","label_button_edit":"編集","label_button_enter_manually":"手入力","label_button_finish":"完了","label_button_scan_barcode":"バーコードをスキャン","label_button_scan_qrcode":"QRコードをスキャン","label_button_upload":"アップロード","label_factory_reset":"出荷時状態にリセット","label_form_input_file":"ファイル","label_form_input_software_update":"ソフトウェア アップデート","label_model":"モデル","label_part_number":"部品番号","label_part_number_psn":"部品番号 (TPN)","label_serial_number":"シリアル番号","label_serial_number_tsn":"シリアル番号 (TSN)","menu_card_label_active_alerts":"アクティブ: {alertCount}","menu_card_label_no_active_alerts":"アクティブなし","menu_card_label_version":"バージョン: {version}","modal_close":"閉じる","modal_refresh":"更新","modal_save":"保存","navigation_back":"戻る","navigation_cancel":"キャンセル","navigation_forward":"次へ","navigation_skip":"スキップ","network_view_cable_connected_label":"ケーブル接続されています:","network_view_connection_heading":"接続","network_view_connection_not_supported_label":"接続(サポート対象外)","network_view_disable_button_label":"無効","network_view_dns_label_":"DNS:","network_view_edit_button_label":"編集","network_view_enable_button_label":"有効","network_view_enabled_info_label":"有効:","network_view_ethernet_title":"イーサネット","network_view_gsm_title":"モバイルデータ通信","network_view_internet_connection_label":"インターネットに接続されています:","network_view_ip_address_label":"アドレス:","network_view_ip_info_heading":"IP","network_view_mac_address_heading":"MACアドレス","network_view_mac_address_label":"MACアドレス:","network_view_primary_connection_label":"アクティブ:","network_view_signal_strength_label":"信号強度:","network_view_ssid_label":"構成済みのネットワーク:","network_view_subnet_mask_label":"サブネット マスク:","network_view_tesla_connection_label":"Teslaに接続されました:","network_view_wifi_title":"Wi-Fi","network_view_wireless_connected_label":"接続あり:","not_found_description":"申し訳ございませんが、お探しのページは存在しません。","not_found_title":"404エラー ページが見つかりませんでした","password_input_view_password":"パスワード","password_input_view_show_password":"パスワード表示","phase_type_single":"単相","phase_type_split":"分相","phase_type_three":"3相","phase_type_two":"2相","phase_type_wye_ll":"ワイL-L","prompt_required_field":"このフィールドは必須です。","service_factory_reset_confirmation":"ローカル設定は削除され、デバイスは再起動します。確認してください。","sideload_container_subtitle":".binファイルを選択します","summary_container_title":"まとめ","title_installation":"設置","title_metering":"測定","title_networks":"ネットワーク","title_service":"サービス","title_site_info":"サイト情報","title_site_meter":"サイト メーター","title_software":"ソフトウェア","title_software_update":"ソフトウェア アップデート","update_handshake_result_failed":"サーバと通信することができません。デバイスのインターネット接続を確認してからやり直してください。","update_handshake_result_non_actionable":"アップデートはありません。","update_handshake_result_update_staged":"新しいソフトウェアバージョンを入手できます。","update_handshake_result_update_staged_version":"ソフトウェアバージョン{version}が入手できます。","update_last_update_result_failed":"最新のソフトウェア アップデートができませんでした。やり直すか、Teslaサービスにお問い合わせください。","update_status_downloading":"アップデートのダウンロード中...","update_view_button_label_check_for_update":"アップデートの確認","update_view_button_label_install":"インストール","update_view_check_notice_not_internet_connected":"インターネット接続なしでアップデートを確認することはできません。デバイスのネットワーク設定を確認してください。","update_view_handshake_failed":"サーバーに接続してアップデートがあるか確認できません。","update_view_handshake_non_actionable":"アップデートはありません。","update_view_handshake_update_staged":"アップデートがあります。バックグラウンドでダウンロードされます。","update_view_install_notice_not_internet_connected":"ソフトウェアのアップデートをダウンロードするには、インターネットへの接続が必要です。デバイスのネットワーク設定を確認してください。","update_view_label_current_version":"現在のバージョン: {version}({identifier})","update_view_latest_version":"最新バージョン: {version}","update_view_not_yet_checked":"アップデートの確認はまだ実施されていません。","update_view_notice_automatic_update":"クリックするとすぐに適用されます。そうしない場合、アップデートは後でバックグラウンドでインストールされます。","update_view_result_failed":"最新のソフトウェア アップデートができませんでした。やり直すか、Teslaサービスにお問い合わせください。","update_view_result_succeeded":"最新のソフトウェア アップデートが完了しました。","update_view_status_downloaded":"ダウンロードが完了しました。アップデートのステージング...","update_view_status_downloading":"アップデートのダウンロード...","update_view_status_staged":"アップデートがステージされました。インストール ボタンをクリックして操作を続けます。","wifi_page_available_networks":"利用可能なネットワーク","wifi_page_cancel_button_label":"キャンセル","wifi_page_check_password":"接続できません。Wi-Fiのパスワードを確認してください。","wifi_view_available_networks_subtitle":"利用可能なネットワーク","wifi_view_button_label_join":"参加","wifi_view_button_label_manual":"手動でネットワークに接続","wifi_view_input_label_ssid":"ネットワーク(SSID)","wifi_view_label_connecting_ssid":"{ssid}に接続中","wifi_view_mac_address_label":"MACアドレス: {mac}","wifi_view_no_networks":"Wi-Fiネットワークは見つかりませんでした","wifi_view_no_password_placeholder":"パスワードは必要ありません","wifi_view_notice_joining":"この処理には数分かかり、デバイスが再起動する可能性があります。インストールを続行するためには、デバイスのWi-Fiアクセス ポイントへの再接続が必要になる場合があります。","wifi_view_password_label":"パスワード","wifi_view_prompt_network_types":"使用可能な2.4 GHz WPネットワークに接続します。","wifi_view_reconnect_notice":"このプロセス中に、インストールを続行するためデバイスのWi-Fiアクセス ポイントへの再接続が必要になる場合があります。","wifi_view_rescan":"再スキャン","wifi_view_username_label":"ユーザー名","wifi_view_wpa2_password_label":"WPA2パスワード"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Error","advanced_settings_submit":"Submit","advanced_settings_submitted":"Submitted","advanced_settings_title":"Advanced Settings","alert_container_ac_phase_1_over_voltage":"AC Over-Voltage","alert_container_ac_phase_1_under_voltage":"AC Under-Voltage","alert_container_ac_phase_2_over_voltage":"AC Over-Voltage","alert_container_ac_phase_2_under_voltage":"AC Under-Voltage","alert_container_ac_phase_3_over_voltage":"AC Over-Voltage","alert_container_ac_phase_3_under_voltage":"AC Under-Voltage","alert_container_over_frequency":"AC Over-Frequency","alert_container_rate_of_change_frequency":"AC Rate of Change of Frequency","alert_container_under_frequency":"AC Under-Frequency","app_container_engineering_mode_banner_message":"Tesla Service Mode requires no authentication. Please \'Stop System\' if you are making operational changes. Before closing the browser, leave the System in an acceptable state. Please close the browser when completed since this mode requires no authentication.","app_container_engineering_mode_title":"Tesla Service Mode","app_container_firmware_update_banner_message":"Leave installation and wiring undisturbed and remain on this page until update is complete.","app_container_firmware_update_banner_title":"Firmware Update In Progress","app_container_sitemaster_message_title":"The system is currently running. In order to view the status of the battery blocks, the system must be shut down. You can stop the system from the home page.","app_container_sitemaster_power_supply_mode_banner_message":"Battery producing AC voltage to power devices for pairing and configuration. Button to stop system on landing page.","app_container_sitemaster_power_supply_mode_banner_title":"Grid Forming Mode","app_container_sitemaster_running_banner_title":"System Running","auto_config_check_network_button":"Check the network and enable wifi","auto_config_check_system_and_summary":"Check the System and Summary pages.","auto_config_done_button_text":"Done","auto_config_instructions_cannot_determine_grid_connection":"Check wiring to the Backup Switch or Gateway before starting system.","auto_config_instructions_determining_on_grid":"If this message persists for more than 3 minutes, check the wiring to the Backup Switch or Gateway.","auto_config_instructions_finding_contactor_controller":"If this message persists for more than 3 minutes, check the wiring to the Backup Switch or Gateway.","auto_config_instructions_finding_powerwalls":"If this message persists for more than 3 minutes, verify Powerwall wiring.","auto_config_instructions_lookup_failed_retry":"Scan the serial number sticker into Bolt to enable automatic Powerwall setup, and then {retryButton}","auto_config_instructions_lookup_failed_wizard":"Or {wizardButton} for manual Powerwall setup.","auto_config_instructions_missing_info_1":"Automatic Powerwall setup failed because the following information was missing:","auto_config_instructions_missing_info_2":"{wizardButton} to enter it manually.","auto_config_instructions_missing_info_3":"{registrationButton} manually.","auto_config_instructions_no_grid_detected":"Check wiring and breakers before starting system.","auto_config_instructions_no_network_retry":"{networkLink} to enable automatic Powerwall setup and then {retryButton}","auto_config_instructions_no_network_wizard":"Or {wizardButton} for manual Powerwall setup.","auto_config_instructions_retry":"{networkLink} if the problem persists","auto_config_instructions_retry_wizard":"Or {wizardButton} for manual Powerwall setup.","auto_config_instructions_updating":"A software update is required before automatic Powerwall setup can begin. The update will be downloaded and applied automatically. You may need to re-connect to Powerwall\'s WiFi network afterward.","auto_config_missing_grid":"Grid for the customer site","auto_config_missing_gridcode":"Grid code for the customer site","auto_config_missing_registration":"Customer information for product registration","auto_config_missing_timezone":"Timezone at the customer site","auto_config_network_button_text":"Setup the Network","auto_config_registration_button_text":"Enter Customer Information","auto_config_retry_button_label":"Retry","auto_config_run_button_label":"Set Up Powerwall Automatically","auto_config_run_wizard_button_text":"Run the Wizard","auto_config_section_title":"Automatic Powerwall Setup","auto_config_status_cancelled":"Automatic setup was cancelled. You can try again:","auto_config_status_cannot_determine_grid_connection":"Could not determine grid connection.","auto_config_status_complete":"Successfully completed","auto_config_status_determining_on_grid":"Determining grid connection...","auto_config_status_finding_contactor_controller":"Finding Contactor Controller...","auto_config_status_finding_powerwalls":"Finding Powerwalls...","auto_config_status_in_progress":"In progress","auto_config_status_lookup_failed":"Serial Number Lookup Failed","auto_config_status_missing_information":"Missing Information","auto_config_status_no_grid_detected":"No grid detected.","auto_config_status_no_network":"Not Connected to Tesla","auto_config_status_not_applicable":"Automatic setup is not needed or has already been run. You can run it again:","auto_config_status_retrying":"Retrying failed network request","auto_config_status_timeout":"Automatic setup has timed out. You can try again:","auto_config_status_updating":"Software update required","auto_config_stop_system_modal_message":"Automatic setup process cannot run while the system is running. Stop the system and try again.","auto_config_stop_system_modal_title":"Cannot start automatic setup","battery_container_add_all_batteries_button_label":"ADD ALL","battery_container_available_batteries_subtitle":"These batteries will not be part of system operation unless added to the \\"Configured\\" list.","battery_container_available_batteries_title":"Available Battery Blocks","battery_container_available_chargers_subtitle":"These chargers will not be part of system operation unless added to the \\"Configured\\" list.","battery_container_available_chargers_title":"Available Charger Blocks","battery_container_cannot_communicate_with_device":"Cannot communicate with device. Check CAN bus wiring and termination.","battery_container_chinv":"Compressor and Heater VFD (CHINV) {index}","battery_container_configured_batteries_label":"Configured Battery Blocks","battery_container_configured_batteries_subtitle":"These batteries will be part of system operation.","battery_container_configured_chargers_label":"Configured Charger Blocks","battery_container_configured_chargers_subtitle":"These chargers will be part of system operation.","battery_container_confirm_update_firmware":"This process may take several minutes. Do not interrupt the update or navigate away from this page.","battery_container_dcbc":"Battery Block {index}","battery_container_dcbc_comms_failure":"Communications failure. Check network connection to the unit and scan again.","battery_container_dcbc_dcdisconnect_opened":"DC Disconnect handle is in the off position.","battery_container_dcbc_door_switch_opened":"Inverter door enable line open. Investigate door switch.","battery_container_dcbc_enable_line_return_low_estop":"Inverter remote shutdown open. Investigate remote shutdown circuit.","battery_container_dcbc_enable_line_return_low_inv":"Inverter system enable line open. Investigate circuit breaker feedback.","battery_container_dcbc_enable_line_return_low_str":"Enable line for one or more Powerpack rows is open. Investigate wiring and Powerpack doors. Refer to the Enable Line Troubleshooting Guide for diagnosis.","battery_container_delete_button_title":"Delete this device","battery_container_diagnosis_incomplete":"Diagnosis incomplete. A firmware update is required before further checks can be performed.","battery_container_faults":"Faults","battery_container_firmware_update_needed":"Firmware update needed.","battery_container_gateway_contactor_meter_controller":"Gateway Contactor/Meter Controller","battery_container_industrial_confirm_update_firmware_info":"This will update the firmware of each battery block in the \\"Configured\\" list and its subcomponents.","battery_container_internal_communications_fault":"Internal communications fault. Check CAN bus wiring and termination and perform a firmware update.","battery_container_meter_socket_adapter":"Backup Switch","battery_container_mpbc":"Battery Block {index}","battery_container_mpthc":"Thermal Controller (MPTHC) {index}","battery_container_no_msa_detected":"No Backup Switch Detected.","battery_container_no_sync_detected":"No Contactor Controller Detected. No Backup Capability Detected.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Post (LCC) {index}","battery_container_post_missing":"Missing Post {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Powerstage {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"The Powerwall is switched off. Ensure the switch is in the ON position.","battery_container_qbms":"Qbert (QBMS)","battery_container_qhvp":"High Voltage Processor (QHVP)","battery_container_residential_confirm_update_firmware":"This will update the firmware of each Powerwall and the Contactor Controller (if present).","battery_container_resolve_connectivity":"Resolve connectivity issues before running a firmware update.","battery_container_scan":"SCAN","battery_container_scan_in_progress":"SCANNING...","battery_container_scbc":"Charger Block {index}","battery_container_scthc":"Thermal Controller (SCTHC) {index}","battery_container_self_tests_failure":"Did not pass self test.","battery_container_self_tests_inconclusive":"Self test results inconclusive.","battery_container_self_tests_internal_error":"Self tests failed due to internal system error.","battery_container_self_tests_stall":"Timeout: self tests unable to start.","battery_container_self_tests_system_down":"Cannot run self tests while system is down. Start the system and try again.","battery_container_self_tests_updating":"Cannot run self tests while batteries are updating. Try again when the update completes.","battery_container_serial_number":"SN: {sn}","battery_container_solar_powerwall":"{index} Solar Powerwall","battery_container_starc":"DC-DC Converter (STARC) {index}","battery_container_stitch":"Control Power DC-DC (STITCH)","battery_container_unknown":"Unknown Bus Controller {index}","battery_container_update_failed":"Update failed. Try again and ensure wiring and enable switches are not interrupted during the update process.","battery_container_update_firmware":"UPDATE FIRMWARE","battery_container_update_in_progress":"UPDATE IN PROGRESS...","battery_container_waiting_to_report_firmware":"Waiting for unit to report firmware version.","battery_container_warnings":"Warnings","button_label_generate":"GENERATE","can_reboot_message_backup":"Backup Mode","can_reboot_message_block_update":"Block Update in progress","can_reboot_message_enumeration":"Enumeration in progress","can_reboot_message_initializing":"System Initializing","can_reboot_message_power_flow_is_too_high":"Power flow is too high","can_reboot_message_updating":"Site Package Update in progress","caution":"CAUTION","charger_settings_all_posts_have_meter":"All posts have a DC meter installed","charger_settings_cabinet_2":"Cabinet {state}","charger_settings_cabinet_posts_warning":"These controls stop post enable and cabinet internal HV bus only. You must still isolate power and follow complete safety procedure when accessing cabinets.","charger_settings_cabinet_title":"Cabinet {sn}","charger_settings_common_bus":"Common Bus {state}","charger_settings_common_bus_usage":"Disable to stop common HV bus.","charger_settings_common_bus_warning":"Stops common HV bus only. You must still isolate power and follow complete safety procedure when accessing cabinets.","charger_settings_dc_bus_group":"DC Bus Group","charger_settings_disabled":"disabled","charger_settings_enabled":"enabled","charger_settings_kiosk_support":"Kiosk support {state}","charger_settings_kiosk_usage":"Enable only for sites with a kiosk","charger_settings_no_dc_meter":"No DC Meter","charger_settings_no_posts_have_meter":"No posts have a DC meter installed","charger_settings_payter_serial":"Payter S/N","charger_settings_payter_support":"Show Payter serial number inputs","charger_settings_payter_support_usage":"Enable only for sites with Payter payment modules","charger_settings_post":"Post {id} {state}","charger_settings_post_label":"Post {id} Label","charger_settings_saving":"saving {spinner}","charger_settings_semicharger":"Semi Charger {state}","charger_settings_semicharger_usage":"Enable only for Semi Charger sites.","charger_settings_some_posts_have_no_meter":"Some posts are missing a DC meter","client_protocols_container_subtitle":"Enable or disable client protocols.","client_protocols_container_title":"Client Protocols","client_protocols_menu_title":"Client Protocols","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"Modbus TCP/IP","client_protocols_view_service_shell_label":"Service Shell","compliance_container_label_fcc_id":"FCC ID: {fccId}","compliance_container_label_ic_id":"IC: {icId}","compliance_container_label_manufacturer":"Manufacturer: {manufacturer}","compliance_container_label_model":"Model: {model}","compliance_container_title":"Compliance","component-menu-title":"Components","conductor_limit":"Batteries are controlled to avoid exceeding configured current limits on each phase of the conductor CTs. Review conductor limit application note for more details about where this is used, and what limits should be configured.","conductor_min_current":"Conductor Export Limit","control_container_add_on":"ADD ON","control_container_always_active":"ALWAYS ACTIVE","control_container_battery_ok":"FULL BATTERY EXPORT ALLOWED","control_container_charge_power_target":"CHARGE POWER TARGET","control_container_conductor_max_current":"Conductor Import Limit","control_container_conductor_min_current_max_bound":"{mode} has maximum value of 200 A","control_container_conductor_min_current_min_bound":"{mode} has minimum value of 5 A","control_container_control_subtitle":"Control subtitle","control_container_control_title":"Control title","control_container_direct":"DIRECT","control_container_disable":"Disable","control_container_discharge_power_target":"DISCHARGE POWER TARGET","control_container_enabled":"ENABLED","control_container_energy_target":"ENERGY TARGET. This value should match the system size per the design documents and inspectors report","control_container_error_message":"{mode} is required","control_container_explanation_bullet_five_max_site_meter_power_kw":"When net load is larger than this limit, batteries will discharge in a best effort manner to prevent surpassing this limit.","control_container_explanation_bullet_five_min_site_meter_power_kw":"When net generation is larger than this limit, batteries will charge in an best effort manner to prevent surpassing this limit.","control_container_explanation_bullet_four_max_site_meter_power_kw":"When net load is smaller than this limit, batteries will be limited in their allowed charge power.","control_container_explanation_bullet_four_min_site_meter_power_kw":"When net generation is smaller than this limit, batteries will be limited in their allowed discharge power.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Site Import Limit is an optional setting. Leave this field empty to disable limiting.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Site Export Limit is an optional setting. Leave this field empty to disable limiting.","control_container_explanation_bullet_three_max_site_meter_power_kw":"This is an aggregate limit across all phases on all Site meters. (Note: When Load meters are used, the Site meter is calculated using Load, Solar and Battery).","control_container_explanation_bullet_three_min_site_meter_power_kw":"This is an aggregate limit across all phases on all Site meters. (Note: When Load meters are used, the Site meter is calculated using Load, Solar and Battery).","control_container_explanation_bullet_two_max_site_meter_power_kw":"When enabled, the sitemaster controls the maximum power that is allowed to be imported from the grid into the site.","control_container_explanation_bullet_two_min_site_meter_power_kw":"When enabled, the sitemaster controls the maximum power that is allowed to be exported from the site to the grid.","control_container_explanation_export_restrictions_locked":"Determines how the system may export power to the grid. Once set, regulation requires that it can only be changed by contacting Tesla.","control_container_explanation_export_restrictions_unlocked":"Regulation requires that export characteristics can only be set during initial commissioning. Please contact Tesla to modify.","control_container_explanation_nominal_system":"This value should match the system size as per the design documents and inspector\'s report.","control_container_heat_for_energy":"HEAT FOR ENERGY","control_container_heat_mode":"HEAT MODE","control_container_heco_committed_capacity":"Committed Capacity","control_container_heco_committed_discharge_power_W_max_bound":"{mode} has maximum value of 100000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode} has minimum value of 100 W","control_container_loading":"Loading","control_container_max_site_meter_power_W_max_bound":"{mode} has maximum value of 50000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} has minimum value of 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} must be greater than or equal to 0","control_container_max_site_meter_power_kw":"Site Import Limit","control_container_max_site_meter_power_w":"Site Import Limit","control_container_menu":"Menu","control_container_min_site_meter_power_kW_positive":"{mode} must be greater than or equal to 0","control_container_min_site_meter_power_kw":"Site Export Limit","control_container_min_site_meter_power_w":"Site Export Limit","control_container_minimum_charge_power":"MINIMUM CHARGE POWER","control_container_minimum_discharge_power":"MINIMUM DISCHARGE POWER","control_container_misc":"MISC","control_container_net_meter_mode":"Site Export Restrictions","control_container_never":"NO SITE EXPORT","control_container_nominal_system_energy_kW_positive":"{mode} must be greater than or equal to 0","control_container_nominal_system_energy_kWh_positive":"{mode} must be greater than or equal to 0","control_container_nominal_system_energy_kwh":"Nominal System Energy","control_container_nominal_system_energy_max_error":"Nominal System Energy exceeds the max energy limit","control_container_nominal_system_power_kw":"Nominal System Power","control_container_nominal_system_power_max_error":"Nominal System Power exceeds the max power limit","control_container_number_error_message":"{mode} must be a numerical input","control_container_power":"POWER","control_container_pv_only":"EXPORT UP TO PV METER READING OK","control_container_reactive_mode":"REACTIVE MODE","control_container_real_mode":"REAL MODE","control_container_reset":"Reset","control_container_site_control":"SITE CONTROL","control_container_site_limits":"SITE LIMITS","control_container_site_max_power":"SITE MAX POWER","control_container_site_min_power":"SITE MIN POWER","control_container_submit":"Submit","control_container_submitting_control":"Submitting Control","control_start":"START","control_stop":"STOP","current_password_placeholder_text":"Enter your current password","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Amp {id}","current_transformer_item_view_battery_ct":"Battery","current_transformer_item_view_calculated_reading":"Calculated:","current_transformer_item_view_conductor_ct":"Conductor","current_transformer_item_view_ct_voltage_pairing_1":"Phase L1","current_transformer_item_view_ct_voltage_pairing_2":"Phase L2","current_transformer_item_view_ct_voltage_pairing_3":"Phase L3","current_transformer_item_view_ct_voltage_pairing_default":"Default Phase","current_transformer_item_view_doubled_solar_ct":"Solar (1CT x2)","current_transformer_item_view_flip":"Flip","current_transformer_item_view_generator_ct":"Generator","current_transformer_item_view_load_ct":"Load","current_transformer_item_view_measure_pw_plus_input":"Measuring a Powerwall+ Inverter","current_transformer_item_view_measured_reading":"Per CT:","current_transformer_item_view_missing_ct":"Missing","current_transformer_item_view_no_reading":"No reading","current_transformer_item_view_none_ct":"None","current_transformer_item_view_phase_sequence_dropdown_title":"Phase","current_transformer_item_view_site_ct":"Site","current_transformer_item_view_smart_ct":"Smart","current_transformer_item_view_solar_ct":"Solar","current_transformer_item_view_solar_rgm_ct":"Solar Revenue-Only","current_transformers_container_800a_ct_ensure":"Ensure the CT selection on this page matches what is installed.","current_transformers_container_800a_ct_larger":"800 A CTs are physically larger than the 200/264 A CTs.","current_transformers_container_800a_ct_use_case":"When metering large conductors or panels (like 400A / 800A), use and configure the 800A CT.","current_transformers_container_amps_explanation":"Current flowing through the current transformer","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Ensure the CT is installed on the correct phase ({sequence}).","current_transformers_container_configure_subtitle":"Configure the meter current transformers.","current_transformers_container_ct_flipping_ensure_direction":"First ensure the CT label is facing the solar inverter (for solar CT) or facing the grid supply (for site CT). Then check the phase wiring, and verify the reported current, power, and power factor readings.","current_transformers_container_ct_flipping_modal_title":"Flipping CT in Software","current_transformers_container_ct_flipping_software_incorrect_metering":"Using software to flip a CT installed on the wrong phase will result in incorrect metering.","current_transformers_container_ct_flipping_wrong_phase":"A negative power reading may indicate the CT is installed backwards or on the wrong phase.","current_transformers_container_double_check_recommendation":"Double-check wiring, voltage taps, CTs, and meter configuration before continuing.","current_transformers_container_doubled_solar_ct_explanation":"A single CT may be used to meter a balanced PV inverter","current_transformers_container_doubled_solar_ct_modal_title":"Metering a Split-Phase Solar Inverter with one CT","current_transformers_container_grid_code_phase_modal_title":"Warning: Number of CTs does not match grid code phase recommendation","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Warning: Number of CTs does not match grid code phase recommendation for multiple meters","current_transformers_container_grid_code_phase_multiple_warnings_message":"Unexpected number of CTs attached to the following {numMeters} meters:","current_transformers_container_grid_code_phase_warning_message":"Unexpected number of CTs attached to the following meter:","current_transformers_container_grid_code_single_phase_warning":"The applied grid code is single phase. Single-phase systems typically have either a 1- or 3-phase service. {lb} An odd number of CTs (1 or 3) is recommended.","current_transformers_container_grid_code_split_phase_warning":"The applied grid code is split phase. Split-phase systems typically have one CT on each \\"hot\\" conductor. {lb} An even number of CTs (2 or 4) is recommended if not using the single solar CT option.","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"A Neurio meter measuring Powerwall+ solar inverters is required to enable Revenue Grade Metering (RGM).","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Select Yes if this measures a Powerwall+ solar inverter. Select No if this measures a solar inverter not part of a Powerwall+ assembly.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"Is this measuring a Powerwall+ Inverter?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Ensure the label on the CT faces the solar inverter.","current_transformers_container_label_modal_title":"Explanation of Labels","current_transformers_container_load_ct_ensure":"When configuring Load CTs, ensure all loads on site are metered and that backed-up and non-backup loads are metered separately.","current_transformers_container_load_ct_modal_title":"Load CT","current_transformers_container_load_ct_recommended":"Configuring Load CTs is only recommended for specific uses where it is not possible to configure a Site CT.","current_transformers_container_meter_id":"Meter {id}","current_transformers_container_no_load_and_site_ct":"There cannot be both a Load and Site CT.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"There cannot be loads behind the CT.","current_transformers_container_no_site_or_load_warning":"NO SITE OR LOAD CURRENT TRANSFORMERS CONFIGURED","current_transformers_container_no_solar_ct_warning":"NO SOLAR CURRENT TRANSFORMER CONFIGURED","current_transformers_container_phase_usages_modal_title":"Warning: CT configuration does not match phase configuration","current_transformers_container_phase_usages_warning":"The number of configured phases does not match the number of configured CTs. {lb} {num} configured CT(s) are recommended.","current_transformers_container_phase_usages_warning_message":"Unexpected number of CTs attached to the following meter(s):","current_transformers_container_power_amperage_configure_warning":"{type} CT requires both positive power and amperage to be configured correctly.","current_transformers_container_power_factor_explanation":"Power Factor (Power_Real / Power_Apparent). Only shown for high power levels. For common resistive loads, power factor should be close to 1. A low power factor may indicate that a current transformer is installed incorrectly, or there are very large capacitive/inductive loads.","current_transformers_container_power_factor_out_of_range_warning":"Power Factor measurement is out of expected range. {lb} Measured Power Factor: {powerFactor} PF {lb} The meter may be installed incorrectly or on an incorrect phase, or there are very large capacitive/inductive loads.","current_transformers_container_system_test_configured_incorrect":"Warning: CT {id} may be configured incorrectly","current_transformers_container_title":"Current Transformers","current_transformers_container_voltage_out_of_range_warning":"Voltage is out of range. {lb} Measured Voltage: {volts} V {lb} Measured voltage of this CT is outside normal operating range.","current_transformers_container_volts_explanation":"Voltage from line to neutral on the voltage tap associated with the current transformer","current_transformers_container_watts_explanation":"Power as current flowing through the current transformer multiplied by voltage on the associated voltage tap","customer_installation_view_email_label":"CUSTOMER EMAIL","customer_installation_view_email_placeholder":"Email","customer_registration_view_address_label":"ADDRESS","customer_registration_view_address_placeholder":"Address","customer_registration_view_city_label":"CITY","customer_registration_view_city_placeholder":"City","customer_registration_view_country_label":"country","customer_registration_view_customer_information":"CUSTOMER INFORMATION","customer_registration_view_email_address_label":"EMAIL","customer_registration_view_email_address_label_confirmation":"RE-ENTER EMAIL","customer_registration_view_email_placeholder":"Email","customer_registration_view_family_name_label":"FAMILY NAME (LAST NAME)","customer_registration_view_family_name_warning":"Enter the customer\'s last name.","customer_registration_view_given_name_label":"GIVEN NAME (FIRST NAME)","customer_registration_view_given_name_warning":"Enter the customer\'s first name.","customer_registration_view_homeowner_family_name_placeholder":"Last Name","customer_registration_view_homeowner_given_name_placeholder":"First Name","customer_registration_view_installation_address":"INSTALLATION ADDRESS","customer_registration_view_phone_number_label":"PHONE","customer_registration_view_phone_placeholder":"Phone","customer_registration_view_skip_explanation":"If skipped, the homeowner will have to perform registration themselves through the Tesla mobile app before getting access to the system.","customer_registration_view_state_placeholder":"State","customer_registration_view_state_province_region_label":"STATE / PROVINCE / REGION","customer_registration_view_zip_label":"ZIP / POSTAL CODE","customer_registration_view_zip_placeholder":"ZIP / Postal Code","diagnostic-alert-affected-children":"Affected Components ({count})","diagnostic-alerts-missing-alert-information":"Missing Alert Information","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Toolbox Article","diagnostic-alerts-toolbox-article-external-link":"External Links","diagnostic_alert_alert_name":"Alert Name","diagnostic_alert_alert_type":"Alert Type","diagnostic_alert_audience":"Audience","diagnostic_alert_clear_condition":"Clear Condition","diagnostic_alert_description":"Description","diagnostic_alert_display_name":"Display Name","diagnostic_alert_id":"Alert ID","diagnostic_alert_impact_category":"Impact Category","diagnostic_alert_latching":"Latching","diagnostic_alert_max":"Max","diagnostic_alert_min":"Min","diagnostic_alert_name":"Name","diagnostic_alert_node":"Node","diagnostic_alert_offset":"Offset","diagnostic_alert_payload_signals":"Payload Signals","diagnostic_alert_potential_impact":"Potential Impact","diagnostic_alert_safety_reason":"Safety Reason","diagnostic_alert_scale":"Scale","diagnostic_alert_set_condition":"Set Condition","diagnostic_alert_signal_name":"Signal Name","diagnostic_alert_signoff":"Sign Off","diagnostic_alert_sna_value":"SNA Value","diagnostic_alert_supplier_dtc_name":"Supplier DTC Name","diagnostic_alert_uiID":"UI ID","diagnostic_alert_units":"Units","diagnostic_alert_urgent":"Urgent","diagnostic_category_item_view_alerts_description":"Site, component and subcomponent alerts","diagnostic_category_item_view_download_results":"DOWNLOAD RESULTS","diagnostic_category_item_view_internal_comms_description":"Check all device communications","diagnostic_category_item_view_internal_comms_title":"Device Communications","diagnostic_category_item_view_live_results":"LIVE RESULTS","diagnostic_category_item_view_metering_description":"Check meter connections","diagnostic_category_item_view_metering_title":"Metering","diagnostic_category_item_view_networking_description":"Check network connection","diagnostic_category_item_view_networking_title":"Networking","diagnostic_category_item_view_no_selected_tests":"NO SELECTED TESTS","diagnostic_category_item_view_rerun_selected":"RERUN {num} SELECTED TESTS","diagnostic_category_item_view_rerun_selected_test":"RERUN SELECTED TEST","diagnostic_category_item_view_run_selected":"RUN {num} SELECTED TESTS","diagnostic_category_item_view_run_selected_test":"RUN SELECTED TEST","diagnostic_category_item_view_select_all_tests":"Select All","diagnostic_category_item_view_self_tests_description":"Initiate charge and discharge tests on the system","diagnostic_category_item_view_self_tests_title":"Self Tests","diagnostic_input_view_blocks_label":"BLOCKS","diagnostic_input_view_individual_test_name_label":"INDIVIDUAL TEST NAME","diagnostic_input_view_max_allowed_charge_power_label":"MAX ALLOWED CHARGE POWER","diagnostic_input_view_max_allowed_discharge_power_label":"MAX ALLOWED DISCHARGE POWER","diagnostic_test_enable_line":"Enable Line","diagnostic_test_item_view_ac_self_test_description_2":"Runs a sequence of power slosh tests on the AC system. Powerpack systems will use the \\"MAX_ALLOWED_POWER\\" settings. Set these to 0 for Megapack and Supercharger systems.","diagnostic_test_item_view_dc_self_test_description_2":"Runs a sequence of tests on the DC system including thermal checks.","diagnostic_test_item_view_enable_line_description":"Test enable line high for all Powerwalls","diagnostic_test_item_view_enable_line_resolution":"Toggle Enable Line and try again","diagnostic_test_item_view_individual_self_test_description":"Select from a list of self tests available on the configured bus controllers.","diagnostic_test_item_view_meter_comms_description":"Ping meter communications","diagnostic_test_item_view_network_connection_description":"Test connection to Internet and Tesla servers","diagnostic_test_item_view_network_connection_resolution":"Reconfigure networking","diagnostic_test_item_view_resolution_generic_text":"Reconfigure {name} and try again","diagnostic_test_item_view_step_canceled":"Test was canceled by user","diagnostic_test_item_view_step_config_update_status":"Check Tesla Configuration Server Status","diagnostic_test_item_view_step_google_http":"Ping Google HTTP","diagnostic_test_item_view_step_google_https":"Ping Google HTTPS","diagnostic_test_item_view_step_hermes_status":"Check Tesla Logging Server Status","diagnostic_test_item_view_step_results_ip_address":"IP Address","diagnostic_test_item_view_step_results_subnet_mask":"Subnet","diagnostic_test_item_view_table_header_key":"Identifier","diagnostic_test_item_view_table_header_name":"Step","diagnostic_test_item_view_table_header_value":"Value","diagnostic_test_meter_comms":"Meter Communications","diagnostic_test_network_connection":"Network Connection","diagnostics_composite_view_no_tests_found":"NO AVAILABLE TESTS FOUND","diagnostics_composite_view_run_all_selected_tests":"RUN ALL SELECTED TESTS","diagnostics_container_industrial_disruptive_tests_description":"The following tests will trigger the fan and thermal systems to operate, which will generate noise. Approximately 30kW per inverter draw should be expected. Additionally, the following tests may disrupt normal operation of the system:","diagnostics_container_required_inputs_description":"The following tests require additional inputs:","diagnostics_container_residential_disruptive_tests_description":"The following tests may disrupt normal operation of both the Gateway and Powerwall:","diagnostics_container_stop_test_title":"Stop {name} Test?","diagnostics_container_subtitle":"Tools to diagnose issues on the system installation.","diagnostics_container_tests_running":"Diagnostic Tests Running","diagnostics_container_title":"Diagnostics","disabled_reason_battery_breaker_open":"Battery breaker is open","disabled_reason_checking_firmware_update":"Checking for firmware update","disabled_reason_config":"Disabled by configuration file","disabled_reason_excessive_voltage_drop":"Excessive voltage drop","disabled_reason_firmware_update_failed":"Firmware update failed","disabled_reason_gridcode_write_failed":"Grid code setting failed","disabled_reason_user_requested":"Disabled at user request","dropdown_default_placeholder":"Type...","dropdown_list_view_not_listed_label":"Not Listed: \\"{searchText}\\"","dropdown_list_view_select_all":"Select All","dropdown_list_view_select_field":"Please select a field.","dropdown_list_view_show_complete":"SWITCH TO COMPLETE LIST","dropdown_list_view_show_searchable":"SWITCH TO SEARCHABLE LIST","enumeration_warning_details_miswired_12v":"When connecting two Powerwall+, only the unit connected to Gateway/Backup Switch should have 12V applied. Remove 12V from all subsequent Powerwall+ in the chain, then Rescan Devices (at the bottom of this page) to clear this warning.","enumeration_warning_details_multiple_controllers_gateway":"Unplug the power harness of all Powerwall+ site controllers, located in the top-right of the Solar Assembly.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Unplug the power harness of the Expansion Powerwall+ site controller (not connected to Backup Switch), located in the top-right of the Solar Assembly.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Unplug the power harness of all Powerwall+ site controllers, located in the top-right of the Solar Assembly. Commission the system by connecting to the Backup Gateway.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Only a single site controller must be active. When using Backup Gateway, unplug all Powerwall+ controllers. When using a Backup Switch, unplug all but one Powerwall+ controller. Run Wizard is disabled until there is only one site controller active.","enumeration_warning_title_miswired_12v":"12v Wiring Error","enumeration_warning_title_multiple_controllers":"Multiple Site Controllers are Active","error_details":"Error Details","error_item_view_check_network":"Check network connection.","error_item_view_disconnected":"Disconnected from Gateway. Check network connection and {refresh}","error_item_view_forgot_password":"Click to reset password.","error_item_view_refresh_browser":"Refresh browser.","error_item_view_try_logging_in_again":"Try logging in again.","ethernet_view_backup_dns_label":"BACKUP DNS SERVER","ethernet_view_backup_dns_warning":"Valid Backup DNS Server","ethernet_view_configuration_label":"CONFIGURATION","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY","ethernet_view_gateway_warning":"Valid Gateway (Router) IP","ethernet_view_ip_address_label":"IP ADDRESS","ethernet_view_ip_address_warning":"Valid IP Address","ethernet_view_not_available":"Not available","ethernet_view_primary_dns_label":"PRIMARY DNS SERVER","ethernet_view_primary_dns_warning":"Valid Primary DNS Server","ethernet_view_static_label":"Static","ethernet_view_subnet_mask_label":"SUBNET MASK","ethernet_view_subnet_mask_warning":"Valid Subnet Mask","factory_reset_message":"This will cause the unit to reset to the default state as provided by Tesla. This action cannot be undone. The unit will need to be re-commissioned by a professional installer before operation is possible. You may need to reconnect to the unit\'s WiFi network.","field_false":"False","field_true":"True","follower_powerwall_message":"This Powerwall is controlled by {leader}","follower_powerwall_title":"Follower Powerwall","form_legend_text":"denotes a required field","generation_container_connecting_status":"Connecting","generation_container_connection":"Inverter {id} Connection","generation_container_connection_summary":"During this connection process, you may temporarily disconnect from the network. {lb} Ensure you reconnect to the correct network. This may take up to 3 minutes.","generation_container_subtitle":"Add both solar inverter and generator information below.","generation_container_title":"Generation","generator_item_view_disconnect_type_label":"DISCONNECT TYPE","generator_item_view_generator":"GENERATOR {id}","generator_item_view_manufacturer_label":"MANUFACTURER (OPT)","generator_item_view_model_label":"MODEL","generator_item_view_serial_label":"SERIAL","generator_item_view_sustained_power_label":"SUSTAINED POWER","generator_view_add_generator":"ADD GENERATOR","grid_code_container_off_grid_confirmation":"Is the system off grid?","grid_code_container_off_grid_detected":"Off grid system detected. Make sure that this is the correct setting.","grid_code_container_off_grid_warning":"{warning}: Could not detect off grid status of the system. Setting the wrong off grid status could result in system failure.","grid_code_container_results":"Grid Detection Results","grid_code_container_retrieving":"Retrieving Grid Codes","grid_code_container_saving":"Saving Grid Code","grid_code_container_subtitle":"Based on location and meter readings, find the best settings for your installation.","grid_services_view_grid_services":"Grid Services","heading_change_password":"Change Password","help_view_how_password":"Finding the password on a Gateway","help_view_how_password_description":"Open the door on the Gateway. The password is found on the sticker after \\"Password:\\"","help_view_how_serial_number":"Finding the serial number on a Non-Backup Gateway","help_view_how_serial_number_backup":"Finding the serial number on a Backup Gateway","help_view_how_serial_number_backup_description":"Open the door on the Backup Gateway. The serial number begins with an \\"(S):\\"","help_view_how_serial_number_description":"Open the door on the Gateway. The serial number begins with an \\"(S):\\"","help_view_how_to_enable_line":"Toggling a Powerwall","help_view_how_to_enable_line_description":"Toggle the Powerwall switch off and back on. With multi-Powerwall systems, you only need to toggle one switch","hierarchy_charger":"Charger Block {name}","hierarchy_chinv":"VFD for Compressor and Heater (CHINV)","hierarchy_converter":"DC-DC Converter (STARC)","hierarchy_inverter":"Battery Block {name}","hierarchy_mega_thermal_controller":"Thermal Controller (MPTHC)","hierarchy_missing_post":"Missing Post","hierarchy_mpbc":"Battery Block {name}","hierarchy_part_number":"Part Number","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Pods Reporting","hierarchy_post":"Post (LCC)","hierarchy_posts":"Posts","hierarchy_power_stage":"Power Stage","hierarchy_power_stages":"Power Stages","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Battery Management Board (QBMS)","hierarchy_qhvp":"High Voltage Processor (QHVP)","hierarchy_scthcs":"Thermal Controllers","hierarchy_serial_number":"Serial Number","hierarchy_sitemaster":"Sitemaster {name}","hierarchy_starcs":"DC-DC Converters","hierarchy_stitch":"Control Power DC-DC (STITCH)","hierarchy_thermal_controller":"Thermal Controller (SCTHC)","higher_order_login_login_required":"Login Required","higher_order_login_title":"Let\'s get started.","home_container_caution":"⚠️ Caution","home_container_caution_deenergize":"To safely de-energize the system turn all Powerwall switches OFF.","home_container_caution_energized":"System may remain energized if solar strings are connected.","home_container_inactive_meter":"Stale Meter Data","home_container_inactive_meter_description":"Check {type} meter connection.","home_container_inactive_meter_timestamp":"Last meter reading at {timestamp}","home_container_login_required":"Login Required","home_container_missing_meter":"Meter is Missing","home_container_positive_meter":"Warning: {type} meter may be configured incorrectly","home_container_positive_meter_description":"{type} meter requires both positive power and amperage to be configured correctly.","home_container_powerwall_error":"Powerwall System Error","home_container_powerwall_start_error":"Unable to start system: {reason}","home_container_site_controller_error":"Site Controller System Error","home_container_sitemaster_confirm_industrial":"Are you sure you want to stop the system?","home_container_sitemaster_confirm_wizard":"Run Wizard requires the system to be stopped. Proceed and stop the system?","home_container_sitemaster_header_warning_industrial":"{warning} This system is in a state where Tesla does not recommend stopping it. Reason: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} This system is in a state where Tesla does not recommend stopping it. Reason: \\"{reason}\\"","home_container_start_powerwall":"Start System","home_container_start_system_button":"START SYSTEM","home_container_stop_powerwall":"Stop System","home_container_stop_system_button":"STOP SYSTEM","home_view_compliance":"COMPLIANCE","home_view_download_all_logs":"Download All Logs","home_view_download_logs":"DOWNLOAD LOGS","home_view_download_logs_description_one":"This downloads a compressed set of system logs that can be helpful to diagnose operating system, software, and networking issues.","home_view_download_logs_description_three":"Logs are signed and encrypted and should be sent to Tesla Energy Service for investigation.","home_view_download_logs_description_two":"This is especially useful when the Gateway cannot be connected to the network, and advanced troubleshooting is needed.","home_view_login":"LOGIN","home_view_logout":"LOGOUT","home_view_run_wizard":"RUN WIZARD","input_accept":"I accept","input_confirm":"I acknowledge all system warnings.","input_consent":"I consent","input_decline":"I decline","input_no_consent":"I do not consent","input_title_email":"Enter a valid email address: name@name.domain","installation_container_relay_section_modal_title":"Gateway Low Voltage Relay","installation_container_residual_current_device_modal_title":"Installation Requirement for Site RCDs","installation_container_subtitle":"Installer and site information","installation_container_sync_relay_usage_open_off_grid":"Open Relay when Off-Grid","installation_container_title":"Installation Information","installation_problem_detail_site_shutdown_0":"To re-enable system:","installation_problem_detail_site_shutdown_1":"Turn on all Powerwall ON/OFF switches","installation_problem_detail_site_shutdown_2":"Close E-Stops","installation_problem_detail_site_shutdown_3":"Ensure Rapid shutdown jumpers are properly installed","installation_problem_detail_site_shutdown_4":"Check shutdown circuit wiring.","installation_problem_detail_title_site_shutdown":"Site Shutdown circuit triggered","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Site shutdown circuit triggered by a Powerwall+ rapid shutdown.","installation_problem_details_pvacs_with_no_solar_rgm":"Solar meters are only required when measuring solar inverters that are not part of a Powerwall+ assembly. Meters that measure a Powerwall+ inverter should be marked as such on the Current Transformers page.","installation_problem_details_too_few_solar_rgm":"The number of CTs measuring a Powerwall+ solar inverter should match the number of Powerwall+ solar inverters. Run wizard, pair the Neurio meter if needed, and adjust the CT configuration on the Current Transfomers page.","installation_problem_details_too_many_solar_rgm":"The number of CTs measuring a Powerwall+ solar inverter should match the number of Powerwall+ solar inverters. Run wizard and adjust the CT configuration on the Current Transfomers page.","installation_problem_title_pvacs_with_no_solar_rgm":"Solar meter not measuring Powerwall+ inverter. Is this correct?","installation_problem_title_site_shutdown":"Site shutdown circuit triggered. All Powerwalls and Powerwall+ solar inverters are disabled.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Site shutdown circuit triggered by a Powerwall+ rapid shutdown. All Powerwalls and Powerwall+ solar inverters are disabled.","installation_problem_title_too_few_solar_rgm":"Too few solar meters measuring Powerwall+ inverter","installation_problem_title_too_many_solar_rgm":"Too many solar meters measuring Powerwall+ inverter","installation_view_add_on_solar":"Add-on","installation_view_additional_connections_label":"ADDITIONAL CONNECTIONS","installation_view_back_wiring":"Back","installation_view_backup_configuration_label":"BACKUP CONFIGURATION","installation_view_basement_location":"Basement","installation_view_company_label":"COMPANY NAME","installation_view_company_placeholder":"Company name","installation_view_conditioned_space_location":"Conditioned Space","installation_view_existing_solar":"Existing","installation_view_floor_mounting":"Floor","installation_view_garage_location":"Garage","installation_view_home_label":"HOME WIRING","installation_view_location_label":"POWERWALL INSTALL LOCATION","installation_view_modem_ethernet":"Has cellular modem to Ethernet?","installation_view_modem_wifi":"Has cellular modem to Wi-Fi?","installation_view_mounting_label":"POWERWALL MOUNTING","installation_view_na_backup_configuration":"N/A","installation_view_new_solar":"New","installation_view_none_solar":"None","installation_view_outdoor_location":"Outdoor","installation_view_pad_mounting":"Pad","installation_view_partial_home_backup_configuration":"Partial Home","installation_view_phone_label":"PHONE","installation_view_phone_placeholder":"Installer phone number","installation_view_powerline_ethernet":"Has power line to Ethernet?","installation_view_relay_enabled":"Open Relay when Off-Grid","installation_view_relay_label":"GATEWAY LOW VOLTAGE RELAY","installation_view_relay_options_modal_content":"When On-Grid or connected to another AC voltage source this relay will be closed. {lb1} When Off-grid this relay will be open. {lb1} As an example, this can be used to allow an Air Conditioner to run when on-grid, then not run when off-grid to prevent the associated high inrush current from overloading the Powerwalls.","installation_view_relay_section_modal_content":"The Gateway has a built in Relay that is controlled to turn on and off according to system status. {lb1} This can be used to control an external device, such as a load, or secondary energy source. {lb1} On Backup Gateway 1, use Pins 1 & 2 on the Auxiliary connector (9 pin Large Green Phoenix connector). {lb1} On Backup Gateway 2, use Pins 3 & 4 (GSO/GSI) on the Auxiliary connector (5 pin Green Phoenix connector). {lb1} This relay is rated to 60 Volts / 2 Amps, and is commonly used with 12V or 24V circuits. {lb1} Review load shedding and related application notes for more details.","installation_view_residual_current_device":"Has RCD installed upstream of Gateway?","installation_view_residual_current_device_modal_content":"Site-level Residual Current Devices (RCDs) may be required for certain installations, such as grids with TT earthing configuration. {lb1}{lb2} To reduce risk of nuisance tripping during off-grid operation, Tesla recommends ensuring all upstream RCDs are Time-Delay (Type S), or relocating site RCD after the Gateway’s contactor if possible. {lb1}{lb2} For additional information refer to the RCD and Fault Protection Application Note.","installation_view_satellite_ethernet":"Has satellite to Ethernet?","installation_view_satellite_wifi":"Has satellite to Wi-Fi?","installation_view_side_wiring":"Side","installation_view_solar_label":"SOLAR INSTALLATION","installation_view_solar_panels":"Solar Panels","installation_view_solar_roof":"Solar Roof","installation_view_solar_type_label":"SOLAR INSTALLATION TYPE","installation_view_stack_kit":"Has Stack Kit?","installation_view_type_commercial":"Commercial","installation_view_type_label":"INSTALLATION INFORMATION","installation_view_type_perm_off_grid":"Permanently Off-Grid","installation_view_type_residential":"Residential","installation_view_wall_mounting":"Wall","installation_view_whole_home_backup_configuration":"Whole Home","installation_view_wifi_extender":"Has Wi-Fi extender?","installation_view_wiring_label":"POWERWALL WIRING","inverter_test_view_accuracy_magnitude":"Accuracy Magnitude","inverter_test_view_accuracy_time":"Accuracy Time","inverter_test_view_complete":"Complete","inverter_test_view_current_magnitude":"Current Magnitude","inverter_test_view_fail":"Fail","inverter_test_view_na":"N/A","inverter_test_view_not_run":"Not Run","inverter_test_view_pass":"Pass","inverter_test_view_running":"Running","inverter_test_view_set_magnitude":"Set Magnitude","inverter_test_view_set_time":"Set Time","inverter_test_view_test_description":"Performing Inverter Self Test","inverter_test_view_test_name_all":"All Tests","inverter_test_view_test_name_over_freq_stage_one":"Over Frequency Stage 1","inverter_test_view_test_name_over_freq_stage_two":"Over Frequency Stage 2","inverter_test_view_test_name_over_volt_one":"Over Voltage Stage 1","inverter_test_view_test_name_over_volt_two":"Over Voltage Stage 2","inverter_test_view_test_name_under_freq_stage_one":"Under Frequency Stage 1","inverter_test_view_test_name_under_freq_stage_two":"Under Frequency Stage 2","inverter_test_view_test_name_under_volt_one":"Under Voltage Stage 1","inverter_test_view_test_name_under_volt_two":"Under Voltage Stage 2","inverter_test_view_timestamp":"Timestamp","inverter_test_view_trip_magnitude":"Trip Magnitude","inverter_test_view_trip_time":"Trip Time","inverter_test_view_warning":"Note: The inverter test may take up to 20 to 30 minutes per inverter.","label_fail":"Fail","label_inconclusive":"Inconclusive","label_pass":"Pass","legal_container_customer_policy_subtitle":"Must be completed by homeowner.","legal_container_customer_policy_title":"Tesla Customer Privacy Policy & Limited Warranty","legal_container_no_meters_warning":"NO METERS CONFIGURED","legal_container_no_powerwalls_warning":"NO POWERWALLS DETECTED","login_type_customer":"Customer","login_type_engineer":"Engineer","login_type_installer":"Installer","login_view_cancel_login_auth":"Cancel Login","login_view_change_forgot_password":"CHANGE OR FORGOT PASSWORD","login_view_compliance":"COMPLIANCE","login_view_customer_email_placeholder":"Customer email","login_view_email":"EMAIL","login_view_email_placeholder":"Lead installer email","login_view_forgot_password":"FORGOT PASSWORD","login_view_forgot_password_login_type":"Please select login type","login_view_language_label":"LANGUAGE","login_view_login_type_label":"LOGIN TYPE","login_view_password_placeholder":"Enter your password","login_view_start_login_auth":"START LOGIN PROCESS","login_view_start_login_auth_how_to_enable_line_description":"To login, toggle the Powerwall enable switch off and back on. With multi-Powerwall systems, you only need to toggle one switch","login_view_username":"USERNAME","login_view_username_placeholder":"Username","login_warning_view_expand":"If the Wizard does not launch, {click}.","login_warning_view_firmware_update":"When a firmware update is in progress","login_warning_view_heading":"{warning} Launching the Wizard stops battery operation.","login_warning_view_protect_system":"To protect the system, the Wizard will not launch:","login_warning_view_stop_operation":"Force Launch Wizard","login_warning_view_supported_browsers":"{warning} Only Chrome and Safari web browsers are currently supported.","login_warning_view_system_force_launch":"If you want to launch the Wizard and stop system operation, select Force Launch Wizard.","login_warning_view_system_off_grid":"When the electrical system is off-grid","login_warning_view_warning_click":"click for more","mater_item_view_bad_barcode":"Incorrect barcode scanned","mater_item_view_barcode_scan_failed":"Barcode scan failed","menu-switch-tesla-pros-reason":"The current experience is no longer supported","menu-switch-to-tesla-pros-title":"Switch to Tesla Pros for a better commissioning experience","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Battery","meter_aggregate_type_load":"Load","meter_aggregate_type_site":"Site","meter_aggregate_type_solar":"Solar","meter_container_add_meter_error":"Verifying Meter","meter_container_add_meter_status":"Adding Meter","meter_container_authorizing_status":"Authorizing","meter_container_decode":"Could not decode serial from image.","meter_container_detecting_status":"Detecting Wired Meters","meter_container_failed_status":"Failed to Add Meter","meter_container_reconnecting_status":"Reconnecting","meter_container_skip_title":"No meters have been commissioned, are you sure you want to continue?","meter_container_starting_status":"Starting","meter_container_subtitle":"Enter the energy meter short ID(s) and serial(s) to connect. Test each meter after it is commissioned.","meter_container_subtitle_industrial":"Enter the energy meter IP address(es) and location(s) to connect. Test each meter after it is commissioned.","meter_container_success_status":"Meter Successfully Added","meter_container_title":"Meters","meter_container_unknown_status":"Unknown","meter_container_updating_status":"Updating Meter","meter_container_verification":"Meter {id} Verification","meter_container_verification_gw1":"During this WiFi pairing process, you may be temporarily disconnected from the Gateway WiFi network. {lb} Ensure you reconnect to the correct network. This may take up to 3 minutes.","meter_container_verification_gw2":"The WiFi pairing process may take up to 3 minutes.","meter_container_verify_meter_error":"Verifying Meter","meter_container_verifying_status":"Verifying Meter","meter_item_view_add_failed":"Failed to Add Meter","meter_item_view_add_failed_help":"Check short ID and Serial number. Power cycle meter and connect when meter chimes. If issue persists, delete meter and try again.","meter_item_view_advanced_settings":"ADVANCED SETTINGS (OPTIONAL)","meter_item_view_battery_location":"Battery","meter_item_view_check_meter":"CHECK METER {id} CONNECTION","meter_item_view_conductor_location":"Conductor","meter_item_view_cts":"{count} CTs detected","meter_item_view_doubled_solar_location":"Doubled Solar","meter_item_view_generator_location":"Generator","meter_item_view_ip_address":"IP ADDRESS","meter_item_view_load_location":"Load","meter_item_view_mac_address":"MAC ADDRESS","meter_item_view_meter_location":"METER LOCATION","meter_item_view_none_location":"None","meter_item_view_remote_ip_address_placeholder":"e.g. 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"e.g. 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"e.g. OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"e.g. 01234","meter_item_view_serial":"SERIAL","meter_item_view_short_id":"SHORT ID","meter_item_view_site_location":"Site","meter_item_view_solar_location":"Solar","meter_item_view_solar_rgm_location":"Solar Revenue-Only","meter_item_view_success":"SUCCESSFULLY CONNECTED!","meter_item_view_unable":"UNABLE TO READ METER!","meter_item_view_upgrading":"METER IS UPGRADING!","meter_list_view_add":"ADD WI-FI METER","meter_list_view_add_ip":"ADD IP METER","meter_list_view_detect":"DETECT WIRED METERS","meter_list_view_enable_inverter_readings":"Enable Battery Inverter Readings","meter_list_view_inverter_meter":"INVERTER METERS","meter_list_view_inverter_meter_desc":"When enabled and there are no battery meters configured, the Site Controller will use readings from the battery inverters as the battery meter.","meter_msa_id":"BACKUP SWITCH {id}","meter_sync_x_id":"INTERNAL PRIMARY METER X (GATEWAY) {id}","meter_sync_y_id":"INTERNAL AUXILIARY METER Y (GATEWAY) {id}","meter_update_modal_fetch_status_error":"Error: Unable to fetch meter update status","meter_update_modal_footer":"Meter Update may take up to 2 Minutes","meter_update_modal_remaining_time":"Time Remaining: {seconds} seconds","meter_update_modal_timeout_error":"Error: Timeout occurred while updating the meter","meter_update_modal_title":"Meter Update is Underway","meter_validation_container_error":"Meter Validation unavailable while site controller is running.","meter_validation_container_error_placeholder":"Meter Validation unavailable: {error}.","meter_validation_container_power_command":"Power Command","meter_validation_container_power_start":"Start","meter_validation_container_power_stop":"Stop","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Reactive Power Command","meter_validation_container_real_power_command":"Real Power Command","meter_validation_container_show_per_phase":"Show Per Phase values","meter_validation_container_title":"Meter Validation","meter_validation_container_usage":"Send a power command and validate meter data. You must stay on this page to keep the power command continuous. Negative values will cause the system to charge. Positive values will cause the system to discharge.","meter_validation_control_subtitle":"Control","meter_validation_control_title":"Control title","meter_validation_disable":"Disable","meter_validation_loading":"Loading","meter_validation_menu":"Menu","meter_validation_reset":"Reset","meter_validation_submit":"Submit","meter_validation_submitting_control":"Submitting Control","meter_validation_title":"Meter Validation","meter_validation_view_apparent_power":"Apparent Power (kVA)","meter_validation_view_battery_location":"Battery","meter_validation_view_conductor_location":"Conductor","meter_validation_view_current":"Current (A)","meter_validation_view_doubled_solar_location":"Doubled Solar","meter_validation_view_generator_location":"Generator","meter_validation_view_inverters":"Inverters ({length})","meter_validation_view_load_location":"Load","meter_validation_view_meter":"Meters ({length})","meter_validation_view_none_location":"None","meter_validation_view_pf":"Power Factor","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Average","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Total","meter_validation_view_reactive_power":"Reactive Power (kVAr)","meter_validation_view_real_power":"Real Power (kW)","meter_validation_view_site_location":"Site","meter_validation_view_solar_location":"Solar","meter_validation_view_solar_rgm_location":"Solar Revenue-Only","meter_validation_view_voltage":"Voltage (V)","meter_w1_wifi_id":"METER {id}","meter_w1_wired_id":"WIRED METER {id}","meter_w2_wifi_id":"METER {id}","meter_w2_wired_id":"WIRED METER {id}","metrics_aggregate":"System","metrics_apparent_power":"Apparent Power ({unit})","metrics_battery":"Battery","metrics_current":"Current ({unit})","metrics_meter":"Meter","metrics_no_metrics":"No Metrics to Display.","metrics_power_factor":"Power Factor","metrics_reactive_power":"Reactive Power ({unit})","metrics_real_power":"Real Power ({unit})","metrics_subtitle":"Metrics","metrics_voltage_l_n":"Voltage L-N ({unit})","modal_acknowledge":"ACKNOWLEDGE","modal_confirm":"CONFIRM","modal_exit":"EXIT","modal_no":"NO","modal_note":"Note","modal_ok":"OK","modal_reconfigure":"RECONFIGURE","modal_yes":"YES","modbus_container_title":"Modbus Interface","modbus_table_register_address":"Address","modbus_table_register_name":"Name","modbus_table_register_type":"Type","modbus_table_register_value":"Value","modbus_table_register_value_decimal":"Value (decimal)","modbus_table_register_value_hex":"Value (hex)","msa-off-grid":"Off Grid","msa-on-grid":"On Grid","navigation_email":"EMAIL","network-switch-menu-item":"Network Switches","network_cellular_configured":"Configured, but not connected. Ensure cellular network is available and there are no obstructions around antenna.","network_connected":"Connected","network_container_connect_ethernet":"Connecting to Ethernet","network_container_connect_to_internet":"Please wait while the system attempts to connect to the Internet.","network_container_connect_wifi":"Connecting to {ssid}","network_container_connect_wifi_description":"During this process you may have to reconnect to the Gateway network to continue installation.","network_container_connman":"Network Connection Manager connects dynamically to the best network.","network_container_connman_body":"To ensure connectivity, configure all available connection types:","network_container_delete_network":"Delete Configured Network?","network_container_ethernet_and_wifi_warning":"Configure available Ethernet and Wi-Fi networks to ensure connectivity.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configure available Ethernet networks to ensure connectivity.","network_container_network_description":"Connect to the Internet with all available network types.","network_container_network_subtitle":"Network","network_container_no_internet_bullet_four":"Powerwall can send performance data to Tesla, allowing Technical Support to identify issues","network_container_no_internet_bullet_four_industrial":"Devices can send performance data to Tesla, allowing Technical Support to identify issues","network_container_no_internet_bullet_one":"Powerwall registration information is sent to Tesla, activating the full 10-year warranty","network_container_no_internet_bullet_three":"The customer can use the Tesla mobile app to monitor energy usage and control Powerwall","network_container_no_internet_bullet_two":"Powerwall can receive remote firmware updates, enabling performance improvements and new features","network_container_no_internet_bullet_two_industrial":"Devices can receive remote firmware updates, enabling performance improvements and new features","network_container_no_internet_bullet_zero":"It is possible to determine whether a firmware update is required before commissioning","network_container_no_internet_no_cell_title":"If the installation site has an available Internet connection, do not skip this step. Connect to the customer\'s Internet service via Ethernet (preferred) or Wi-Fi.","network_container_no_internet_title":"If the installation site has an available Internet connection, do not skip this step. Connect to the customer\'s Internet service via Ethernet (preferred) or Wi-Fi, or establish a cellular link.","network_container_no_internet_warning":"It is important to establish a reliable Internet connection so that:","network_container_scan_networks":"Scan Wi-Fi Networks","network_container_scan_wifi_disconnect_warning":"Warning: Scanning for new networks will temporarily disconnect the wireless connection.","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"Configure available Wi-Fi networks to ensure connectivity.","network_disabled":"Disabled","network_disconnected":"Not connected","network_ethernet_configured":"Configured, but not connected. Check the ethernet cable connection.","network_switches_container_discover_failure":"Last discovery failure: {error}","network_switches_container_discover_switches":"Discover Network Switches","network_switches_container_discovered_label":"Discovered Network Switches","network_switches_container_discovering_stop_button":"Stop Discovery","network_switches_container_discovery_switches_running_label":"Currently running discovery of network switches. You can stop discovery below.","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"Network Switches supported only on industrial systems.","network_switches_container_password_not_set":"Password is not set","network_switches_container_password_set":"Password is set","network_switches_container_passwords_error":"Password Setting Status: {status}","network_switches_container_set_password_label":"Set password on all Network Switches that are still using the factory default password.\\n All the passwords will be set to the same value.","network_switches_container_set_passwords":"Set Passwords","network_switches_container_set_passwords_button":"Set Password","network_switches_container_setting_passwords_button":"Setting Password...","network_switches_container_start_discovering_button":"Start Discovery","network_switches_container_start_discovery_help":"Network Switch Discovery is run automatically and periodically but can be triggered via the Start Discovery button.","network_switches_container_subtitle":"View Network Switches","network_switches_container_title":"Network Switches","network_view_check_connection":"CHECK INTERNET CONNECTION","network_view_connection_failed":"NOT CONNECTED!","network_view_connection_success":"SUCCESSFULLY CONNECTED!","network_view_continue_no_internet":"CONTINUE WITHOUT INTERNET","network_view_default_error":"Connection Error","network_view_local_network_connected":"Local Network Connected","network_view_local_network_disconnected":"Local Network Error","network_view_tesla_internet_connected":"Tesla Services and Internet Connected","network_view_tesla_internet_disconnected":"Tesla Services and Internet Connection Error","network_warning":"Warning","network_wifi_configured":"Configured, but not connected. Check your WiFi settings.","open_meter_validatiion_container_title":"Open Meter Validation","operation_mode_autonomous":"Autonomous Mode","operation_mode_backup":"Backup Charging Only","operation_mode_self_consumption":"Self-consumption Mode","operation_mode_site_control":"Site Control","overview_menu_control_title":"Control","overview_menu_diagnostics_title":"Diagnostics","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Connected","overview_menu_network_no_connection":"No Connection","overview_menu_registration_complete":"Complete","overview_menu_registration_incomplete":"Incomplete","overview_menu_registration_pending":"Pending internet connection","overview_menu_security_title":"Change or reset password","overview_menu_settings_title":"Settings","overview_menu_summary_title":"Summary","overview_menu_system_title":"System","overview_menu_update_title":"Software Update","overview_menu_view_alerts_event":"Event","overview_menu_view_alerts_events":"Events","overview_menu_view_inverter_title":"Inverter test","overview_menu_view_network_title":"Network","overview_menu_view_registration_title":"Registration","overview_menu_view_test_title":"Self test","overview_meter_validation_title":"Meter Validation","password_generate_error":"There was an error generating a new password. Verify connectivity and the current password and try again.","password_generate_help_text":"Enter the existing password to generate a new random password.","password_generate_menu_title":"Change Password","password_generate_notice":"The password has been changed. Record the new password before leaving this page.","phase_container_detect_timeout":"Phase detection timed out","phase_container_detection_attempt":"Attempt #{num}","phase_container_grid_code_validating_modal_title":"Validating Grid Code","phase_container_grid_compliant_description":"Grid Compliant {checkmark}","phase_container_grid_modal_description":"Grid will be compliant in {time} seconds.","phase_container_grid_modal_title":"Waiting for Grid Compliance","phase_container_modal_description":"Phase detection may take up to 2 minutes per Powerwall.","phase_container_modal_title":"Running Phase Detection","phase_container_saving_phases_modal_title":"Saving Phases","phase_container_subtitle":"View which line each Powerwall is on and update Line Status","phase_container_supported_error":"No Powerwalls detected. Phase detection is not supported.","phase_container_title":"Phase","phase_container_voltage_caution_body":"Unexpected voltage {voltage}V detected on {lineNumber}. Double-check {lineStatus} is the appropriate setting for this phase.","phase_container_warning_body":"No Backup Phases have been selected. Therefore, the system will not support any loads when the grid connection is lost.","phase_container_warning_modal_header":"Backup is Disabled","phase_line_id":"Line-{id}","phase_line_item_view_line":"Line","phase_line_item_view_line_status_backup":"Backup","phase_line_item_view_line_status_configured":"Non Backup","phase_line_item_view_line_status_not_configured":"Not Configured","phase_line_status_backup":"Backup","phase_line_status_configured":"Non Backup","phase_line_status_not_configured":"Not Configured","phase_view_detect":"DETECT PHASES","phase_view_split_phase":"Split Phase","power_flow_view_go_off_grid":"GO OFF GRID","power_flow_view_go_on_grid":"GO ON GRID","power_flow_view_grid_button_disabled_reason":"System must be started in order to go off grid.","power_flow_view_grid_spinner_alt_label":"System Transitioning","power_flow_view_start_system":"START SYSTEM","power_flow_view_stop_system":"STOP SYSTEM","powerwall_container_industrial_no_additional_title":"No additional Battery Blocks found","powerwall_container_industrial_subtitle_auto_detection_2":"Listed are all the Battery or Charger Blocks auto-detected by the Site Controller. If a block is not listed, check networking equipment including wiring, and make the sure bus controllers are powered on.","powerwall_container_industrial_title_2":"Battery/Charger Blocks","powerwall_container_industrial_updating":"Verifying Battery Blocks","powerwall_container_no_additional_powerwalls_description":"Refer to the Powerwall Installation Manual for tips on resolving possible wiring issues.","powerwall_container_no_additional_powerwalls_title":"No additional Powerwalls found","powerwall_container_scan_again":"SCAN AGAIN","powerwall_container_scanning":"Scanning","powerwall_container_scanning_for_more":"Scanning for more","powerwall_container_subtitle_component_auto_detection":"Listed are all the components auto-detected by the Gateway. Check wiring if a component is not listed.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Verifying Powerwalls","powerwall_container_updating_note":"Note: This may take up to 60 seconds per Powerwall.","powerwall_item_view_blank_numbers":"Awaiting Verification...","powerwall_item_view_numbers":"PartNumber:{partNumber} Serial:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"Cancel","powerwall_pairing_connect":"Connect","powerwall_pairing_done":"Done","powerwall_pairing_error_already_paired":"Pairing Failed: the device is already paired","powerwall_pairing_error_bad_pairing_response":"Pairing Failed: device refused to pair. Ensure the follower has been stopped","powerwall_pairing_error_bad_qr_code":"Not a WiFi QR code","powerwall_pairing_error_internal":"Pairing Failed: internal error","powerwall_pairing_error_no_qr_code":"No QR code found","powerwall_pairing_error_no_response":"Pairing Failed: device did not respond.","powerwall_pairing_error_not_leader":"Pairing Failed: this is a follower device. Reconnect to the leader device.","powerwall_pairing_error_prohibited_uncommissioned":"Pairing Failed: this Powerwall is not commissioned yet","powerwall_pairing_error_too_many_devices":"Pairing Failed: the maximum number of devices are already paired","powerwall_pairing_error_unknown":"Pairing Failed: Unknown Error","powerwall_pairing_error_wifi_connection_failed":"Pairing Failed: Could not connect to WiFi. Check the password.","powerwall_pairing_error_wifi_not_found":"Pairing Failed: WiFi network not found","powerwall_pairing_exception":"Pairing Failed: Exception","powerwall_pairing_instructions_2":"Enter or scan the WiFi SSID and password for the Powerwall to be paired. Look for a QR code on the device.","powerwall_pairing_password_label":"Password:","powerwall_pairing_scan_qr_code":"Scan QR Code","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"Pairing complete. The new device may not start responding for a minute or more (longer if there is an update in progress). Click Done to dismiss.","powerwall_pairing_state_monitoring":"Pairing new device. This may take up to a minute.","powerwall_starting":"Starting Powerwall","powerwall_view_detected_backup":"Detected Backup Capability","powerwall_view_detected_synchrometers":"Detected Meter Capability","powerwall_view_failed":"FAILED","powerwall_view_no_backup":"No Backup Capability Detected","powerwall_view_no_sync":"No Synchronizer Detected","powerwall_view_scan":"SCAN","powerwall_view_success":"SUCCESS","powerwall_view_synchrometer_detected":"Synchrometers Detected","powerwall_view_synchronizer_detected":"Synchronizer Detected","powerwall_view_update":"VERIFY POWERWALLS","privacy_policy_view_accept_warranty_title":"Accept Tesla Powerwall Limited Warranty","privacy_policy_view_contact_bullet_one":"via e‐mail at {privacyEmail};","privacy_policy_view_contact_bullet_two":"via mail at Tesla, Inc., Attn: Legal, 45500 Fremont Boulevard, Fremont, California 94538, United States.","privacy_policy_view_contact_header":"How to Contact Us","privacy_policy_view_contact_paragraph_one":"To contact us with a question or comment or to opt out from certain services, please contact us:","privacy_policy_view_contact_paragraph_three":"If you are located in the EEA or Switzerland, your local Tesla affiliate may be the entity responsible for processing your personal information.","privacy_policy_view_contact_paragraph_two":"Please note that e-mail communications are not always secure, so please do not include credit card information or sensitive information in your e-mails to us.","privacy_policy_view_cross_border_transfers_header":"Cross Border Transfers","privacy_policy_view_cross_border_transfers_paragraph_one":"The Services are controlled and operated from the United States. Information from or about you or your use of our products or the Services may be stored and processed in any country where we have facilities or in which we engage service providers. Those countries may not have the same data protection laws as the country in which you initially provided that information. When we transfer information from or about you or your use of our products or the Services to other countries, we will protect it as described in this Privacy Policy. By using our products, the Services, or otherwise providing information to us, you consent to the transfer of information from or about you or your use of our products or the Services to countries outside of your country of residence, including the United States.","privacy_policy_view_cross_border_transfers_paragraph_two":"If you are located in the EEA or Switzerland, we comply with applicable legal requirements providing adequate protection for the transfer of personal information to countries outside of the EEA or Switzerland. Tesla has certified its adherence to the EU-U.S. Privacy Shield Framework as set forth by the Department of Commerce and the European Commission with respect to the processing of certain personal information transferred from the EEA to Tesla and its wholly-owned U.S. subsidiaries. Tesla\'s {privacyShield} is available here.","privacy_policy_view_devices":"From or about you or your devices","privacy_policy_view_energy_products":"From or about your Tesla energy products","privacy_policy_view_eu_policy_warning":"You must consent to the Privacy Policy to register your Powerwall and monitor it in the Tesla mobile app.","privacy_policy_view_eu_warranty_warning":"If you do not consent to the Tesla Customer Privacy Policy, we may be unable to honor the full ten year Warranty. Tesla will honor your Warranty for at least four years following the date your Powerwall was installed for the first time, subject to the exclusions and limitations set out in the Warranty {warrantyLink}.","privacy_policy_view_grid_services":"Your Powerwall can support the reliability of the electrical grid by providing services under optional programs offered by utilities or third parties. These services typically involve a partial discharge of your Powerwall at opportune times in exchange for some financial benefit to you, and require us to share your energy usage and Powerwall information with utilities or third parties. Before we enroll you into one of these programs, we will provide you program details and give you an opportunity to opt out. If you do not opt out at that time, you will be enrolled into the program.","privacy_policy_view_grid_services_title":"Grid Services","privacy_policy_view_grid_warning":"You do not have to consent. If you don’t consent, we may still give you the opportunity to enroll in these programs later.","privacy_policy_view_here":"here","privacy_policy_view_homeowner_na":"HOMEOWNER NOT AVAILABLE","privacy_policy_view_homeowner_required":"Must be completed by homeowner","privacy_policy_view_information_collection_devices_bullet_five":"Through your browser or device: Certain information is collected by most browsers or automatically through your device, such as your Media Access Control (MAC) address, computer type (Windows or Macintosh), screen resolution, operating system name and version, device manufacturer and model, language, Internet browser type and version, and the name and version of the Services (such as the Tesla App) you are using. We use this information to ensure that the Services function properly.","privacy_policy_view_information_collection_devices_bullet_four":"Offline: We may collect information from or about you offline, such as when you visit a Tesla store or repair facility, attend one of our events, sign up for a test drive, place an order over the phone, or contact our customer service or sales department.","privacy_policy_view_information_collection_devices_bullet_one":"Through the Services: We may collect information from or about you through our websites, software applications, social media pages, e-mail messages, or other digital services (the “Services”), e.g., when you sign up for a newsletter, make a purchase, or register your product with us.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla: Customers who purchase certain Tesla products will receive a My Tesla account, which is hosted on our website. We may collect and process the following types of data for your My Tesla account that you elect to provide to us: your customer registration information; the status of your order; warranty and other documentation for your Tesla products; and general information about your Tesla products (including, for example, vehicle identification number or other product serial number, service plan information, or connectivity package), insurance forms, driver’s licenses, financing agreements, and similar information. You can access your My Tesla account to update the information from or about you in that account at any time.","privacy_policy_view_information_collection_devices_bullet_two":"From other sources: We also may receive information about you from other sources, such as public databases, joint marketing partners, certified installers, third-party vehicle repair or service centers, and social media platforms.","privacy_policy_view_information_collection_energy_products_bullet_one":"We may collect information about your product, such as your installation date, number of products installed, and serial number(s).","privacy_policy_view_information_collection_energy_products_bullet_two":"In order to provide and improve our energy products and services, we may collect data regarding where your product is installed and how it is configured, data related to the product’s use and performance, data regarding your aggregate home energy consumption, and other data relevant to diagnose issues.","privacy_policy_view_information_collection_header":"Information We May Collect","privacy_policy_view_information_collection_paragraph_five":"If you no longer wish us to collect performance data or any other data from your Tesla energy product, please contact us as indicated in the “How to Contact Us” section below. Please note that if you opt out from the collection of performance data from your Tesla energy product, we will not be able to notify you of issues applicable to your energy product in real time, and this may result in your energy product suffering from reduced functionality, serious damage, or inoperability, and it may also disable many features of your energy product including periodic software and firmware updates.","privacy_policy_view_information_collection_paragraph_four":"We may collect a variety of information from or about your Tesla energy products from you, via a certified installer or from the installed products (directly or via paired equipment, such as an inverter), including:","privacy_policy_view_information_collection_paragraph_one":"We collect three main types of information related to you or your use of our products and services: (1) information from or about you or your devices; (2) information from or about your Tesla vehicle; and (3) information from or about your Tesla energy products. Depending on the Tesla products and services you request, own, or use, not all of these types of information may be applicable to you.","privacy_policy_view_information_collection_paragraph_three":"When you visit our website or otherwise use our Services, we may use cookies, pixel tags, analytics tools, and other similar technologies to help provide and improve our Services, and as detailed below:","privacy_policy_view_information_collection_paragraph_two":"We may collect information from or about you (such as your name, address, phone number, e-mail, payment information, etc.) or your devices in a variety of ways, including:","privacy_policy_view_information_collection_services_bullet_five":"You can learn about Google’s practices in connection with this information collection and how to opt out of it by downloading the Google Analytics opt-out browser add-on, available at {website}.","privacy_policy_view_information_collection_services_bullet_four":"Analytics tools: We use website and application analytics services provided by third parties that use cookies and other similar technologies to collect information about website or application use and to report trends, without identifying individual visitors. The third parties that provide us with these services may also collect information about your use of third-party websites.","privacy_policy_view_information_collection_services_bullet_one":"Cookies: Cookies are pieces of information stored directly on the computer that you are using. Cookies allow us to collect information such as browser type, time spent on the Services, pages visited, language preferences, and other web traffic data. Our service providers and we use the information for security purposes, to facilitate online navigation, to display information more effectively, to personalize your experience while using the Services, and to otherwise analyze user activity. We can recognize your computer to assist your use of the Services. We also gather statistical information about the usage of the Services in order to continually improve their design and functionality, understand how the Services are used, and assist us with resolving questions regarding the Services. Cookies further allow us to select which of our advertisements or offers are most likely to appeal to you and to display them to you. We may also use cookies in online advertising to see how you interact with our advertisements, and we may use cookies or other files to understand your use of other websites.","privacy_policy_view_information_collection_services_bullet_three":"Pixel tags and other similar technologies: Pixel tags (also known as web beacons and clear GIFs) may be used in connection with some Services to, among other things, track the actions of users of the Services (including e-mail recipients), measure the success of our marketing campaigns, and compile statistics about usage of the Services and response rates.","privacy_policy_view_information_collection_services_bullet_two":"If you do not want information collected through the use of cookies when using your My Tesla account or our website, there is a simple procedure in most browsers that allows you to automatically decline cookies or gives you the choice of declining or accepting the transfer to your computer of a particular cookie (or cookies) from a particular site. You may also wish to refer to {website}. However, if you do not accept these cookies, you may experience some inconvenience in your use of the Services. For example, we may not be able to recognize your computer, and you may need to log in every time you visit the applicable Services.","privacy_policy_view_information_rights_choices_agree_eu":"You must consent to the Privacy Policy to register your Powerwall and monitor it in the Tesla mobile app.","privacy_policy_view_information_rights_choices_agree_one":"You must consent to the Privacy Policy to register your Powerwall and monitor it in the Tesla mobile app. No further action is needed if you don\'t want to access your Powerwall information via the Tesla mobile app.","privacy_policy_view_information_rights_choices_bullet_one":"You can access your My Tesla account to update the information from or about you in that account at any time.","privacy_policy_view_information_rights_choices_bullet_two":"If you would like to review, correct, update, suppress, or delete information from or about you that has been previously provided to us by you, you may contact us at the address below.","privacy_policy_view_information_rights_choices_header":"Rights and Choices","privacy_policy_view_information_rights_choices_paragraph_four":"Please note that we may need to retain certain information for recordkeeping or legal compliance purposes and/or to complete any transactions that you began prior to requesting such change or deletion (e.g., when you make a purchase or enter a promotion, you may not be able to change or delete the information provided until after the completion of such purchase or promotion). There may also be residual information that will remain within our databases and other records, which will not be removed.","privacy_policy_view_information_rights_choices_paragraph_one":"As detailed in the sections above, we give you many choices regarding our collection, use, and sharing of information from or about you or your use of our products or the Services. Subject to applicable law, in certain jurisdictions you may also have the rights to request access to and receive information about certain information we maintain about you, update and correct inaccuracies in that information, and have the information blocked or deleted, as appropriate. These rights may be limited in some circumstances by local law. We give you several methods to access, correct, update, or request blocking or deletion of information from or about you including:","privacy_policy_view_information_rights_choices_paragraph_three":"We will comply with your request(s) to exercise these rights and choices as soon as reasonably practicable.","privacy_policy_view_information_rights_choices_paragraph_two":"In your request, please make clear what information you would like to have changed, whether you would like to have the information that you have provided to us suppressed from our database, or otherwise let us know what limitations you would like to put on our use of the information that you have provided to us. For your protection, we may only implement requests with respect to the information associated with the particular e-mail address that you use to send us your request, and we may need to verify your identity before implementing your request.","privacy_policy_view_information_share_header":"How We May Share Information We Collect","privacy_policy_view_information_share_paragraph_eight":"In other circumstances","privacy_policy_view_information_share_paragraph_eleven":"If you wish to opt out of any processing of information for which you have provided your prior explicit opt-in consent, you may do so by contacting us as indicated in the “How to Contact Us” section below.","privacy_policy_view_information_share_paragraph_five":"We may share information with other third parties you authorize, such as in the following circumstances:","privacy_policy_view_information_share_paragraph_five_point_four":"With your social media account provider, if you connect your Services account and your social media account. If you do so, you authorize us to share information with your social media account provider and you understand that the use of the information we share will be governed by the social media account provider’s privacy policy.","privacy_policy_view_information_share_paragraph_five_point_one":"With our certified installers to facilitate the provision of energy products to you that you have requested.","privacy_policy_view_information_share_paragraph_five_point_three":"With third-party sponsors of contests and similar promotions, if you elect to participate.","privacy_policy_view_information_share_paragraph_five_point_two":"With third party service centers or providers, if you choose to utilize them. Note that some information about you is stored on certain Tesla products and may be accessible directly to the third party service centers or providers that you choose to utilize to diagnose or service your Tesla product.","privacy_policy_view_information_share_paragraph_four":"With other third parties you authorize","privacy_policy_view_information_share_paragraph_nine":"We may share information in other circumstances, such as:","privacy_policy_view_information_share_paragraph_nine_point_one":"With your employer or other fleet operator or the owner of the Tesla product, if you do not directly own it and as authorized under applicable law.","privacy_policy_view_information_share_paragraph_nine_point_two":"With a third party in connection with any reorganization, merger, sale, joint venture, assignment, transfer, or other disposition of all or any portion of our business, assets, or stock (including in connection with any bankruptcy or similar proceedings).","privacy_policy_view_information_share_paragraph_one":"We may share information we collect with our service providers and business partners, with other third parties you authorize, with other third parties when required by law, and in other circumstances. Examples of how we share information with these parties and under these circumstances are provided below.","privacy_policy_view_information_share_paragraph_seven":"Tesla may transfer and disclose information, including information that may or may not personally identify you, to third parties to comply with a legal obligation (including, but not limited to, subpoenas); when we believe in good faith that the law requires it; in response to a lawful request by governmental authorities conducting an investigation, including to comply with law enforcement requirements; to verify or enforce our policies and procedures; to respond to an emergency; to prevent or stop activity we may consider to be, or to pose a risk of being, illegal, unethical or legally actionable; or to protect the rights, property, safety, or security of the Services, Tesla, third parties, visitors to our Services, or the public, as determined by us in our sole discretion.","privacy_policy_view_information_share_paragraph_six":"With other third parties when required by law","privacy_policy_view_information_share_paragraph_ten":"We do not share information that personally identifies you with unaffiliated third parties for their marketing purposes unless you opt in to that sharing.","privacy_policy_view_information_share_paragraph_three":"We may share information with our service providers and business partners when necessary to perform services on our or on your behalf, such as in the following circumstances:","privacy_policy_view_information_share_paragraph_three_point_one":"With Tesla affiliates for the purposes described in this Privacy Policy. Tesla affiliates are companies that are owned or controlled by Tesla, Inc. and companies in which Tesla, Inc. has a substantial ownership interest.","privacy_policy_view_information_share_paragraph_three_point_three":"With other third party business partners to the extent that they are involved in your purchase or the service of your Tesla products. We share limited information from or about you to allow you to take advantage of those services if you elect to utilize them, with such partners as finance, leasing, registration, and title companies.","privacy_policy_view_information_share_paragraph_three_point_two":"With our third party service providers and channel partners to provide services such as website hosting, data analysis and storage, payment processing, order fulfillment and product installation, wireless connectivity to Tesla products, information technology and related infrastructure, customer service, product maintenance or related services, e-mail delivery, credit card processing, auditing, marketing, voice command processing, and other similar services.","privacy_policy_view_information_share_paragraph_two":"With our service providers and business partners","privacy_policy_view_information_use_commuicate":"To communicate with you","privacy_policy_view_information_use_header":"How We May Use Information We Collect","privacy_policy_view_information_use_other_purposes":"For other purposes","privacy_policy_view_information_use_paragraph_five":"We also may use information we collect for other purposes, such as:","privacy_policy_view_information_use_paragraph_five_point_one":"For our business purposes, such as: data analysis; audits; fraud monitoring and prevention; identifying usage trends; determining the effectiveness of our promotional campaigns; and operating and expanding our business activities.","privacy_policy_view_information_use_paragraph_five_point_two":"Except as described above and below, Tesla may use or share information that does not personally identify you for any purpose, such as for operational or research purposes, for industry analysis, to improve or modify our products and services, to better tailor our products and services to your needs, and where legally required.","privacy_policy_view_information_use_paragraph_four":"We may use information we collect to provide and improve our products and services, such as:","privacy_policy_view_information_use_paragraph_four_point_five":"To analyze and improve the safety and security of our products and services.","privacy_policy_view_information_use_paragraph_four_point_four":"To develop and promote new products and services, and to improve or modify our existing products and services.","privacy_policy_view_information_use_paragraph_four_point_one":"To complete and fulfill your purchase, e.g., to process your payments, have your order delivered to you, communicate with you regarding your purchase, and provide you with related customer service.","privacy_policy_view_information_use_paragraph_four_point_six":"To deliver any other services you have requested.","privacy_policy_view_information_use_paragraph_four_point_three":"To monitor your Tesla product’s performance and provide services related to your product.","privacy_policy_view_information_use_paragraph_four_point_two":"To provide service to your Tesla product, such as to contact you with service recommendations and to deliver over-the-air updates to your product.","privacy_policy_view_information_use_paragraph_one":"We may use information we collect to communicate with you, to provide and improve our products and services, and for other purposes. Examples of how we use information for these purposes are provided below.","privacy_policy_view_information_use_paragraph_three":"Your communication choices:","privacy_policy_view_information_use_paragraph_three_point_one":"Receiving electronic communications from us or our affiliates: If you no longer want to receive marketing-related e-mails from us or our affiliates, you may opt out of receiving them by following the opt-out instructions in any e-mail received from us or by contacting us at the address below. Please note that we may still send you important administrative and safety messages even if you opt out of receiving marketing e-mails.","privacy_policy_view_information_use_paragraph_three_point_two":"Receiving marketing-related calls from us: If you receive a marketing-related call from us and do not want to receive similar calls in the future, simply ask to be placed on our “do not call” list. Please note that we may still call you regarding administrative, safety, or product service issues even if you opt out of receiving marketing calls.","privacy_policy_view_information_use_paragraph_two":"We may use information we collect to communicate with you, such as:","privacy_policy_view_information_use_paragraph_two_point_five":"To present products and offers tailored to you and to enhance our lists with information from other sources.","privacy_policy_view_information_use_paragraph_two_point_four":"To send administrative information to you, for example, information regarding the Services and changes to our terms, conditions, and policies.","privacy_policy_view_information_use_paragraph_two_point_one":"To respond to your inquiries and fulfill your requests, such as to send you newsletters or product information, information alerts, or brochures.","privacy_policy_view_information_use_paragraph_two_point_seven":"To facilitate social sharing and communications functionality.","privacy_policy_view_information_use_paragraph_two_point_six":"To allow you to participate in contests and similar promotions and to administer these activities.","privacy_policy_view_information_use_paragraph_two_point_three":"To advise you of important safety-related information or to notify first responders in the event of an accident involving your vehicle.","privacy_policy_view_information_use_paragraph_two_point_two":"To set up, evaluate, and provide feedback regarding your Tesla test drive.","privacy_policy_view_information_use_provide":"To provide and improve our products and services","privacy_policy_view_links_header":"Links","privacy_policy_view_links_paragraph_one":"This Privacy Policy does not address, and we are not responsible for, the privacy, information, or other practices of any third parties, including any third party operating any site or service to which the Services link. The inclusion of a link on the Services does not imply endorsement of the linked site or service by us or by our affiliates, nor does it imply an affiliation with the third party.","privacy_policy_view_links_paragraph_two":"Please note that we are not responsible for the collection, use, or disclosure policies and practices (including the data security practices) of other organizations, such as any other app developer, app provider, social media platform provider, operating system provider, or wireless service provider, including any information you disclose to other organizations through or in connection with our software applications or social media pages.","privacy_policy_view_minors_header":"Minors","privacy_policy_view_minors_paragraph":"The Services are not directed to individuals under the age of sixteen (16), and we request that these individuals not provide any information to Tesla.","privacy_policy_view_offers_eu":"Yes, I’d like to receive marketing communications by e-mail, including surveys, promotions, offers, from Tesla and its affiliates about Tesla’s products and services. You have the right to withdraw your consent at any time. More information {legalLink}.","privacy_policy_view_offers_title":"Product Announcements and New Offers","privacy_policy_view_offers_usa":"I agree to be contacted at the number provided with more information or offers about Tesla products. I understand these calls or texts may use computer-assisted dialing or pre-recorded messages. This consent is not a condition of purchase.","privacy_policy_view_powerwall_warranty":"Tesla Powerwall Limited Warranty","privacy_policy_view_privacy_policy":"Privacy Notice","privacy_policy_view_privacy_policy_agreement_eu":"I, the homeowner, have read the Tesla Customer Privacy Policy in full and consent to the processing of my Personal Information by Tesla as described in the Tesla Customer Privacy Policy. You have the right to withdraw your consent at any time, as described in the Tesla Customer Privacy Policy.","privacy_policy_view_privacy_policy_agreement_usa_australia":"I, the homeowner, have read the Tesla Customer Privacy Policy in full and consent to the processing of my Personal Information by Tesla as described in the Tesla Customer Privacy Policy.","privacy_policy_view_privacy_shield":"Privacy Shield Policy","privacy_policy_view_retention_period_header":"Retention Period","privacy_policy_view_retention_period_paragraph":"We will retain information we collect from or about our customers, our products, and the Services for the period necessary to fulfill the purposes outlined in this Privacy Policy unless a longer retention period is required or permitted by law.","privacy_policy_view_security_header":"Security","privacy_policy_view_security_paragraph_one":"We seek to use reasonable organizational, technical, and administrative measures to protect information within our organization. Unfortunately, no data transmission or storage system can be guaranteed to be 100% secure. If you have reason to believe that your interaction with us is no longer secure (for example, if you feel that the security of any account with us has been compromised), please immediately notify us of the problem by contacting us in accordance with the “How to Contact Us” section below.","privacy_policy_view_security_paragraph_two":"If you sell or transfer your Tesla product to another person, please notify us so that we can determine whether additional steps are required to help safeguard information from or about you from disclosure to the purchaser or transferee of the Tesla product.","privacy_policy_view_title":"View Full Privacy Policy","privacy_policy_view_updates_header":"Updates to this Policy","privacy_policy_view_updates_paragraph":"We may change this Privacy Policy. Please take a look at the “Last Updated” legend at the bottom of this page to see when this Privacy Policy was last revised. Any changes to this Privacy Policy will become effective when we post the revised Privacy Policy on the Services. By using our products, the Services, or otherwise providing information to us following these changes, you accept the revised Privacy Policy.","privacy_policy_view_us_warranty_warning":"You must consent to the Tesla Limited Warranty to register your Powerwall and monitor it in the Tesla mobile app.","privacy_policy_view_warranty_information":"I, the homeowner, accept the terms of the Tesla Powerwall Limited Warranty, available {warrantyLink}. Those terms include an arbitration provision that waives my right to bring or participate in class actions and jury trials. I can opt out of this provision within 30 days by following the process described in the provision.","prompt_factory_reset_confirmation":"Confirm you really wish to reset the unit to factory settings?","pvac-state-active":"Active","pvac-state-faulted":"Faulted","pvac-state-init":"Initializing...","pvac-state-standby":"Wait for Solar","pvac_alert_ac_fault":"Inverter AC Fault","pvac_alert_check_ac_note":"Check AC wiring and grid connection. Reboot inverter and retry operation.","pvac_alert_check_dc_string1_note":"Check String 1 DC wiring and panels. Reboot inverter and retry operation.","pvac_alert_check_dc_string2_note":"Check String 2 DC wiring and panels. Reboot inverter and retry operation.","pvac_alert_check_dc_string3_note":"Check String 3 DC wiring and panels. Reboot inverter and retry operation.","pvac_alert_check_dc_string4_note":"Check String 4 DC wiring and panels. Reboot inverter and retry operation.","pvac_alert_confirm_grid_code_note":"Check AC wiring and grid connection. Confirm selected grid code.","pvac_alert_dc_fault_string1":"Inverter DC Fault - String 1","pvac_alert_dc_fault_string2":"Inverter DC Fault - String 2","pvac_alert_dc_fault_string3":"Inverter DC Fault - String 3","pvac_alert_dc_fault_string4":"Inverter DC Fault - String 4","pvac_alert_freq_change":"Grid Uncompliant - Frequency Change","pvac_alert_internal_comms":"Internal Communication Issue","pvac_alert_over_freq":"Grid Uncompliant - Over Frequency","pvac_alert_over_temp":"Inverter Over Temperature","pvac_alert_over_voltage":"Grid Uncompliant - Over Voltage","pvac_alert_production_limited_note":"Production may be limited. Ensure proper wire terminations, sufficient airflow, and installation environment.","pvac_alert_reboot_note":"Reboot inverter, ensure system is up to date and fully commissioned.","pvac_alert_under_freq":"Grid Uncompliant - Under Frequency","pvac_alert_under_voltage":"Grid Uncompliant - Under Voltage","pvi-power-status-dc-only":"DC Only","pvi-power-status-disabled":"Disabled","pvi-power-status-enabled":"Enabled","pvi-reset-button-label":"Restart Inverter and Clear Alerts","pvs-self-test-1":"Self-test (1/6): Ground Fault","pvs-self-test-2":"Self-test (2/6): Arc Fault","pvs-self-test-3":"Self-test (3/6): MCI","pvs-self-test-4":"Self-test (4/6): Isolation","pvs-self-test-5":"Self-test (5/6): Relay Weld","pvs-self-test-6":"Self-test (6/6): Impedance","pvs_alert_check_arc_fault_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Arc fault issues.","pvs_alert_check_dc_note":"Check DC wiring, connections, panels, and rapid shutdown devices for ground fault issues.","pvs_alert_check_dc_string1_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 1.","pvs_alert_check_dc_string2_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 2.","pvs_alert_check_dc_string3_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 3.","pvs_alert_check_dc_string4_note":"Check DC wiring, connections, panels, and rapid shutdown devices for Isolation issues, focusing on String 4.","pvs_alert_check_dc_strings_note":"Check DC wiring, connections, panels, and string configurations.","pvs_alert_dc_arc_fault_detected":"DC Arc Fault - Detected","pvs_alert_dc_arc_fault_lockout":"DC Arc Fault - Lockout","pvs_alert_dc_ground_fault":"DC Ground Fault","pvs_alert_dc_isolation_string1":"DC Isolation Issue - String 1","pvs_alert_dc_isolation_string2":"DC Isolation Issue - String 2","pvs_alert_dc_isolation_string3":"DC Isolation Issue - String 3","pvs_alert_dc_isolation_string4":"DC Isolation Issue - String 4","pvs_alert_dc_over_voltage":"DC Over Voltage","pvs_alert_rapid_shutdown":"Rapid Shutdown Initiated","pvs_alert_rapid_shutdown_note":"Check AC breaker and low-voltage rapid shutdown circuit.","registration_container_continue_header":"Customer email entered: {email}","registration_container_continue_modal_description":"The customer will be unable to access the Tesla Mobile App if the email is incorrect. Confirm customer email is valid.","registration_container_customer_email_required":"Customer email is necessary to enable the Tesla Mobile App.","registration_container_customer_information_title":"Site Information","registration_container_fill_required_fields":"Installer or customer must fill in all required fields.","registration_container_loading_modal_registering":"Registering","registration_container_reset_form_modal_description":"Please confirm that you would like to proceed with resetting the form.","registration_container_reset_form_modal_header":"Any information previously entered will be lost.","security_container_settings_title_customer":"Change or Reset Password (Customer)","security_container_settings_title_installer":"Change or Reset Password (Installer)","security_view_copied_to_clipboard":"Copied!","security_view_not_wifi_qr_code_error":"Not a WiFi QR code.","security_view_scan_qr_code_not_found_error":"No QR Code found.","security_view_settings_change_password_error":"New passwords do not match","security_view_settings_change_password_label":"CHANGE PASSWORD","security_view_settings_completed":"COMPLETE","security_view_settings_new_password_label":"NEW PASSWORD","security_view_settings_old_password":"CURRENT PASSWORD","security_view_settings_password_change_info":"To change the password, enter the current password and a new password.","security_view_settings_password_customer":"PASSWORD","security_view_settings_password_customer_placeholder":"Last 5 characters of the Gateway sticker password","security_view_settings_password_installer_label":"Gateway password","security_view_settings_password_reset_info":"To reset the password, toggle the switch on a Powerwall, then enter the 5 last characters of the Gateway sticker password.","security_view_settings_password_reset_info_serial":"To reset the password, toggle the switch on a Powerwall, then enter the 5 last characters of the Gateway serial number.","security_view_settings_password_reset_installer_info":"To reset the password, toggle the switch on a Powerwall, then enter the Gateway sticker password.","security_view_settings_password_reset_installer_info_serial":"To reset the password, toggle the switch on a Powerwall, then enter the Gateway serial number.","security_view_settings_re_enter_password_label":"RE-ENTER NEW PASSWORD","security_view_settings_reset_password_label":"RESET PASSWORD","security_view_settings_serial_customer":"SERIAL NUMBER","security_view_settings_serial_customer_placeholder":"Last 5 characters of the Gateway serial number","security_view_settings_serial_installer_label":"Gateway serial number","security_view_settings_success":"Password successfully updated","security_view_settings_success_new_password":"The new password is:","security_view_settings_toggled_password":"Forgot Password?","self_test_result_viewer_resi_only":"Self Test Log Viewer is not available.","self_test_results_viewer_collapse_all":"Collapse All","self_test_results_viewer_column_name":"Name","self_test_results_viewer_column_result":"Result","self_test_results_viewer_column_spec":"Specification","self_test_results_viewer_column_test_time":"Test Time","self_test_results_viewer_column_value":"Value","self_test_results_viewer_expand_all":"Expand All","self_test_results_viewer_failed":"Failed","self_test_results_viewer_in_progress":"In Progress","self_test_results_viewer_inconclusive":"Inconclusive","self_test_results_viewer_not_started":"Not Started","self_test_results_viewer_passed":"Passed","self_test_results_viewer_skipped":"Skipped","self_test_results_viewer_warning":"Warning","settings_container_confirm_reset_operation_mode":"Confirm mode change to {operation}","settings_container_heco_modal_description":"This setting can not be changed after selection. Confirm that the customer is currently enrolled in the HECO Battery Bonus Program before submitting your selection.","settings_container_heco_modal_title":"Confirm Enrollment","settings_container_heco_view_description":"Powerwall will discharge, at the comitted capacity daily, to meet the program requirements. This setting can not be changed after activation.","settings_container_heco_view_scheduled_dispatch_start_time":"Start Time","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"HECO Scheduled Dispatch","settings_container_heco_view_title":"HECO Battery Bonus Program","settings_container_operation_modes_modal_content":"Use the Tesla Mobile App \'Customize\' screen to change operation modes.","settings_container_operation_modes_modal_reset":"RESET MODE","settings_container_operation_modes_modal_title":"Operation Mode","settings_container_operation_modes_modal_warning":"This is a one way change. Advanced modes can only be re-enabled via the Tesla Mobile App.","settings_container_operation_modes_reset_modal_title":"Reset Operation Mode?","settings_container_operation_settings_subtitle":"Set the name of your system, operation mode, and export limitations, if any.","settings_container_operation_settings_title":"Operation Settings","settings_container_save_instructions":"Click CONTINUE to save.","settings_container_saving_site_info_modal":"Saving Site Settings","settings_container_site_import_description":"Site Import Limit is an optional setting. Leave this field empty to disable import limiting. When enabled this setting specifies the maximum power allowed to be imported from the grid to the site.","settings_container_site_limits_header":"Site Limits","settings_view_custom_modes_label":"PRECONFIGURED MODE","settings_view_energy_reserve_heco_label":"Changes to backup reserve are restricted due to enrollment in the HECO Battery Bonus program. The customer will be able to set backup reserve in their app.","settings_view_energy_reserve_label":"BACKUP RESERVE","settings_view_instruction_site_name":"Enter a site name","settings_view_net_meter_mode":"Export Mode","settings_view_operation_label":"OPERATION MODE","settings_view_operation_set_label":"OPERATION MODE TO SET","settings_view_set_net_meter_mode_never_label":"Permanent Non Export","settings_view_set_net_meter_mode_solar_label":"Solar Export","settings_view_site_name":"SITE NAME","settings_view_site_name_placeholder":"Ex. My Home","settings_view_solar_export_limitation_slider":"Solar export limitation","settings_view_solar_feature":"This feature should only be activated when interconnection requires the solar system to not export energy to the grid. Typical in Hawaii (CSS) and Australia regions.","settings_view_solar_limitation":"POWERWALL INSTALLED ALONGSIDE A SOLAR SYSTEM THAT IS NOT A POWERWALL+?","site_info_container_submit":"SUBMIT","soft-blocker-continue-button":"CONTINUE","solar_item_view_baudrate_label":"Baud rate","solar_item_view_brand_input_label":"BRAND","solar_item_view_brand_label":"Brand","solar_item_view_check_inverter":"CHECK INVERTER {id} CONNECTION","solar_item_view_connection_warning":"Could not establish connection","solar_item_view_inverter_brand":"Inverter Brand","solar_item_view_inverter_communication":"Configure direct inverter communication","solar_item_view_inverter_model_label":"Inverter Model","solar_item_view_ip_label":"IP ADDRESS","solar_item_view_model_label":"MODEL","solar_item_view_power_rating_explanation":"This is the total power rating of the photovoltaic system with respect to the modules/panels. This is the nominal power of the array. For example if you have 10x 300W solar panels, list 3000W, even if the PV inverter is 2500W or 3500W.","solar_item_view_pv_array_dc_power_rating":"PV Array DC Power Rating","solar_item_view_pv_array_dc_power_rating_label":"PV ARRAY DC POWER RATING","solar_item_view_revenue_grade":"Revenue Grade","solar_item_view_revenue_grade_explanation":"Check this only if the inverter has an integrated revenue grade meter. Inverter data will be read from the meter instead of the inverter if this option is enabled.","solar_item_view_revenue_grade_title":"Revenue Grade","solar_item_view_solar":"SOLAR {id}","solar_item_view_success":"SUCCESSFULLY CONNECTED!","solar_item_view_unable":"UNABLE TO READ INVERTER!","solar_list_view_continue_add_solar":"ADD SOLAR","solar_view_continue_add_solar":"ADD SOLAR","status_update_urgency_none":"Up To Date","status_update_urgency_optional":"Update Optional","status_update_urgency_required":"Update Required","status_update_urgency_unknown":"Unknown","success_view_awesome":"AWESOME!","success_view_copied_to_clipboard":"Copied!","success_view_installation_complete":"Installation complete","success_view_new_password_error_title":"Wizard Password","success_view_new_password_title":"New Wizard Password","success_view_password_set":"Password is already set","success_view_record_password":"Please record this password before continuing","success_view_retry_registration":"RETRY REGISTRATION","success_view_set_customer_password":"SET CUSTOMER PASSWORD","success_view_syncing_configuration":"Syncing configuration","summary_container_company":"Company","summary_container_connection_type":"Connection Type","summary_container_email":"Email","summary_container_installer_information":"Installer Information","summary_container_ip_address":"IP Address","summary_container_location":"Location","summary_container_meter":"Meter #{index}","summary_container_meter_information":"Meter Information","summary_container_phone":"Phone Number","summary_container_print":"Print","summary_container_serial_number":"Serial Number","summary_container_site_info":"Site Information","summary_container_site_name":"Site Name","summary_container_subtitle":"Product and Installation Information","summary_site_information":"SITE INFORMATION","summary_view_autonomous":"Time-based control","summary_view_backup":"Backup-only","summary_view_backup_capable":"Backup Capable","summary_view_backup_reserve":"BACKUP RESERVE","summary_view_backup_switch":"BACKUP SWITCH","summary_view_conductor_export":"CONDUCTOR EXPORT LIMIT","summary_view_conductor_import":"CONDUCTOR IMPORT LIMIT","summary_view_control":"Site Control","summary_view_customer_version":"CUSTOMER VERSION","summary_view_direct":"Direct","summary_view_disabled":"DISABLED","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"PV EXPORT LIMIT","summary_view_extra_programs":"EXTRA PROGRAMS","summary_view_followers":"FOLLOWERS","summary_view_gateway":"GATEWAY","summary_view_grid_code":"GRID CODE","summary_view_gsm":"CELLULAR","summary_view_heco_battery_bonus":"HECO Battery Bonus","summary_view_ip_address":"IP ADDRESS","summary_view_leader":"LEADER","summary_view_mode":"MODE","summary_view_msg_cannot_read_solar_assembly":"Stop system first to see part number and serial of Powerwall+ solar assembly.","summary_view_network":"NETWORK","summary_view_non_backup":"Non-Backup","summary_view_panel_limit":"PANEL MAXIMUM CURRENT","summary_view_partnum":"Part {partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Aggregation","summary_view_self_consumption":"Self Consumption","summary_view_serialnum":"Serial {serialNumber}","summary_view_site_export":"SITE EXPORT LIMIT","summary_view_site_import":"SITE IMPORT LIMIT","summary_view_site_name":"SITE NAME","summary_view_solar_assembly":"SOLAR ASSEMBLY","summary_view_sync":"BACKUP CAPABILITY","summary_view_time":"SUMMARY COMPILATION TIME","summary_view_time_zone":"TIME ZONE","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"WiFi-paired device is not currently responding","system-device-unknown-sitecontroller":"Device has not yet discovered its children","system_acpw_vitals_charge":"Charge Level: {charge}%","system_acpw_vitals_power":"AC Power: {power}","system_acpw_vitals_power_charging":"AC Power: {power} Charging","system_acpw_vitals_power_discharging":"AC Power: {power} Discharging","system_acpw_vitals_state":"Powerwall State: {state}","system_acpw_vitals_voltage":"AC Voltage: {voltage}","system_controller_din":"Controller: {din}","system_device_alert_disabled":"Device disabled","system_device_gateway_not_islanding":"This is not the islanding controller.","system_device_name_backup_switch":"Backup Switch ({sn})","system_device_name_battery_assembly":"Battery Assembly ({sn})","system_device_name_gateway":"Gateway ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus_leader":"Leader Powerwall+","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+ (wired)","system_device_name_powerwall_plus_wireless":"Powerwall+ (wireless)","system_device_name_remote_meter":"Remote Meter ({sn})","system_device_name_solar_assembly_1":"Solar Assembly","system_device_name_sync":"Gateway Contactor / Meter Controller ({sn})","system_firmware_update":"Updating: {percent}% ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"Backup state: {backupState}","system_islanding_vitals_grid_line":"Grid Line {lineNumber}: {v} {f}","system_islanding_vitals_island_line":"Island Line {lineNumber}: {v} {f}","system_overview_connected":"Connected To Tesla","system_overview_disconnected":"Not Connected To Tesla","system_overview_follower":"Follower Powerwall","system_overview_login_required":"Login Required To View System Operation","system_overview_scanning":"Scanning for devices...","system_overview_site_controller":"Site Controller","system_overview_updating":"Updating devices...","system_pvi_vitals_ac_solar_power_only":"AC Solar Power: {power}","system_pvi_vitals_lifetime_energy_kwh":"Lifetime Energy: {energy}","system_pvi_vitals_state":"State: {message}","system_pvi_vitals_string":"String {number}: {voltage} / {current}","system_pvi_vitals_string_not_connected":"String {number}: Not connected","system_remote_meter_ct_line":"CT {n} ({location}): {value}","system_remote_meter_no_cts":"No CTs configured","system_rescan_button_text":"Rescan Devices","system_scanning_label_text":"Scanning for Devices...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Test that the system is working as expected.","test_container_system_test_title":"System Test","test_inverter_container_error_grid_uncompliant":"The test cannot be run because the grid is noncompliant.","test_inverter_container_error_not_idle":"The Powerwall must be in standby to perform the test.","test_inverter_container_results_error_plural_subtitle":"{num} Tests Failed","test_inverter_container_results_error_singular_subtitle":"{num} Test Failed","test_inverter_container_results_success_plural_subtitle":"{num} Tests Passed","test_inverter_container_results_success_singular_subtitle":"{num} Test Passed","test_inverter_container_results_success_subtitle":"All Tests Passed","test_inverter_container_results_title":"Inverter Self Test Results","test_inverter_container_title":"Inverter Self Test","test_meter_composite_view_configure_meters":"CONFIGURE METERS","test_meter_composite_view_current_transformer_setup_instructions":"Use at least one Site CT OR Load CT, but not both.","test_meter_composite_view_external_meter_setup_instructions":"At least one current transformer must be set for each external meter.","test_meter_composite_view_external_meters_title":"External Meters","test_meter_composite_view_internal_meters_gateway_title":"Internal Meters (Gateway)","test_meter_composite_view_no_configured_meters":"NO CONFIGURED METERS. PLEASE {configure} TO CONTINUE.","test_meter_composite_view_note":"NOTE","test_meter_item_view_acuvim_label":"Meter {id}: Acuvim Meter","test_meter_item_view_backup_switch_label":"Meter {id}: Backup Switch Meter","test_meter_item_view_configure_phases_note":"Configure phases in order to enable CTs for this meter","test_meter_item_view_internal_meter_x_gateway_label":"Meter {id}: Internal Primary Meter X (Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"Meter {id}: Internal Auxiliary Meter Y (Gateway)","test_meter_item_view_remote_w1_wifi_label":"Meter {id}: Remote Wi-Fi","test_meter_item_view_remote_w1_wired_label":"Meter {id}: Remote Wired","test_meter_item_view_remote_w2_wifi_label":"Meter {id}: Remote Wi-Fi","test_meter_item_view_remote_w2_wired_label":"Meter {id}: Remote Wired","test_meter_item_view_reset":"RESET ALL","test_meter_item_view_toggle_advanced":"Advanced","test_meter_item_view_toggle_power":"Power","test_view_canceled_status":"Test Has Been Canceled","test_view_failed_status":"Test Has Failed","test_view_idle_status":"Beginning System Testing","test_view_init_status":"Preparing To Start Test","test_view_inverter_test_warning_message":"If you have a 0 Export PV inverter, the self test procedure of the Gateway is unable to adequately qualify the system. Turn off the PV inverter until after the self test is complete.","test_view_passed_status":"Test Has Passed","test_view_prep_status":"Initializing Controls: May take a few minutes!","test_view_running_status":"Running Charge Tests","test_view_skip_start_system_test_text":"Confirm to skip the system test","test_view_start_system_test_warning":"WARNING","test_view_system_test_completed_message":"System Test Completed!","time_minute":"minute","time_minutes":"minutes","time_second":"second","time_seconds":"seconds","time_started_at":"Started at: {time}","timezone_container_subtitle":"Based on location and IP address, we can help you find the time zone for your installation.","timezone_container_title":"Time Zone","timezone_view_label":"time zone","toast_view_standard_title":"Note","toast_view_warning_title":"Warning","update_container_industrial_updating_description":"The Site Controller will now automatically restart in order to install the update. {lb1}{lb2} Please wait for 2 minutes, reconnect to the Site Controller network, and then {refresh}","update_container_preparing_title":"Preparing for Latest Update","update_container_refresh_browser":"Refresh your Browser","update_container_residential_updating_description":"The Gateway will now automatically restart in order to install the update. {lb1}{lb2} Please wait for 2 minutes, reconnect to the Gateway network, and then {refresh}","update_container_skip_title":"Skip Update?","update_container_subtitle":"Check for Updates. Note: Pushing Firmware Update to the Powerwalls occurs on the Powerwall page.","update_container_subtitle_industrial":"Check for Updates. Note: Pushing Firmware Update to Batteries occurs on the Battery Page.","update_container_title":"Update","update_container_updating_title":"Installing Update","update_step_item_view_resolution_title":"Suggested Fix","update_view_check_again":"CLICK TO CHECK AGAIN","update_view_check_for_update":"CHECK FOR GATEWAY UPDATE","update_view_check_for_update_industrial":"CHECK FOR SITE CONTROLLER UPDATE","update_view_checking_update":"Checking for update","update_view_current_version":"Current Version: {version}","update_view_downloading":"DOWNLOADING","update_view_downloading_update":"Downloading update","update_view_no_power_cicle":"DO NOT POWER CYCLE!","update_view_percent_complete":"{percent} complete","update_view_progress":"UPDATE PROGRESS","update_view_staged":"NEW VERSION STAGED","update_view_staged_update":"Ready to install update","update_view_staging":"STAGING","update_view_staging_update":"Staging update","update_view_time_remaining":"remaining","update_view_up_to_date":"VERSION UP-TO-DATE","update_view_update_now":"UPDATE NOW","update_view_update_urgency_label":"Update Status: {status}","update_view_updated_industrial":"Site Controller Software is up-to-date.","update_view_updated_residential":"Gateway Software is up-to-date.","update_view_wait_minutes":"PLEASE WAIT A FEW MINUTES","upgrade_page_banner_prompt":"Tesla Pros is a better commissioning experience","upgrade_page_improvements_title":"Improvements include:","upgrade_page_instructions_step_1_description":"Disconnect from the TEG Wi-Fi network","upgrade_page_instructions_step_1_label":"Step 1:","upgrade_page_instructions_step_2_description":"Tap the button below to download Tesla Pros","upgrade_page_instructions_step_2_external_link":"Or visit: {externalLink}","upgrade_page_instructions_step_2_label":"Step 2:","upgrade_page_instructions_step_2_wifi_disconnect_symbol_label":"Turn off Wi-Fi on your phone","upgrade_page_navigation":"Upgrade Now","upgrade_screen_upgrade_later_button":"UPGRADE LATER","upgrade_tesla_pros_improvement_1":"Better update experience and quicker commissioning","upgrade_tesla_pros_improvement_2":"Access to more system information and self-tests","upgrade_tesla_pros_improvement_3":"Improved Neurio meter pairing","upgrade_tesla_pros_improvement_4":"Better diagnostics and alerts","upgrade_to_tesla_pros_banner_title":"Tesla Pros is a better commissioning experience","upgrade_to_tesla_pros_download_prompt":"UPGRADE NOW","validation_phone":"Input a valid telephone number","vitals_header_subtitle_firmware_update":"Firmware update in progress...","vitals_header_subtitle_firmware_update_failed":"Firmware update failed. Check enable switches and wiring.","vitals_header_title":"System","vitals_powerwall_state_ac_fault":"AC Stage Fault","vitals_powerwall_state_dc_fault":"DC Stage Fault","vitals_powerwall_state_grid_following":"Grid Following","vitals_powerwall_state_grid_forming":"Grid Forming","vitals_powerwall_state_init":"Initializing","vitals_powerwall_state_off":"Off","vitals_powerwall_state_standby":"Standby","vitals_powerwall_state_support_dc":"Support DC","warning":"WARNING","warning_off_grid":"If the electrical system is off-grid, any backed up loads will be dropped within 5 minutes.","warning_on_grid":"If the electrical system is on-grid, Powerwall will stop charging/discharging.","warning_sitemaster_container_not_running":"The Sitemaster is not running","wifi_pairing_link_message":"Add a WiFi-connected Powerwall","wifi_view_find_network":"FIND NETWORK BY SSID","wifi_view_note":"Note: The Gateway is only compatible with 2.4 GHz wireless networks.","wifi_view_note_five_ghz":"Note: The Gateway is compatible with both 2.4 GHz and 5 GHz wireless networks.","wifi_view_readonly":"This is a follower Powerwall, so its wireless network configuration may not be edited.","wifi_view_security_label":"SECURITY","wizard_container_commissioning_wizard":"Tesla Commissioning Wizard","wizard_container_login_required":"Login Required","wizard_container_title":"Let\'s get started.","wizard_container_verifying_login_title":"Verifying Login"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Fehler","advanced_settings_submit":"Senden","advanced_settings_submitted":"Gesendet","advanced_settings_title":"Erweiterte Einstellungen","alert_container_ac_phase_1_over_voltage":"AC-Überspannung","alert_container_ac_phase_1_under_voltage":"AC-Unterspannung","alert_container_ac_phase_2_over_voltage":"AC-Überspannung","alert_container_ac_phase_2_under_voltage":"AC-Unterspannung","alert_container_ac_phase_3_over_voltage":"AC-Überspannung","alert_container_ac_phase_3_under_voltage":"AC-Unterspannung","alert_container_over_frequency":"AC-Überfrequenz","alert_container_rate_of_change_frequency":"AC-Frequenzgradientenüberwachung","alert_container_under_frequency":"AC-Unterfrequenz","app_container_engineering_mode_banner_message":"Für den Tesla Service-Modus ist keine Authentifizierung erforderlich. Stoppen Sie bitte das System, bevor Sie Veränderungen an der Installation durchführen. Verlassen Sie das System in einem akzeptablen Status, bevor Sie den Browser schließen. Schließen Sie nach Abschluss der Arbeiten bitte den Browser, da für diesen Modus keine Authentifizierung erforderlich ist.","app_container_engineering_mode_title":"Tesla Service-Modus","app_container_firmware_update_banner_message":"Lassen Sie die Installation und die Verkabelung unberührt und bleiben Sie auf dieser Seite, bis die Aktualisierung abgeschlossen ist.","app_container_firmware_update_banner_title":"Firmware-Update wird durchgeführt","app_container_sitemaster_message_title":"Das System ist aktuell in Betrieb. Um den Status der Batterie(n) einsehen zu können, muss das System heruntergefahren sein. Sie können das System über die Startseite stoppen.","app_container_sitemaster_power_supply_mode_banner_message":"Die Batterie erzeugt Wechselstrom, um alle für die Konfiguration nötigen Geräte zu betreiben. Die Schaltfläche auf der Startseite, um das System zu stoppen.","app_container_sitemaster_power_supply_mode_banner_title":"Netzbildungs-Modus","app_container_sitemaster_running_banner_title":"System ist in Betrieb","auto_config_check_network_button":"Überprüfen Sie das Netzwerk und aktivieren Sie W-LAN","auto_config_check_system_and_summary":"Sehen Sie sich die Seiten \\"System\\" und \\"Zusammenfassung\\" an.","auto_config_done_button_text":"Fertig","auto_config_instructions_cannot_determine_grid_connection":"Bevor Sie das System in Betrieb nehmen, überprüfen Sie die Verkabelung zum Backup-Switch oder Gateway.","auto_config_instructions_determining_on_grid":"Sollte diese Meldung länger als 3 Minuten andauern, überprüfen Sie die Verkabelung zum Backup-Switch oder Gateway.","auto_config_instructions_finding_contactor_controller":"Sollte diese Meldung länger als 3 Minuten andauern, überprüfen Sie die Verkabelung zum Backup-Switch oder Gateway.","auto_config_instructions_finding_powerwalls":"Sollte diese Meldung länger als 3 Minuten andauern, überprüfen Sie die Verkabelung der Powerwall.","auto_config_instructions_finding_solar_powerwall":"Sollte diese Meldung länger als 3 Minuten andauern, überprüfen Sie die Verkabelung der Solar Powerwall.","auto_config_instructions_lookup_failed_retry":"Scannen Sie den Seriennummern-Aufkleber in Bolt, um die automatische Einrichtung der Powerwall zu aktivieren, und dann {retryButton}","auto_config_instructions_lookup_failed_wizard":"Oder {wizardButton} für eine manuelle Powerwall-Einrichtung.","auto_config_instructions_missing_info_1":"Die automatische Powerwall-Einrichtung ist fehlgeschlagen, weil die folgenden Informationen nicht vorhanden waren:","auto_config_instructions_missing_info_2":"{wizardButton}, um sie manuell einzugeben.","auto_config_instructions_missing_info_3":"{registrationButton} manuell.","auto_config_instructions_no_grid_connection":"Überprüfen Sie die Verkabelung zum Backup-Switch oder Gateway","auto_config_instructions_no_grid_detected":"Bevor Sie das System in Betrieb nehmen, überprüfen Sie die Verkabelung und die Schutzschalter.","auto_config_instructions_no_network_retry":"{networkLink} zum Aktivieren der automatischen Powerwall-Einrichtung und danach {retryButton}","auto_config_instructions_no_network_wizard":"Oder {wizardButton} zur manuellen Einrichtung der Powerwall.","auto_config_instructions_retry":"{networkLink} falls das Problem weiterhin besteht","auto_config_instructions_retry_wizard":"Oder {wizardButton} zur manuellen Einrichtung der Powerwall.","auto_config_instructions_updating":"Bevor die automatische Einrichtung der Powerwall beginnen kann, ist ein Software-Update erforderlich. Der Download und die Anwendung des Updates erfolgen automatisch. Es kann sein, dass Sie sich danach erneut mit dem W-LAN-Netzwerk der Powerwall verbinden müssen.","auto_config_missing_grid":"Netz für den Kundenstandort","auto_config_missing_gridcode":"Netzanschlussbedingungen für den Kundenstandort","auto_config_missing_registration":"Kundeninformationen für die Produktregistrierung","auto_config_missing_timezone":"Zeitzone am Kundenstandort","auto_config_network_button_text":"Netzwerk einrichten","auto_config_registration_button_text":"Kundeninformationen eingeben","auto_config_retry_button_label":"Erneut versuchen","auto_config_run_button_label":"Powerwall automatisch einrichten","auto_config_run_wizard_button_text":"Assistent ausführen","auto_config_section_title":"Automatische Powerwall-Einrichtung","auto_config_status_cancelled":"Die automatische Einrichtung wurde abgebrochen. Sie können es erneut versuchen:","auto_config_status_cannot_determine_grid_connection":"Netzanschluss konnte nicht ermittelt werden.","auto_config_status_complete":"Erfolgreich abgeschlossen","auto_config_status_determining_on_grid":"Netzanschluss wird bestimmt...","auto_config_status_finding_contactor_controller":"Nach Schützsteuerung suchen...","auto_config_status_finding_powerwalls":"Suche Powerwalls ...","auto_config_status_finding_solar_powerwall":"Nach Solar Powerwall suchen...","auto_config_status_in_progress":"Vorgang läuft","auto_config_status_lookup_failed":"Suche nach Seriennummer fehlgeschlagen","auto_config_status_missing_information":"Informationen fehlen","auto_config_status_no_grid_connection":"Keine Verbindung zum Netz","auto_config_status_no_grid_detected":"Es wurde kein Netz erkannt.","auto_config_status_no_network":"Nicht mit Tesla verbunden","auto_config_status_not_applicable":"Eine automatische Einrichtung ist nicht erforderlich oder sie wurde bereits ausgeführt. Sie können sie erneut ausführen:","auto_config_status_retrying":"Fehlgeschlagene Netzwerkanforderung erneut versuchen","auto_config_status_timeout":"Das Zeitlimit für die automatische Einrichtung ist abgelaufen. Sie können es erneut versuchen:","auto_config_status_updating":"Software-Update erforderlich","auto_config_stop_system_modal_message":"Der automatische Einrichtungsvorgang kann nicht ausgeführt werden, während das System in Betrieb ist. Stoppen Sie das System und versuchen Sie es erneut.","auto_config_stop_system_modal_title":"Automatische Einrichtung kann nicht gestartet werden","battery_container_add_all_batteries_button_label":"ALLE HINZUFÜGEN","battery_container_available_batteries_subtitle":"Diese Batterien sind nicht Teil des Systembetriebs, es sei denn, sie werden hinzugefügt.","battery_container_available_batteries_title":"Verfügbare Batterieblöcke","battery_container_cannot_communicate":"Kommunikation mit Powerwall nicht möglich. Prüfen Sie die Verkabelung und diie Terminierung des CAN-Bus.","battery_container_cannot_communicate_with_device":"Keine Kommunikation mit dem Gerät möglich. Prüfen Sie die Verkabelung und diie Terminierung des CAN-Bus.","battery_container_chinv":"VFD für Kompressor and Heizung (CHINV) {index}","battery_container_configured_batteries_label":"Konfigurierte Batterieblöcke","battery_container_configured_batteries_subtitle":"Diese Batterien sind Teil des Systembetriebs.","battery_container_confirm_update_firmware":"Dieser Vorgang kann einige Minuten in Anspruch nehmen. Unterbrechen Sie das Update nicht und bleiben Sie auf dieser Seite.","battery_container_dcbc":"Batterieblock {index}","battery_container_dcbc_comms_failure":"Kommunikationsfehler. Prüfen Sie die Netzwerkverbindung zum Gerät und führen Sie einen erneuten Scan durch.","battery_container_dcbc_dcdisconnect_opened":"Der Gleichstrom-Trennschalter befindet sich in Position Aus.","battery_container_dcbc_door_switch_opened":"Freischaltleitung der Wechselrichterklappe unterbrochen. Prüfen Sie den Türschalter.","battery_container_dcbc_enable_line_return_low_estop":"Wechselrichter-Fernabschaltung unterbrochen. Schaltkreis für Fernabschaltung prüfen.","battery_container_dcbc_enable_line_return_low_inv":"Freischaltleitung des Wechselrichtersystems unterbrochen. Prüfen Sie die Rückmeldung des Leitungsschutzschalters.","battery_container_dcbc_enable_line_return_low_str":"Die Freischaltleitung für eine oder mehrere Powerpack-Reihen ist unterbrochen. Prüfen Sie die Verdrahtung und die Klappen des Powerpack. Lesen Sie für eine Diagnose die Anleitung zur Problemlösung für die Freischaltleitung.","battery_container_delete_button_title":"Dieses Gerät entfernen","battery_container_diagnosis_incomplete":"Diagnose unvollständig. Bevor weitere Prüfungen ausgeführt werden können, ist ein Firmware-Update erforderlich.","battery_container_faults":"Fehler","battery_container_firmware_update_needed":"Firmware-Update erforderlich.","battery_container_gateway_contactor_meter_controller":"Gateway-Schütz/Zählersteuerung","battery_container_industrial_confirm_update_firmware":"Dies aktualisiert die Firmware aller Batterieblöcke und ihrer Teilkomponenten.","battery_container_industrial_confirm_update_firmware_info":"Hierdurch wird die Firmware jedes Batterieblocks in aktualisiert.","battery_container_internal_communications_fault":"Interner Kommunikationsfehler. Prüfen Sie Verkabelung und Terminierung des CAN-Bus und aktualisieren Sie die Firmware.","battery_container_meter_socket_adapter":"Backup-Switch","battery_container_mpbc":"Batterieblock {index}","battery_container_mpthc":"Thermosteuergerät (MPTHC) {index}","battery_container_no_msa_detected":"Es wurde kein Backup-Switch erkannt.","battery_container_no_sync_detected":"Keine Schützsteuerung erkannt. Keine Backup-Fähigkeit erkannt.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Eintrag (LCC) {index}","battery_container_post_missing":"Fehlender Eintrag {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Leistungsstufe {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"Die Powerwall ist ausgeschaltet. Stellen Sie sicher, dass sich der Schalter in Position EIN befindet.","battery_container_qbms":"Batterieüberwachungsplatine (QBMS)","battery_container_qhvp":"Hochvoltprozessor (QHVP)","battery_container_residential_confirm_update_firmware":"Dies aktualisiert die Firmware aller Powerwalls und der Schützsteuerung (falls vorhanden).","battery_container_resolve_connectivity":"Beheben Sie mögliche Verbindungsprobleme, bevor Sie die Firmware aktualisieren.","battery_container_scan":"SCAN","battery_container_scan_in_progress":"SCANNT ...","battery_container_scbc":"Ladeblock {index}","battery_container_scthc":"Thermosteuergerät (SCTHC) {index}","battery_container_self_tests_failure":"Selbsttest nicht bestanden.","battery_container_self_tests_inconclusive":"Unklare Ergebnisse des Selbsttests.","battery_container_self_tests_internal_error":"Selbsttest wegen internem Systemfehler fehlgeschlagen.","battery_container_self_tests_stall":"Timeout: Selbsttests können nicht gestartet werden.","battery_container_self_tests_system_down":"Selbsttests können nicht ausgeführt werden, wenn das System abgeschaltet ist. Starten Sie das System und versuchen Sie es erneut.","battery_container_self_tests_updating":"Es können keine Selbsttests durchgeführt werden, während die Batterien aktualisiert werden. Versuchen Sie es erneut, wenn das Update abgeschlossen ist.","battery_container_serial_number":"Seriennummer: {sn}","battery_container_solar_powerwall":"{index} Solar Powerwall","battery_container_starc":"Gleichspannungswandler (STARC) {index}","battery_container_stitch":"Regelspannung DC-DC (STITCH)","battery_container_synchronizer":"Schützsteuerung","battery_container_unknown":"Unbekannter Bus-Regler {index}","battery_container_update_failed":"Update fehlgeschlagen. Versuchen Sie es erneut. Sorgen Sie dafür, dass die Drähte und die Freigabeschalter während des Updates nicht getrennt werden.","battery_container_update_firmware":"FIRMWARE AKTUALISIEREN","battery_container_update_in_progress":"UPDATE WIRD DURCHGEFÜHRT ...","battery_container_waiting_to_report_firmware":"Warte darauf, dass die Einheit die Firmware-Version meldet.","battery_container_warnings":"Warnhinweise","button_label_generate":"GENERIEREN","can_reboot_message_backup":"Backup-Modus","can_reboot_message_block_update":"Block-Update wird ausgeführt","can_reboot_message_enumeration":"Nummerierung wird ausgeführt","can_reboot_message_initializing":"System wird initialisiert","can_reboot_message_power_flow_is_too_high":"Stromfluss zu hoch","can_reboot_message_updating":"Site Package-Update wird ausgeführt","caution":"VORSICHT","charger_settings_cabinet":"Schrank {sn} {state}","charger_settings_cabinet_posts_warning":"Mit diesen Steuerelementen werden nur die Nachfreigabe und der schrankinterne HV-Bus gestoppt. Beim Zugang zu den Schränken müssen Sie trotzdem die Stromzufuhr unterbrechen und alle Sicherheitsvorschriften beachten.","charger_settings_common_bus":"Gemeinsamer Bus {state}","charger_settings_common_bus_warning":"Stoppt nur den gemeinsamen HV-Bus. Beim Zugang zu den Schränken müssen Sie trotzdem die Stromzufuhr unterbrechen und alle Sicherheitsvorschriften beachten.","charger_settings_disabled":"deaktiviert","charger_settings_enabled":"aktiviert","charger_settings_post":"Post {id} {state}","charger_settings_saving":"speichern {spinner}","client_protocols_container_subtitle":"Client-Protokolle ein- oder ausschalten.","client_protocols_container_title":"Client-Protokolle","client_protocols_menu_title":"Client-Protokolle","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"Modbus TCP/IP","compliance_container_label_fcc_id":"FCC-ID: {fccId}","compliance_container_label_ic_id":"IC: {icId}","compliance_container_label_manufacturer":"Hersteller: {manufacturer}","compliance_container_label_model":"Modell: {model}","compliance_container_title":"Konformität","component-menu-title":"Komponenten","conductor_limit":"Batterien werden geregelt, um auf allen Phasen der Stromwandler ein Überschreiten der konfigurierten Spannungsgrenzwerte zu vermeiden. In den Anwendungshinweisen zu den Spannungsgrenzwerten finden Sie weitere Informationen zu den Anwendungsbereichen und den zu konfigurierenden Grenzwerten.","conductor_min_current":"Exportgrenzwert des Leiters","control_container_add_on":"HINZUFÜGEN","control_container_always_active":"IMMER AKTIV","control_container_battery_ok":"VOLLSTÄNDIGER BATTERIE-EXPORT ZULÄSSIG","control_container_charge_power_target":"ZIEL FÜR LADESTROM","control_container_conductor_max_current":"Importgrenzwert des Leiters","control_container_conductor_min_current_max_bound":"Der Maximalwert für {mode} beträgt 200 A","control_container_conductor_min_current_min_bound":"Der Minimalwert für {mode} beträgt 5 A","control_container_control_subtitle":"Steuer-Untertitel","control_container_control_title":"Steuertitel","control_container_direct":"DIREKT","control_container_disable":"Deaktivieren","control_container_discharge_power_target":"ZIEL FÜR ENTLADESTROM","control_container_enabled":"AKTIVIERT","control_container_energy_target":"ENERGIEZIEL. Dieser Wert sollte der Systemgröße laut Konstruktionsdokumenten und dem Prüfbericht entsprechen","control_container_error_message":"{mode} ist erforderlich","control_container_explanation_bullet_five_max_site_meter_power_kw":"Wenn die Nettoleistung diesen Grenzwert übersteigt, werden die Batterien entladen, um bestmöglich ein Überschreiten dieses Grenzwerts zu verhindern.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Wenn die Nettoerzeugung diesen Grenzwert übersteigt, werden die Batterien geladen, um bestmöglich ein Überschreiten dieses Grenzwerts zu verhindern.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Wenn die Nettoleistung diesen Grenzwert unterschreitet, wird der zulässige Ladestrom der Batterien begrenzt.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Wenn die Nettoerzeugung diesen Grenzwert unterschreitet, wird der zulässige Entladestrom der Batterien begrenzt.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Import-Grenzwert der Anlage ist eine optionale Einstellung. Lassen Sie dieses Feld frei, um die Begrenzung zu deaktivieren.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Export-Grenzwert der Anlage ist eine optionale Einstellung. Lassen Sie dieses Feld frei, um die Begrenzung zu deaktivieren.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Dies ist ein Gesamtlimit über alle Phasen an allen Zählern der Anlage. (Hinweis: Wenn Verbraucherzähler verwendet werden, wird der Anlagenzähler mithilfe der Werte für Last, Solar und Batterie berechnet).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Dies ist ein Gesamtlimit über alle Phasen an allen Zählern der Anlage. (Hinweis: Wenn Verbraucherzähler verwendet werden, wird der Anlagenzähler mithilfe der Werte für Last, Solar und Batterie berechnet).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Wenn dieser Wert aktiviert ist, regelt der Anlagen-Master die Maximalleistung, die aus dem Netz in die Anlage eingespeist werden darf.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Wenn dieser Wert aktiviert ist, regelt der Anlagen-Master die Maximalleistung, die aus der Anlage in das Netz eingespeist werden darf.","control_container_explanation_export_restrictions_locked":"Bestimmt, wie das System Strom in das Netz einspeist. Sobald der Wert eingestellt ist, erfordern die Vorschriften, dass er nur über Tesla geändert werden darf.","control_container_explanation_export_restrictions_unlocked":"Gemäß den Vorschriften darf die Export-Charakteristik nur während der ersten Inbetriebnahme eingestellt werden. Wenden Sie sich für eine Änderung an Tesla.","control_container_explanation_nominal_system":"Dieser Wert sollte der Systemgröße nach den Konstruktionsdokumenten und dem Prüfbericht entsprechen.","control_container_heat_for_energy":"WÄRME FÜR ENERGIE","control_container_heat_mode":"HEIZMODUS","control_container_heco_committed_capacity":"Vereinbarte Kapazität","control_container_heco_committed_discharge_power_W_max_bound":"Der Maximalwert für {mode} beträgt 100000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"Der Minimalwert für {mode} beträgt 100 W","control_container_loading":"Wird geladen","control_container_max_site_meter_power_W_max_bound":"Der Maximalwert für {mode} beträgt 50000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"Der Minimalwert für {mode} beträgt 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} muss größer oder gleich 0 sein","control_container_max_site_meter_power_kw":"Importgrenzwert der Anlage","control_container_max_site_meter_power_w":"Importgrenzwert der Anlage","control_container_menu":"Menü","control_container_min_site_meter_power_kW_positive":"{mode} muss größer oder gleich 0 sein","control_container_min_site_meter_power_kw":"Exportgrenzwert der Anlage","control_container_min_site_meter_power_w":"Exportgrenzwert der Anlage","control_container_minimum_charge_power":"MINIMALER LADESTROM","control_container_minimum_discharge_power":"MINIMALER ENTLADESTROM","control_container_misc":"VERSCHIEDENES","control_container_net_meter_mode":"Exportbegrenzungen der Anlage","control_container_never":"KEIN EXPORT DER ANLAGE","control_container_nominal_system_energy_kW_positive":"{mode} muss größer oder gleich 0 sein","control_container_nominal_system_energy_kWh_positive":"{mode} muss größer oder gleich 0 sein","control_container_nominal_system_energy_kwh":"Nennstrom des Systems","control_container_nominal_system_energy_max_error":"Nennstrom des Systems überschreitet maximalen Stromgrenzwert","control_container_nominal_system_power_kw":"Nennleistung des Systems","control_container_nominal_system_power_max_error":"Nennleistung des Systems überschreitet maximalen Leistungsgrenzwert","control_container_number_error_message":"{mode} muss eine numerische Eingabe sein","control_container_power":"LEISTUNG","control_container_pv_only":"EXPORT BIS ZU PV-ZÄHLERWERT OK","control_container_reactive_mode":"REAKTIVER MODUS","control_container_real_mode":"REALER MODUS","control_container_reset":"Reset","control_container_site_control":"ANLAGEN-REGELUNG","control_container_site_limits":"ANLAGEN-GRENZWERTE","control_container_site_max_power":"MAX. ANLAGENLEISTUNG","control_container_site_min_power":"MIN. ANLAGENLEISTUNG","control_container_submit":"Senden","control_container_submitting_control":"Steuerung übermitteln","control_start":"STARTEN","control_stop":"UNTERBRECHEN","current_password_placeholder_text":"Geben Sie Ihr aktuelles Passwort ein","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"A {id}","current_transformer_item_view_battery_ct":"Batterie","current_transformer_item_view_calculated_reading":"Berechnet:","current_transformer_item_view_conductor_ct":"elektrischer Leiter","current_transformer_item_view_ct_voltage_pairing_1":"Phase L1","current_transformer_item_view_ct_voltage_pairing_2":"Phase L2","current_transformer_item_view_ct_voltage_pairing_3":"Phase L3","current_transformer_item_view_ct_voltage_pairing_default":"Standardphase","current_transformer_item_view_doubled_solar_ct":"Solar (1Stromwandler x2)","current_transformer_item_view_flip":"Flip","current_transformer_item_view_generator_ct":"Stromerzeuger","current_transformer_item_view_load_ct":"Lasten","current_transformer_item_view_measure_pw_plus_input":"Messen eines Powerwall+-Wechselrichters","current_transformer_item_view_measured_reading":"Pro Stromwandler:","current_transformer_item_view_missing_ct":"Fehlt","current_transformer_item_view_no_reading":"Keine Daten vorhanden","current_transformer_item_view_none_ct":"Keiner","current_transformer_item_view_phase_sequence_dropdown_title":"Phase","current_transformer_item_view_site_ct":"Netzanschluss","current_transformer_item_view_smart_ct":"Smart","current_transformer_item_view_solar_ct":"Solarstrom","current_transformer_item_view_solar_rgm_ct":"Ausschließlich Solarüberschuss","current_transformers_container_800a_ct_ensure":"Stellen Sie sicher, dass die Stromwandler-Auswahl auf dieser Seite der Installation entspricht.","current_transformers_container_800a_ct_larger":"Stromwandler mit 800 A sind physisch größer als solche mit 200 / 264 A.","current_transformers_container_800a_ct_use_case":"Wenn Sie große Leiter messen (z. B. 400 A / 800 A), verwenden und konfigurieren Sie den Stromwandler mit 800 A.","current_transformers_container_amps_explanation":"Strom, der durch den Stromwandler fließt","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Stellen Sie sicher, dass die Stromwandler auf der korrekten Phase installiert wurde ({sequence}).","current_transformers_container_configure_subtitle":"Zähler und Stromwandler werden konfiguriert.","current_transformers_container_ct_flipping_ensure_direction":"Stellen Sie zunächst sicher, dass der Stromwandler-Aufkleber zum Solar-Wechselrichter (für Solar-Stromwandler) oder zur Netzeinspeisung weist (für Anlagen-Stromwandler). Prüfen Sie als nächstes das Drehfeld und prüfen Sie die gemeldeten Ablesewerte für Strom, Leistung und Leistungsfaktor.","current_transformers_container_ct_flipping_modal_title":"Stromwandler in Software umdrehen","current_transformers_container_ct_flipping_software_incorrect_metering":"Wenn Sie ein auf der falschen Phase installierten Stromwandler über die Software umdrehen, führt dies zu falschen Messwerten.","current_transformers_container_ct_flipping_wrong_phase":"Ein negativer Ablesewert für die Leistung kann darauf hindeuten, dass der Stromwandler rückwärts oder auf der falschen Phase installiert wurde.","current_transformers_container_double_check_recommendation":"Überprüfen Sie die Verkabelung, Spannungsabgriffe, CTs und Meterkonfigurationen, bevor Sie fortfahren.","current_transformers_container_doubled_solar_ct_explanation":"Ein balancierter PV-Wechselrichter kann mit einem einzelnen CT gemessen werden","current_transformers_container_doubled_solar_ct_modal_title":"Einen Solar-Wechselrichter mit Split-Phase mithilfe eines einzelnen CT messen","current_transformers_container_grid_code_phase_modal_title":"Warnung: Anzahl der CTs entspricht nicht der Netzstandard-Phasenempfehlung","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Warnung: Anzahl der CTs entspricht nicht der Netzstandard-Phasenempfehlung für mehrere Messgeräte","current_transformers_container_grid_code_phase_multiple_warnings_message":"Unerwartete Anzahl von CTs an folgende {numMeters} Messgeräte angeschlossen:","current_transformers_container_grid_code_phase_warning_message":"Unerwartete Anzahl von CTs an folgendes Messgerät angeschlossen:","current_transformers_container_grid_code_single_phase_warning":"Der angewendete Netzstandard ist einphasig. Einphasige Systeme verfügen typischerweise entweder über einen 1- oder einen 3-Phasen-Service. {lb} Eine ungerade Anzahl von CTs (1 oder 3) wird empfohlen.","current_transformers_container_grid_code_split_phase_warning":"Der angewendete Netzstandard ist Split-Phase. Split-Phasen-Systeme verfügen typischerweise über einen CT an jedem \\"hot\\" Leiter. {lb} Eine gerade Anzahl von CTs (2 oder 4) wird empfohlen. ","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"Für das Revenue Grade Metering (RGM) ist ein Neurio-Zähler erforderlich, der Powerwall+-Solarwechselrichter misst.","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Wählen Sie Ja, wenn damit ein Powerwall+-Solarwechselrichter gemessen wird. Wählen Sie Nein, wenn damit ein Solarwechselrichter gemessen wird, der nicht Teil einer Powerwall+-Baugruppe ist.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"Wird damit ein Powerwall+-Wechselrichter gemessen?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Sorgen Sie dafür, dass die Kennzeichnung des Stromwandlers zum Solar-Wechselrichter weist.","current_transformers_container_label_modal_title":"Erklärung der Labels","current_transformers_container_load_ct_ensure":"Wenn Sie Verbraucher-Stromwandler konfigurieren, stellen Sie sicher, dass alle Lasten innerhalb der Anlage gemessen werden und dass Lasten mit bzw. ohne Backup getrennt voneinander gemessen werden.","current_transformers_container_load_ct_modal_title":"Verbraucher-CTs","current_transformers_container_load_ct_recommended":"Die Konfiguration von Verbraucher-nStromwandler ist nur für bestimmte Anwendungen empfohlen, bei denen es nicht möglich ist, einen Anlagen-Stromwandler zu konfigurieren.","current_transformers_container_meter_id":"Messgerät {id}","current_transformers_container_no_load_and_site_ct":"Ein Verbraucher-Stromwandler und ein Anlagen-Stromwandler können nicht gleichzeitig verwendet werden.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"Hinter dem Stromwandler dürfen sich keine Verbraucher befinden.","current_transformers_container_no_site_or_load_warning":"KEINE STROMWANDLER (CTS) AM NETZANSCHLUSS ODER AN LAST (VERBRAUCHER) KONFIGURIERT","current_transformers_container_no_solar_ct_warning":"KEIN SOLAR STROMWANDLER KONFIGURIERT","current_transformers_container_no_solar_inverter_warning":"KEIN SOLAR WECHSELRICHTER AUSGEWÄHLT","current_transformers_container_phase_usages_modal_title":"Warnung: Die Stromwandler-Konfiguration entspricht nicht der Phasen-Konfiguration","current_transformers_container_phase_usages_warning":"Die Anzahl der konfigurierten Phasen entspricht nicht der Anzahl der konfigurierten Stromwandler. {lb} {num} konfigurierte Stromwandler werden empfohlen.","current_transformers_container_phase_usages_warning_message":"Unerwartete Anzahl von Stromwandlern an folgende Messgeräte angeschlossen:","current_transformers_container_power_amperage_configure_warning":"{type} Stromwandler müssen positive Leistung und Strom messen um richtig konfiguriert zu sein.","current_transformers_container_power_factor_explanation":"Leistungsfaktor (Wirkleistung / Scheinleistung) Wird nur bei hohen Leistungswerten angezeigt. Bei normalen ohmschen Lasten sollte der Leistungsfaktor etwa 1 betragen. Ein niedriger Leistungsfaktor könnte ein Anzeichen für eine fehlerhafte Installation des Stromwandlers sein oder für das Vorhandensein von sehr großen kapazitiven/induktiven Lasten.","current_transformers_container_power_factor_out_of_range_warning":"Leistungsfaktorwerte liegen außerhalb des erwarteten Bereichs. {lb} Gemessener Leistungsfaktor: {powerFactor} PF {lb} Das Messgerät ist möglicherweise falsch oder an einer falschen Phase installiert, oder es liegt eine sehr hohe kapazitive/induktive Last vor.","current_transformers_container_system_test_configured_incorrect":"Warnung: CT {id} ist möglicherweise falsch konfiguriert","current_transformers_container_title":"Stromwandler","current_transformers_container_voltage_out_of_range_warning":"Spannung liegt außerhalb des Bereichs. {lb} Gemessene Spannung: {volts} V {lb} Die bei diesem CT gemessene Spannung liegt außerhalb des normalen Betriebsbereichs.","current_transformers_container_volts_explanation":"Spannung zwischen Leiter und Neutralleiter am Spannungsabgriff, der mit dem Stromwandler verknüpft ist","current_transformers_container_watts_explanation":"Leistung als Produkt aus Strom, der durch den Stromwandler fließt, und Spannung am entsprechenden Spannungsabgriff","customer_installation_view_email_label":"E-MAIL-ADRESSE DES KUNDEN","customer_installation_view_email_placeholder":"E-Mail-Adresse","customer_registration_view_address_label":"ADRESSE","customer_registration_view_address_placeholder":"Adresse","customer_registration_view_city_label":"STADT","customer_registration_view_city_placeholder":"Stadt","customer_registration_view_clear_form":"FORMULAR LEEREN","customer_registration_view_country_label":"Land","customer_registration_view_customer_information":"KUNDENINFORMATIONEN","customer_registration_view_email_address_label":"E-MAIL-ADRESSE","customer_registration_view_email_address_label_confirmation":"E-MAIL ERNEUT EINGEBEN","customer_registration_view_email_placeholder":"Email","customer_registration_view_family_name_label":"FAMILIENNAME (NACHNAME)","customer_registration_view_family_name_warning":"Geben Sie den Nachnamen des Kunden ein.","customer_registration_view_given_name_label":"VORNAME","customer_registration_view_given_name_warning":"Geben Sie den Vornamen des Kunden ein.","customer_registration_view_homeowner_family_name_placeholder":"Nachname","customer_registration_view_homeowner_given_name_placeholder":"Vorname","customer_registration_view_installation_address":"Installationsadresse","customer_registration_view_phone_number_label":"TELEFON","customer_registration_view_phone_placeholder":"Telefon","customer_registration_view_skip_explanation":"Wird dies übersprungen, muss der Hausbesitzer die Registrierung selbst über die mobile Tesla-App vornehmen, bevor er Zugang zum System erhält,.","customer_registration_view_state_placeholder":"Bundesland","customer_registration_view_state_province_region_label":"STAAT / BUNDESLAND / REGION","customer_registration_view_zip_label":"Postleitzahl","customer_registration_view_zip_placeholder":"PLZ","diagnostic-alert-affected-children":"Betroffene Komponenten ({count})","diagnostic-alerts-missing-alert-information":"Warnhinweise fehlen","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Toolbox-Artikel","diagnostic-alerts-toolbox-article-external-link":"Externe Links","diagnostic_alert_alert_name":"Name der Warnung","diagnostic_alert_alert_type":"Art der Warnung","diagnostic_alert_audience":"Zielgruppe","diagnostic_alert_clear_condition":"Zustand löschen","diagnostic_alert_description":"Beschreibung","diagnostic_alert_display_name":"Anzeigename","diagnostic_alert_id":"Warnungs-ID","diagnostic_alert_impact_category":"Auswirkungskategorie","diagnostic_alert_latching":"Einrasten","diagnostic_alert_max":"Max","diagnostic_alert_min":"Min","diagnostic_alert_name":"Name","diagnostic_alert_node":"Knoten","diagnostic_alert_offset":"Abweichung","diagnostic_alert_payload_signals":"Payload-Signale","diagnostic_alert_potential_impact":"Mögliche Auswirkungen","diagnostic_alert_safety_reason":"Sicherheitsgrund","diagnostic_alert_scale":"Skala","diagnostic_alert_set_condition":"Zustand einstellen","diagnostic_alert_signal_name":"Name des Signals","diagnostic_alert_signoff":"Abmelden","diagnostic_alert_sna_value":"SNA-Wert","diagnostic_alert_supplier_dtc_name":"Hersteller-DTC-Name","diagnostic_alert_uiID":"UI-ID","diagnostic_alert_units":"Einheiten","diagnostic_alert_urgent":"Dringend","diagnostic_category_item_view_alerts_description":"Warnmeldungen zu Standorten, Komponenten und Unterkomponenten","diagnostic_category_item_view_download_results":"ERGEBNISSE HERUNTERLADEN","diagnostic_category_item_view_internal_comms_description":"Gesamte Gerätekommunikation prüfen","diagnostic_category_item_view_internal_comms_title":"Gerätekommunikation","diagnostic_category_item_view_live_results":"ECHTZEIT-ERGEBNISSE","diagnostic_category_item_view_metering_description":"Zählerverbindungen prüfen","diagnostic_category_item_view_metering_title":"Messungen","diagnostic_category_item_view_networking_description":"Netzwerkverbindung prüfen","diagnostic_category_item_view_networking_title":"Netze","diagnostic_category_item_view_no_selected_tests":"KEINE AUSGEWÄHLTEN TESTS","diagnostic_category_item_view_rerun_selected":"{num} AUSGEWÄHLTE TESTS ERNEUT AUSFÜHREN","diagnostic_category_item_view_rerun_selected_test":"AUSGEWÄHLTEN TEST ERNEUT AUSFÜHREN","diagnostic_category_item_view_run_selected":"{num} AUSGEWÄHLTE TESTS AUSFÜHREN","diagnostic_category_item_view_run_selected_test":"AUSGEWÄHLTEN TEST AUSFÜHREN","diagnostic_category_item_view_select_all_tests":"Alle auswählen","diagnostic_category_item_view_self_tests_description":"Leiten Sie die Lade- und Entladetests im System ein","diagnostic_category_item_view_self_tests_title":"Selbsttests","diagnostic_category_item_view_toggle_all_tests":"Alle auswählen","diagnostic_input_view_blocks_label":"BLÖCKE","diagnostic_input_view_individual_test_name_label":"INDIVIDUELLER TESTNAME","diagnostic_input_view_max_allowed_charge_power_label":"MAX. ZULÄSSIGE LADELEISTUNG","diagnostic_input_view_max_allowed_discharge_power_label":"MAX. ZULÄSSIGE ENTLADELEISTUNG","diagnostic_test_enable_line":"Freischaltleitung","diagnostic_test_item_view_ac_self_test_description":"Wechselstrom-Selbsttest","diagnostic_test_item_view_ac_self_test_description_2":"Führt eine Reihe von Power-Slosh-Tests für das AC-System durch. Bei Powerpack-Systemen wird die Einstellung \\"MAX_ALLOWED_POWER\\" verwendet. Setzen Sie diese Werte für Megapack- und Supercharger-Systeme auf 0.","diagnostic_test_item_view_dc_self_test_description":"Gleichstrom-Selbsttest","diagnostic_test_item_view_dc_self_test_description_2":"Führt eine Reihe von Tests am DC-System durch, einschließlich thermischer Prüfungen.","diagnostic_test_item_view_enable_line_description":"Freischaltleitung für alle Powerwalls testen","diagnostic_test_item_view_enable_line_resolution":"Freischaltleitung auswählen und erneut versuchen","diagnostic_test_item_view_individual_self_test_description":"Wählen Sie aus einer Liste von Selbsttests, die in den konfigurierten Buscontrollern verfügbar sind.","diagnostic_test_item_view_meter_comms_description":"Ping Zählerkommunikation","diagnostic_test_item_view_network_connection_description":"Verbindung zum Internet und zu den Tesla-Servern testen","diagnostic_test_item_view_network_connection_resolution":"Netzwerke erneut konfigurieren","diagnostic_test_item_view_resolution_generic_text":"{name} erneut konfigurieren und noch einmal versuchen","diagnostic_test_item_view_step_canceled":"Test wurde durch den Benutzer abgebrochen","diagnostic_test_item_view_step_config_update_status":"Prüfen Sie den Status des Tesla-Konfigurationsservers","diagnostic_test_item_view_step_google_http":"Ping Google-HTTP","diagnostic_test_item_view_step_google_https":"Ping Google-HTTPS","diagnostic_test_item_view_step_hermes_status":"Prüfen Sie den Status des Tesla-Protokollservers","diagnostic_test_item_view_step_results_ip_address":"IP-Adresse","diagnostic_test_item_view_step_results_subnet_mask":"Subnetz","diagnostic_test_item_view_table_header_key":"Identifikator","diagnostic_test_item_view_table_header_name":"Schritt","diagnostic_test_item_view_table_header_value":"Wert","diagnostic_test_meter_comms":"Zählerkommunikation","diagnostic_test_network_connection":"Netzwerkverbindung","diagnostics_composite_view_no_tests_found":"KEINE VERFÜGBAREN TESTS GEFUNDEN","diagnostics_composite_view_run_all_selected_tests":"ALLE AUSGEWÄHLTEN TESTS AUSFÜHREN","diagnostics_container_industrial_disruptive_tests_description":"Die folgenden Tests lösen den Betrieb der Lüfter und Kühlsysteme aus. Dies erzeugt Geräusche. Es ist mit einer Leistungsaufnahme von ungefähr 30 kW pro Wechselrichter zu rechnen. Zusätzlich können die folgenden Tests den normalen Systembetrieb stören:","diagnostics_container_required_inputs_description":"Die folgenden Tests erfordern zusätzliche Eingaben:","diagnostics_container_residential_disruptive_tests_description":"Die folgenden Tests können den normalen Betrieb des Gateway und der Powerwall stören:","diagnostics_container_stop_test_title":"Test {name} stoppen?","diagnostics_container_subtitle":"Werkzeuge zur Diagnose von Fehlern in der Systeminstallation.","diagnostics_container_tests_running":"Diagnosetests werden ausgeführt","diagnostics_container_title":"Diagnose","disabled_reason_battery_breaker_open":"Batterietrennschalter offen","disabled_reason_checking_firmware_update":"Nach Firmware-Updates suchen","disabled_reason_config":"Deaktiviert durch Konfigurationsdatei","disabled_reason_excessive_voltage_drop":"Zu hoher Spannungsabfall","disabled_reason_firmware_update_failed":"Firmware-Update fehlgeschlagen","disabled_reason_firmware_update_in_progress":"Firmware-Update wird ausgeführt.","disabled_reason_gridcode_write_failed":"Einrichtung der Netzwerkanschlussbedingungen fehlgeschlagen","disabled_reason_user_requested":"Auf Wunsch des Benutzers deaktiviert","dropdown_default_placeholder":"Eingeben ...","dropdown_list_view_not_listed_label":"Nicht aufgeführt: \\"{searchText}\\"","dropdown_list_view_select_all":"Alle auswählen","dropdown_list_view_select_field":"Bitte Eingabefeld auswählen","dropdown_list_view_show_complete":"Aus kompletter Liste auswählen","dropdown_list_view_show_searchable":"Liste mit Suchfunktion","enumeration_warning_details_miswired_12v":"Beim Anschließen von zwei Powerwall+ sollte nur das mit dem Gateway/Backup-Switch verbundene Gerät mit 12 V versorgt werden. Entfernen Sie die 12 V von allen weiteren Powerwall+ in der Kette und scannen Sie dann erneut die Geräte (unten auf dieser Seite), um diese Warnung zu löschen.","enumeration_warning_details_multiple_controllers_gateway":"Ziehen Sie den Stromkabelbaum aller Powerwall+-Standortsteuergeräte ab, der sich oben rechts in der Solaranlage befindet.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Ziehen Sie den Stromkabelbaum des Expansion Powerwall+ -Standortsteuergeräts ab (nicht mit dem Backup-Switch verbunden), der sich oben rechts in der Solaranlage befindet.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Ziehen Sie den Stromkabelbaum aller Powerwall+-Standortsteuergeräte ab, der sich oben rechts in der Solaranlage befindet. Nehmen Sie das System in Betrieb, indem Sie es mit dem Backup-Gateway verbinden.","enumeration_warning_details_multiple_controllers_unknown":"Bei einer CAN-verkabelten Multi-Powerwall+-Einrichtung darf es nur ein eingeschaltetes Standortsteuergerät geben.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Es muss nur ein einziger Site Controller aktiv sein. Bei Verwendung des Backup-Gateways müssen Sie alle Powerwall+-Steuerungen vom Stromnetz trennen. Bei Verwendung eines Backup-Switch müssen Sie alle Powerwall+-Steuerungen bis auf eine vom Stromnetz trennen. Der Ausführungsassistent ist so lange deaktiviert, bis nur noch ein Site Controller aktiv ist.","enumeration_warning_title_miswired_12v":"12V-Verkabelungsfehler","enumeration_warning_title_multiple_controllers":"Es sind mehrere Standortsteuergeräte aktiv","error_details":"Fehlerdetails","error_item_view_check_network":"Netzwerkverbindung prüfen","error_item_view_disconnected":"Vom Gateway getrennt. Prüfen Sie die Netzwerkverbindung und {refresh}","error_item_view_forgot_password":"Klicken Sie, um das Passwort zurückzusetzen.","error_item_view_refresh_browser":"Browserinhalt aktualisieren.","error_item_view_try_logging_in_again":"Anmelden neu versuchen.","ethernet_view_backup_dns_label":"BACKUP-DNS-SERVER","ethernet_view_backup_dns_warning":"Gültiger Backup-DNS-Server","ethernet_view_configuration_label":"KONFIGURATION","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY (OPT)","ethernet_view_gateway_warning":"Gültige Gateway- (Router-)IP","ethernet_view_ip_address_label":"IP ADRESSE","ethernet_view_ip_address_warning":"Gültige IP-Adresse","ethernet_view_not_available":"Nicht verfügbar","ethernet_view_primary_dns_label":"PRIMÄRER DNS-SERVER","ethernet_view_primary_dns_warning":"Gültiger primärer DNS-Server","ethernet_view_static_label":"Static","ethernet_view_subnet_mask_label":"SUBNET MASK (OPT)","ethernet_view_subnet_mask_warning":"Gültige Subnet Mask","factory_reset_message":"Hierdurch wird das Gerät auf den von Tesla vorgesehenen Standardzustand zurückgesetzt. Diese Aktion kann nicht rückgängig gemacht werden. Bevor der Betrieb möglich ist, muss das Gerät neu eingerichtet werden.","field_false":"Falsch","field_true":"Richtig","follower_powerwall_message":"Diese Powerwall wird gesteuert von {leader}","follower_powerwall_title":"Folge-Powerwall","form_legend_text":"bezeichnet ein Pflichtfeld","generation_container_connecting_status":"Verbinden","generation_container_connection":"Wechselrichter {id} Verbindung","generation_container_connection_summary":"Während dieses Verbindungs-Prozesses wird die Netzwerkverbindung zeitweilig unterbrochen {lb} Stellen Sie die Verbindung zum richtigen Netzwerk wieder her. Dies kann bis zu 3 Minuten dauern.","generation_container_subtitle":"Daten für Photovoltaikwechselrichter und Stromerzeuger hinzufügen","generation_container_title":"Erzeugung","generator_item_view_disconnect_type_label":"UNTERBRECHER TYP","generator_item_view_generator":"STROMERZEUGER {id}","generator_item_view_manufacturer_label":"HERSTELLER","generator_item_view_model_label":"TYP","generator_item_view_serial_label":"SERIENNUMMER","generator_item_view_sustained_power_label":"LEISTUNG DAUERBETRIEB","generator_view_add_generator":"STROMERZEUGER HINZUFÜGEN","grid_code_container_off_grid_confirmation":"Ist das System Off-grid.","grid_code_container_off_grid_detected":"Das System ist als off-grid erkannt. Stellen Sie sicher dass, dies die korrekte Konfiguration ist.","grid_code_container_off_grid_warning":"{warning}: Der Off-grid Status konnte nicht ermittelt werden. Bitte Off-grid Einstellung überprüfen, falsche einstellung kann zu Systemfehlern führen.","grid_code_container_results":"Netzerkennungs Ergebnisse","grid_code_container_retrieving":"Lade Netzstandards","grid_code_container_saving":"Speichere Netzcode","grid_code_container_subtitle":"Basierend auf Installationsort, Spannung und Netzfrequenz, wählen Sie den passenden Standard.","grid_services_view_grid_services":"Netz Service","heading_change_password":"Kennwort ändern","help_view_how_password":"Wo Sie das Passwort am Gateway finden.","help_view_how_password_description":"Gatewaytür öffnen. Das Passwort steht auf dem Passwortaufkleber. ","help_view_how_serial_number":"Anbringungsort der Seriennummer beim Gateway ohne Backup","help_view_how_serial_number_backup":"Anbringungsort der Seriennummer auf einem Backup-Gateway","help_view_how_serial_number_backup_description":"Öffnen Sie die Tür am Backup-Gateway. Die Seriennummer beginnt mit einem \\"(S):\\"","help_view_how_serial_number_description":"Öffnen Sie die Klappe am Gateway. Die Seriennummer beginnt mit einem \\"(S):\\"","help_view_how_to_enable_line":"Eine Powerwall auf Aus und Ein schalten","help_view_how_to_enable_line_description":"Stellen Sie den Schalter an der Powerwall auf Aus und wieder auf Ein. Bei Systemen mit mehreren Powerwalls muss nur ein Schalter betätigt werden.","hierarchy_charger":"Ladeblock {name}","hierarchy_chinv":"VFD für Kompressor and Heizung (CHINV)","hierarchy_converter":"Gleichspannungswandler (STARC)","hierarchy_inverter":"Batterieblock {name}","hierarchy_mega_thermal_controller":"Thermosteuergerät (MPTHC)","hierarchy_missing_post":"Fehlende Ladesäule","hierarchy_mpbc":"Batterieblock {name}","hierarchy_part_number":"Teilenummer","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Berichtende Pods","hierarchy_post":"Ladesäule (LCC)","hierarchy_posts":"Ladesäulen","hierarchy_power_stage":"Leistungsstufe","hierarchy_power_stages":"Leistungsstufen","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Batterieüberwachungsplatine (QBMS)","hierarchy_qhvp":"Hochvoltprozessor (QHVP)","hierarchy_scthcs":"Thermosteuergeräte","hierarchy_serial_number":"Seriennummer","hierarchy_sitemaster":"Anlagen-Master {name}","hierarchy_starcs":"Gleichspannungswandler","hierarchy_stitch":"Regelspannung DC-DC (STITCH)","hierarchy_thermal_controller":"Thermosteuergerät (SCTHC)","higher_order_login_login_required":"Anmeldung erforderlich","higher_order_login_title":"Jetzt starten.","home_container_caution":"⚠️ Vorsicht","home_container_caution_deenergize":"Schalten Sie für eine sichere Abschaltung des Systems alle Powerwall-Schalter AUS.","home_container_caution_energized":"Bei angeschlossenen Solarstrings kann es vorkommen, dass die Anlage unter Spannung bleibt.","home_container_inactive_meter":"Abgelaufene Zählerdaten","home_container_inactive_meter_description":"Prüfen Sie die Verbindung des {type}-Zählers.","home_container_inactive_meter_timestamp":"Letzte Zählerablesung um {timestamp}","home_container_login_required":"Anmeldung erforderlich","home_container_missing_meter":"Zähler fehlt","home_container_positive_meter":"Warnung: {type}-Zähler ist möglicherweise falsch konfiguriert","home_container_positive_meter_description":"Für eine korrekte Konfiguration benötigt der {type}-Zähler eine positive Leistung und Stromstärke.","home_container_powerwall_error":"Powerwall Systemfehler","home_container_powerwall_start_error":"System-Start nicht möglich: {reason}","home_container_site_controller_error":"Anlagenregler-Systemfehler","home_container_sitemaster_alternative":"Hinweis: Das System wird normalerweise durch Abschalten der Schalter an allen Powerwalls und Öffnen der Sicherungen deaktiviert.","home_container_sitemaster_confirm":"Ja klicken, wenn Sie sicher sind, dass der Systembetrieb unterbrochen werden soll.","home_container_sitemaster_confirm_industrial":"Möchten Sie das System wirklich stoppen?","home_container_sitemaster_confirm_wizard":"Run Wizard verlangt einen System-Stopp. Fortfahren und System stoppen?","home_container_sitemaster_header_warning":"{warning} Dies wird den Systembetrieb unterbrechen.","home_container_sitemaster_header_warning_industrial":"{warning} Dieses System befindet sich in einem Zustand, in dem Tesla einen Stopp des Systems nicht empfiehlt. Grund: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} Dieses System befindet sich in einem Zustand, in dem Tesla einen Stopp des Systems nicht empfiehlt. Grund: \\"{reason}\\"","home_container_sitemaster_logging":"Während der Systemunterbrechung werden keine Daten erfasst.","home_container_sitemaster_reset":"Um den Systembetrieb nach der Unterbrechung wieder zu starten, den Startknopf klicken.","home_container_sitemaster_update":"Wenn gerade ein Update eingespielt wird, wird dieser Vorgang unterbrochen.","home_container_start_powerwall":"Powerwall System starten","home_container_start_system_button":"SYSTEM STARTEN","home_container_stop_powerwall":"Powerwall System unterbrechen","home_container_stop_system_button":"SYSTEM STOPPEN","home_view_compliance":"COMPLIANCE","home_view_download_all_logs":"Alle Protokolle herunterladen","home_view_download_logs":"PROTOKOLLE HERUNTERLADEN","home_view_download_logs_description_one":"Lädt einen komprimierten Satz Systemprotokolle herunter, die Ihnen bei der Diagnose von Problemen im Betriebssystem, der Software und dem Netzwerk helfen können.","home_view_download_logs_description_three":"Die Protokolle sind signiert und verschlüsselt. Sie sollten für eine Untersuchung an Tesla Energy Service gesendet werden.","home_view_download_logs_description_two":"Dies ist besonders nützlich, wenn das Gateway nicht mit dem Netzwerk verbunden werden kann und eine erweiterte Fehlersuche erforderlich ist.","home_view_login":"ANMELDEN","home_view_logout":"ABMELDEN","home_view_run_wizard":"Konfigurationsassistent","input_accept":"Ich akzeptiere.","input_confirm":"Ich nehme alle Systemwarnungen zur Kenntnis.","input_consent":"Ich stimme zu","input_decline":"Ich lehne ab.","input_no_consent":"Ich stimme nicht zu","input_title_email":"Bitte eine gültige email Addresse eingeben: name@name.domain","installation_container_relay_section_modal_title":"Gateway-Unterspannungsrelais","installation_container_residual_current_device_modal_title":"Installationsanforderung für Anlagen-FIs","installation_container_subtitle":"Installations Informationen","installation_container_sync_relay_usage_open_off_grid":"Relais offen, wenn vom Stromnetz getrennt","installation_container_title":"Installations informationen","installation_problem_detail_site_shutdown_0":"Erneute Aktivierung des Systems:","installation_problem_detail_site_shutdown_1":"Schalten Sie alle Powerwall-EIN/AUS-Schalter ein.","installation_problem_detail_site_shutdown_2":"Not-Aus-Schalter schließen","installation_problem_detail_site_shutdown_3":"Stellen Sie sicher, dass die Schnellabschalt-Steckbrücken richtig installiert sind.","installation_problem_detail_site_shutdown_4":"Überprüfen Sie die Abschaltkreis-Verkabelung","installation_problem_detail_title_site_shutdown":"Standort-Abschaltkreis ausgelöst","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Standort-Abschaltkreis, ausgelöst durch eine Schnellabschaltung der Powerwall+.","installation_problem_details_pvacs_with_no_solar_rgm":"Solar-Zähler sind nur für die Messung von Solar-Wechselrichtern erforderlich, die nicht zu einer Powerwall+ gehören. Zähler zur Messung von Powerwall+-Wechselrichtern sollten auf der Stromwandler-Seite als solche gekennzeichnet sein.","installation_problem_details_too_few_solar_rgm":"Die Anzahl der CT, die einen Powerwall+-Solarwechselrichter messen, sollte mit der Anzahl der Powerwall+-Solarwechselrichter übereinstimmen. Assistent ausführen, Neurio-Zähler koppeln, falls erforderlich, und die CT-Konfiguration auf der Stromwandler-Seite anpassen.","installation_problem_details_too_many_solar_rgm":"Die Anzahl der CT, die einen Powerwall+-Solarwechselrichter messen, sollte mit der Anzahl der Powerwall+-Solarwechselrichter übereinstimmen. Assistent ausführen und die CT-Konfiguration auf der Stromwandler-Seite anpassen.","installation_problem_title_pvacs_with_no_solar_rgm":"Solar-Zähler misst Powerwall+-Wechselrichter nicht. Ist das richtig?","installation_problem_title_site_shutdown":"Standort-Abschaltkreis ausgelöst. Es sind alle Powerwalls und Powerwall+-Solarwechselrichter deaktiviert.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Standort-Abschaltkreis, ausgelöst durch eine Schnellabschaltung der Powerwall+. Es sind alle Powerwalls und Powerwall+-Solarwechselrichter deaktiviert.","installation_problem_title_too_few_solar_rgm":"Es messen zu wenige Solar-Zähler Powerwall+-Wechselrichter","installation_problem_title_too_many_solar_rgm":"Es messen zu viele Solar-Zähler Powerwall+-Wechselrichter","installation_view_add_on_solar":"Erweiterung","installation_view_additional_connections_label":"ZUSÄTZLICHE ANSCHLÜSSE","installation_view_back_wiring":"Hinten","installation_view_backup_configuration_label":"BACKUP-KONFIGURATION","installation_view_basement_location":"Keller","installation_view_company_label":"FIRMEN NAME","installation_view_company_placeholder":"Firmenname","installation_view_conditioned_space_location":"Klimatisierter Raum","installation_view_existing_solar":"Vorhanden","installation_view_floor_mounting":"Boden","installation_view_garage_location":"Garage","installation_view_home_label":"HAUSVERKABELUNG","installation_view_location_label":"POWERWALL INSTALLATIONSORT","installation_view_modem_ethernet":"Hat Mobilfunkmodem zu Ethernet?","installation_view_modem_wifi":"Mobilfunkmodem zu WLAN vorhanden?","installation_view_mounting_label":"POWERWALL-MONTAGE","installation_view_na_backup_configuration":"Unzutreffend","installation_view_new_solar":"Neu","installation_view_none_solar":"Keine","installation_view_outdoor_location":"Im Freien","installation_view_pad_mounting":"Grundplatte","installation_view_partial_home_backup_configuration":"Teil des Hauses","installation_view_phone_label":"Telefon","installation_view_phone_placeholder":"Installateur Telefonnummer","installation_view_powerline_ethernet":"Stromleitung zu Ethernet vorhanden?","installation_view_pv_panel":"PV-Panel","installation_view_relay_enabled":"Relais offen, wenn vom Stromnetz getrennt","installation_view_relay_label":"GATEWAY-NIEDERSPANNUNGSRELAIS","installation_view_relay_options_modal_content":"Dieses Relais wird geschlossen, wenn eine Verbindung zum Stromnetz oder einer anderen Wechselstromquelle besteht. {lb1} Dieses Relais ist geöffnet, wenn keine Verbindung zum Stromnetz besteht. {lb1} Dies kann beispielsweise genutzt werden, damit bei Verbindung mit dem Stromnetz eine Klimaanlage betrieben werden kann, die ohne Verbindung zum Netz abgeschaltet wird. So wird verhindert, dass der damit verbundene hohe Einschaltstrom die Powerwall(s) überlastet.","installation_view_relay_section_modal_content":"Das Gateway verfügt über ein eingebautes Relais, das je nach Systemstatus ein- und ausgeschaltet wird. {lb1} Dies kann verwendet werden, um ein externes Gerät zu steuern, wie einen Verbraucher oder eine sekundäre Energiequelle. {lb1} Verwenden Sie am Backup Gateway 1 die Eingänge 1 und 2 am Hilfsverbinder (9-poliger großer grüner Phoenix-Steckverbinder). {lb1} Verwenden Sie am Backup Gateway 2 die Eingänge 3 und 4 (GSO/GSI) am Aux-Steckverbinder (5-poliger grüner Phoenix-Steckverbinder). {lb1} Dieses Relais ist mit 60 Volt / 2 Ampere bemessen und wird üblicherweise in Stromkreisen mit 12 oder 24 V verwendet. {lb1} Prüfen Sie für weitere Informationen den Lastabwurf und die entsprechenden Anwendungshinweise.","installation_view_residual_current_device":"Ist dem Gateway ein FI vorgeschalten?","installation_view_residual_current_device_modal_content":"Für bestimmte Installationen sind Fehlerstrom-Schutzschalter (FIs) auf Anlagenebene erforderlich, wie bei Stromnetzen mit einer TT-Erdungskonfiguration. {lb1}{lb2} Um das Risiko von Fehlauslösungen im vom Netz getrennten Betrieb zu verringern, empfiehlt Tesla, dass alle vorgeschalteten FIs verzögert ansprechen (Typ S) oder, falls möglich, der Anlagen-FI hinter den Schütz des Gateway verlegt wird. {lb1}{lb2} Weitere Informationen finden Sie im Anwendungshinweis zu RCDs und zum Fehlerschutz.","installation_view_satellite_ethernet":"Satellit zu Ethernet vorhanden?","installation_view_satellite_wifi":"Satellit zu WLAN vorhanden?","installation_view_side_wiring":"Seite","installation_view_solar_label":"SOLARANLAGE","installation_view_solar_panels":"Solarpanele","installation_view_solar_roof":"Solar Roof","installation_view_solar_type_label":"SOLAR-INSTALLATIONSTYP","installation_view_solarglass":"Solarglas","installation_view_stack_kit":"Stack Kit vorhanden?","installation_view_type_commercial":"Großanlage ","installation_view_type_label":"INSTALLATIONSINFORMATIONEN","installation_view_type_perm_off_grid":"Dauerhaft vom Netz getrennt","installation_view_type_residential":"Häuslicher Bereich","installation_view_wall_mounting":"Wand","installation_view_whole_home_backup_configuration":"Gesamtes Haus","installation_view_wifi_extender":"WLAN-Repeater vorhanden?","installation_view_wiring_label":"VERKABELUNG POWERWALL","inverter_test_view_accuracy_magnitude":"Genauigkeit Wert","inverter_test_view_accuracy_time":"Genauigkeit Zeit","inverter_test_view_complete":"Komplett","inverter_test_view_current_magnitude":"Strom Wert","inverter_test_view_fail":"Fehler","inverter_test_view_na":"Nicht zutreffend","inverter_test_view_not_run":"Nicht ausgeführt","inverter_test_view_pass":"Erfolg","inverter_test_view_running":"Läuft","inverter_test_view_set_magnitude":"Wert stellen","inverter_test_view_set_time":"Zeit stellen","inverter_test_view_test_description":"Wechselrichterselbsttest wird ausgeführt","inverter_test_view_test_name_all":"Alle Tests","inverter_test_view_test_name_over_freq_stage_one":"Überfrequenz Stufe 1","inverter_test_view_test_name_over_freq_stage_two":"Überfrequenz Stufe 2","inverter_test_view_test_name_over_volt_one":"Überspannung Stufe 1","inverter_test_view_test_name_over_volt_two":"Überspannung Stufe 2","inverter_test_view_test_name_under_freq_stage_one":"Unterfrequenz Stufe 1","inverter_test_view_test_name_under_freq_stage_two":"Unterfrequenz Stufe 2","inverter_test_view_test_name_under_volt_one":"Unterspannung Stufe 1","inverter_test_view_test_name_under_volt_two":"Unterspannung Stufe 2","inverter_test_view_timestamp":"Zeitstempel","inverter_test_view_trip_magnitude":"Auslösewert","inverter_test_view_trip_time":"Auslösezeit","inverter_test_view_warning":"Hinweis: Der Wechselrichter-Test kann bis zu 20 bis 30 Minuten pro Wechselrichter aufnehmen.","label_fail":"Fehlgeschlagen","label_inconclusive":"Unklar","label_pass":"Erfolgreich","legal_container_customer_policy_subtitle":"Muss vom Kunden ausgefüllt werden.","legal_container_customer_policy_title":"Tesla Kunden Datenschutz & Garantie","legal_container_no_meters_warning":"KEINE ZÄHLER KONFIGURIERT","legal_container_no_powerwalls_warning":"KEINE POWERWALLS ERKANNT","login_type_customer":"Kunde","login_type_engineer":"Ingenieur","login_type_installer":"Installateur","login_view_cancel_login_auth":"Login abbrechen","login_view_change_forgot_password":"PASSWORT ÄNDERN ODER PASSWORT VERGESSEN","login_view_compliance":"COMPLIANCE","login_view_customer_email_placeholder":"E-Mail-Adresse des Kunden","login_view_email":"EMAIL","login_view_email_placeholder":"Email Installateur","login_view_forgot_password":"PASSWORT VERGESSEN","login_view_forgot_password_login_type":"Bitte Anmeldetyp wählen","login_view_language_label":"SPRACHE","login_view_login_type_label":"ANMELDETYP","login_view_password_placeholder":"Ihr Passwort eingeben","login_view_start_login_auth":"LOGIN-VORGANG STARTEN","login_view_start_login_auth_how_to_enable_line_description":"Schalten Sie zum Login den An/Aus-Schalter der Powerwall aus und wieder ein. Bei Systemen mit mehreren Powerwalls muss nur ein Schalter betätigt werden.","login_view_username":"BENUTZERNAME","login_view_username_placeholder":"Benutzername","login_warning_view_expand":"Falls der Konfigurationsassistent nicht startet, {click}.","login_warning_view_firmware_update":"Wenn ein Firmwareupdate installiert wird","login_warning_view_heading":"{warning} Der Start des Assistenten beendet den Batteriebetrieb.","login_warning_view_protect_system":"Um die Stromversorgung aufrecht zu erhalten wird der Konfigurationsassitent nicht gestartet:","login_warning_view_stop_operation":"Start des Konfigurationsasistenten erzwingen (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Derzeit werden nur Chrome und Safari Webbrowser unterstützt.","login_warning_view_system_force_launch":"Wenn Sie den Systembetrieb unterbrechen wollen, wählen Sie Start des Konfigurationsasistenten erzwingen aus.","login_warning_view_system_off_grid":"Wenn Ihr System im off-grid Modus betrieben wird","login_warning_view_warning_click":"klicken sie für mehr","mater_item_view_bad_barcode":"Falscher Barcode eingescannt","mater_item_view_barcode_scan_failed":"Barcode-Scan fehlgeschlagen","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Batterie","meter_aggregate_type_load":"Verbraucher","meter_aggregate_type_site":"Anlage","meter_aggregate_type_solar":"Solar","meter_container_add_meter_error":"Zähler überprüfen","meter_container_add_meter_status":"Zähler wird hinzugefügt","meter_container_authorizing_status":"Autorisieren","meter_container_decode":"Barcode konnte nicht gelesen werden.","meter_container_detecting_status":"Suche verdrahtete Zähler","meter_container_failed_status":"Fehler beim Zähler konfigurieren","meter_container_reconnecting_status":"Wieder verbinden","meter_container_skip_title":"Es wurden keine Zähler in Betrieb genommen. Möchten Sie wirklich fortfahren?","meter_container_starting_status":"Starte","meter_container_subtitle":"Stromzähler short ID(s) und Seriennummer(n) eingeben um eine Verbindung herzustellen. Verbindung zum Zähler überprüfen.","meter_container_subtitle_industrial":"Geben Sie die IP-Adressen und Positionen der Stromzähler ein, um die Verbindung herzustellen. Testen Sie jeden Zähler nach der Inbetriebnahme.","meter_container_success_status":"Zähler erfolgreich hinzugefügt","meter_container_title":"Zähler","meter_container_unknown_status":"Unbekannt","meter_container_updating_status":"Meter-Update läuft","meter_container_verification":"Zä {id} überprüfen","meter_container_verification_gw1":"Während die Verbindung zum WLAN hergestellt wird, werden Sie möglicherweise vorübergehend vom Gateway-WLAN getrennt. {lb} Stellen Sie sicher, dass Sie die erneute Verbindung mit dem korrekten Netzwerk herstellen. Dies kann bis zu 3 Minuten dauern.","meter_container_verification_gw2":"Es kann bis zu 3 Minuten dauern, die Verbindung zum WLAN herzustellen.","meter_container_verify_meter_error":"Zähler überprüfen","meter_container_verifying_status":"Zähler überprüfen","meter_item_view_add_failed":"Zähler konnte nicht hinzugefügt werden","meter_item_view_add_failed_help":"Prüfen Sie Kurz-ID und Seriennummer. Schalten Sie den Zähler aus und wieder ein und schließen Sie ihn an, wenn der Zähler einen Signalton abgibt. Wenn das Problem bestehen bleibt, löschen Sie den Zähler und versuchen Sie es erneut.","meter_item_view_advanced_settings":"ERWEITERTE EINSTELLUNGEN (OPTIONAL)","meter_item_view_battery_ct":"Batterie","meter_item_view_battery_location":"Batterie","meter_item_view_check_meter":"ZÄHLER {id} VERBINDUNG TESTEN","meter_item_view_conductor_location":"elektrischer Leiter","meter_item_view_cts":"{count} Stromwandler erkannt","meter_item_view_doubled_solar_location":"Solar, verdoppelt","meter_item_view_generator_location":"Generator","meter_item_view_ip_address":"IP-ADRESSE","meter_item_view_load_location":"Verbraucher","meter_item_view_mac_address":"MAC-ADRESSE","meter_item_view_meter_location":"ZÄHLERPOSITION","meter_item_view_none_location":"Keine","meter_item_view_remote_ip_address_placeholder":"z. B. 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"z. B. 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"z. B. OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"z. B. 01234","meter_item_view_serial":"SERIENNUMMER","meter_item_view_short_id":"SHORT ID","meter_item_view_site_ct":"Anlage","meter_item_view_site_location":"Anlage","meter_item_view_solar_ct":"Solar","meter_item_view_solar_location":"Solar","meter_item_view_solar_rgm_location":"Ausschließlich Solarüberschuss","meter_item_view_success":"ERFOLGREICH VERBUNDEN!","meter_item_view_unable":"ZÄHLER NICHT ERREICHBAR!","meter_item_view_upgrading":"Meter wird aktualisiert!","meter_list_view_add":"WLAN ZÄHLER HINZUFÜGEN","meter_list_view_add_ip":"IP-ZÄHLER HINZUFÜGEN","meter_list_view_detect":"VERDRAHTETE ZÄHLER ERKENNEN","meter_list_view_enable_inverter_readings":"Auslesen der Batterie-Wechselrichter aktivieren","meter_list_view_inverter_meter":"WECHSELRICHTER-ZÄHLER","meter_list_view_inverter_meter_desc":"Falls aktiviert ohne dass Batterie-Zähler konfiguriert wurden, werden die Messwerte aus den Batterie-Wechselrichtern als Batteriezähler verwendet.","meter_msa_id":"BACKUP-SWITCH {id}","meter_sync_id":"Meter Synchronisation {id}","meter_sync_x_id":"INTERNER PRIMÄRZÄHLER X (GATEWAY) {id}","meter_sync_y_id":"INTERNER HILFSZÄHLER Y (GATEWAY) {id}","meter_update_modal_fetch_status_error":"Status des Meter-Updates nicht verfügbar","meter_update_modal_footer":"Meter-Update kann bis zu 2 Minuten dauern","meter_update_modal_remaining_time":"Verbleibende Zeit {seconds} s","meter_update_modal_timeout_error":"Zeitüberschreitung während des Meter-Updates","meter_update_modal_title":"Meter Update…läuft","meter_validation_container_error":"Solange die Anlagensteuerung in Betrieb ist, kann der Zähler nicht validiert werden.","meter_validation_container_error_placeholder":"Validierung des Zählers nicht verfügbar: {error}.","meter_validation_container_power_command":"Stromzufuhr-Steueranweisung","meter_validation_container_power_start":"Start","meter_validation_container_power_stop":"Stopp","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Blindleistungs-Steueranweisung","meter_validation_container_real_power_command":"Wirkleistungs-Steueranweisung","meter_validation_container_show_per_phase":"Werte pro Phase anzeigen","meter_validation_container_title":"Validierung des Zählers","meter_validation_container_usage":"Eine Stromzufuhr-Steueranweisung senden und die Zählerdaten validieren. Lassen Sie diese Seite geöffnet, damit die Stromzufuhr-Steueranweisung nicht unterbrochen wird. Negative Werten versetzen das System in den Ladezustand. Positive Werten versetzen das System in den Entladezustand.","meter_validation_control_subtitle":"Steuerung","meter_validation_control_title":"Steuertitel","meter_validation_disable":"Deaktivieren","meter_validation_loading":"Wird geladen","meter_validation_menu":"Menü","meter_validation_reset":"Reset","meter_validation_submit":"Senden","meter_validation_submitting_control":"Steuerung übermitteln","meter_validation_title":"Validierung des Zählers","meter_validation_view_apparent_power":"Scheinleistung (kVA)","meter_validation_view_battery_location":"Batterie","meter_validation_view_conductor_location":"elektrischer Leiter","meter_validation_view_current":"Strom (A)","meter_validation_view_doubled_solar_location":"Solar, verdoppelt","meter_validation_view_generator_location":"Generator","meter_validation_view_inverters":"Wechselrichter ({length})","meter_validation_view_load_location":"Verbraucher","meter_validation_view_meter":"Zähler ({length})","meter_validation_view_none_location":"Keine","meter_validation_view_pf":"Leistungsfaktor","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Mittel","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Gesamt","meter_validation_view_reactive_power":"Blindleistung (kVAr)","meter_validation_view_real_power":"Wirkleistung (kW)","meter_validation_view_site_location":"Anlage","meter_validation_view_solar_location":"Solar","meter_validation_view_solar_rgm_location":"Ausschließlich Solarüberschuss","meter_validation_view_voltage":"Spannung (U)","meter_w1_wifi_id":"ZÄHLER {id}","meter_w1_wired_id":"KABELGEBUNDENER ZÄHLER {id}","meter_w2_wifi_id":"ZÄHLER {id}","meter_w2_wired_id":"KABELGEBUNDENER ZÄHLER {id}","meter_wifi_id":"ZÄHLER {id}","meter_wired_id":"Verkabelter Meter {id}","metrics_aggregate":"System","metrics_apparent_power":"Scheinleistung ({unit})","metrics_battery":"Batterie","metrics_current":"Strom ({unit})","metrics_meter":"Zähler","metrics_no_metrics":"Keine anzuzeigenden Metriken.","metrics_power_factor":"Leistungsfaktor","metrics_reactive_power":"Blindleistung ({unit})","metrics_real_power":"Wirkleistung ({unit})","metrics_subtitle":"Metriken","metrics_voltage_l_n":"Spannung L-N ({unit})","modal_acknowledge":"BESTÄTIGEN","modal_confirm":"BESTÄTIGEN","modal_exit":"BEENDEN","modal_no":"NEIN","modal_note":"Hinweis","modal_ok":"OK","modal_reconfigure":"ERNEUT KONFIGURIEREN","modal_yes":"JA","modbus_container_title":"Modbus-Schnittstelle","modbus_table_register_address":"Adresse","modbus_table_register_name":"Name","modbus_table_register_type":"Typ","modbus_table_register_value":"Wert","modbus_table_register_value_decimal":"Wert (dezimal)","modbus_table_register_value_hex":"Wert (hexadezimal)","msa-off-grid":"Mit dem Netz nicht verbunden","msa-on-grid":"Mit dem Netz verbunden","navigation_email":"E-MAIL","network-switch-menu-item":"Netzwerk-Switches","network_cellular_configured":"Konfiguriert, aber nicht verbunden. Stellen Sie sicher, dass das Handy Netzwerk verfügbar ist und sich um die Antenne keine Blockierungen befinden.","network_connected":"Verbunden","network_container_connect_ethernet":"Verbinde mit Ethernet","network_container_connect_to_internet":"Bitte warten das System versucht eine Internet Verbindung herzustellen.","network_container_connect_wifi":"Verbinde mit {ssid}","network_container_connect_wifi_description":"Während diesem Prozess kommt es vor dass Sie sich erneut mit dem Gateway Netzwerk verbinden müssen um die Konfiguration fortzusetzen.","network_container_connman":"Powerwall verbindet sich automatisch mit dem besten Netzwerk.","network_container_connman_body":"Um die Verbindung zu sichern, bitte alle verfügbaren Netzwerke konfigurieren:","network_container_delete_network":"Netzwerkkonfiguration entfernen?","network_container_ethernet_and_wifi_warning":"Bitte WLAN und Ethernet Netzwerke konfigurieren um eine gute Verbindung zu ermöglichen.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Bitte Ethernet Netzwerk konfigurieren um eine gute Verbindung zu ermöglichen.","network_container_network_description":"Mit allen verfügbaren Netzwerken verbinden.","network_container_network_subtitle":"Netzwerk","network_container_no_internet_bullet_four":"Die Powerwall kann Performancedaten an Tesla schicken um dem support team fern Diagnose zu ermöglichen.","network_container_no_internet_bullet_four_industrial":"Geräte können Leistungsdaten an Tesla senden, sodass der technische Support Probleme erkennen kann","network_container_no_internet_bullet_one":"Anmeldeinformation zur Powerwall werden Tesla zugestellt und aktivierten die volle 10-Jahre-Garantie.","network_container_no_internet_bullet_three":"Mit der Tesla App kann der Stromverbrauch beobachtet und der Powerwall Betriebsmodus eingestellt werden.","network_container_no_internet_bullet_two":"Die Powerwall kann Firmware-Updates herunterladen die Performance Verbesserungen und neue Funktionalitäten aktivieren.","network_container_no_internet_bullet_two_industrial":"Geräte können für Leistungsverbesserungen und neue Funktionen Firmware-Updates aus der Ferne empfangen","network_container_no_internet_bullet_zero":"Vor der Inbetriebnahme kann festgestellt werden, ob ein Firmware-Update erforderlich ist","network_container_no_internet_no_cell_title":"Falls der Installationsort über eine Internetverbindung verfügt, führen Sie diesen Schritt aus. Stellen Sie über Ethernet (bevorzugt) oder WLAN die Verbindung zum Internetdienst des Kunden her.","network_container_no_internet_title":"Diesen Schritt nicht übergehen wenn eine Internetverbindung möglich ist. Verbinden Sie die Powerwall mit der Internetverbindung des Kunden per Ethernet (bevorzugt), WLAN oder stellen Sie eine GSM Verbindung her.","network_container_no_internet_warning":"Betrieb ohne Internetverbindung kann die Powerwall Garantie beeinträchtigen.","network_container_scan_networks":"WLAN Netzwerke scannen.","network_container_scan_wifi_disconnect_warning":"Warnung: Um nach neuen Netzwerken zu suchen wird die drahtlose Verbindung vorübergehend getrennt.","network_container_wifi_subtitle":"WLAN","network_container_wifi_warning":"Bitte WLAN Netzwerk konfigurieren um eine gute Verbindung zu ermöglichen.","network_disabled":"Deaktiviert","network_disconnected":"Nicht verbunden","network_ethernet_configured":"Konfiguriert, aber nicht verbunden. Prüfen Sie die Ethernet-Kabelverbindung.","network_switches_container_discover_failure":"Letzter Erkennungsfehler: {error}","network_switches_container_discover_switches":"Netzwerk-Switches erkennen","network_switches_container_discovered_label":"Erkannte Netzwerk-Switches","network_switches_container_discovering_stop_button":"Erkennung stoppen","network_switches_container_discovery_switches_running_label":"Die Erkennung von Netzwerk-Switches läuft derzeit. Sie können die Erkennung unten beenden.","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"Netzwerk-Switches werden nur auf Industriesystemen unterstützt.","network_switches_container_password_not_set":"Passwort ist nicht eingerichtet","network_switches_container_password_set":"Das Passwort ist eingerichtet","network_switches_container_passwords_error":"Passwort-Einrichtungsstatus: {status}","network_switches_container_set_password_label":"Passwort auf allen Netzwerk-Switches einrichten, die noch das werkseitige Standardpasswort verwenden.\\n Alle Passwörter werden auf denselben Wert eingerichtet.","network_switches_container_set_passwords":"Passwörter einrichten","network_switches_container_set_passwords_button":"Passwort einrichten","network_switches_container_setting_passwords_button":"Passwort wird eingerichtet...","network_switches_container_start_discovering_button":"Erkennung starten","network_switches_container_start_discovery_help":"Die Netzwerk-Switch-Erkennung erfolgt automatisch und periodisch, kann aber über die \\"Erkennung Starten\\"-Schaltfläche ausgelöst werden.","network_switches_container_subtitle":"Netzwerk-Switches anzeigen","network_switches_container_title":"Netzwerk-Switches","network_view_check_connection":"INTERNET VERBINDUNG TESTEN","network_view_connection_failed":"NICHT VERBUNDEN!","network_view_connection_success":"ERFOLGREICH VERBUNDEN!","network_view_continue_no_internet":"OHNE INTERNET FORTFAHREN","network_view_default_error":"Fehler bei der Verbindung","network_view_local_network_connected":"Lokales Netzwerk verbunden","network_view_local_network_disconnected":"Fehler im lokalen Netzwerk","network_view_tesla_internet_connected":"Tesla-Dienste und Internet verbunden","network_view_tesla_internet_disconnected":"Fehler bei der Verbindung zu Tesla-Diensten und Internet","network_warning":"Warnung","network_wifi_configured":"Konfiguriert, aber nicht verbunden. Prüfen Sie Ihre WLAN-Einstellungen.","open_meter_validatiion_container_title":"Zählervalidierung öffnen","operation_mode_autonomous":"Autonomer Modus","operation_mode_backup":"Nur Backup-Laden","operation_mode_self_consumption":"Eigenverbrauchsmodus","operation_mode_site_control":"Anlagen-Regelung","overview_menu_control_title":"Steuerung","overview_menu_diagnostics_title":"Diagnose","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Verbunden","overview_menu_network_no_connection":"Keine Verbindung","overview_menu_registration_complete":"Abgeschlossen","overview_menu_registration_incomplete":"Unvollständig","overview_menu_registration_pending":"Warte auf Internetverbindung","overview_menu_security_title":"Passwort ändern oder zurücksetzen","overview_menu_settings_title":"Einstellungen","overview_menu_summary_title":"Zusammenfassung","overview_menu_system_title":"System","overview_menu_update_title":"Software-Update","overview_menu_view_alerts_event":"Vorfall","overview_menu_view_alerts_events":"Vorfälle","overview_menu_view_inverter_title":"Wechselrichtertest","overview_menu_view_network_title":"Netz","overview_menu_view_registration_title":"Registrierung","overview_menu_view_test_title":"Selbsttest","overview_meter_validation_title":"Validierung des Zählers","password_generate_error":"Beim Generieren eines neuen Passworts ist ein Fehler aufgetreten. Überprüfen Sie die Verbindung sowie das aktuelle Passwort und versuchen Sie es erneut.","password_generate_help_text":"Um ein neues Zufallspasswort zu generieren, geben Sie das vorhandene Passwort ein.","password_generate_menu_title":"Kennwort ändern","password_generate_notice":"Das Passwort wurde geändert. Notieren Sie sich das neue Passwort, bevor Sie diese Seite verlassen.","phase_container_detect_timeout":"Phasenerkennung abgelaufen","phase_container_detection_attempt":"Versuch Nr. {num}","phase_container_grid_code_validating_modal_title":"Anschlussbedingungen validieren","phase_container_grid_compliant_description":"Netzkonform {checkmark}","phase_container_grid_modal_description":"Netzkonform in {time} Sekunden.","phase_container_grid_modal_title":"Warten auf Netzkonformität","phase_container_modal_description":"Phasenerkennung dauert bis zu 2 Minuten pro Powerwall","phase_container_modal_title":"Phasenerkennung läuft","phase_container_saving_phases_modal_title":"Sparphasen","phase_container_subtitle":"Darstellung der Phasen und der angeschlossenen Powerwall. Ermöglicht die Konfiguration der Phasen.","phase_container_supported_error":"Keine Powerwalls erkannt. Phasenerkennung wird nicht unterstützt.","phase_container_title":"Phase","phase_container_voltage_caution_body":"Unerwartete Spannung von {voltage} V an {lineNumber} erkannt. Vergewissern Sie sich, ob {lineStatus} für diese Phase die geeignete Einstellung ist.","phase_container_warning_body":"Es wurden keine Backup-Phasen ausgewählt. Daher unterstützt das System keine Verbraucher, wenn die Verbindung zum Stromnetz unterbrochen wird.","phase_container_warning_modal_header":"Backup ist inaktiv","phase_line_id":"Zeilen-{id}","phase_line_item_view_line":"Phase","phase_line_item_view_line_status_backup":"Backup/Notstrom","phase_line_item_view_line_status_configured":"Non Backup","phase_line_item_view_line_status_not_configured":"Nicht konfiguriert","phase_line_status_backup":"Backup","phase_line_status_configured":"Nicht-Backup","phase_line_status_not_configured":"Nicht konfiguriert","phase_view_detect":"Phasenerkennung","phase_view_split_phase":"Split Phase","power_flow_view_go_off_grid":"VOM NETZ TRENNEN","power_flow_view_go_on_grid":"MIT NETZ VERBINDEN","power_flow_view_grid_button_disabled_reason":"Für eine Trennung vom Netz muss das System gestartet werden.","power_flow_view_grid_spinner_alt_label":"Systemumschaltung","power_flow_view_start_system":"SYSTEM STARTEN","power_flow_view_stop_system":"SYSTEM STOPPEN","powerwall_container_industrial_no_additional_title":"Keine zusätzlichen Batterieblöcke gefunden","powerwall_container_industrial_subtitle":"Es sind alle automatisch durch die Anlagensteuerung erkannten Batterien aufgeführt. Führen Sie einen neuen Scan durch, wenn die Batterie nicht aufgeführt ist.","powerwall_container_industrial_subtitle_auto_detection":"Es sind alle automatisch durch die Anlagensteuerung erkannten Batterien aufgeführt. Wenn ein Batterieblock nicht in der Liste aufgeführt ist, überprüfen Sie die Netzwerkausrüstung, einschließlich der Verkabelung, und stellen Sie sicher, dass die Bus-Controller eingeschaltet sind.","powerwall_container_industrial_title":"Batterie","powerwall_container_industrial_updating":"Batterien werden geprüft","powerwall_container_no_additional_powerwalls_description":"Im Installationshandbuch nach Tips zu verdrahtungsproblemen suchen.","powerwall_container_no_additional_powerwalls_title":"Keine weiteren Powerwalls gefunden","powerwall_container_scan_again":"ERNEUT SCANNEN","powerwall_container_scanning":"Scanne","powerwall_container_scanning_for_more":"Scanne ...","powerwall_container_subtitle":"Liste der automatisch erkannten Powerwalls. Erneut scannen falls eine Powerwall nicht aufgeistet ist.","powerwall_container_subtitle_component_auto_detection":"In der Liste sind alle Komponenten aufgeführt, die vom Gateway automatisch erkannt werden. Wenn eine Komponente nicht aufgeführt ist, überprüfen Sie die Verkabelung.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Powerwalls werden überprüft","powerwall_container_updating_note":"Hinweis: Dies dauert bis zu 60 Sekunden pro Powerwall.","powerwall_item_view_blank_numbers":"Wartet auf Überprüfung…","powerwall_item_view_numbers":"PartNummer:{partNumber} Seriennummer:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"Abbrechen","powerwall_pairing_connect":"Anschließen","powerwall_pairing_done":"Fertig","powerwall_pairing_error_already_paired":"Kopplung fehlgeschlagen: Das Gerät ist bereits gekoppelt","powerwall_pairing_error_bad_pairing_response":"Kopplung fehlgeschlagen: Gerät verweigert die Kopplung. Stellen Sie sicher, dass das Folgegerät gestoppt wurde","powerwall_pairing_error_bad_qr_code":"Kein W-LAN-QR-Code","powerwall_pairing_error_changes_prohibited":"Kopplung fehlgeschlagen Verboten","powerwall_pairing_error_internal":"Kopplung fehlgeschlagen: interner Fehler","powerwall_pairing_error_no_qr_code":"Es wurde kein QR-Code gefunden","powerwall_pairing_error_no_response":"Kopplung fehlgeschlagen: Gerät hat nicht geantwortet.","powerwall_pairing_error_not_leader":"Kopplung fehlgeschlagen: Dies ist ein Folgegerät. Verbinden Sie sich erneut mit dem Führungsgerät.","powerwall_pairing_error_prohibited_uncommissioned":"Kopplung fehlgeschlagen: Diese Powerwall wurde noch nicht in Betrieb genommen","powerwall_pairing_error_too_many_devices":"Kopplung fehlgeschlagen: Die maximale Anzahl von Geräten ist bereits gekoppelt","powerwall_pairing_error_unknown":"Kopplung fehlgeschlagen: Unbekannter Fehler","powerwall_pairing_error_wifi_connection_failed":"Kopplung fehlgeschlagen: Es konnte keine Verbindung zum W-LAN hergestellt werden. Bitte überprüfen Sie das Passwort.","powerwall_pairing_error_wifi_not_found":"Kopplung fehlgeschlagen: W-LAN-Netzwerk nicht gefunden","powerwall_pairing_exception":"Kopplung fehlgeschlagen: Ausnahme","powerwall_pairing_instructions_2":"Geben Sie die W-LAN-SSID und das Passwort für die zu koppelnde Powerwall ein oder scannen Sie sie. Suchen Sie auf dem Gerät nach einem QR-Code.","powerwall_pairing_password_label":"Kennwort:","powerwall_pairing_scan_qr_code":"QR-Code scannen","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"Kopplung abgeschlossen. Es kann sein, dass das neue Gerät erst nach einer Minute oder länger reagiert (länger, wenn gerade ein Update durchgeführt wird). Klicken Sie auf \\"Fertig\\", um den Vorgang abzubrechen.","powerwall_pairing_state_monitoring":"Neues Gerät koppeln. Dies kann bis zu einer Minute dauern.","powerwall_starting":"Powerwall wird gestartet","powerwall_view_detected_backup":"Notstromfunktion erkannt","powerwall_view_detected_synchrometers":"Meter-Leistungsfähigkeit","powerwall_view_failed":"PROBLEM","powerwall_view_no_backup":"Notstromfunktion nicht erkannt","powerwall_view_no_sync":"Synchronizer nicht erkannt","powerwall_view_scan":"SCANNEN","powerwall_view_success":"ERFOLG","powerwall_view_synchrometer_detected":"Synchrometer erkannt","powerwall_view_synchronizer_detected":"Synchronizer erkannt","powerwall_view_update":"POWERWALLS PRÜFEN","privacy_policy_view_accept_warranty_title":"Tesla Powerwall beschränkte Garantie akzeptieren","privacy_policy_view_contact_bullet_one":"per E-Mail an {privacyEmail};","privacy_policy_view_contact_bullet_two":"per Post an Tesla, Inc., z. Hd.: Legal, 45500 Fremont Boulevard, Fremont, Kalifornien, 94538, Vereinigte Staaten.","privacy_policy_view_contact_header":"Wie Sie uns erreichen","privacy_policy_view_contact_paragraph_one":"Um uns eine Frage oder Anmerkung zukommen zu lassen oder sich von bestimmten Dienstleistungen abzumelden, kontaktieren Sie uns bitte unter:","privacy_policy_view_contact_paragraph_three":"Falls Sie im EWR oder in der Schweiz Ihren Wohnsitz haben, ist für die Verarbeitung Ihrer personenbezogenen Daten womöglich Ihr lokales Tesla Unternehmen zuständig.","privacy_policy_view_contact_paragraph_two":"Bitte beachten Sie, dass E-Mail-Mitteilungen nicht immer sicher sind. Fügen Sie Ihren E-Mails an uns also keine Kreditkarteninformationen oder sensible Informationen bei.","privacy_policy_view_cross_border_transfers_header":"Grenzüberschreitende Übertragungen","privacy_policy_view_cross_border_transfers_paragraph_one":"Die Dienstleistungen werden von den Vereinigten Staaten aus kontrolliert und betrieben. Informationen von Ihnen, über Sie oder über Ihre Nutzung unserer Produkte oder der Dienstleistungen können in jedem Land, in dem wir Standorte haben oder wo wir Dienstleister beauftragen, gespeichert und verarbeitet werden. In diesen Ländern bestehen möglicherweise nicht die gleichen Datenschutzgesetze in dem Land, in dem Sie diese Informationen erstmalig mitgeteilt haben. Wenn wir Informationen von Ihnen, über Sie oder Ihre Nutzung unserer Produkte oder der Dienstleistungen in andere Länder übermitteln, schützen wir diese in der in dieser Datenschutzrichtlinie beschriebenen Weise. Mit der Nutzung unserer Produkte, unserer Dienstleistungen, oder indem Sie uns auf sonstige Weise Informationen zur Verfügung stellen, erklären Sie sich mit der Übermittlung von Informationen von Ihnen, über Sie oder über Ihre Nutzung unserer Produkte oder Dienstleistungen in Länder außerhalb Ihres Wohnsitzlandes, einschließlich der USA, einverstanden.","privacy_policy_view_cross_border_transfers_paragraph_two":"Falls Sie sich im EWR oder in der Schweiz befinden, befolgen wir maßgebliche Rechtsvorschriften, die einen angemessenen Schutz bei der Übermittlung personenbezogener Informationen in Länder außerhalb des EWR oder der Schweiz gewährleisten. Tesla ist zertifiziert und befolgt das von dem U.S. Handelsministerium und der Europäischen Kommission verfügbar gemachte EU-U.S. Privacy Shield Programm {privacyShield} in Bezug auf die Verarbeitung von bestimmten personenbezogenen Informationen, die aus dem EWR zu Tesla und zu ihren hundertprozentigen U.S. Tochtergesellschaften übertragen werden. Teslas EU-U.S. Privacy Shield Datenschutzrichtlinie ist hier verfügbar.","privacy_policy_view_devices":"Informationen von Ihnen, über Sie oder Ihre Geräte","privacy_policy_view_energy_products":"FVon oder über Ihre Tesla-Energieprodukte","privacy_policy_view_eu_policy_warning":"Sie müssen den Datenschutzrichtlinien zustimmen, um Ihre Powerwall zu registrieren und mit der Tesla Mobile App überwachen zu können.","privacy_policy_view_eu_warranty_warning":"Wenn Sie die Tesla Datenschutzerklärung nicht akzeptieren, sind wir unter Umständen nicht in der Lage die volle 10 Jahre Garantie zu erfüllen. Tesla erfüllt mindestens eine 4 Jahre Garantie vom Datum der ersten Installation der Powerwall, vorbehaltlich der Ausschlüsse und Beschränkungen in der Garantieerklärung {warrantyLink}.","privacy_policy_view_grid_services":"Ihre Powerwall kann kann die Zuverlässigkeit des Stromnetzes durch die Bereitstellung von Dienstleistungen unter optionalen Programmen, die von Dienstleistern oder Dritten angeboten werden, unterstützen. Diese Dienstleistungen beinhalten eine stückweise Entladung Ihrer Powerwall zu günstigen Zeiten mit finanziellen Vorteilen für Sie. Dazu müssen wir jedoch Ihre Energieverbrauchsdaten und Powerwall-Informationen an Versorger oder Drittparteien weitergeben. Bevor wir Sie in ein solches Netzdienstprogramm einbinden, werden wir Ihnen dessen Einzelheiten mitteilen und Ihnen die Möglichkeit bieten, diese Teilnahme zu verweigern. Wenn Sie zu diesem Zeitpunkt die Teilnahme nicht ablehnen, werden Sie in das Programm eingegliedert.","privacy_policy_view_grid_services_title":"Stromnets-Dienstleistungen","privacy_policy_view_grid_warning":"Sie müssen nicht zustimmen. Falls Sie ablehnen, können wir Ihnen evtl. zu einem späteren Zeitpunkt erneut die Gelegenheit bieten, an diesem Programmen teilzunehmen.","privacy_policy_view_here":"hier","privacy_policy_view_homeowner_na":"Hauseigentümer nicht verfügbar","privacy_policy_view_homeowner_required":"Muss vom Kunden ausgefüllt werden.","privacy_policy_view_information_collection_devices_bullet_five":"Über Ihren Browser oder Ihr Gerät: Bestimmte Informationen werden von den meisten Browsern oder automatisch über Ihr Gerät erfasst, wie beispielsweise Ihre Media Access Control (MAC) Adresse, Computertyp (Windows oder Macintosh), Bildschirmauflösung, Name und Version des Betriebssystems, Hersteller und Modell des Geräts, Sprache, Typ und Version des Internetbrowsers sowie Name und Version der Dienstleistungen (z. B. der Tesla App), die Sie verwenden. Wir verwenden diese Informationen um sicherzustellen, dass die Dienstleistungen ordnungsgemäß funktionieren.","privacy_policy_view_information_collection_devices_bullet_four":"Offline: Wir können offline von Ihnen oder über Sie Informationen erfassen, beispielsweise wenn Sie einen Tesla-Store oder einen Reparaturstandort besuchen, an einem unserer Events teilnehmen, sich für eine Probefahrt anmelden, eine telefonische Bestellung aufgeben oder unseren Kundenservice bzw. unsere Verkaufsabteilung kontaktieren.","privacy_policy_view_information_collection_devices_bullet_one":"Über die Dienstleistungen: Wir erfassen möglicherweise Informationen von Ihnen oder über Sie über unsere Webseiten, Softwareanwendungen, Seiten der sozialen Medien, E-Mail-Nachrichten oder andere digitale Dienstleistungen (die „Dienstleistungen“), z. B. wenn Sie sich für einen Newsletter anmelden, einen Einkauf tätigen oder Ihr Produkt bei uns registrieren.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla: Kunden, die bestimmte Tesla-Produkte kaufen, erhalten ein My Tesla-Konto, welches auf unserer Webseite gehostet wird. Wir können folgende Arten von Daten, die Sie uns freiwillig zur Verfügung stellen, über Ihr My Tesla-Konto erfassen und verarbeiten: Ihre Kundenanmeldedaten; den Status Ihrer Bestellung; Garantie- oder andere Dokumente über Ihre Tesla-Produkte sowie allgemeine Informationen über Ihre Tesla-Produkte (wie beispielsweise Fahrzeugidentifikationsnummer oder eine andere Produktseriennummer, Serviceplandaten oder das Konnektivitätspaket), Versicherungsformulare, Führerscheine, Finanzierungsverträge und ähnliche Informationen. Sie können auf Ihr My Tesla-Konto jederzeit zugreifen um die Informationen von Ihnen oder über Sie auf diesem Konto zu aktualisieren.","privacy_policy_view_information_collection_devices_bullet_two":"Aus anderen Quellen: Wir können möglicherweise auch aus anderen Quellen Informationen über Sie erhalten, wie beispielsweise aus öffentlichen Datenbanken, von gemeinsamen Marketingpartnern, zertifizierten Installationsunternehmen, externen Reparatur- oder Servicecentern und von Plattformen sozialer Medien.","privacy_policy_view_information_collection_energy_products_bullet_one":"Wir können Informationen über Ihr Produkt, wie Ihr Installationsdatum, die Anzahl der installierten Produkte und Seriennummer(n) erheben.","privacy_policy_view_information_collection_energy_products_bullet_two":"Damit wir unsere Energieprodukte und -dienstleistungen anbieten und verbessern können, können wir Daten darüber erfassen, wo Ihr Produkt installiert und wie es konfiguriert ist, Daten betreffend die Nutzung und Leistung des Produkts, Daten hinsichtlich Ihres aggregierten Heimenergieverbrauchs und weitere Daten, die für die Fehlerdiagnose von Bedeutung sind.","privacy_policy_view_information_collection_header":"Welche Informationen wir erfassen","privacy_policy_view_information_collection_paragraph_five":"Wenn Sie nicht mehr möchten, dass wir Telematikprotokolldaten oder andere Dateien von Ihrem Tesla Fahrzeug erhalten, kontaktieren Sie uns bitte wie im Abschnitt „Wie Sie uns erreichen“ unten beschrieben. Bitte beachten Sie, dass, wenn Sie der Erfassung von Telematikprotokolldaten oder anderer Daten von Ihrem Tesla Fahrzeug widersprechen (mit Ausnahme der oben angeführten Einstellungen für die Datenfreigabe), wir nicht in der Lage sind, Sie in Echtzeit über Probleme im Zusammenhang mit Ihrem Fahrzeug zu informieren. Dies kann dazu führen, dass bei Ihrem Fahrzeug eine lediglich eingeschränkte Funktionalität, ernsthafte Schäden oder Funktionsunfähigkeit eintreten können. Es können dadurch auch zahlreiche Funktionen Ihres Fahrzeugs außer Betrieb gesetzt werden, wie regelmäßige Software- und Firmwareaktualisierungen, Fernwartungen und die Interaktion mit mobilen Anwendungen und im Auto installierten Funktionen, wie beispielsweise Standortsuche, Internetradio, Sprachsteuerung und Webbrowserfunktionalität.","privacy_policy_view_information_collection_paragraph_four":"Wir können unterschiedliche Informationen von oder über Ihre Tesla Energieprodukte mithilfe des zertifizierten Installationsunternehmens oder von den installierten Produkten (direkt oder über verbundene Geräte wie beispielsweise Umwandler) erheben. Dazu zählen:","privacy_policy_view_information_collection_paragraph_one":"Wir erfassen im Wesentlichen drei Arten von Informationen über Sie oder darüber, wie Sie unsere Produkte und Dienstleistungen nutzen: (1) Informationen von Ihnen oder über Sie oder Ihre Geräte, (2) Informationen von oder über Ihr Tesla-Fahrzeug, und (3) Informationen von oder über Ihre Tesla-Energieprodukte. Abhängig davon welche Tesla-Produkte und -Dienstleistungen Sie anfragen, besitzen oder verwenden, treffen nicht alle genannten Arten von Informationen auf Sie zu.","privacy_policy_view_information_collection_paragraph_three":"Wenn Sie unsere Website besuchen oder andere unserer Dienstleistungen nutzen, können wir Cookies, Pixel Tags, Analysetools und andere vergleichbare Technologien verwenden, die uns dabei helfen, unsere Dienstleistungen anzubieten und zu verbessern. Nachstehend gehen wir näher darauf ein:","privacy_policy_view_information_collection_paragraph_two":"Wir erfassen möglicherweise auf unterschiedlichen Wegen Informationen von Ihnen oder über Sie (wie beispielsweise Name, Adresse, Telefonnummer, E-Mail, Zahlungsinformationen, etc.) oder Ihre Geräte, einschließlich:","privacy_policy_view_information_collection_services_bullet_five":"Wenn Sie sich das Add-on zum Google Analytics Opt-out-Browser herunterladen, verfügbar unter {website}, erfahren Sie mehr darüber, wie Google bei der Erfassung dieser Informationen vorgeht und wie Sie dem widersprechen können.","privacy_policy_view_information_collection_services_bullet_four":"Analysetools: Wir nutzen von Dritten erbrachte Dienste für die Website- und Anwendungsanalyse, bei denen zur Sammlung von Informationen über die Nutzung von Websites oder Anwendungen und der Meldung von Trends Cookies und ähnliche Technologien verwendet werden, ohne einzelne Besucher zu identifizieren. Diese Dritte, die solche Dienste für uns erbringen, können außerdem Informationen über Ihre Nutzung von Websites Dritter erheben.","privacy_policy_view_information_collection_services_bullet_one":"Cookies: Cookies sind Informationen, die direkt auf dem von Ihnen genutzten Computer gespeichert werden. Cookies ermöglichen es uns, Informationen wie Browsertyp, mit den Dienstleistungen verbrachte Zeit, besuchte Seiten, bevorzugte Sprachen und sonstige Daten über den Webverkehr zu sammeln. Gemeinsam mit unseren Dienstleistern nutzen wir diese Informationen zu Sicherheitszwecken, um die Online-Navigation zu erleichtern, zur effektiveren Anzeige von Informationen, zur individuellen Anpassung Ihrer Erfahrungen bei der Nutzung der Dienstleistungen und um die Benutzeraktivität auf andere Weise zu analysieren. Wir können Ihren Computer erkennen, um Ihre Nutzung der Dienstleistungen zu unterstützen. Wir sammeln auch statistische Daten über die Nutzung der Dienstleistungen, um deren Design und Funktionalität fortwährend zu verbessern, um zu verstehen, wie die Dienstleistungen genutzt werden und um uns bei der Beantwortung von Fragen in Bezug auf die Dienstleistungen zu unterstützen. Cookies ermöglichen es uns außerdem zu ermitteln, welche unserer Werbungen oder Angebote Sie am meisten ansprechen und ermöglichen uns deren Einblendung. Wir können Cookies auch in Online-Werbungen verwenden um festzustellen, wie Sie mit unseren Anzeigen interagieren und wir können Cookies oder andere Dateien zur Nachvollziehung Ihrer Nutzung von anderen Webseiten verwenden.","privacy_policy_view_information_collection_services_bullet_three":"Pixel Tags und sonstige ähnliche Technologien: Pixel-Tags (auch Web Beacons oder Clear GIFs genannt) können in Verbindung mit einigen Dienstleistungen unter anderem dazu verwendet werden, die Handlungen von Nutzern der Dienstleistungen (inklusive E-Mail-Empfängern) nachzuvollziehen, den Erfolg unserer Werbekampagnen zu messen und Statistiken über die Nutzung der Dienstleistungen und die Ansprechraten zusammenzustellen.","privacy_policy_view_information_collection_services_bullet_two":"Wenn Sie bei der Nutzung Ihres Kontos „My Tesla“ oder unserer Website auf eine Datenerhebung mittels Cookies verzichten möchten, sehen die meisten Browser eine einfache Möglichkeit vor, mit der Sie Cookies automatisch ablehnen können oder die Ihnen die Wahl bietet, die Übertragung eines bestimmten oder mehrerer Cookies von einer bestimmten Website auf Ihren Computer abzulehnen oder zu akzeptieren. Lesen Sie sich gegebenenfalls auch die Informationen auf {website} durch. Wenn Sie diese Cookies jedoch nicht akzeptieren, können bei Ihrer Nutzung der Dienstleistungen möglicherweise Unannehmlichkeiten auftreten. So kann uns beispielsweise die Erkennung Ihres Computers nicht möglich sein und Sie müssen sich bei jedem Besuch der betreffenden Dienstleistungen neu einloggen.","privacy_policy_view_information_rights_choices_agree_eu":"Sie müssen der Datenschutzrichtlinie zustimmen, um Ihre Powerwall registrieren und mit der Tesla Mobile App überwachen zu können.","privacy_policy_view_information_rights_choices_agree_one":"Sie müssen der Datenschutzrichtlinie zustimmen, um Ihre Powerwall registrieren und mit der Tesla Mobile App überwachen zu können. Es ist keine weitere Handlung erforderlich, wenn Sie nicht auf Ihre Powerwall-Informationen über die Tesla Mobile App zugreifen möchten.","privacy_policy_view_information_rights_choices_bullet_one":"Sie können auf Ihr My Tesla Konto jederzeit zugreifen um die Informationen von Ihnen oder über Sie auf diesem Konto zu aktualisieren.","privacy_policy_view_information_rights_choices_bullet_two":"Wenn Sie vorher von Ihnen uns zur Verfügung gestellte Informationen über sich oder von Ihnen überprüfen, korrigieren, aktualisieren, sperren oder löschen möchten, können Sie uns unter der unten angeführten Adresse kontaktieren.","privacy_policy_view_information_rights_choices_header":"Rechte und Wahlmöglichkeiten","privacy_policy_view_information_rights_choices_paragraph_four":"Beachten Sie bitte, dass wir bestimmte Informationen gegebenenfalls zu Dokumentverwaltungs- oder gesetzlich vorgeschriebenen Zwecken und/oder zum Abschluss von Transaktionen aufbewahren müssen, die vor der erbetenen Änderung oder Löschung begonnen haben (wenn Sie z. B. einen Kauf tätigen oder an einer Werbeaktion teilnehmen, können Sie die mitgeteilten personenbezogenen Informationen möglicherweise erst nach Abschluss dieses Kaufs oder dieser Werbeaktion ändern oder löschen). Es können auch Restinformationen vorhanden sein, die in unseren Datenbanken und anderen Aufzeichnungen verbleiben und nicht entfernt werden.","privacy_policy_view_information_rights_choices_paragraph_one":"Wie oben ausgeführt, stellen wir Ihnen zahlreiche Wahlmöglichkeiten hinsichtlich der Erfassung, Nutzung und Weitergabe von Informationen von Ihnen, über Sie oder Ihrer Nutzung unserer Produkte oder Dienstleistungen durch uns zur Verfügung. Vorbehaltlich geltendem Recht haben Sie in manchen Ländern womöglich das Recht, Zugang zu bestimmten Informationen, die wir über Sie speichern, oder Informationen über diese zu erhalten, diese zu aktualisieren und Fehler in diesen Informationen zu korrigieren und diese Daten sperren oder löschen zu lassen. Diese Rechte können unter bestimmten Umständen durch örtliche Gesetze eingeschränkt sein. Wir bieten Ihnen mehrere Möglichkeiten auf Informationen von Ihnen oder über Sie zuzugreifen, diese zu korrigieren, aktualisieren oder deren Sperrung oder Löschung zu verlangen. Zu diesen zählen:","privacy_policy_view_information_rights_choices_paragraph_three":"Wir werden bezüglich Ihrer Anfrage(n) der Geltendmachung dieser Rechte und Wahlmöglichkeiten so schnell wie möglich nachkommen.","privacy_policy_view_information_rights_choices_paragraph_two":"Bitte geben Sie in Ihrer Anfrage deutlich an welche Informationen Sie ändern möchten, ob Sie möchten, dass die uns von Ihnen zur Verfügung gestellten Informationen in unserer Datenbank gesperrt werden bzw. welche sonstigen Einschränkungen Sie uns bezüglich der Nutzung der von Ihnen bereitgestellten Informationen auferlegen möchten. Zu Ihrem Schutz bearbeiten wir nur Anfragen bezüglich Informationen, die mit der von Ihnen für die Übermittlung der Anfrage verwendeten E-Mail-Adresse verbunden sind. Wir müssen möglicherweise Ihre Identität prüfen bevor wir Ihrer Anfrage nachkommen.","privacy_policy_view_information_share_header":"Wie wir die von uns erhobenen Informationen weitergeben","privacy_policy_view_information_share_paragraph_eight":"Unter anderen Umständen","privacy_policy_view_information_share_paragraph_eleven":"Wenn Sie der Verarbeitung von Informationen widersprechen möchten, für welche Sie zuvor ausdrücklich Ihre Einwilligung erteilt haben, kontaktieren Sie uns bitte wie im Abschnitt „Wie Sie uns erreichen“ unten beschrieben.","privacy_policy_view_information_share_paragraph_five":"Wir können Informationen an andere von Ihnen genehmigte Dritte weitergeben, beispielsweise unter den folgenden Umständen:","privacy_policy_view_information_share_paragraph_five_point_four":"An den Anbieter Ihres Kontos für soziale Medien, wenn Sie Ihr Konto für die Dienstleistungen und Ihr Konto für soziale Medien miteinander vernetzen. Wenn Sie das tun, ermächtigen Sie uns Informationen an den Anbieter Ihres Kontos für soziale Medien weiterzugeben und Sie verstehen, dass die Nutzung der Informationen die wir weitergeben der Datenschutzlinie des Anbieters des Kontos für soziale Medien unterliegt.","privacy_policy_view_information_share_paragraph_five_point_one":"An unsere zertifizierten Installationsunternehmen, damit wir Ihnen die von Ihnen angefragten Energieprodukte leichter zur Verfügung stellen können.","privacy_policy_view_information_share_paragraph_five_point_three":"An externe Sponsoren von Preisausschreiben oder ähnlichen Werbeaktionen, wenn Sie beschließen an diesen teilzunehmen.","privacy_policy_view_information_share_paragraph_five_point_two":"An externe Servicecenter oder Dienstleister, wenn Sie sich zu deren Nutzung entschieden haben. Beachten Sie, dass einige Informationen über Sie auf bestimmten Tesla Produkten gespeichert werden und externe Servicecenter oder Dienstleister, die Sie mit der Diagnostizierung oder Wartung Ihres Tesla Produkts beauftragen, darauf möglicherweise direkten Zugriff haben.","privacy_policy_view_information_share_paragraph_four":"An andere von Ihnen genehmigte Dritte","privacy_policy_view_information_share_paragraph_nine":"Wir können Informationen unter anderen Umständen weitergeben, beispielsweise:","privacy_policy_view_information_share_paragraph_nine_point_one":"An Ihren Arbeitgeber, andere Fuhrparkbetreiber oder den Eigentümer von Tesla Produkten, wenn das Produkt nicht Ihnen selbst gehört und sofern dies nach geltendem Recht zulässig ist.","privacy_policy_view_information_share_paragraph_nine_point_two":"An Dritte in Zusammenhang mit jeder Neuorganisierung, Fusion, Verkauf, Joint Venture, Abtretung, Übertragung oder sonstigen Verfügungen über unser gesamtes Geschäft, Vermögen oder unsere Aktien (auch in Zusammenhang mit jedweden Konkurs- oder vergleichbaren Verfahren) oder über einen Teil davon.","privacy_policy_view_information_share_paragraph_one":"Wir können die von uns erfassten Informationen an unsere Dienstleister und Geschäftspartner weitergeben, an von Ihnen genehmigte Dritte, an andere Dritte, wenn dies rechtlich vorgeschrieben ist und unter anderen Umständen. Beispiele dafür, wie wir Informationen an diese Dritten weitergeben und unter welchen Umständen, finden Sie unten.","privacy_policy_view_information_share_paragraph_seven":"Tesla kann Informationen an Dritte übertragen und diesen gegenüber offenlegen. Dazu zählen auch Informationen, die möglicherweise Rückschlüsse auf Ihre Identität zulassen können, um eine rechtliche Verpflichtung zu erfüllen (beispielsweise, aber nicht beschränkt auf Vorladungen); wenn wir gutgläubig der Ansicht sind, dass dies rechtlich vorgeschrieben ist; in Beantwortung einer rechtmäßigen Anfrage von staatlichen Behörden, die eine Ermittlung durchführen, dazu zählt auch die Erfüllung von Rechtsdurchsetzungsanforderungen; um unsere Richtlinien und Verfahren zu überprüfen oder durchzusetzen; um auf einen Notfall zu reagieren; um eine Handlung zu verhindern oder zu unterbinden, von der wir der Ansicht sind, dass sie möglicherweise oder tatsächlich rechtswidrig, unethisch oder rechtlich angreifbar ist; um die Rechte, das Eigentum oder die Sicherheit der Dienstleistungen von Tesla, Dritter, von Besuchern, die unsere Dienstleistungen abrufen oder der Öffentlichkeit zu schützen, was wir ausschließlich nach unserem eigenen Ermessen bestimmen.","privacy_policy_view_information_share_paragraph_six":"An andere Dritte in rechtlich vorgeschriebenen Fällen","privacy_policy_view_information_share_paragraph_ten":"Wir geben keine Informationen, die einen Rückschluss auf Ihre Identität zulassen, an nicht an uns angeschlossene Dritte für deren Marketingzwecke weiter, sofern Sie dieser Weitergabe nicht einwilligen.","privacy_policy_view_information_share_paragraph_three":"Wir können Informationen an unsere Dienstleister und Geschäftspartner weitergeben, wenn dies notwendig ist um Dienstleistungen für uns oder Sie zu erbringen, beispielsweise unter den folgenden Umständen:","privacy_policy_view_information_share_paragraph_three_point_one":"An die an Tesla angeschlossene Unternehmen zu den in der Datenschutzrichtlinie beschriebenen Zwecken. An Tesla angeschlossene Unternehmen sind Unternehmen, die im Eigentum von Tesla, Inc. stehen oder von dieser kontrolliert werden bzw. Unternehmen, an denen Tesla, Inc. eine wesentliche Beteiligung hält.","privacy_policy_view_information_share_paragraph_three_point_three":"An andere externe Geschäftspartner insoweit diese in Ihren Kauf oder die Wartung von Tesla Produkten eingebunden sind. Wir geben begrenzte Informationen von Ihnen oder über Sie an Partner in den Bereichen Finanz-, Leasing- und Anmeldewesen sowie an Rechtstitelversicherungsfirmen weiter, damit Sie diese Dienstleistungen in Anspruch nehmen können, falls Sie sich für deren Nutzung entscheiden.","privacy_policy_view_information_share_paragraph_three_point_two":"An unsere externen Dienstleister und Vertriebskanalpartner um Dienstleistungen wie Website-Hosting, Datenanalyse und -speicherung, Zahlungsbearbeitung, Auftragserfüllung und Produktinstallation, drahtlose Konnektivität mit Tesla Produkten, Informationstechnologie und dazugehörige Infrastruktur, Kundenservice, Produktwartung und dazugehörige Dienstleistungen, E-Mail-Zustellungen, Kreditkartenzahlungen, Buchführung, Marketing, Verarbeitung der Sprachsteuerung und vergleichbare Dienstleistungen zur Verfügung zu stellen.","privacy_policy_view_information_share_paragraph_two":"An unsere Dienstleister und Geschäftspartner","privacy_policy_view_information_use_commuicate":"Zur Kommunikation mit Ihnen","privacy_policy_view_information_use_header":"Nutzung der von uns erhobenen Informationen","privacy_policy_view_information_use_other_purposes":"Für andere Zwecke","privacy_policy_view_information_use_paragraph_five":"Wir können die von uns erfassten Informationen auch für andere Zwecke nutzen, beispielsweise:","privacy_policy_view_information_use_paragraph_five_point_one":"Für unsere Geschäftszwecke, wie beispielsweise Datenanalyse, Audits, Betrugsüberwachung und –prävention, Ermittlung von Nutzertrends, Bestimmung der Effektivität unserer Werbekampagnen und Betrieb und Ausweitung unserer Geschäftstätigkeit.","privacy_policy_view_information_use_paragraph_five_point_two":"Ausgenommen der oben genannten und unten aufgeführten Fälle kann Tesla Informationen, die keine Rückschlüsse auf Ihre Identität zulassen, für jedwede Zwecke nutzen oder weitergeben, beispielsweise für betriebliche oder Forschungszwecke, für Branchenanalysen, zur Verbesserung oder Änderung unserer Produkte und Dienstleistungen, um unsere Produkte und Dienstleistungen besser auf Ihre Bedürfnisse abzustimmen und wenn dies rechtlich erforderlich ist.","privacy_policy_view_information_use_paragraph_four":"Wir können die von uns erfassten Informationen nutzen um unsere Produkte und Dienstleistungen anzubieten und zu verbessern, beispielsweise:","privacy_policy_view_information_use_paragraph_four_point_five":"Um die Sicherheit unserer Produkte und Dienstleistungen zu überprüfen und zu verbessern.","privacy_policy_view_information_use_paragraph_four_point_four":"Um neue Produkte und Dienstleistungen zu entwickeln und zu bewerben und unsere bestehenden Produkte und Dienstleistungen zu verändern oder zu verbessern.","privacy_policy_view_information_use_paragraph_four_point_one":"Um Ihren Kauf abzuwickeln und zu erfüllen, beispielsweise um Ihre Zahlungen zu bearbeiten, Ihnen Ihre Bestellung zuzusenden, mit Ihnen hinsichtlich Ihres Kaufs zu kommunizieren und Ihnen den dazugehörigen Kundenservice zu bieten.","privacy_policy_view_information_use_paragraph_four_point_six":"Um Ihnen alle sonstigen von Ihnen angeforderten Dienstleistungen bereitzustellen.","privacy_policy_view_information_use_paragraph_four_point_three":"Um die Leistung Ihres Tesla-Produkts zu überwachen und Ihnen entsprechende Dienstleistungen bereitzustellen.","privacy_policy_view_information_use_paragraph_four_point_two":"Um Ihr Tesla Produkt zu warten, beispielsweise um Sie bezüglich Service-Empfehlungen zu kontaktieren und Ihr Produkt drahtlos zu aktualisieren.","privacy_policy_view_information_use_paragraph_one":"Wir können die von Ihnen erhobenen Daten zur Kommunikation mit Ihnen, zum zur Verfügung stellen von Produkten und Dienstleistungen für andere Zwecke nutzen. Beispiele dafür, wie wir Informationen für diese Zwecke nutzen, finden Sie nachstehend.","privacy_policy_view_information_use_paragraph_three":"Ihre Kommunikationswahlmöglichkeiten:","privacy_policy_view_information_use_paragraph_three_point_one":"Erhalt elektronischer Mitteilungen von uns oder uns angeschlossener Unternehmen: Wenn Sie von uns oder den uns angeschlossenen Unternehmen keine E-Mails mit Marketinginhalten mehr erhalten möchten, können Sie dem Erhalt widersprechen indem Sie die Opt-Out-Anweisungen befolgen, die Sie in jeder unserer E-Mails finden oder indem Sie uns unter der unten angeführten Adresse kontaktieren. Bitte beachten Sie, dass auch wenn Sie den Erhalt von Marketing-E-Mails abgewählt haben, wir Ihnen weiterhin wichtige administrative und sicherheitsrelevante Mitteilungen übermitteln können.","privacy_policy_view_information_use_paragraph_three_point_two":"Erhalt von Marketinganrufen von uns: Lassen Sie sich bitte einfach auf die „Nicht anrufen“-Liste setzen wenn Sie von uns Marketinganrufe erhalten und in Zukunft keine derartigen Anrufe mehr erhalten möchten. Bitte beachten Sie, dass wir Sie weiterhin in Bezug auf administrative, sicherheitsrelevante oder produktservicetechnische Fragen anrufen können, auch wenn Sie den Erhalt von Marketing-Anrufen abgewählt haben.","privacy_policy_view_information_use_paragraph_two":"Wir können die von uns erfassten Informationen nutzen, um mit Ihnen zu kommunizieren, wie beispielsweise:","privacy_policy_view_information_use_paragraph_two_point_five":"Um Ihnen auf Sie individuell angepasste Produkte und Angebote vorzustellen und unsere Listen mit Informationen aus anderen Quellen zu ergänzen.","privacy_policy_view_information_use_paragraph_two_point_four":"Um Ihnen administrative Informationen zukommen zu lassen, wie beispielsweise Informationen über die Dienstleistungen und Änderungen unserer Geschäftsbedingungen und Richtlinien.","privacy_policy_view_information_use_paragraph_two_point_one":"Um auf Ihre Anfragen zu antworten und Ihre Aufträge zu erfüllen, wie indem wir Ihnen Newsletter oder Produktinformationen, Informationsbenachrichtigungen oder Broschüren zukommen lassen","privacy_policy_view_information_use_paragraph_two_point_seven":"Um das Teilen in den sozialen Medien und die Kommunikationsfunktionalitäten zu erleichtern.","privacy_policy_view_information_use_paragraph_two_point_six":"Um es Ihnen zu ermöglichen, an Preisausschreiben oder ähnlichen Werbeaktionen teilzunehmen und um diese Aktivitäten zu verwalten","privacy_policy_view_information_use_paragraph_two_point_three":"Um Sie auf wichtige sicherheitsbezogene Informationen hinzuweisen oder um Einsatzkräfte im Falle eines Unfalls mit Ihrem Fahrzeug zu verständigen.","privacy_policy_view_information_use_paragraph_two_point_two":"Um Feedback bezüglich Ihrer Tesla Probefahrt einzuholen, auszuwerten und bereitzustellen.","privacy_policy_view_information_use_provide":"Um unsere Produkte und Dienstleistungen anzubieten und zu verbessern","privacy_policy_view_links_header":"Links","privacy_policy_view_links_paragraph_one":"Diese Datenschutzrichtlinie bezieht sich nicht auf den Datenschutz, Informationen oder sonstige Praktiken von Dritten und wir sind für diese nicht verantwortlich. Dazu zählen auch Dritte, die Seiten oder Dienstleistungen betreiben, auf welche die Dienstleistungen verlinkt sind. Die Aufnahme eines Links in die Dienstleistungen bedeutet keine Unterstützung der verlinkten Seite oder Leistung unsererseits oder seitens unserer verbundenen Unternehmen und sie ist auch kein Hinweis auf eine Zugehörigkeit zu diesem Dritten.","privacy_policy_view_links_paragraph_two":"Bitte beachten Sie, dass wir nicht für die Erfassungs-, Nutzungs- oder Offenlegungsrichtlinien und -praktiken (einschließlich Datenschutzpraktiken) anderer Organisationen, wie die anderer App-Entwickler, App-Anbieter, Anbieter von Plattformen für soziale Medien, Betriebssystemanbieter oder WLAN-Anbieter verantwortlich sind. Ebenso sind wir nicht für Informationen verantwortlich, die Sie gegenüber anderen Organisationen über oder in Verbindung mit unseren Software-Anwendungen oder Seiten in den sozialen Medien offenlegen.","privacy_policy_view_minors_header":"Minderjährige","privacy_policy_view_minors_paragraph":"Die Dienstleistungen richten sich nicht an Personen, die jünger als sechzehn (16) Jahre sind und wir bitten darum, dass diese Personen Tesla keine Informationen zur Verfügung stellen.","privacy_policy_view_offers_eu":"Ja, ich möchte gerne Marketing-Mitteilungen per E-Mail empfangen. Dazu gehören Umfragen, Aktionen, sowie Angebote von Produkten und Dienstleistungen durch Tesla und Tesla-Partnern. Ich habe das Recht, diese Zustimmung jederzeit zurückzuziehen. Weitere Informationen: {legalLink}.","privacy_policy_view_offers_title":"Zustimmung Zum Empfang Von Marketing-Informationen","privacy_policy_view_offers_usa":"Ich erlaube Tesla mich per automatischer Text- oder Sprachnachricht auf der angegebenen Nummer zu kontaktieren.","privacy_policy_view_powerwall_warranty":"Tesla Powerwall Garantie","privacy_policy_view_privacy_policy":"Anmerkung Zum Datenschutz","privacy_policy_view_privacy_policy_agreement_eu":"Ich, der Hauseigentümer, habe die Tesla Datenschutzrichtlinien in Gänze durchgelesen und stimme der Verarbeitung meiner persönlichen Angaben durch Tesla, wie in den Tesla Datenschutzrichtlinien beschrieben, zu. Ich habe das Recht, diese Zustimmung jederzeit zurückzuziehen, wie in den Tesla Datenschutzrichtlinien dargelegt.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Ich, der Eigentümer, habe die gesamte Tesla Datenschutzerklärung gelesen und stimme der Verarbeitung und Nutzung meiner privaten Daten der Datenschutzerklärung entsprechend zu.","privacy_policy_view_privacy_shield":"Privacy Shield Datenschutzrichtlinie","privacy_policy_view_retention_period_header":"Aufbewahrungsfrist","privacy_policy_view_retention_period_paragraph":"Wir bewahren Informationen, die wir von Ihnen oder über unsere Kunden, unsere Produkte und die Dienstleistungen erfassen, so lange auf, wie es erforderlich ist um die in dieser Datenschutzrichtlinie dargestellten Zwecke zu erfüllen, es sei denn eine längere Aufbewahrungsfrist ist rechtlich zulässig oder vorgeschrieben.","privacy_policy_view_security_header":"Sicherheit","privacy_policy_view_security_paragraph_one":"Wir sind bestrebt, für angemessene organisatorische, technische und verwaltungstechnische Sicherheitsmaßnahmen zu sorgen, um Informationen innerhalb unserer Organisation zu schützen. Leider kann die Sicherheit einer Datenübertragung oder eines Speichersystems niemals zu 100% garantiert werden. Wenn Sie Grund zu der Annahme haben, dass Ihre Interaktion mit uns nicht mehr sicher ist (z.B. wenn Sie glauben, dass die Sicherheit eines Ihrer Konten bei uns beeinträchtigt wurde), informieren Sie uns bitte umgehend über das Problem, indem Sie sich mit uns, wie im Abschnitt „Wie Sie uns erreichen“ unten beschrieben, in Verbindung setzen.","privacy_policy_view_security_paragraph_two":"Verkaufen oder übertragen Sie Ihr Tesla Produkt an eine andere Person, benachrichtigen Sie uns bitte, damit wird feststellen können, welche weiteren Schritte erforderlich sind, um die Informationen von Ihnen oder über Sie gegen Offenlegung gegenüber dem Käufer oder Übertragungsempfänger des Tesla-Produkts zu schützen.","privacy_policy_view_title":"Datenschutzbestimmungen ansehen","privacy_policy_view_updates_header":"Aktualisierungen dieser Richtlinie","privacy_policy_view_updates_paragraph":"Wir können diese Datenschutzrichtlinie ändern. Bitte sehen Sie sich die „Zuletzt aktualisiert am“-Legende am Seitenende an um festzustellen, wann diese Datenschutzrichtlinie das letzte Mal überarbeitet wurde. Alle Änderungen dieser Datenschutzrichtlinie werden, sobald wir die überarbeitete Datenschutzrichtlinie über die Dienstleistungen veröffentlichen, wirksam. Durch die Nutzung unserer Produkte, der Dienstleistungen oder indem Sie uns auf andere Weise Informationen nach diesen Änderungen zur Verfügung stellen, nehmen Sie die überarbeitete Datenschutzrichtlinie an.","privacy_policy_view_us_warranty_warning":"Sie müssen den Datenschutzrichtlinien zustimmen, um Ihre Powerwall zu registrieren und mit der Tesla Mobile App überwachen zu können.","privacy_policy_view_warranty_information":"Ich, der Hauseigentümer, akzeptiere die Bedingungen der Tesla Powerwall Garantie unter {warrantyLink}. In diesen Bedingungen ist eine Schlichtungsbestimmung enthalten, durch die ich auf das Recht verzichte, an Sammelklagen oder an Verfahren in Geschworenengerichten teilzunehmen. Ich kann innerhalb von 30 Tagen dieser Bestimmung widersprechen, indem ich den entsprechenden Prozess, die in der Bestimmung beschrieben ist, befolge.","prompt_factory_reset_confirmation":"Möchten Sie das Gerät wirklich auf die Werkseinstellungen zurücksetzen?","pvac-state-active":"Aktiv","pvac-state-faulted":"Fehlerhaft","pvac-state-init":"Initialisieren ...","pvac-state-standby":"Warten auf","pvac_alert_ac_fault":"AC-Fehler des Solarwechselrichters","pvac_alert_check_ac_note":"Überprüfen Sie die AC-Verkabelung und den Netzanschluss. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_check_dc_string1_note":"Überprüfen Sie die DC-Verkabelung und die Schalttafeln von String 1. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_check_dc_string2_note":"Überprüfen Sie die DC-Verkabelung und die Schalttafeln von String 2. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_check_dc_string3_note":"Überprüfen Sie die DC-Verkabelung und die Schalttafeln von String 3. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_check_dc_string4_note":"Überprüfen Sie die DC-Verkabelung und die Schalttafeln von String 4. Wechselrichter neu starten und Vorgang wiederholen.","pvac_alert_confirm_grid_code_note":"Überprüfen Sie die AC-Verkabelung und den Netzanschluss. Bestätigen Sie die ausgewählten Netzanschlussbedingungen.","pvac_alert_dc_fault_string1":"Wechselrichter-DC-Fehler - String 1","pvac_alert_dc_fault_string2":"Wechselrichter-DC-Fehler - String 2","pvac_alert_dc_fault_string3":"Wechselrichter-DC-Fehler - String 3","pvac_alert_dc_fault_string4":"Wechselrichter-DC-Fehler - String 4","pvac_alert_freq_change":"Nicht netzkonform - Frequenzänderung","pvac_alert_internal_comms":"Internes Kommunikationsproblem","pvac_alert_over_freq":"Nicht netzkonform - Überfrequenz","pvac_alert_over_temp":"Wechselrichter-Übertemperatur","pvac_alert_over_voltage":"Nicht netzkonform - Überspannung","pvac_alert_production_limited_note":"Die Produktion kann eingeschränkt sein. Stellen Sie sicher, dass die Kabel ordnungsgemäß angeschlossen sind, ein ausreichender Luftstrom vorhanden ist und die Installationsumgebung stimmt.","pvac_alert_reboot_note":"Wechselrichter neu starten, sicherstellen, dass das System auf dem neuesten Stand und vollständig in Betrieb ist.","pvac_alert_under_freq":"Nicht netzkonform - Unterfrequenz","pvac_alert_under_voltage":"Nicht netzkonform - Unterspannung","pvi-power-status-dc-only":"Nur Gleichstrom","pvi-power-status-disabled":"Deaktiviert","pvi-power-status-enabled":"Aktiviert","pvi-reset-button-label":"Starten Sie den Wechselrichter neu und löschen Sie Warnmeldungen","pvs-self-test-1":"Selbsttest (1/6): Erdschluss","pvs-self-test-2":"Selbsttest (2/6): Lichtbogenfehler","pvs-self-test-3":"Selbsttest (3/6): MCI","pvs-self-test-4":"Selbsttest (4/6): Isolation","pvs-self-test-5":"Selbsttest (5/6): Relais-Schweißung","pvs-self-test-6":"Selbsttest (6/6): Impedanz","pvs_alert_check_arc_fault_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Lichtbogenfehler.","pvs_alert_check_dc_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Erdschlussprobleme.","pvs_alert_check_dc_string1_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Isolationsprobleme, mit Schwerpunkt auf String 1.","pvs_alert_check_dc_string2_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Isolationsprobleme, mit Schwerpunkt auf String 2.","pvs_alert_check_dc_string3_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Isolationsprobleme, mit Schwerpunkt auf String 3.","pvs_alert_check_dc_string4_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und Schnellabschaltgeräte auf Isolationsprobleme, mit Schwerpunkt auf String 4.","pvs_alert_check_dc_strings_note":"Überprüfen Sie die DC-Verkabelung, Anschlüsse, Schalttafeln und String-Konfigurationen.","pvs_alert_dc_arc_fault_detected":"Gleichstrom-Lichtbogenfehler - Erkannt","pvs_alert_dc_arc_fault_lockout":"Gleichstrom-Lichtbogenfehler - Sperre","pvs_alert_dc_ground_fault":"Gleichstrom-Erdschlussfehler","pvs_alert_dc_isolation_string1":"Gleichstrom-Isolationsproblem - String 1","pvs_alert_dc_isolation_string2":"Gleichstrom-Isolationsproblem - String 2","pvs_alert_dc_isolation_string3":"Gleichstrom-Isolationsproblem - String 3","pvs_alert_dc_isolation_string4":"Gleichstrom-Isolationsproblem - String 4","pvs_alert_dc_over_voltage":"Gleichstrom-Überspannung","pvs_alert_rapid_shutdown":"Schnellabschaltung ist eingeleitet","pvs_alert_rapid_shutdown_note":"Wechselspannungstrennschalter und Niederspanungs-Schnellabschaltungskreis prüfen.","registration_container_continue_header":"Eingegebene E-Mail-Adresse des Kunden: {email}","registration_container_continue_modal_description":"Mit einer falschen E-Mail-Adresse kann der Kunde nicht auf die Tesla Mobile App zugreifen. Prüfen Sie, ob die E-Mail-Adresse des Kunden korrekt ist.","registration_container_customer_email_required":"Für die Aktivierung der Tesla Mobile App ist die E-Mail-Adresse des Kunden erforderlich.","registration_container_customer_information_title":"Kundeninformation","registration_container_fill_required_fields":"Alle Felder sind durch den Installateur oder den Kunden auszufüllen.","registration_container_loading_modal_registering":"Registrierung läuft","registration_container_reset_form_modal_description":"Bitte bestätigen Sie, dass Sie das Formular tatsächlich zurücksetzen möchten.","registration_container_reset_form_modal_header":"Alle zuvor eingegebenen Informationen werden gelöscht.","security_container_settings_title_customer":"Passwort ändern oder zurücksetzen (Kunde)","security_container_settings_title_installer":"Passwort ändern oder zurücksetzen (Installateur)","security_view_copied_to_clipboard":"Kopiert!","security_view_not_wifi_qr_code_error":"Kein WLAN-QR-Code.","security_view_scan_qr_code_not_found_error":"Kein QR-Code gefunden.","security_view_settings_change_password_error":"Die neuen Kennwörter stimmen nicht überein.","security_view_settings_change_password_label":"PASSWORT ÄNDERN","security_view_settings_completed":"FERTIG","security_view_settings_new_password_label":"NEUES PASSWORT","security_view_settings_old_password":"AKTUELLES PASSWORT","security_view_settings_password_change_info":"Geben Sie zum Ändern des Passworts bitte das aktuelle Passwort und ein neues Passwort ein.","security_view_settings_password_customer":"PASSWORT","security_view_settings_password_customer_placeholder":"letzten 5 Zeichen des Passworts (Gatewayaufkleber)","security_view_settings_password_installer_label":"Gateway Passwort","security_view_settings_password_reset_info":"Betätigen Sie zum Zurücksetzen des Passworts den Schalter an der Powerwall, und geben Sie anschließend die letzten 5 Zeichen der Gateway-Seriennummer ein.","security_view_settings_password_reset_info_serial":"Betätigen Sie zum Zurücksetzen des Kennworts den Schalter an der Powerwall, und geben Sie anschließend die letzten 5 Zeichen der Gateway-Seriennummer ein.","security_view_settings_password_reset_installer_info":"Betätigen Sie zum Zurücksetzen des Passworts den Schalter an der Powerwall, und geben Sie anschließend die Gateway-Seriennummer ein.","security_view_settings_password_reset_installer_info_serial":"Betätigen Sie zum Zurücksetzen des Kennworts den Schalter an der Powerwall, und geben Sie anschließend die Gateway-Seriennummer ein.","security_view_settings_re_enter_password_label":"NEUES PASSWORT ERNEUT EINGEBEN","security_view_settings_reset_password_label":"PASSWORT ZURÜCKSETZEN","security_view_settings_serial_customer":"SERIENNUMMER","security_view_settings_serial_customer_placeholder":"Letzte 5 Zeichen der Gateway-Seriennummer","security_view_settings_serial_installer_label":"Gateway-Seriennummer","security_view_settings_success":"Passwort wurde aktualisiert","security_view_settings_success_new_password":"Das neue Passwort lautet:","security_view_settings_toggled_password":"Passwort vergessen?","self_test_result_viewer_resi_only":"Selbsttest-Protokollanzeige ist nicht verfügbar.","self_test_results_viewer_collapse_all":"Alle einklappen","self_test_results_viewer_column_name":"Name","self_test_results_viewer_column_result":"Ergebnis","self_test_results_viewer_column_spec":"Spezifikation","self_test_results_viewer_column_test_time":"Testzeit","self_test_results_viewer_column_value":"Wert","self_test_results_viewer_expand_all":"Alle ausklappen","self_test_results_viewer_failed":"Fehlgeschlagen","self_test_results_viewer_in_progress":"In Bearbeitung","self_test_results_viewer_inconclusive":"Unklar","self_test_results_viewer_not_started":"Nicht gestartet","self_test_results_viewer_passed":"bestanden","self_test_results_viewer_skipped":"Übersprungen","self_test_results_viewer_warning":"Warnung","settings_container_confirm_reset_operation_mode":"Bestätigen Sie den Wechsel in den Modus {operation}","settings_container_heco_modal_description":"Diese Einstellung kann nach der Auswahl nicht mehr geändert werden. Bestätigen Sie, dass der Kunde derzeit beim HECO-Batterie-Bonusprogramm angemeldet ist, bevor Sie Ihre Auswahl senden.","settings_container_heco_modal_title":"Anmeldung bestätigen","settings_container_heco_view_description":"Die Powerwall entlädt sich täglich mit der vereinbarten Kapazität, um die Anforderungen des Programms zu erfüllen. Diese Einstellung kann nach der Aktivierung nicht mehr geändert werden.","settings_container_heco_view_scheduled_dispatch_start_time":"Startzeit","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"HECO geplanter Versand","settings_container_heco_view_title":"HECO-Batterie-Bonusprogramm","settings_container_operation_modes_modal_content":"Wechseln Sie den Betriebsmodus über den Bildschirm ‚Anpassen‘ der Tesla Mobile App.","settings_container_operation_modes_modal_reset":"MODUS ZURÜCKSETZEN","settings_container_operation_modes_modal_title":"Betriebsmodus","settings_container_operation_modes_modal_warning":"Diese Änderung kann nicht rückgängig gemacht werden. Erweiterte Modi können nur über die Tesla Mobile App wieder aktiviert werden.","settings_container_operation_modes_reset_modal_title":"Betriebsmodus zurücksetzen?","settings_container_operation_settings_subtitle":"Benennen Sie ihr System, Einstellungen für Betriebsmodus und Exportlimits.","settings_container_operation_settings_title":"Betriebseinstellung","settings_container_save_instructions":"Klicken Sie zum Speichern auf WEITER.","settings_container_saving_site_info_modal":"Energiespar-Einstellungen der Anlage","settings_container_site_import_description":"Import-Grenzwert der Anlage ist eine optionale Einstellung. Lassen Sie dieses Feld frei, um die Importbegrenzung zu deaktivieren. Bei Aktivierung gibt diese Einstellung die Maximalleistung, die aus der Anlage in das Netz eingespeist werden darf, an.","settings_container_site_limits_header":"Anlagen-Grenzwerte","settings_view_custom_modes_label":"Voreinstellung - {mode}","settings_view_energy_reserve_heco_label":"Änderungen an der Backup-Reserve sind aufgrund der Anmeldung für das HECO-Batterie-Bonusprogramm eingeschränkt. Der Kunde kann in seiner App eine Backup-Reserve festlegen.","settings_view_energy_reserve_label":"ENERGIE RESERVE (FÜR NOTSTROM IST NICHT FÜR SELBSTNUTZUNG VERFÜGBAR)","settings_view_instruction_site_name":"Bitte Namen eingeben","settings_view_net_meter_mode":"Export-Modus","settings_view_operation_label":"BETRIEBSMODUS","settings_view_operation_set_label":"EINZUSTELLENDER BETRIEBSMODUS","settings_view_set_net_meter_mode_never_label":"Kein Export","settings_view_set_net_meter_mode_solar_label":"Solar-Export","settings_view_site_name":"HAUS NAME","settings_view_site_name_placeholder":"zB. Mein Haus","settings_view_solar_export_limitation_slider":"Solarstrom Einspeiselimit","settings_view_solar_feature":"Diese Funktion sollte nur aktiviert werden, wenn das Solarsystem nicht in das Netz einspeisen darf. Typisch in Hawaii (CSS) und Australien.","settings_view_solar_limitation":"WURDE EINE POWERWALL ZUSAMMEN MIT EINEM SOLARSYSTEM INSTALLIERT, DAS KEINE POWERWALL+ IST?","settings_view_solar_zero_export":"POWERWALL NEBEN EINEM SOLARSYSTEM OHNE EXPORT INSTALLIERT?","site_info_container_submit":"SENDEN","solar_item_view_baudrate_label":"Baudrate","solar_item_view_brand_input_label":"HERSTELLER","solar_item_view_brand_label":"Hersteller","solar_item_view_check_inverter":"Wechselrichter {id} Verbindung überprüfen","solar_item_view_connection_warning":"Verbindung konnte nicht hergestellt werden","solar_item_view_inverter_brand":"Solar Wechselrichter Hersteller","solar_item_view_inverter_communication":"Wechselrichter Kommunikation","solar_item_view_inverter_model_label":"Wechselrichter Modell","solar_item_view_ip_label":"IP Adresse","solar_item_view_model_label":"MODEL","solar_item_view_power_rating_explanation":"Dies ist die Gesamtnennleistung der PV-Anlage hinsichtlich der Module/Panelen. Zum Beispiel: geben Sie bei zehn 300W Panelen als Gesamtnennleistung 3000W an, auch wenn der PV-Wechselrichter eine Nennleistung von 2500W oder 3500W hat.","solar_item_view_pv_array_dc_power_rating":"PV-Anlage DC-Nennleistung","solar_item_view_pv_array_dc_power_rating_label":"Photovoltaik Anlagen DC Nennleistung","solar_item_view_revenue_grade":"Wirkungsgrad","solar_item_view_revenue_grade_explanation":"Nur auswählen, wenn der Wechselrichtger über einen integrierten Wirkungsgradmesser verfügt. Die Wechselrichterdaten werden dann von diesem Messer übernommen.","solar_item_view_revenue_grade_title":"Wirkungsgrad","solar_item_view_solar":"SOLAR {id}","solar_item_view_success":"ERFOLGREICH VERBUNDEN!","solar_item_view_unable":"Wechselrichter nicht erkannt","solar_list_view_continue_add_solar":"Photovoltaik Anlage hinzufügen","solar_view_continue_add_solar":"SOLAR HINZUFÜGEN","status_update_urgency_none":"Auf dem aktuellen Stand","status_update_urgency_optional":"Aktualisierung optional","status_update_urgency_required":"Aktualisierung erforderlich","status_update_urgency_unknown":"Unbekannt","success_view_awesome":"SUPER!","success_view_copied_to_clipboard":"Kopiert!","success_view_installation_complete":"Installation komplett","success_view_new_password_error_title":"Passwort des Assistenten","success_view_new_password_title":"Neues Passwort des Assistenten","success_view_password_set":"Passwort wurde bereits festgelegt","success_view_record_password":"Bitte notieren Sie dieses Passwort, bevor Sie fortfahren.","success_view_retry_registration":"REGISTRIERUNG ERNEUT VERSUCHEN","success_view_set_customer_password":"KUNDENPASSWORT FESTLEGEN","success_view_syncing_configuration":"Konfiguration synchronisieren","summary_container_company":"Unternehmen","summary_container_connection_type":"Anschluss","summary_container_email":"E-Mail-Adresse","summary_container_installer_information":"Informationen des Installateurs","summary_container_ip_address":"IP-Adresse","summary_container_location":"Standort","summary_container_meter":"Zähler Nr. {index}","summary_container_meter_information":"Zählerinformationen","summary_container_phone":"Telefonnummer","summary_container_print":"Drucken","summary_container_serial_number":"Seriennummer","summary_container_site_info":"Standortinformationen","summary_container_site_name":"Name des Standorts","summary_container_subtitle":"Produkt- und Installationsinformationen","summary_site_information":"STANDORTINFORMATIONEN","summary_view_autonomous":"Zeitbasierte Einstellung","summary_view_backup":"Ausschließlich Notstrom","summary_view_backup_capable":"Backup möglich","summary_view_backup_reserve":"NOTSTROMRESERVE","summary_view_backup_switch":"BACKUP-SWITCH","summary_view_conductor_export":"EXPORTGRENZWERT DES LEITERS","summary_view_conductor_import":"IMPORTGRENZWERT DES LEITERS","summary_view_control":"Anlagen-Regelung","summary_view_customer_version":"KUNDENVERSION","summary_view_direct":"Direkt","summary_view_disabled":"DEAKTIVIERT","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"PV-EXPORTGRENZE","summary_view_extra_programs":"EXTRA PROGRAMME","summary_view_followers":"FOLGEGERÄTE","summary_view_gateway":"GATEWAY","summary_view_grid_code":"NETZ-STANDARD","summary_view_gsm":"MOBILFUNK","summary_view_heco_battery_bonus":"HECO-Batterie-Bonus","summary_view_ip_address":"IP-ADRESSE","summary_view_leader":"FÜHRUNGSGERÄT","summary_view_mode":"MODUS","summary_view_msg_cannot_read_solar_assembly":"Stoppen Sie das System zuerst, um die Teilenummer und die Seriennummer der Powerwall+-Solar-Baugruppe zu sehen.","summary_view_network":"NETZWERK","summary_view_non_backup":"Ohne Backup","summary_view_panel_limit":"SCHALTTAFEL-MAXIMALSTROM","summary_view_part_number":"Teilenummer","summary_view_partnum":"Teil {partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Aggregation","summary_view_self_consumption":"Eigenverbrauch","summary_view_serial":"Serie","summary_view_serialnum":"Seriennummer {serialNumber}","summary_view_site_export":"EXPORTGRENZWERT DER ANLAGE","summary_view_site_import":"IMPORTGRENZWERT DER ANLAGE","summary_view_site_name":"NAME DES STANDORTS","summary_view_solar_assembly":"SOLAR-BAUGRUPPE","summary_view_sync":"BACKUP-MÖGLICHKEIT","summary_view_time":"ZUSAMMENFASSUNG KOMPILIERZEIT","summary_view_time_zone":"ZEITZONE","summary_view_wifi":"WLAN","system-device-follower-not-responding":"W-LAN-gekoppeltes Gerät antwortet momentan nicht","system-device-unknown-sitecontroller":"Das Gerät hat seine Untergeräte noch nicht entdeckt","system_acpw_vitals_charge":"Ladestufe: {charge}%","system_acpw_vitals_power":"Wechselstromleistung {power}","system_acpw_vitals_power_charging":"Wechselstromleistung {power} Laden","system_acpw_vitals_power_discharging":"Wechselstromleistung: {power} Entladen","system_acpw_vitals_state":"Powerwall-Status: {state}","system_acpw_vitals_voltage":"Wechselstromspannung: {voltage}","system_controller_din":"Steuergerät: {din}","system_device_alert_disabled":"Gerät deaktiviert","system_device_alert_updating":"Firmware wird aktualisiert...","system_device_gateway_not_islanding":"Es handelt sich nicht um den Inselbildungsregler.","system_device_leader":"Führungsgerät","system_device_name_backup_switch":"Backup-Switch ({sn})","system_device_name_battery_assembly":"Batterie-Baugruppe ({sn})","system_device_name_gateway":"Gateway ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus":"{role} Powerwall+","system_device_name_powerwall_plus_leader":"Haupt-Powerwall+","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+ (verkabelt)","system_device_name_powerwall_plus_wireless":"Powerwall+ (drahtlos)","system_device_name_remote_meter":"Remote-Messgerät({sn})","system_device_name_solar_assembly":"Solar-Baugruppe ({sn})","system_device_name_solar_assembly_1":"Solar-Baugruppe","system_device_name_sync":"Gateway Schütz/Zählersteuerung ({sn})","system_firmware_update":"Aktualisierung: {percent}% ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"Backup-Status: {backupState}","system_islanding_vitals_grid_line":"Netzleitung {lineNumber}: {v} {f}","system_islanding_vitals_island_line":"Inselleitung {lineNumber}: {v} {f}","system_overview_connected":"Mit Tesla verbunden","system_overview_disconnected":"Nicht mit Tesla verbunden","system_overview_follower":"Folge-Powerwall","system_overview_login_required":"Login erforderlich, um Systembetrieb anzuzeigen","system_overview_scanning":"Scan nach weiteren Geräten läuft...","system_overview_site_controller":"Anlagensteuerung","system_overview_updating":"Geräte werden aktualisiert ...","system_pvi_vitals_ac_solar_power":"AC Solarenergie: {power} / {current}","system_pvi_vitals_ac_solar_power_only":"AC Solarenergie: {power}","system_pvi_vitals_lifetime_energy_kwh":"Lebensdauer Energie: {energy}","system_pvi_vitals_state":"Bundesland: {message}","system_pvi_vitals_string":"String {number}: {voltage} / {current}","system_pvi_vitals_string_not_connected":"String {number}: Nicht verbunden","system_remote_meter_ct_line":"CT {n} ({location}): {value}","system_remote_meter_no_cts":"Keine CTs konfiguriert","system_rescan_button_text":"Geräte erneut scannen","system_scanning_label_text":"Scan nach weiteren Geräten läuft...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Prüfen ob das System normal funktioniert.","test_container_system_test_title":"System Test","test_inverter_container_error_grid_uncompliant":"Der Test konnte nicht ausgeführt werden, da das Netz den Vorgaben nicht entspricht.","test_inverter_container_error_not_idle":"Die Powerwall muss im Ruhezustand sein um den Test auszuführen","test_inverter_container_results_error_plural_subtitle":"{num} Tests fehlgeschlagen","test_inverter_container_results_error_singular_subtitle":"{num} Test fehlgeschlagen","test_inverter_container_results_success_plural_subtitle":"{num} Tests bestanden","test_inverter_container_results_success_singular_subtitle":"{num} Test bestanden","test_inverter_container_results_success_subtitle":"Alle Tests erfolgreich ausgeführt","test_inverter_container_results_title":"Ergebnisse Wechselrichterselbsttest","test_inverter_container_title":"Wechselrichterselbsttest","test_meter_composite_view_auxiliary_meter_setup_instructions":"Mindestens ein Stromwandler (CT) pro Meter muss konfiguriert sein","test_meter_composite_view_auxiliary_meters_title":"zusätzliche Meter","test_meter_composite_view_configure_meters":"ZÄHLER KONFIGURIEREN","test_meter_composite_view_current_transformer_setup_instructions":"Mindestens einen Netz-Stromwandler (CT) oder Verbraucherstromwandler (CT) auswählen, aber nicht beides","test_meter_composite_view_external_meter_setup_instructions":"Für jeden externen Stromzähler muss mindestens ein Stromwandler festgelegt werden.","test_meter_composite_view_external_meters_title":"Externe Stromzähler","test_meter_composite_view_internal_meters_gateway_title":"Interne Stromzähler (Gateway)","test_meter_composite_view_internal_meters_title":"Interne Meter","test_meter_composite_view_no_configured_meters":"KEINE ZÄHLER KONFIGURIERT. BITTE {configure} UM FORTZUFAHREN.","test_meter_composite_view_note":"HINWEIS","test_meter_item_view_acuvim_label":"Zähler {id}: Acuvim-Stromzähler","test_meter_item_view_backup_switch_label":"Zähler {id}: Backup-Switch-Stromzähler","test_meter_item_view_configure_phases_note":"Phasen bestimmen, um die Stromwandler (CTs) für diesen Meter zu konfigurieren","test_meter_item_view_internal_meter_x_gateway_label":"Zähler {id}: Interner Primärstromzähler X (Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"Zähler {id}: Interner Hilfsstromzähler Y (Gateway)","test_meter_item_view_remote_w1_wifi_label":"Zähler {id}: Remote-W-LAN","test_meter_item_view_remote_w1_wired_label":"Zähler {id}: Remote-Verkabelt","test_meter_item_view_remote_w2_wifi_label":"Zähler {id}: Remote-W-LAN","test_meter_item_view_remote_w2_wired_label":"Zähler {id}: Remote-Verkabelt","test_meter_item_view_reset":"ZURÜCKSETZEN","test_meter_item_view_site_meter_title":"Interner Netzanschluss Meter","test_meter_item_view_sync_id":"Meter Synchronisation {id}","test_meter_item_view_toggle_advanced":"Fortgeschritten","test_meter_item_view_toggle_power":"Leistung","test_meter_item_view_wifi_id":"Meter {id}","test_meter_item_view_wired_id":"Verkabelter Meter {id}","test_view_canceled_status":"Test wurde abgebrochen","test_view_failed_status":"Test ist fehlgeschlagen","test_view_idle_status":"System Testing beginnt","test_view_init_status":"Vorbereitung um Test zu starten","test_view_inverter_test_warning_message":"Falls die Solaranlage für 0 Export eingestellt ist kann die System Test Funktion des Gateways das System nicht korrekt konfigurieren. Bitte Wechselrichter für den Test abstellen.","test_view_passed_status":"Test ist erfolgreich abgeschlossen","test_view_prep_status":"Initializierung: Dies kann ein paar Minuten dauern!","test_view_running_status":"Lade Test wird ausgeführt","test_view_skip_start_system_test_text":"Bestätigen um den System Test zu überspringen","test_view_start_system_test_warning":"WARNUNG","test_view_system_test_completed_message":"System Test Abgeschlossen!","time_minute":"Minute","time_minutes":"Minuten","time_second":"Sekunde","time_seconds":"Sekunden","time_started_at":"Start um: {time}","timezone_container_subtitle":"Aufgrund von Ort und IP Adresse, helfen wir die Zeitzone auszuwählen.","timezone_container_title":"Zeitzone","timezone_view_label":"Zeitzone","toast_view_standard_title":"Hinweis","toast_view_warning_title":"Warnung","update_container_industrial_updating_description":"Der Anlagenregler startet nun automatisch neu, um das Update zu installieren. {lb1}{lb2} Warten Sie bitte 2 Minuten, stellen Sie die Verbindung zum Netzwerk der Anlagensteuerung wieder her und {refresh} anschließend","update_container_preparing_title":"Aktuellstes Update wird vorbereitet","update_container_refresh_browser":"Seite neu laden.","update_container_residential_updating_description":"Das Gateway wird jetzt neu gestartet um das neueste Update zu laden. {lb1}{lb2} Bitte 2 Minuten warten, danach erneut mit dem Gateway Netzwerk verbinden, und die Seite neu laden.","update_container_skip_title":"Update überspringen?","update_container_subtitle":"Bitte System updaten um die letzte Software und Firmware zu installieren.","update_container_subtitle_industrial":"Nach Updates suchen. Hinweis: Das Senden von Firmware-Updates zu Batterien erfolgt auf der Batterie-Seite.","update_container_title":"Update","update_container_updating_title":"System wird upgedatet","update_step_item_view_resolution_title":"Vorgeschlagene Fehlerbehebung","update_view_check_again":"KLICKEN UM ERNEUT ZU SUCHEN","update_view_check_for_update":"NACH UPDATE SUCHEN","update_view_check_for_update_industrial":"NACH UPDATE DES ANLAGENREGLERS SUCHEN","update_view_checking_update":"SUCHE NACH UPDATE","update_view_current_version":"Aktuelle Version: {version}","update_view_current_version_label":"INSTALLIERTE VERSION:","update_view_downloading":"HERUNTERLADEN","update_view_downloading_update":"Update wird heruntergeladen","update_view_no_power_cicle":"NICHT NEUSTARTEN!","update_view_percent_complete":"{percent} geladen","update_view_progress":"UPDATE FORTSCHRITT","update_view_staged":"NEUE VERSION VORBEREITET","update_view_staged_update":"Bereit für update","update_view_staging":"VORBEREITUNG","update_view_staging_update":"Update wird vorbereitet","update_view_time_remaining":"verbleibend","update_view_up_to_date":"NEUESTE VERSION IST INSTALLIERT","update_view_update_now":"JETZT UPDATEN","update_view_update_urgency_label":"Aktualisierungsstatus: {status}","update_view_updated_industrial":"Die Software der Anlagensteuerung ist auf dem neuesten Stand.","update_view_updated_residential":"Die neueste Firmware ist installiert.","update_view_wait_minutes":"BITTE EIN PAAR MINUTEN WARTEN ...","validation_phone":"Eine gültige Telefonnummer eingeben","vitals_header_subtitle_firmware_update":"Firmware-Update läuft...","vitals_header_subtitle_firmware_update_failed":"Firmware-Update fehlgeschlagen. Überprüfen Sie Freigabeschalter und Verkabelung.","vitals_header_title":"System","vitals_powerwall_state_ac_fault":"AC-Stufenfehler","vitals_powerwall_state_dc_fault":"DC-Stufenfehler","vitals_powerwall_state_grid_following":"Netzverfolgung","vitals_powerwall_state_grid_forming":"Netzformung","vitals_powerwall_state_init":"Initialisieren","vitals_powerwall_state_off":"Aus","vitals_powerwall_state_standby":"Standby","vitals_powerwall_state_support_dc":"DC-Unterstützung","warning":"WARNUNG","warning_off_grid":"Wenn Ihr System im off-grid Modus betrieben wird, wird die Versorgung innerhalb der nächsten 5 Minuten unterbrochen.","warning_on_grid":"Wenn Ihr System im on-grid Modus betrieben wird, wird der Lade oder Entladevorgang der Powerwall unterbrochen.","warning_sitemaster_container_not_running":"Der Anlagen-Master ist nicht in Betrieb","wifi_pairing_link_message":"Hinzufügen einer Powerwall mit W-LAN-Anschluss","wifi_view_find_network":"NETZWERK nach SSID suchen","wifi_view_note":"Note: Gateway ist nur mit 2.4 GHz WLAN Netzwerken kompatibel.","wifi_view_note_five_ghz":"Hinweis: Das Gateway ist sowohl mit 2,4 GHz- als auch mit 5 GHz-Drahtlosnetzwerken kompatibel.","wifi_view_readonly":"Da dies eine Folge-Powerwall ist, kann ihre drahtlose Netzwerkkonfiguration nicht bearbeitet werden.","wifi_view_security_label":"SICHERHEIT","wizard_container_commissioning_wizard":"Tesla Konfigurationsassistent","wizard_container_login_required":"Anmeldung erforderlich","wizard_container_title":"Jetzt starten.","wizard_container_verifying_login_title":"Anmeldung wird geprüft"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Errore","advanced_settings_submit":"Invia","advanced_settings_submitted":"Inviate","advanced_settings_title":"Impostazioni avanzate","alert_container_ac_phase_1_over_voltage":"Sovratensione CA","alert_container_ac_phase_1_under_voltage":"Sottotensione CA","alert_container_ac_phase_2_over_voltage":"Sovratensione CA","alert_container_ac_phase_2_under_voltage":"Sottotensione CA","alert_container_ac_phase_3_over_voltage":"Sovratensione CA","alert_container_ac_phase_3_under_voltage":"Sottotensione CA","alert_container_over_frequency":"Sovrafrequenza CA","alert_container_rate_of_change_frequency":"Tasso di variazione di frequenza CA","alert_container_under_frequency":"Sottofrequenza CA","app_container_engineering_mode_banner_message":"La Modalità assistenza Tesla non richiede l\'autenticazione. Selezionare \\"Arresta sistema\\" se si stanno apportando modifiche operative. Prima di chiudere il browser, lasciare il sistema in uno stato accettabile. Al termine, chiudere il browser perché questa modalità non richiede l\'autenticazione.","app_container_engineering_mode_title":"Modalità assistenza Tesla","app_container_firmware_update_banner_message":"Non proseguire con l\'installazione e il cablaggio e rimanere su questa pagina fino al completamento dell\'aggiornamento.","app_container_firmware_update_banner_title":"Aggiornamento firmware in corso","app_container_sitemaster_message_title":"Il sistema è attualmente in funzione. Per poter visualizzare lo stato dei gruppi batterie, è necessario arrestare il sistema. È possibile arrestare il sistema dalla home page.","app_container_sitemaster_power_supply_mode_banner_message":"Batteria che produce tensione CA per alimentare i dispositivi per l\'abbinamento e la configurazione. Pulsante per arrestare il sistema sulla pagina iniziale.","app_container_sitemaster_power_supply_mode_banner_title":"Modalità a isola","app_container_sitemaster_running_banner_title":"Sistema in funzione","auto_config_check_network_button":"Controllare la rete e attivare il Wi-Fi.","auto_config_check_system_and_summary":"Controllare le pagine Sistema e Sintesi.","auto_config_done_button_text":"Fatto","auto_config_instructions_cannot_determine_grid_connection":"Controllare il cablaggio al Backup Switch o Gateway prima di avviare il sistema.","auto_config_instructions_determining_on_grid":"Se il messaggio persiste per più di 3 minuti, controllare il cablaggio al Backup Switch o Gateway.","auto_config_instructions_finding_contactor_controller":"Se il messaggio persiste per più di 3 minuti, controllare il cablaggio al Backup Switch o Gateway.","auto_config_instructions_finding_powerwalls":"Se il messaggio persiste per più di 3 minuti, controllare il cablaggio dell\'unità Powerwall.","auto_config_instructions_lookup_failed_retry":"Scansionare l\'adesivo con il numero di serie in Bolt per eseguire la configurazione automatica dell\'unità Powerwall, quindi premere {retryButton}","auto_config_instructions_lookup_failed_wizard":"oppure {wizardButton} per configurare manualmente l\'unità Powerwall.","auto_config_instructions_missing_info_1":"Non è stato possibile eseguire la configurazione automatica dell\'unità Powerwall poiché non erano disponibili le seguenti informazioni:","auto_config_instructions_missing_info_2":"{wizardButton} per inserirle manualmente.","auto_config_instructions_missing_info_3":"{registrationButton} manualmente.","auto_config_instructions_no_grid_detected":"Controllare il cablaggio e gli interruttori prima di avviare il sistema.","auto_config_instructions_no_network_retry":"{networkLink} per eseguire la configurazione automatica dell\'unità Powerwall, quindi premere {retryButton}","auto_config_instructions_no_network_wizard":"oppure {wizardButton} per configurare manualmente l\'unità Powerwall.","auto_config_instructions_retry":"{networkLink} se il problema persiste","auto_config_instructions_retry_wizard":"oppure {wizardButton} per configurare manualmente l\'unità Powerwall.","auto_config_instructions_updating":"Prima di poter eseguire la configurazione automatica dell\'unità Powerwall è necessario un aggiornamento software. L\'aggiornamento verrà scaricato e applicato automaticamente. Potrebbe essere necessario ricollegarsi alla rete Wi-Fi dell\'unità Powerwall.","auto_config_missing_grid":"Rete per il sito del cliente","auto_config_missing_gridcode":"Codice rete per il sito del cliente","auto_config_missing_registration":"Informazioni del cliente per la registrazione del prodotto","auto_config_missing_timezone":"Fuso orario del sito del cliente","auto_config_network_button_text":"Configurazione della rete","auto_config_registration_button_text":"Inserire le informazioni del cliente","auto_config_retry_button_label":"Riprova","auto_config_run_button_label":"Configura automaticamente Powerwall","auto_config_run_wizard_button_text":"Esegui la procedura guidata","auto_config_section_title":"Configurazione automatica Powerwall","auto_config_status_cancelled":"La configurazione automatica è stata annullata. È possibile riprovare:","auto_config_status_cannot_determine_grid_connection":"Impossibile determinare la connessione alla rete.","auto_config_status_complete":"Completata correttamente","auto_config_status_determining_on_grid":"Determinazione della connessione alla rete...","auto_config_status_finding_contactor_controller":"Ricerca del controller contattore...","auto_config_status_finding_powerwalls":"Ricerca Powerwall...","auto_config_status_in_progress":"In corso","auto_config_status_lookup_failed":"Ricerca del numero di serie non riuscita","auto_config_status_missing_information":"Informazioni mancanti","auto_config_status_no_grid_detected":"Nessuna rete rilevata.","auto_config_status_no_network":"Non connesso a Tesla","auto_config_status_not_applicable":"La configurazione automatica non è necessaria o è già stata eseguita. È possibile eseguirla nuovamente:","auto_config_status_retrying":"Nuovo tentativo richiesta rete non riuscita","auto_config_status_timeout":"Timeout configurazione automatica. È possibile riprovare:","auto_config_status_updating":"Aggiornamento software necessario","auto_config_stop_system_modal_message":"Non è possibile eseguire la procedura di configurazione automatica mentre il sistema è in funzione. Arrestare il sistema e riprovare.","auto_config_stop_system_modal_title":"Impossibile avviare la configurazione automatica","battery_container_add_all_batteries_button_label":"AGGIUNGI TUTTE","battery_container_available_batteries_subtitle":"Queste batterie non faranno parte del funzionamento del sistema a meno che non vengano aggiunte a \\"Configured\\" list.","battery_container_available_batteries_title":"Gruppi batterie disponibili","battery_container_cannot_communicate":"Impossibile comunicare con il Powerwall. Controllare il cablaggio e la terminazione del bus CAN.","battery_container_cannot_communicate_with_device":"Impossibile comunicare con il dispositivo. Controllare il cablaggio e la terminazione del bus CAN.","battery_container_chinv":"VFD per compressore e riscaldatore (CHINV) {index}","battery_container_configured_batteries_label":"Gruppi batterie configurati","battery_container_configured_batteries_subtitle":"Queste batterie faranno parte del funzionamento del sistema.","battery_container_confirm_update_firmware":"L\'operazione potrebbe richiedere alcuni minuti. Non interrompere l\'aggiornamento e non uscire da questa pagina.","battery_container_dcbc":"Gruppo batterie {index}","battery_container_dcbc_comms_failure":"Errore di comunicazione. Controllare la connessione di rete all\'unità ed eseguire nuovamente la scansione.","battery_container_dcbc_dcdisconnect_opened":"La manopola di sezionamento CC è in posizione OFF.","battery_container_dcbc_door_switch_opened":"Linea di attivazione dello sportello dell\'inverter aperta. Controllare l\'interruttore dello sportello.","battery_container_dcbc_enable_line_return_low_estop":"Pulsante di arresto da remoto dell\'inverter aperto. Controllare il circuito di arresto da remoto.","battery_container_dcbc_enable_line_return_low_inv":"Linea di attivazione del sistema inverter aperta. Controllare feedback dell\'interruttore automatico.","battery_container_dcbc_enable_line_return_low_str":"La linea di attivazione per una o più file di unità Powerpack. Controllare il cablaggio e gli sportelli del Powerpack. Per la diagnosi, consultare la Guida alla risoluzione dei problemi della linea di attivazione.","battery_container_delete_button_title":"Elimina questo dispositivo","battery_container_diagnosis_incomplete":"Diagnosi incompleta. Prima di poter eseguire ulteriori controlli è necessario aggiornare il firmware.","battery_container_faults":"Guasti","battery_container_firmware_update_needed":"Necessario aggiornare il firmware.","battery_container_gateway_contactor_meter_controller":"Controller contattore/contatore gateway","battery_container_industrial_confirm_update_firmware":"Verrà aggiornato il firmware di ogni gruppo batterie e dei relativi componenti secondari.","battery_container_industrial_confirm_update_firmware_info":"Verrà aggiornato il firmware di ogni gruppo batterie in \\"Configured\\" list and its subcomponents.","battery_container_internal_communications_fault":"Errore di comunicazione interno. Controllare il cablaggio e la terminazione del bus CAN e aggiornare il firmware.","battery_container_meter_socket_adapter":"Backup Switch","battery_container_mpbc":"Gruppo batterie {index}","battery_container_mpthc":"Controller termico (MPTHC) {index}","battery_container_no_msa_detected":"Nessun Backup Switch rilevato.","battery_container_no_sync_detected":"Nessun controller contattore rilevato. Funzionalità di backup non rilevata.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"Unità modulare {index}","battery_container_post":"Colonnina (LCC) {index}","battery_container_post_missing":"Colonnina mancante {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Powerstage {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"L\'unità Powerwall è spenta. Verificare che l\'interrutore sia in posizione ON.","battery_container_qbms":"Quadro di gestione batterie (QBMS)","battery_container_qhvp":"Processore ad alta tensione (QHVP)","battery_container_residential_confirm_update_firmware":"Verrà aggiornato il firmware di ogni unità Powerwall e del controller contattore (se presente).","battery_container_resolve_connectivity":"Risolvere i problemi di connettività prima di esegure un aggiornamento del firmware.","battery_container_scan":"SCANSIONA","battery_container_scan_in_progress":"SCANSIONE IN CORSO...","battery_container_scbc":"Gruppo caricatore {index}","battery_container_scthc":"Controller termico (SCTHC) {index}","battery_container_self_tests_failure":"Autodiagnosi non superata.","battery_container_self_tests_inconclusive":"Risultati autodiagnosi inconcludenti.","battery_container_self_tests_internal_error":"Autodiagnosi non riuscite a causa di un errore di sistema interno.","battery_container_self_tests_stall":"Timeout: impossibile avviare le autodiagnosi.","battery_container_self_tests_system_down":"Impossibile eseguire le autodiagnosi quando il sistema non è attivo. Avviare il sistema e riprovare.","battery_container_self_tests_updating":"Impossibile eseguire le autodiagnosi quando è in corso l\'aggiornamento delle batterie. Riprovare al termine dell\'aggiornamento.","battery_container_serial_number":"SN: {sn}","battery_container_solar_powerwall":"{index} Solar Powerwall","battery_container_starc":"Convertitore CC-CC (STARC) {index}","battery_container_stitch":"CC-CC centralina elettronica (STITCH)","battery_container_synchronizer":"Controller contattore","battery_container_unknown":"Controller bus sconosciuto {index}","battery_container_update_failed":"Aggiornamento non riuscito. Riprovare e controllare che il cablaggio e gli interruttori di attivazione non siano interrotti durante l\'aggiornamento.","battery_container_update_firmware":"AGGIORNA FIRMWARE","battery_container_update_in_progress":"AGGIORNAMENTO IN CORSO...","battery_container_waiting_to_report_firmware":"In attesa che l\'unità indichi la versione del firwmare.","battery_container_warnings":"Avvertenze","button_label_generate":"GENERA","can_reboot_message_backup":"Modalità di backup","can_reboot_message_block_update":"Aggiornamento gruppo in corso","can_reboot_message_enumeration":"Enumerazione in corso","can_reboot_message_initializing":"Inizializzazione sistema","can_reboot_message_power_flow_is_too_high":"Il flusso di potenza è troppo elevato","can_reboot_message_updating":"Aggiornamento in corso del pacchetto del sito","caution":"ATTENZIONE","charger_settings_cabinet":"Armadietto {sn} {state}","charger_settings_cabinet_posts_warning":"Questi comandi arrestano solo l\'attivazione delle colonnine e il bus AT interno dell\'armadietto. È comunque necessario isolare l\'alimentazione e seguire la procedura di sicurezza completa quando si accede agli armadietti.","charger_settings_common_bus":"Bus comune {state}","charger_settings_common_bus_warning":"Arresta solo il bus AT comune. È comunque necessario isolare l\'alimentazione e seguire la procedura di sicurezza completa quando si accede agli armadietti.","charger_settings_disabled":"disattivato","charger_settings_enabled":"attivato","charger_settings_post":"Colonnina {id} {state}","charger_settings_saving":"risparmio di {spinner}","client_protocols_container_subtitle":"Attivare o disattivare i protocolli del client.","client_protocols_container_title":"Protocolli del client","client_protocols_menu_title":"Protocolli del client","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"TCP/IP Modbus","compliance_container_label_fcc_id":"FCC ID: {fccId}","compliance_container_label_ic_id":"IC: {icId}","compliance_container_label_manufacturer":"Produttore: {manufacturer}","compliance_container_label_model":"Modello: {model}","compliance_container_title":"Compatibilità","component-menu-title":"Componenti","conductor_limit":"Le batterie sono controllate per evitare di superare i limiti di corrente configurati su ogni fase dei trasformatori del conduttore. Per ulteriori informazioni su dove viene utilizzato e sui limiti da configurare, consultare la nota sull\'applicazione dei limiti del conduttore.","conductor_min_current":"Limite esportazione conduttore","control_container_add_on":"COMPONENTE AGGIUNTIVO","control_container_always_active":"SEMPRE ATTIVO","control_container_battery_ok":"CONSENTITA ESPORTAZIONE BATTERIA COMPLETA","control_container_charge_power_target":"POTENZA DI CARICA DESIDERATA","control_container_conductor_max_current":"Limite importazione conduttore","control_container_conductor_min_current_max_bound":"{mode} ha un valore massimo di 200 A","control_container_conductor_min_current_min_bound":"{mode} ha un valore minimo di 5 A","control_container_control_subtitle":"Sottotitolo comando","control_container_control_title":"Titolo comando","control_container_direct":"DIRETTO","control_container_disable":"Disattiva","control_container_discharge_power_target":"POTENZA DI SCARICA DESIDERATA","control_container_enabled":"ATTIVATO","control_container_energy_target":"ENERGIA DESIDERATA. Questo valore dovrebbe corrispondere alle dimensioni del sistema in base ai documenti di progettazione e al rapporto dell\'ispettore","control_container_error_message":"{mode} è obbligatoria","control_container_explanation_bullet_five_max_site_meter_power_kw":"Quando il carico netto è superiore a questo limite, le batterie si scaricheranno nel miglior modo possibile per evitare di superare tale limite.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Quando la generazione netta è superiore a questo limite, le batterie si caricheranno nel miglior modo possibile per evitare di superare tale limite.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Quando il carico netto è inferiore a questo limite, la potenza di ricarica consentita delle batterie sarà limitata.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Quando la generazione netta è inferiore a questo limite, la potenza di scarica consentita delle batterie sarà limitata.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Il Limite importazione sito è un\'impostazione opzionale. Lasciare questo campo vuoto per disattivare la limitazione.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Il Limite esportazione sito è un\'impostazione opzionale. Lasciare questo campo vuoto per disattivare la limitazione.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Limite aggregato tra tutte le fasi su tutti i contatori del sito. (Nota: quando si utilizzano contatori del carico, il contatore del sito viene calcolato utilizzando il carico, l\'energia solare e la batteria).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Limite aggregato tra tutte le fasi su tutti i contatori del sito. (Nota: quando si utilizzano contatori del carico, il contatore del sito viene calcolato utilizzando il carico, l\'energia solare e la batteria).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Quando attivato, il sitemaster controlla la potenza massima che è possibile importare dalla rete nel sito.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Quando attivato, il sitemaster controlla la potenza massima che è possibile esportare dalla rete al sito.","control_container_explanation_export_restrictions_locked":"Determina in che modo il sistema può esportare la potenza alla rete. Una volta impostata, la normativa prevede che possa essere modificata solo contattando Tesla.","control_container_explanation_export_restrictions_unlocked":"La normativa prevede che le caratteristiche di esportazione possono essere impostate solo durante la messa in servizio iniziale. Contattare Tesla per modificarle.","control_container_explanation_nominal_system":"Questo valore dovrebbe corrispondere alle dimensioni del sistema in base ai documenti di progettazione e al rapporto dell\'ispettore.","control_container_heat_for_energy":"ENERGIA TERMICA","control_container_heat_mode":"MODALITÀ CALORE","control_container_heco_committed_capacity":"Capacità messa in servizio","control_container_heco_committed_discharge_power_W_max_bound":"{mode} ha un valore massimo di 100000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode} ha un valore minimo di 100 W","control_container_loading":"Caricamento","control_container_max_site_meter_power_W_max_bound":"{mode} ha un valore massimo di 50000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} ha un valore minimo di 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} deve essere superiore o uguale a 0","control_container_max_site_meter_power_kw":"Limite importazione sito","control_container_max_site_meter_power_w":"Limite importazione sito","control_container_menu":"Menu","control_container_min_site_meter_power_kW_positive":"{mode} deve essere superiore o uguale a 0","control_container_min_site_meter_power_kw":"Limite esportazione sito","control_container_min_site_meter_power_w":"Limite esportazione sito","control_container_minimum_charge_power":"POTENZA DI CARICA MINIMA","control_container_minimum_discharge_power":"POTENZA DI SCARICA MINIMA","control_container_misc":"VARIE","control_container_net_meter_mode":"Restrizioni esportazione sito","control_container_never":"NESSUNA ESPORTAZIONE SITO","control_container_nominal_system_energy_kW_positive":"{mode} deve essere superiore o uguale a 0","control_container_nominal_system_energy_kWh_positive":"{mode} deve essere superiore o uguale a 0","control_container_nominal_system_energy_kwh":"Energia nominale del sistema","control_container_nominal_system_energy_max_error":"L\'Energia nominale del sistema supera il limite di energia massimo","control_container_nominal_system_power_kw":"Potenza nominale del sistema","control_container_nominal_system_power_max_error":"La Potenza nominale del sistema supera il limite di potenza massimo","control_container_number_error_message":"{mode} deve essere un valore numerico","control_container_power":"POTENZA","control_container_pv_only":"ESPORTAZIONE FINO A LETTURA CONTATORE FOTOVOLTAICO OK","control_container_reactive_mode":"MODALITÀ REATTIVA","control_container_real_mode":"MODALITÀ REALE","control_container_reset":"Reset","control_container_site_control":"CONTROLLO SITO","control_container_site_limits":"LIMITI SITO","control_container_site_max_power":"POTENZA MAX. SITO","control_container_site_min_power":"POTENZA MIN. SITO","control_container_submit":"Invia","control_container_submitting_control":"Invio comando","control_start":"FAI PARTIRE","control_stop":"FERMA","current_password_placeholder_text":"Immettere la password corrente","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Amp {id}","current_transformer_item_view_battery_ct":"Batteria","current_transformer_item_view_calculated_reading":"Calcolato:","current_transformer_item_view_conductor_ct":"Conduttore","current_transformer_item_view_ct_voltage_pairing_1":"Fase L1","current_transformer_item_view_ct_voltage_pairing_2":"Fase L2","current_transformer_item_view_ct_voltage_pairing_3":"Fase L3","current_transformer_item_view_ct_voltage_pairing_default":"Fase predefinita","current_transformer_item_view_doubled_solar_ct":"PV Solare (1TA x2)","current_transformer_item_view_flip":"Girare in senso opposto","current_transformer_item_view_generator_ct":"Gruppo Elettrogeno","current_transformer_item_view_load_ct":"Carico","current_transformer_item_view_measure_pw_plus_input":"Misurazione di un inverter Powerwall+","current_transformer_item_view_measured_reading":"Per TA:","current_transformer_item_view_missing_ct":"Mancante","current_transformer_item_view_no_reading":"Nessuna misura","current_transformer_item_view_none_ct":"Non Disponibile","current_transformer_item_view_phase_sequence_dropdown_title":"Fase","current_transformer_item_view_site_ct":"Sito","current_transformer_item_view_smart_ct":"Smart","current_transformer_item_view_solar_ct":"PV / Solare","current_transformer_item_view_solar_rgm_ct":"Solo ricavo da fotovoltaico","current_transformers_container_800a_ct_ensure":"Assicurati che la selezione dei TA in questa pagina combaci con quelli installati","current_transformers_container_800a_ct_larger":"I TA da 800A sono fisicamente più grandi che quelli da 200/264 A","current_transformers_container_800a_ct_use_case":"Quando stai misurando cavi di sezione grande (portata 400A / 800A), usa e configura i TA da 800A","current_transformers_container_amps_explanation":"Corrente che passa attraverso il trasformatore di corrente","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Assicurati che il TA sia installato nella fase corretta ({sequence}).","current_transformers_container_configure_subtitle":"Configura i trasduttori di corrente per il/i meter contatori","current_transformers_container_ct_flipping_ensure_direction":"Assicurati che l\'etichetta del TA sia rivolta verso l\'inverter solare (PV-solare) o verso il contatore di scambio (sito). Poi assicurati che la fase, la corrente, la tensione e il fattore di potenza siano corretti","current_transformers_container_ct_flipping_modal_title":"Gira il verso del TA via software","current_transformers_container_ct_flipping_software_incorrect_metering":"Usare il software per girare i TA installati nella fase sbagliata poterà a letture sbagliate","current_transformers_container_ct_flipping_wrong_phase":"Una lettura di potenza negativa può indicare che un TA sia posizionato nel verso o nella fase sbagliata","current_transformers_container_double_check_recommendation":"Prima di continuare effettuare un doppio controllo su cablaggio, prese di tensione, trasformatori di corrente e configurazione del contatore.","current_transformers_container_doubled_solar_ct_explanation":"Un singolo trasformatore di corrente può essere usato per misurare un inverter fotovolaico bilanciato","current_transformers_container_doubled_solar_ct_modal_title":"Misurazione di un inverter fotovoltaico bifase con un trasformatore di corrente","current_transformers_container_grid_code_phase_modal_title":"Avvertenza: Il numero di trasformatori di corrente non corrisponde all\'indicazione di fase del codice rete","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Avvertenza: Il numero di trasformatori di corrente non corrisponde all\'indicazione di fase del codice rete per più contatori","current_transformers_container_grid_code_phase_multiple_warnings_message":"Numero inatteso di trasformatori di corrente collegati ai seguenti {numMeters} contatori:","current_transformers_container_grid_code_phase_warning_message":"Numero inatteso di trasformatori di corrente collegati al seguente contatore:","current_transformers_container_grid_code_single_phase_warning":"Il codice rete applicato è monofase. Solitamente i sistemi monofase sono a 1 o 3 fasi. {lb} Si consiglia un numero dispari di trasformatori di corrente (1 o 3).","current_transformers_container_grid_code_split_phase_warning":"Il codice rete applicato è bifase. Solitamente i sistemi bifase dispongono di un trasformatore di corrente su ciascun conduttore sotto tensione. {lb} Si consiglia un numero pari di trasformatori di corrente (2 o 4).","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"È necessario un contatore Neurio per inverter fotovoltaici Powerwall+ per attivare un contatore con ricavi energetici (RGM).","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Selezionare Sì se misura un inverter fotovoltaico Powerwall+. Selezionare No se misura un inverter fotovoltaico che non fa parte di un gruppo Powerwall+.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"Misura un inverter Powerwall+?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Assicurati che l\'etichetta nel TA sia rivolta verso l\'inverter solare","current_transformers_container_label_modal_title":"Spiegazione delle etichette","current_transformers_container_load_ct_ensure":"Quando stai configurando il TA \\"carico\\", assicurati che tutti i carichi siano misurati e che i carichi backup e non backup siano misurati separatamente","current_transformers_container_load_ct_modal_title":"TA carico","current_transformers_container_load_ct_recommended":"La configurazione a \\"Carico\\" è consigliata solamente quando non è possible configurare come \\"Sito\\"","current_transformers_container_meter_id":"Contatore {id}","current_transformers_container_no_load_and_site_ct":"Non ci possono essere contatori configurati come Carico e Sito","current_transformers_container_no_loads_doubled_solar_ct_bullet":"Non ci possono essere carichi prima del TA","current_transformers_container_no_site_or_load_warning":"TA DI CARICO O SITO NON CONFIGURATI","current_transformers_container_no_solar_ct_warning":"NESSUN TRASFORMATORE DI CORRENTE SOLARE CONFIGURATO","current_transformers_container_no_solar_inverter_warning":"NESSUN INVERTER FOTOVOLTAICO CONFIGURATO","current_transformers_container_phase_usages_modal_title":"Attenzione: Il numero di TA non combacia con le impostazioni di fase","current_transformers_container_phase_usages_warning":"Il numero di fasi configurate non combacia con il numero di TA configurati. {lb} {num} TA sono raccomandati","current_transformers_container_phase_usages_warning_message":"Numero di TA non atteso associati al seguente meter:","current_transformers_container_power_amperage_configure_warning":"Il trasduttore {type} necessita di una misura positiva di potenza e di corrente per funzionare correttamente.","current_transformers_container_power_factor_explanation":"Fattore di potenza (Potenza Reale / Potenza Apparente). Mostrato solo per livelli di potenza elevati. Per comuni carichi resistivi, il fattore di potenza dovrebbe essere prossimo a 1. Un fattore di potenza basso potrebbe indicare che un trasformatore di corrente non è installato correttamente oppure che sono presenti notevoli carichi capacitivi/induttivi.","current_transformers_container_power_factor_out_of_range_warning":"La misurazione del fattore di potenza è fuori dall\'intervallo previsto. {lb} Fattore di potenza misurato: {powerFactor} PF {lb} Il contatore potrebbe essere installato non correttamente o su una fase non corretta oppure sono presenti carichi capacitivi/induttivi.","current_transformers_container_system_test_configured_incorrect":"Avvertenza: Il trasformatore di corrente {id} potrebbe essere configurato non correttamente","current_transformers_container_title":"Trasduttori di Corrente","current_transformers_container_voltage_out_of_range_warning":"La tensione è fuori intervallo. {lb} Tensione misurata: {volts} V {lb} La tensione misurata di questo trasformatore di corrente è fuori dal normale intervallo di funzionamento.","current_transformers_container_volts_explanation":"Tensione tra fase e neutro sulla presa di tensione associata al trasformatore di corrente","current_transformers_container_watts_explanation":"Potenza calcolata come corrente che passa attraverso il trasformatore di corrente moltiplicata per la tensione sulla presa di tensione associata","customer_installation_view_email_label":"E-MAIL CLIENTE","customer_installation_view_email_placeholder":"E-mail","customer_registration_view_address_label":"INDIRIZZO","customer_registration_view_address_placeholder":"Indirizzo","customer_registration_view_city_label":"CITTÀ","customer_registration_view_city_placeholder":"Città","customer_registration_view_clear_form":"Cancella il modulo","customer_registration_view_country_label":"Stato","customer_registration_view_customer_information":"INFORMAZIONI DEL CLIENTE","customer_registration_view_email_address_label":"E-MAIL","customer_registration_view_email_address_label_confirmation":"REINSERIRE E-MAIL","customer_registration_view_email_placeholder":"E-mail","customer_registration_view_family_name_label":"COGNOME","customer_registration_view_family_name_warning":"Inserire il cognome del cliente.","customer_registration_view_given_name_label":"NOME","customer_registration_view_given_name_warning":"Inserire il nome del cliente.","customer_registration_view_homeowner_family_name_placeholder":"Cognome","customer_registration_view_homeowner_given_name_placeholder":"Nome","customer_registration_view_installation_address":"INDIRIZZO DI INSTALLAZIONE","customer_registration_view_phone_number_label":"TELEFONO","customer_registration_view_phone_placeholder":"Telefono","customer_registration_view_skip_explanation":"Se saltato, il proprietario dovrà eseguire la registrazione attraverso l\'app mobile Tesla prima di ottenere l\'accesso al sistema.","customer_registration_view_state_placeholder":"Regione","customer_registration_view_state_province_region_label":"STATO/PROVINCIA/REGIONE","customer_registration_view_zip_label":"CAP","customer_registration_view_zip_placeholder":"CAP","diagnostic-alert-affected-children":"Componenti interessati ({count})","diagnostic-alerts-missing-alert-information":"Informazioni su avvisi mancanti","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Articolo Toolbox","diagnostic-alerts-toolbox-article-external-link":"Collegamenti esterni","diagnostic_alert_alert_name":"Nome avviso","diagnostic_alert_alert_type":"Tipo di avviso","diagnostic_alert_audience":"Pubblico","diagnostic_alert_clear_condition":"Azzera condizione","diagnostic_alert_description":"Descrizione","diagnostic_alert_display_name":"Nome visualizzato","diagnostic_alert_id":"ID avviso","diagnostic_alert_impact_category":"Categoria impatto","diagnostic_alert_latching":"Bloccaggio","diagnostic_alert_max":"Max","diagnostic_alert_min":"Min.","diagnostic_alert_name":"Nome","diagnostic_alert_node":"Nodo","diagnostic_alert_offset":"Compensazione","diagnostic_alert_payload_signals":"Segnali payload","diagnostic_alert_potential_impact":"Possibile impatto","diagnostic_alert_safety_reason":"Motivi di sicurezza","diagnostic_alert_scale":"Scala","diagnostic_alert_set_condition":"Imposta condizione","diagnostic_alert_signal_name":"Nome segnale","diagnostic_alert_signoff":"Esci","diagnostic_alert_sna_value":"Valore SNA","diagnostic_alert_supplier_dtc_name":"Nome DTC fornitore","diagnostic_alert_uiID":"ID UI","diagnostic_alert_units":"Unità","diagnostic_alert_urgent":"Urgente","diagnostic_category_item_view_alerts_description":"Avvisi sito, componente e sottocomponente","diagnostic_category_item_view_download_results":"SCARICA RISULTATI","diagnostic_category_item_view_internal_comms_description":"Controlla la connessione a tutti i dipositivi","diagnostic_category_item_view_internal_comms_title":"Comunicazione del dispositivo","diagnostic_category_item_view_live_results":"RISULTATI IN TEMPO REALE","diagnostic_category_item_view_metering_description":"Controllare connessioni contatore","diagnostic_category_item_view_metering_title":"Misurazioni","diagnostic_category_item_view_networking_description":"Controlla la connessione alla rete","diagnostic_category_item_view_networking_title":"Reti","diagnostic_category_item_view_no_selected_tests":"Nessun test selezionato","diagnostic_category_item_view_rerun_selected":"Esegui nuovamente {num} test selezionati","diagnostic_category_item_view_rerun_selected_test":"Fai ripartire i test selezionati","diagnostic_category_item_view_run_selected":"Esegui {num} test selezionati","diagnostic_category_item_view_run_selected_test":"Fai partire i test selezionati","diagnostic_category_item_view_select_all_tests":"Seleziona tutto","diagnostic_category_item_view_self_tests_description":"Avviare i test di carica/scarica sul sistema","diagnostic_category_item_view_self_tests_title":"Autodiagnosi","diagnostic_category_item_view_toggle_all_tests":"Attiva/disattiva tutto","diagnostic_input_view_blocks_label":"BLOCCHI","diagnostic_input_view_individual_test_name_label":"NOME TEST INDIVIDUALE","diagnostic_input_view_max_allowed_charge_power_label":"POTENZA MAX DI CARICA CONSENTITA","diagnostic_input_view_max_allowed_discharge_power_label":"POTENZA MAX DI SCARICA CONSENTITA","diagnostic_test_enable_line":"Pulsante laterale","diagnostic_test_item_view_ac_self_test_description":"Autodiagnosi potenza CA","diagnostic_test_item_view_ac_self_test_description_2":"Esegue una sequenza di perdita di potenza nel sistema CA. I sistemi Powerpack utilizzano le impostazioni \\"MAX_ALLOWED_POWER\\". Impostarle 0 per i sistemi Megapack e Supercharger.","diagnostic_test_item_view_dc_self_test_description":"Autodiagnosi potenza CC","diagnostic_test_item_view_dc_self_test_description_2":"Esegue una sequenza di test sul sistema CC, compresi i controlli termici.","diagnostic_test_item_view_enable_line_description":"Controlla che il tasto di accensione sia su \\"I\\" su ogni Powerwall","diagnostic_test_item_view_enable_line_resolution":"Spegni e accendi l\'interruttore laterale e prova di nuovo","diagnostic_test_item_view_individual_self_test_description":"Selezionare da un elenco di autodiagnosi disponibili sui controller bus configurati.","diagnostic_test_item_view_meter_comms_description":"Esecuzione ping comunicazioni contatore","diagnostic_test_item_view_network_connection_description":"Controlla la connessione a Internet e ai server Tesla","diagnostic_test_item_view_network_connection_resolution":"Riconfigurare reti","diagnostic_test_item_view_resolution_generic_text":"Riconfigurare {name} e riprovare","diagnostic_test_item_view_step_canceled":"Il test è stato cancellato dall\'utente","diagnostic_test_item_view_step_config_update_status":"Controlla lo stato di connessione al server Tesla","diagnostic_test_item_view_step_google_http":"Ping Google HTTP","diagnostic_test_item_view_step_google_https":"Ping Google HTTPS","diagnostic_test_item_view_step_hermes_status":"Controlla lo stato di connessione al server Tesla","diagnostic_test_item_view_step_results_ip_address":"INDIRIZZO IP","diagnostic_test_item_view_step_results_subnet_mask":"Subnet","diagnostic_test_item_view_table_header_key":"Identificativo","diagnostic_test_item_view_table_header_name":"Punto","diagnostic_test_item_view_table_header_value":"Valore","diagnostic_test_meter_comms":"Comunicazioni contatore","diagnostic_test_network_connection":"Connessione alla rete","diagnostics_composite_view_no_tests_found":"Nessun test disponibile","diagnostics_composite_view_run_all_selected_tests":"Fai partire tutti i test","diagnostics_container_industrial_disruptive_tests_description":"I seguenti test attiveranno la ventola e gli impianti termici, che produrranno rumore. Prevedere circa 30 kW di assorbimento per inverter. I seguenti test potrebbero inoltre interrompere il normale funzionamento del sistema:","diagnostics_container_required_inputs_description":"I seguenti test richiedono ulteriori input:","diagnostics_container_residential_disruptive_tests_description":"I seguenti test potrebbero interrompere la normale operatività del Gateway e del Powerwall:","diagnostics_container_stop_test_title":"Stop {name} Test?","diagnostics_container_subtitle":"Strumento di diagnostica problemi di installazione","diagnostics_container_tests_running":"Test di diagnostica in esecuzione","diagnostics_container_title":"Diagnostica","disabled_reason_battery_breaker_open":"L\'interruttore batteria è aperto","disabled_reason_checking_firmware_update":"Controllo aggiornamenti firmware","disabled_reason_config":"Disattivato dal file di configurazione","disabled_reason_excessive_voltage_drop":"Caduta di tensione eccessiva","disabled_reason_firmware_update_failed":"Aggiornamento firmware non riuscito","disabled_reason_gridcode_write_failed":"Configurazione del codice di rete non riuscita","disabled_reason_user_requested":"Disattivata su richiesta dell\'utente","dropdown_default_placeholder":"Digita...","dropdown_list_view_not_listed_label":"Non elencato: \\"{searchText}\\"","dropdown_list_view_select_all":"Seleziona tutto","dropdown_list_view_select_field":"Per favore selezionare un campo","dropdown_list_view_show_complete":"MOSTRA LISTA COMPLETA","dropdown_list_view_show_searchable":"MOSTRA LISTA CON RICERCA","enumeration_warning_details_miswired_12v":"Quando si collegano due unità Powerwall+, i 12V devono essere applicati solo sull\'unità collegata al Gateway/Backup Switch. Rimuovere 12V da tutte le successive unità Powerwall+ nella catena, quindi selezionare Riscansiona dispositivi (in fondo a questa pagina) per eliminare questa avvertenza.","enumeration_warning_details_multiple_controllers_gateway":"Scollegare il cavo di alimentazione dei controller sito di tutte le unità Powerwall+ situati in alto a destra nel gruppo fotovoltaico.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Scollegare il cavo di alimentazione del controller sito di Expansion Powerwall+ (non collegato al Backup Switch) situato in alto a destra nel gruppo fotovoltaico.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Scollegare il cavo di alimentazione dei controller sito di tutte le unità Powerwall+ situati in alto a destra nel gruppo fotovoltaico. Mettere in servizio il sistema collegandosi al Backup Gateway.","enumeration_warning_details_multiple_controllers_unknown":"In una configurazione con più unità Powerwall+ collegate tramite CAN, deve essere alimentato un solo controller sito.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Deve essere attivo un solo controller del sito. Quando si usa un Backup Gateway, scollegare tutti i controller Powerwall+. Quando si usa un interruttore Backup, scollegare tutti i controller Powerwall+ tranne uno. L\'esecuzione della procedura guidata è disattivata finché è attivo solo un controller del sito.","enumeration_warning_title_miswired_12v":"Errore cablaggio 12 V","enumeration_warning_title_multiple_controllers":"Sono attivi più controller sito","error_details":"Dettagli di errore","error_item_view_check_network":"Controllare la connessione di rete.","error_item_view_disconnected":"Disconnesso dal Gateway. Controllare la connessione di rete e {refresh}","error_item_view_forgot_password":"Clicca per resettare la password","error_item_view_refresh_browser":"Aggiornare il browser.","error_item_view_try_logging_in_again":"Provare a eseguire nuovamente l\'accesso.","ethernet_view_backup_dns_label":"ESEGUI BACKUP SERVER DNS","ethernet_view_backup_dns_warning":"Server DNS di backup valido","ethernet_view_configuration_label":"CONFIGURAZIONE","ethernet_view_dhcp_label":"DHCP (indirizzo dinamico)","ethernet_view_gateway_label":"GATEWAY (OPZ.)","ethernet_view_gateway_warning":"IP (Router) Gateway valido","ethernet_view_ip_address_label":"INDIRIZZO IP","ethernet_view_ip_address_warning":"Indirizzo IP valido","ethernet_view_not_available":"Non disponibile","ethernet_view_primary_dns_label":"SERVER DNS PRINCIPALE","ethernet_view_primary_dns_warning":"Server DNS principale valido","ethernet_view_static_label":"Indirizzo statico","ethernet_view_subnet_mask_label":"MASCHERA SUB-NET (OPZ.)","ethernet_view_subnet_mask_warning":"Subnet mask valida","factory_reset_message":"Verrà ripristinato lo stato predefinito dell\'unità configurato da Tesla. L\'operazione non può essere annullata. Prima di poterla utilizzare, un installatore professionista dovrà mettere nuovamente in servizio l\'unità. Potrebbe essere necessario doversi ricollegare alla rete WiFi dell\'unità.","field_false":"Falso","field_true":"Vero","follower_powerwall_message":"Questa unità Powerwall è controllata da {leader}","follower_powerwall_title":"Powerwall secondario","form_legend_text":"Indica un campo obbligatorio","generation_container_connecting_status":"In avvio","generation_container_connection":"Inverter {id} Connessione","generation_container_connection_summary":"Durante questa procedura di connessione, è possibile disconnettersi temporaneamente dalla rete. {lb} Assicurarsi di riconnettersi alla rete corretta. Questo può richiedere fino a 3 minuti.","generation_container_subtitle":"Aggiungi qui informazioni su inverter solari e gruppi elettrogeni","generation_container_title":"Generazione","generator_item_view_disconnect_type_label":"TIPO DI INTERRUTTORE ALIMENTAZIONE","generator_item_view_generator":"GRUPPO ELETTROGENO {id}","generator_item_view_manufacturer_label":"COSTRUTTORE (OPT)","generator_item_view_model_label":"MODELLO","generator_item_view_serial_label":"NUMERO SERIALE","generator_item_view_sustained_power_label":"POTENZA IN FUNZIONAMENTO CONTINUO","generator_view_add_generator":"AGGIUNGI GRUPPO ELETTROGENO","grid_code_container_off_grid_confirmation":"Il sistema è disconnesso dalla rete?","grid_code_container_off_grid_detected":"Il sistema è disconnesso dalla rete. Controllare che è l\'impostazione corretta.","grid_code_container_off_grid_warning":"{warning}: Non è possibile determinare se il sistema è disconnesso dalla rete. Un\'impostazione incorretta potrebbe causare danni al sistema.","grid_code_container_results":"Risultati del rilevamento dello stato di Rete","grid_code_container_retrieving":"Caricamento delle Tipologie di Rete","grid_code_container_saving":"Salvataggio codice rete","grid_code_container_subtitle":"Basato sulla posizione e lettura dai contatori, trova la configurazione più adatta alla tua installazione","grid_services_view_grid_services":"Servizi di rete","heading_change_password":"Cambia password","help_view_how_password":"Trovare la password nel Gateway","help_view_how_password_description":"Apri la porta del Gateway. La password è posizionata nell\'etichetta","help_view_how_serial_number":"Individuazione del numero di serie su un gateway non di backup","help_view_how_serial_number_backup":"Individuazione del numero di serie su un gateway di backup","help_view_how_serial_number_backup_description":"Apertura porta del gateway di backup. Il numero di serie inizia con un \\"(S):\\"","help_view_how_serial_number_description":"Apertura della porta gateway. Il numero di serie inizia con un \\"(S):\\"","help_view_how_to_enable_line":"Attivazione/disattivazione dell\'unità Powerwall","help_view_how_to_enable_line_description":"Disattivare quindi attivare l\'unità Powerwall tramite l\'interruttore. In caso di più sistemi Powerwall, è sufficiente agire su un solo interruttore","hierarchy_charger":"Gruppo caricatore {name}","hierarchy_chinv":"VFD per compressore e riscaldatore (CHINV)","hierarchy_converter":"Convertitore CC-CC (STARC)","hierarchy_inverter":"Gruppo batterie {name}","hierarchy_mega_thermal_controller":"Controller termico (MPTHC)","hierarchy_missing_post":"Colonnina mancante","hierarchy_mpbc":"Gruppo batterie {name}","hierarchy_part_number":"Numero parte","hierarchy_pod":"Unità modulare","hierarchy_pods_reporting":"Reporting unità modulari","hierarchy_post":"Colonnina (LCC)","hierarchy_posts":"Colonnine","hierarchy_power_stage":"Powerstage","hierarchy_power_stages":"Powerstage","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Quadro di gestione batterie (QBMS)","hierarchy_qhvp":"Processore ad alta tensione (QHVP)","hierarchy_scthcs":"Controller termici","hierarchy_serial_number":"Numero di serie","hierarchy_sitemaster":"Sitemaster {name}","hierarchy_starcs":"Convertitori DC-DC","hierarchy_stitch":"CC-CC centralina elettronica (STITCH)","hierarchy_thermal_controller":"Controller termico (SCTHC)","higher_order_login_login_required":"Accesso necessario","higher_order_login_title":"Cominciamo.","home_container_caution":"⚠️ Attenzione","home_container_caution_deenergize":"Per disattivare l\'alimentazione del sistema in sicurezza, spegnere tutti gli interruttori dell\'unità Powerwall.","home_container_caution_energized":"Se le stringhe del fotovoltaico sono collegate, il sistema potrebbe rimanere alimentato.","home_container_inactive_meter":"Dati del contatore scaduti","home_container_inactive_meter_description":"Controlla {type} la connessione del meter","home_container_inactive_meter_timestamp":"Ultima lettura del contatore alle: {timestamp}","home_container_login_required":"Accesso necessario","home_container_missing_meter":"Il contatore è mancante","home_container_positive_meter":"Avvertenza: {type} contantore potrebbe essere configurato in modo errato","home_container_positive_meter_description":"{type} contantore richiede potenza e amperaggio positivi per essere configurato correttamente.","home_container_powerwall_error":"Errore di Sistema Powerwall","home_container_powerwall_start_error":"Impossibile avviare il sistema: {reason}","home_container_site_controller_error":"Errore di sistema Controller sito","home_container_sitemaster_alternative":"Nota: Normalmente il sistema va disattivato posizionando su OFF gli interruttori sul lato destro dei Powerwall e aprendo i relativi interruttori di circuito.","home_container_sitemaster_confirm":"Clicca Sí a fondo pagine se sei sicuro che il sistema deve essere fermato.","home_container_sitemaster_confirm_industrial":"Arrestare il sistema?","home_container_sitemaster_confirm_wizard":"Per poter eseguire la procedura guidata è necessario arrestare il sistema. Procedere e arrestare il sistema?","home_container_sitemaster_header_warning":"{warning} Questo comando fermerà il Powerwall e il normale funzionamento del sistema.","home_container_sitemaster_header_warning_industrial":"{warning} Il sistema è in uno stato tale che Tesla sconsiglia di arrestarlo. Motivo: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} Il sistema è in uno stato tale che Tesla sconsiglia di arrestarlo. Motivo: \\"{reason}\\"","home_container_sitemaster_logging":"Mentre il sistema è spento, la raccolta dati verrà interrotta","home_container_sitemaster_reset":"Dopo aver fermato il sistema, si prega di cliccare il pulsante \\"Fai Partire...\\" per far ripartire il sistema.","home_container_sitemaster_update":"Se c\'è un aggiornamento in corso, verrà interrotto","home_container_start_powerwall":"Fai Partire il Sistema Powerwall","home_container_start_system_button":"AVVIA SISTEMA","home_container_stop_powerwall":"Ferma il Sistema Powerwall","home_container_stop_system_button":"ARRESTA SISTEMA","home_view_compliance":"COMPATIBILITÀ","home_view_download_all_logs":"Scarica tutti i rapporti","home_view_download_logs":"SCARICA RAPPORTI","home_view_download_logs_description_one":"Verrà scaricato un file compresso contenente rapporti di sistema che possono essere utili per diagnosticare i problemi del sistema operativo, del software e di rete.","home_view_download_logs_description_three":"I rapporti sono firmati e crittografati e devono essere inviati a Tesla Energy Service per essere esaminati.","home_view_download_logs_description_two":"È particolarmente utile quando il Gateway non riesce a connettersi alla rete ed è necessaria un\'avanzata risoluzione del problema.","home_view_login":"ACCESSO","home_view_logout":"DISCONNESSIONE","home_view_run_wizard":"INIZIA GUIDA","input_accept":"Accetto","input_confirm":"Confermo di aver preso visione di tutte le avvertenze del sistema.","input_consent":"Dò il mio consenso","input_decline":"Non accetto","input_no_consent":"Non dò il mio consenso","input_title_email":"Si prega di inserire un indirizzo e-mail valido: nome@nome.dominio","installation_container_relay_section_modal_title":"Relè bassa tensione del Gateway","installation_container_residual_current_device_modal_title":"Requisito di installazione per interruttori differenziali del sito","installation_container_subtitle":"Informazioni su installatore e sito","installation_container_sync_relay_usage_open_off_grid":"Aprire relè quando fuori rete","installation_container_title":"Dettagli dell\' Installazione","installation_problem_detail_site_shutdown_0":"Per riattivare il sistema:","installation_problem_detail_site_shutdown_1":"Spegnere tutti gli interruttori ON/OFF delle unità Powerwall","installation_problem_detail_site_shutdown_2":"Chiudere gli E-stop","installation_problem_detail_site_shutdown_3":"Assicurarsi che i ponticelli per lo spegnimento rapido siano correttamente installati","installation_problem_detail_site_shutdown_4":"Controllare il cablaggio del circuito di spegnimento.","installation_problem_detail_title_site_shutdown":"Circuito di spegnimento del sito attivato","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Circuito di spegnimento del sito attivato da uno spegnimento rapido di Powerwall+","installation_problem_details_pvacs_with_no_solar_rgm":"I contatori solari sono necessari solo quando si misurano gli inverter fotovoltaici che non fanno parte di un gruppo Powerwall+. I contatori che misurano l\'inverter Powerwall+ devono essere contrassegnati come tali nella pagina Trasformatori di corrente.","installation_problem_details_too_few_solar_rgm":"Il numero di trasformatori di corrente che misurano l\'inverter fotovoltaico Powerwall+ deve corrispondere al numero di inverter fotovoltaici Powerwall+. Eseguire la procedura guidata, associare il contatore Neurio se necessario e adattare la configurazione dei TA nella pagina Trasformatori di corrente.","installation_problem_details_too_many_solar_rgm":"Il numero di trasformatori di corrente che misurano l\'inverter fotovoltaico Powerwall+ deve corrispondere al numero di inverter fotovoltaici Powerwall+. Eseguire la procedura guidata e adattare la configurazione dei TA nella pagina Trasformatori di corrente.","installation_problem_title_pvacs_with_no_solar_rgm":"Il contatore solare non misura l\'inverter Powerwall+. È corretto?","installation_problem_title_site_shutdown":"Circuito di spegnimento del sito attivato. Tutte le unità Powerwall e gli inverter fotovoltaici Powerwall+ sono disattivati.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Circuito di spegnimento del sito attivato da uno spegnimento rapido di Powerwall+ Tutte le unità Powerwall e gli inverter fotovoltaici Powerwall+ sono disattivati.","installation_problem_title_too_few_solar_rgm":"Troppo pochi contatori solari misurano l\'inverter Powerwall+","installation_problem_title_too_many_solar_rgm":"Troppi contatori solari misurano l\'inverter Powerwall+","installation_view_add_on_solar":"Estensione","installation_view_additional_connections_label":"COLLEGAMENTI AGGIUNTIVI","installation_view_back_wiring":"Retro","installation_view_backup_configuration_label":"CONFIGURAZIONE DI BACKUP","installation_view_basement_location":"Cantina","installation_view_company_label":"DITTA","installation_view_company_placeholder":"Nome della ditta","installation_view_conditioned_space_location":"Spazio confinato","installation_view_existing_solar":"Esistente","installation_view_floor_mounting":"Pavimento","installation_view_garage_location":"Garage","installation_view_home_label":"CABLAGGIO CASA","installation_view_location_label":"LUOGO DELL\' INSTALLAZIONE POWERWALL ","installation_view_modem_ethernet":"Modem cellulare via Ethernet?","installation_view_modem_wifi":"Modem cellulare via Wi-Fi?","installation_view_mounting_label":"MONTAGGIO DEL POWERWALL","installation_view_na_backup_configuration":"Non applicabile","installation_view_new_solar":"Nuovo","installation_view_none_solar":"Nessuno","installation_view_outdoor_location":"Esterno","installation_view_pad_mounting":"Basamento","installation_view_partial_home_backup_configuration":"Parte dell\'abitazione","installation_view_phone_label":"TELEFONO","installation_view_phone_placeholder":"Numero telefonico dell\'installatore","installation_view_powerline_ethernet":"Powerline via Ethernet?","installation_view_pv_panel":"Pannello fotovoltaico","installation_view_relay_enabled":"Aprire relè quando fuori rete","installation_view_relay_label":"RELÈ BASSA TENSIONE GATEWAY","installation_view_relay_options_modal_content":"Quando fuori rete o connesso a un\'altra fonte di tensione CA, questo relè sarà chiuso. {lb1} Quando fuori rete, questo relè sarà aperto. {lb1} Ad esempio, può essere usato per attivare un impianto di aria condizionata quando collegato alla rete, quindi per disattivarlo quando fuori rete per impedire all\'elevata corrente di spunto associata di sovraccaricare le unità Powerwall.","installation_view_relay_section_modal_content":"Il Gateway ha un relè integrato la cui attivazione e disattivazione sono controllate in base allo stato del sistema. {lb1} Può essere utilizzato per controllare un dispositivo esterno, ad esempio un carico o una fonte di energia secondaria. {lb1} Sul Backup Gateway 1, usare i pin 1 e 2 sul connettore ausiliario (connettore grande Phoenix verde a 9 pin). {lb1} Sul Backup Gateway 2, usare i pin 3 e 4 (GSO/GSI) sul connettore ausiliario (connettore grande Phoenix verde a 5 pin). {lb1} Questo relè ha una potenza nominale di 60 Volt/2 Amp ed è comunemente utilizzato con circuiti da 12 V o 24 V. {lb1} Per ulteriori informazioni, consultare le relative note sulla distribuzione del carico e sull\'applicazione.","installation_view_residual_current_device":"L\'interruttore differenziale è stato installato a monte del Gateway?","installation_view_residual_current_device_modal_content":"Per alcune installazioni quali reti con configurazione TT, potrebbero essere necessari interruttori differenziali (RCD) a livello di sito. {lb1}{lb2} Per ridurre il rischio di scatto degli interruttori durante il funzionamento fuori rete, Tesla raccomanda di assicurare che tutti gli interruttori differenziali a monte siano temporizzati (di tipo S) o di spostare l\'interruttore differenziale del sito dopo il contattore del Gateway, se possibile. {lb1}{lb2} Per ulteriori informazioni, consultare la Nota di applicazione protezione da guasti e RCD.","installation_view_satellite_ethernet":"Internet satellitare via Ethernet?","installation_view_satellite_wifi":"Internet satellitare via Wi-Fi?","installation_view_side_wiring":"Laterale","installation_view_solar_label":"INSTALLAZIONE DELL\'IMPIANTO FOTOVOLTAICO","installation_view_solar_panels":"Pannelli fotovoltaici","installation_view_solar_roof":"Solar Roof","installation_view_solar_type_label":"TIPO DI INSTALLAZIONE IMPIANTO FOTOVOLTAICO","installation_view_solarglass":"Solarglass","installation_view_stack_kit":"È installato il Powerwall Stack Kit?","installation_view_type_commercial":"Commerciale","installation_view_type_label":"INFORMAZIONI SULL\'INSTALLAZIONE","installation_view_type_perm_off_grid":"Permanentemente fuori rete","installation_view_type_residential":"Residenziale","installation_view_wall_mounting":"Parete","installation_view_whole_home_backup_configuration":"Tutta l\'abitazione","installation_view_wifi_extender":"Ripetitore WiFi?","installation_view_wiring_label":"CABLAGGIO DEL POWERWALL","inverter_test_view_accuracy_magnitude":"Precisione della soglia","inverter_test_view_accuracy_time":"Precisione del tempo","inverter_test_view_complete":"Completo","inverter_test_view_current_magnitude":"Valore attuale","inverter_test_view_fail":"Fallire","inverter_test_view_na":"N/A","inverter_test_view_not_run":"Non eseguito","inverter_test_view_pass":"Passare","inverter_test_view_running":"In esecuzione","inverter_test_view_set_magnitude":"Valore impostato","inverter_test_view_set_time":"Tempo impostato","inverter_test_view_test_description":"Esecuzione autotest Inverter","inverter_test_view_test_name_all":"Tutti i test","inverter_test_view_test_name_over_freq_stage_one":"Sovrafrequenza del 1˚ Stadio","inverter_test_view_test_name_over_freq_stage_two":"Sovrafrequenza del 2˚ Stadio","inverter_test_view_test_name_over_volt_one":"Sovratensione del 1˚ Stadio","inverter_test_view_test_name_over_volt_two":"Sovratensione del 2˚ Stadio","inverter_test_view_test_name_under_freq_stage_one":"Sottofrequenza del 1˚ Stadio","inverter_test_view_test_name_under_freq_stage_two":"Sottofrequenza del 2˚ Stadio","inverter_test_view_test_name_under_volt_one":"Sottotensione del 1˚ Stadio","inverter_test_view_test_name_under_volt_two":"Sottotensione del 2˚ Stadio","inverter_test_view_timestamp":"Tempo attuale","inverter_test_view_trip_magnitude":"Soglia di intervento","inverter_test_view_trip_time":"Tempo di intervento","inverter_test_view_warning":"Nota: il test dell\'inverter può richiedere fino a 20-30 minuti per inverter.","label_fail":"Fallito","label_inconclusive":"Senza risoluzione","label_pass":"Passato","legal_container_customer_policy_subtitle":"Deve essere completata dal proprietario dell\'abitazione o sito commerciale.","legal_container_customer_policy_title":"Informativa sulla Privacy & Garanzia per Utenti Tesla","legal_container_no_meters_warning":"NON CI SONO CONTATORI CONFIGURATI","legal_container_no_powerwalls_warning":"NON CI SONO POWERWALL CONFIGURATI","login_type_customer":"Cliente","login_type_engineer":"Ingegnere","login_type_installer":"Installatore","login_view_cancel_login_auth":"Annulla accesso","login_view_change_forgot_password":"PASSWORD MODIFICATA O DIMENTICATA","login_view_compliance":"COMPATIBILITÀ","login_view_customer_email_placeholder":"E-mail cliente","login_view_email":"E-MAIL","login_view_email_placeholder":"Indirizzo e-mail dell\'installatore","login_view_forgot_password":"PASSWORD DIMENTICATA","login_view_forgot_password_login_type":"Selezionare il tipo di accesso","login_view_language_label":"LINGUA","login_view_login_type_label":"TIPO DI ACCESSO","login_view_password_placeholder":"Inserire la password","login_view_start_login_auth":"AVVIA PROCEDURA DI ACCESSO","login_view_start_login_auth_how_to_enable_line_description":"Per accedere, spegnere e riaccendere l\'interruttore laterale di attivazione dell\'unità Powerwall. In caso di più sistemi Powerwall, è sufficiente agire su un solo interruttore","login_view_username":"NOME UTENTE","login_view_username_placeholder":"Nome utente","login_warning_view_expand":"Se la Configurazione Guidata non inizia, {click}","login_warning_view_firmware_update":"Quando l\'aggiornamento del firmware in corso","login_warning_view_heading":"{warning} L\'avvio della procedura guidata interrompe il funzionamento a batteria.","login_warning_view_protect_system":"Per proteggere il sistema, la Configurazione Guidata non sarò avviata","login_warning_view_stop_operation":"Forza avvio della Configurazione Guidata (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Sono attualmente supportati solo browser web Chrome e Safari.","login_warning_view_system_force_launch":"Se vuoi far partire la Configurazione Guidata e fermare l\'operazione del sistema, selezione \\"Forza avvio della Configurazione Guidata\\".","login_warning_view_system_off_grid":"Quando la rete elettrica disconnessa","login_warning_view_warning_click":"clic per dettagli","mater_item_view_bad_barcode":"Codice a barre scansionato non corretto","mater_item_view_barcode_scan_failed":"Scansione del codice a barre non riuscita","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Batteria","meter_aggregate_type_load":"Carico","meter_aggregate_type_site":"Sito","meter_aggregate_type_solar":"Fotovoltaico","meter_container_add_meter_error":"Verificando Contatore...","meter_container_add_meter_status":"Aggiungendo contatore...","meter_container_authorizing_status":"Autorizzando...","meter_container_decode":"Impossibile leggere numero di serie dall\'immagine.","meter_container_detecting_status":"Identificando Contatori RS-485","meter_container_failed_status":"Problema nell\'aggiungere Contatore","meter_container_reconnecting_status":"In riconnessione...","meter_container_skip_title":"Nessun contatore messo in funzione. Continuare?","meter_container_starting_status":"In avvio...","meter_container_subtitle":"Per collegarli, imposta l\'ID breve e il numero di serie dei meter / contatori. Verifica ogni meter appena entra in servizio.","meter_container_subtitle_industrial":"Immettere gli indirizzi IP e le posizioni dei contatori di energia per connettersi. Testare ogni contatore dopo la messa in servizio.","meter_container_success_status":"Contatore ѐ stato aggiunto","meter_container_title":"Contatori","meter_container_unknown_status":"Sconosciuto","meter_container_updating_status":"Aggiornamento del contatore","meter_container_verification":"Verifica del Meter {id}","meter_container_verification_gw1":"Durante la procedura di abbinamento Wi-Fi, si potrebbe essere momentaneamente disconnessi dalla rete Wi-Fi del Gateway. {lb} Assicurarsi di riconnettersi alla rete corretta. Questa procedura potrebbe richiedere fino a 3 minuti.","meter_container_verification_gw2":"La procedura di abbinamento Wi-Fi potrebbe richiedere fino a 3 minuti.","meter_container_verify_meter_error":"Verificando Contatore...","meter_container_verifying_status":"Verificando contatore...","meter_item_view_add_failed":"Impossibile aggiungere il contatore","meter_item_view_add_failed_help":"Controllare l\'ID breve e il numero di serie. Riavviare il contatore e collegarlo quando emette un suono. Se il problema persiste, eliminare il contatore e riprovare.","meter_item_view_advanced_settings":"IMPOSTAZIONI AVANZATE (OPZIONALE)","meter_item_view_battery_ct":"Batteria","meter_item_view_battery_location":"Batteria","meter_item_view_check_meter":"CONTROLLA CONNESSIONE AL CONTATORE {id}","meter_item_view_conductor_location":"Conduttore","meter_item_view_cts":"{count} trasformatori di corrente rilevati","meter_item_view_doubled_solar_location":"Valore fotovoltaico raddoppiato","meter_item_view_generator_location":"Generatore","meter_item_view_ip_address":"INDIRIZZO IP","meter_item_view_load_location":"Carico","meter_item_view_mac_address":"INDIRIZZO MAC","meter_item_view_meter_location":"POSIZIONE DEI CONTATORI","meter_item_view_none_location":"Nessuna","meter_item_view_remote_ip_address_placeholder":"Ad es. 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"Ad es. 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"Ad es. OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"Ad es. 01234","meter_item_view_serial":"NUMERO DI SERIE","meter_item_view_short_id":"ID BREVE","meter_item_view_site_ct":"Sito","meter_item_view_site_location":"Sito","meter_item_view_solar_ct":"Fotovoltaico","meter_item_view_solar_location":"Fotovoltaico","meter_item_view_solar_rgm_location":"Solo ricavo da fotovoltaico","meter_item_view_success":"CONNESSO!","meter_item_view_unable":"CONTATORE NON RAGGIUNGIBILE!","meter_item_view_upgrading":"Il contatore si sta aggiornando","meter_list_view_add":"AGGIUNGI CONTATORE WI-FI","meter_list_view_add_ip":"AGGIUNGI IP CONTATORE","meter_list_view_detect":"AGGIUNGI CONTATORE VIA RS-485","meter_list_view_enable_inverter_readings":"Attiva valori dell\'inverter batteria","meter_list_view_inverter_meter":"CONTATORI INVERTER","meter_list_view_inverter_meter_desc":"Quando attivato e se non sono configurati contatori della batteria, il Controller sito utilizzerà i valori degli inverter della batteria come contatore della batteria.","meter_msa_id":"BACKUP SWITCH {id}","meter_sync_id":"SINCRONIZZA CONTATORE {id}","meter_sync_x_id":"CONTATORE INTERNO PRINCIPALE X (GATEWAY) {id}","meter_sync_y_id":"CONTATORE AUSILIARIO INTERNO Y (GATEWAY) {id}","meter_update_modal_fetch_status_error":"Impossibile recuperare lo stato di aggiornamento del misuratore","meter_update_modal_footer":"L\'aggiornamento dello strumento può richiedere fino a 2 minuti","meter_update_modal_remaining_time":"Tempo rimanente: {seconds} secondi","meter_update_modal_timeout_error":"Il tempo è scaduto durante l\'aggiornamento del contatore","meter_update_modal_title":"L\'aggiornamento del contatore è in corso","meter_validation_container_error":"La convalida contatore non è disponibile mentre è in esecuzione il controller sito.","meter_validation_container_error_placeholder":"Convalida contatore non disponibile: {error}.","meter_validation_container_power_command":"Comando potenza","meter_validation_container_power_start":"Avvio","meter_validation_container_power_stop":"Stop","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Comando potenza reattiva","meter_validation_container_real_power_command":"Comando potenza reale","meter_validation_container_show_per_phase":"Mostra valori per fase","meter_validation_container_title":"Convalida contatore","meter_validation_container_usage":"Inviare un comando potenza e convalidare i dati del contatore. È necessario rimanere in questa pagina per mantenere continuo il comando potenza. Valori negativi indurranno il sistema a caricarsi. Valori positivi indurranno il sistema a scaricarsi.","meter_validation_control_subtitle":"Comando","meter_validation_control_title":"Titolo comando","meter_validation_disable":"Disattiva","meter_validation_loading":"Caricamento","meter_validation_menu":"Menu","meter_validation_reset":"Reset","meter_validation_submit":"Invia","meter_validation_submitting_control":"Invio comando","meter_validation_title":"Convalida contatore","meter_validation_view_apparent_power":"Potenza apparente (kVA)","meter_validation_view_battery_location":"Batteria","meter_validation_view_conductor_location":"Conduttore","meter_validation_view_current":"Corrente (A)","meter_validation_view_doubled_solar_location":"Valore fotovoltaico raddoppiato","meter_validation_view_generator_location":"Generatore","meter_validation_view_inverters":"Inverter ({length})","meter_validation_view_load_location":"Carico","meter_validation_view_meter":"Contatori ({length})","meter_validation_view_none_location":"Nessuna","meter_validation_view_pf":"Fattore di potenza","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Media","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Totale","meter_validation_view_reactive_power":"Potenza reattiva (kVAr)","meter_validation_view_real_power":"Potenza reale (kW)","meter_validation_view_site_location":"Sito","meter_validation_view_solar_location":"Fotovoltaico","meter_validation_view_solar_rgm_location":"Solo ricavo da fotovoltaico","meter_validation_view_voltage":"Tensione (V)","meter_w1_wifi_id":"CONTATORE {id}","meter_w1_wired_id":"CONTATORE CABLATO {id}","meter_w2_wifi_id":"CONTATORE {id}","meter_w2_wired_id":"CONTATORE CABLATO {id}","meter_wifi_id":"CONTATORE {id}","meter_wired_id":"Meter cablato {id}","metrics_aggregate":"Sistema","metrics_apparent_power":"Potenza apparente ({unit})","metrics_battery":"Batteria","metrics_current":"Corrente ({unit})","metrics_meter":"Misurazione","metrics_no_metrics":"Nessuna misurazione da visualizzare.","metrics_power_factor":"Fattore di potenza","metrics_reactive_power":"Potenza reattiva ({unit})","metrics_real_power":"Potenza reale ({unit})","metrics_subtitle":"Misurazioni","metrics_voltage_l_n":"Tensione L-N ({unit})","modal_acknowledge":"AMMETTERE","modal_confirm":"Conferma","modal_exit":"CHIUDI","modal_no":"NO","modal_note":"Nota","modal_ok":"OK","modal_reconfigure":"RICONFIGURA","modal_yes":"SÌ","modbus_container_title":"Interfaccia Modbus","modbus_table_register_address":"Indirizzo","modbus_table_register_name":"Nome","modbus_table_register_type":"Tipo","modbus_table_register_value":"Valore","modbus_table_register_value_decimal":"Valore (decimale)","modbus_table_register_value_hex":"Valore (esadecimale)","msa-off-grid":"Non collegato alla rete","msa-on-grid":"Collegato alla rete","navigation_email":"E-MAIL","network-switch-menu-item":"Switch di rete","network_cellular_configured":"Configurato ma non connesso. Assicurarsi che la rete cellulare sia disponibile e che non siano presenti ostruzioni attorno all\'antenna.","network_connected":"Connesso","network_container_connect_ethernet":"Connessione via Ethernet","network_container_connect_to_internet":"Si prega di attendere mentre il sistema prova una connessione ad Internet.","network_container_connect_wifi":"Connessione a {ssid} in corso","network_container_connect_wifi_description":"Durante questa fase può essere necessaria una riconnessione alla rete dati del gateway per continuare con l\'installazione.","network_container_connman":"Powerwall, tramite gestione di connessioni, ora utilizza la miglior rete per connettersi ai server.","network_container_connman_body":"Per garantire la connessione, configurare tutti i tipi di rete:","network_container_delete_network":"Rimuovere le Reti configurate?","network_container_ethernet_and_wifi_warning":"Configurare le reti Ethernet e Wi-Fi disponibili per garantire connessione","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configurare le reti Ethernet disponibili per garantire connessione","network_container_network_description":"Connetti ad Internet con tutte le reti disponibili.","network_container_network_subtitle":"Rete dati","network_container_no_internet_bullet_four":"Powerwall può trasmettere a Tesla dati sulle prestazioni, dando l\'opportunità ai Tecnici di Supporto di identificare problemi","network_container_no_internet_bullet_four_industrial":"I dispositivi possono inviare dati sulle prestazioni a Tesla, consentendo all\'assistenza tecnica di identificare i problemi.","network_container_no_internet_bullet_one":"La registrazione del Powerwall è trasmessa a Tesla, e attiva la garanzia di 10 anni","network_container_no_internet_bullet_three":"L\'utente può utilizzare l\'applicazione mobile Tesla per monitorare l\'utilizzo energetico e controllare Powerwall","network_container_no_internet_bullet_two":"Powerwall può ricevere aggiornamenti software da remote, permettendo miglioramenti delle prestazioni e nuove funzionalità","network_container_no_internet_bullet_two_industrial":"I dispositivi possono ricevere aggiornamenti del firmware da remoto, consentendo di migliorare le prestazioni e offrire nuove funzionalità","network_container_no_internet_bullet_zero":"È possibile determinare se è necessario un aggiornamento del firmware prima della messa in servizio","network_container_no_internet_no_cell_title":"Se sul sito di installazione è disponibile una connessione a Internet, non saltare questo passaggio. Connettersi al servizio Internet del cliente tramite la rete Ethernet (scelta consigliata) o Wi-Fi.","network_container_no_internet_title":"Se l\'installazione ha disponibile una connessione a Internet, si prega di non ignorare questo passo. Connettere Powerwall al servizio Internet dell\'utente tramite Ethernet (preferito) o Wi-Fi o create una connessione via cellulare.","network_container_no_internet_warning":"Il funzionamento senza una connessione ad Internet potrebbe influenzare i termini della garanzia Powerwall.","network_container_scan_networks":"Scansione delle Reti Wi-Fi","network_container_scan_wifi_disconnect_warning":"Attenzione: La scansione di nuove reti disconnetterà la connessione Wi-Fi.","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"Configurare le reti Wi-Fi disponibili per garantire connessione","network_disabled":"Disattivato","network_disconnected":"Non connesso","network_ethernet_configured":"Configurato ma non connesso. Controllare il collegamento del cavo Ethernet.","network_switches_container_discover_failure":"Ultimo errore individuato: {error}","network_switches_container_discover_switches":"Individua switch di rete","network_switches_container_discovered_label":"Switch di rete individuati","network_switches_container_discovering_stop_button":"Interrompi ricerca","network_switches_container_discovery_switches_running_label":"È in corso l\'individuazione degli switch di rete. Di seguito è possibile interrompere la ricerca.","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"Switch di rete supportati solo sui sistemi industriali.","network_switches_container_password_not_set":"La password non è impostata","network_switches_container_password_set":"La password è impostata","network_switches_container_passwords_error":"Stato impostazione password: {status}","network_switches_container_set_password_label":"Impostare la password su tutti gli switch di rete che utilizzano ancora la password predefinita di fabbrica.\\n Tutte le password saranno impostate sullo stesso valore.","network_switches_container_set_passwords":"Imposta password","network_switches_container_set_passwords_button":"Imposta password","network_switches_container_setting_passwords_button":"Impostazione della password...","network_switches_container_start_discovering_button":"Avvia individuazione","network_switches_container_start_discovery_help":"L\'individuazione degli switch di rete viene eseguita automaticamente e periodicamente ma può essere avviata tramite il pulsante Avvia individuazione.","network_switches_container_subtitle":"Visualizza switch di rete","network_switches_container_title":"Switch di rete","network_view_check_connection":"CONTROLLARE CONNESSIONE AD INTERNET","network_view_connection_failed":"NON CONNESSI!","network_view_connection_success":"SIAMO CONNESSI!","network_view_continue_no_internet":"CONTINUA SENZA CONNESSIONE AD INTERNET","network_view_default_error":"Errore collegamento","network_view_local_network_connected":"Rete locale connessa","network_view_local_network_disconnected":"Errore di rete locale","network_view_tesla_internet_connected":"Servizi Tesla e Internet connessi","network_view_tesla_internet_disconnected":"Errore di connessione ai Servizi Tesla e Internet","network_warning":"Attenzione","network_wifi_configured":"Configurato ma non connesso. Controllare le impostazioni Wi-Fi.","open_meter_validatiion_container_title":"Apri convalida contatore","operation_mode_autonomous":"Modalità autonoma","operation_mode_backup":"Solo ricarica di backup","operation_mode_self_consumption":"Modalità autoconsumo","operation_mode_site_control":"Controllo sito","overview_menu_control_title":"Controllo","overview_menu_diagnostics_title":"Diagnostica","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Connesso","overview_menu_network_no_connection":"Connessione assente","overview_menu_registration_complete":"Completa","overview_menu_registration_incomplete":"Incompleta","overview_menu_registration_pending":"In attesa della connessione ad internet","overview_menu_security_title":"Modifica o reimposta la password","overview_menu_settings_title":"Impostazioni","overview_menu_summary_title":"Riepilogo","overview_menu_system_title":"Sistema","overview_menu_update_title":"Aggiornamento software","overview_menu_view_alerts_event":"Evento","overview_menu_view_alerts_events":"Eventi","overview_menu_view_inverter_title":"Test dell\'inverter","overview_menu_view_network_title":"Rete","overview_menu_view_registration_title":"Registrazione","overview_menu_view_test_title":"Autotest","overview_meter_validation_title":"Convalida contatore","password_generate_error":"Si è verificato un errore durante la generazione di una nuova password. Verificare la connettività e la password corrente e riprovare.","password_generate_help_text":"Immettere la password esistente per generare una nuova password casuale.","password_generate_menu_title":"Cambia password","password_generate_notice":"La password è stata modificata. Registrare la nuova password prima di uscire da questa pagina.","phase_container_detect_timeout":"Controllo di fase scaduto","phase_container_detection_attempt":"Tentativo numero {num}","phase_container_grid_code_validating_modal_title":"Verifica codice di rete","phase_container_grid_compliant_description":"Rete conforme {checkmark}","phase_container_grid_modal_description":"La rete sarà confome in {time} secondi","phase_container_grid_modal_title":"In attesa di conformità di rete","phase_container_modal_description":"Il controllo delle fasi può richeidere fino a 2 minuti per Powerwall","phase_container_modal_title":"Controllo fasi in corso","phase_container_saving_phases_modal_title":"Salvataggio fasi","phase_container_subtitle":"Controlla su quale fase è installato ogni Powerwall e aggiorna lo stato della linea","phase_container_supported_error":"Nessun Powerwall rilevato. Il rilevamento della fase non è supportato.","phase_container_title":"Fase","phase_container_voltage_caution_body":"Tensione non attesa: {voltage}V sono misurati sulla fase {lineNumber}. Controlla che {lineStatus} sia la configurazione esatta per questa fase.","phase_container_warning_body":"Nessuna fase è stata selezionata come backup. In questo modo il sistema non potrà supportare i carichi in caso di blackout","phase_container_warning_modal_header":"Backup disabilitato","phase_line_id":"Fase - {id}","phase_line_item_view_line":"Fase","phase_line_item_view_line_status_backup":"Backup","phase_line_item_view_line_status_configured":"Non Backup","phase_line_item_view_line_status_not_configured":"Non configurato","phase_line_status_backup":"Backup","phase_line_status_configured":"Non Backup","phase_line_status_not_configured":"Non configurato","phase_view_detect":"Controlla le fasi","phase_view_split_phase":"Bifase","power_flow_view_go_off_grid":"DISCONNETTI DALLA RETE","power_flow_view_go_on_grid":"CONNETTI ALLA RETE","power_flow_view_grid_button_disabled_reason":"Per potersi disconnettere dalla rete è necessario avviare il sistema.","power_flow_view_grid_spinner_alt_label":"Transizione del sistema","power_flow_view_start_system":"AVVIA SISTEMA","power_flow_view_stop_system":"ARRESTA SISTEMA","powerwall_container_industrial_no_additional_title":"Nessun gruppo batterie aggiuntive trovato","powerwall_container_industrial_subtitle":"Sono elencati tutti i gruppi batterie autorilevati dal controller del sito. Se il gruppo batterie non è presente, eseguire nuovamente la scansione.","powerwall_container_industrial_subtitle_auto_detection":"Sono elencati tutti i gruppi batterie autorilevati dal controller del sito. Se un Gruppo batterie non è presente nell\'elenco, controllare le apparecchiature di collegamento, compresi i cablaggi, e verificare che i controller bus siano accesi.","powerwall_container_industrial_title":"Gruppo batterie","powerwall_container_industrial_updating":"Verifica gruppi batterie","powerwall_container_no_additional_powerwalls_description":"Si prega di leggere il manuale di installazione per suggerimenti su come risolvere problemi di cablaggio.","powerwall_container_no_additional_powerwalls_title":"Non ho trovato altri Powerwall","powerwall_container_scan_again":"RIPETI SCANSIONE","powerwall_container_scanning":"Scansione in corso","powerwall_container_scanning_for_more":"Scansione ulteriore","powerwall_container_subtitle":"Lista di tutti i Powerwall connessi al gateway. Ripeti scansione se un Powerwall non è incluso nella lista.","powerwall_container_subtitle_component_auto_detection":"Sono elencati tutti i componenti rilevati automaticamente dal Gateway. Se un componente non è presente nell\'elenco, controllare il cablaggio.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Sto controllando I Powerwall","powerwall_container_updating_note":"Nota: Questa operazione può durare fino a 60 secondi per Powerwall.","powerwall_item_view_blank_numbers":"In attesa di verifica…","powerwall_item_view_numbers":"Codice Prodotto:{partNumber} Numero di Serie:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"Annulla","powerwall_pairing_connect":"Collegamento","powerwall_pairing_done":"Fatto","powerwall_pairing_error_already_paired":"Abbinamento non riuscito: il dispositivo è già associato","powerwall_pairing_error_bad_pairing_response":"Abbinamento non riuscito: il dispositivo ha rifiutato l\'abbinamento Assicurarsi che il dispositivo secondario sia stato arrestato","powerwall_pairing_error_bad_qr_code":"Non è un codice QR Wi-Fi","powerwall_pairing_error_internal":"Abbinamento non riuscito: errore interno","powerwall_pairing_error_no_qr_code":"Nessun codice QR trovato","powerwall_pairing_error_no_response":"Abbinamento non riuscito: il dispositivo non ha risposto","powerwall_pairing_error_not_leader":"Abbinamento non riuscito: questo è un dispositivo secondario. Riconnettersi al dispositivo principale.","powerwall_pairing_error_prohibited_uncommissioned":"Abbinamento non riuscito: questa unità Powerwall non è stata ancora messa in servizio","powerwall_pairing_error_too_many_devices":"Abbinamento non riuscito: è già stato abbinato il numero massimo di dispositivi","powerwall_pairing_error_unknown":"Abbinamento non riuscito: Errore sconosciuto","powerwall_pairing_error_wifi_connection_failed":"Abbinamento non riuscito: Impossibile connettersi alla rete Wi-Fi. Controllare la password.","powerwall_pairing_error_wifi_not_found":"Abbinamento non riuscito: Rete Wi-Fi non trovata","powerwall_pairing_exception":"Abbinamento non riuscito: Eccezione","powerwall_pairing_instructions_2":"Per abbinare l\'unità Powerwall, inserire o scansionare l\'SSID e la password della rete Wi-Fi. Cercare il codice QR sul dispositivo.","powerwall_pairing_password_label":"Password:","powerwall_pairing_scan_qr_code":"Scansiona codice QR","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"Abbinamento completato. Il nuovo dispositivo potrebbe iniziare a non rispondere per un minuto o più (più a lungo se è in corso un aggiornamento). Fare clic su Fine per terminare.","powerwall_pairing_state_monitoring":"Abbinamento del nuovo dispositivo. L\'operazione potrebbe richiedere fino a un minuto.","powerwall_starting":"Powerwall si sta avviando","powerwall_view_detected_backup":"Trovato unità utilizzabile come Riserva","powerwall_view_detected_synchrometers":"Rilevata capacità del contatore","powerwall_view_failed":"PROBLEMA","powerwall_view_no_backup":"Non ho trovato unità utilizzabile come Riserva","powerwall_view_no_sync":"Non ho trovato Sincronizzatore","powerwall_view_scan":"INIZIA SCANSIONE","powerwall_view_success":"SUCCESSO","powerwall_view_synchrometer_detected":"Synchrometers trovati","powerwall_view_synchronizer_detected":"Trovato Sincronizzatore","powerwall_view_update":"VERIFICA DEI POWERWALL","privacy_policy_view_accept_warranty_title":"Accetta la Garanzia Limitata per Tesla Powerwall","privacy_policy_view_contact_bullet_one":"via e-mail su {privacyEmail};","privacy_policy_view_contact_bullet_two":"via posta ordinaria a Tesla, Inc., Attn: Legal, 45500 Fremont Boulevard, Fremont, California 94538, Stati Uniti.","privacy_policy_view_contact_header":"Come contattarci","privacy_policy_view_contact_paragraph_one":"Se ha domande o commenti o per annullare la sottoscrizione a certi servizi, si prega di contattarci:","privacy_policy_view_contact_paragraph_three":"Se l’utente si trova nello Spazio economico europeo o in Svizzera, la società controllata Tesla locale potrebbe essere l’entità responsabile del trattamento dei dati personali.","privacy_policy_view_contact_paragraph_two":"Si prega di notare che le comunicazioni via e-mail non sono sempre sicure, di conseguenza si prega di non includere informazioni sulla carta di credito o informazioni sensibili nell\'e-mail.","privacy_policy_view_cross_border_transfers_header":"Trasferimenti transfrontalieri","privacy_policy_view_cross_border_transfers_paragraph_one":"I Servizi sono controllati e gestiti dagli Stati Uniti. Le informazioni da o sull\'utente o sull\'utilizzo da parte dell’utente dei prodotti o dei Servizi possono essere conservate ed trattate in qualsiasi paese in cui abbiamo delle strutture o in cui ci avvaliamo di fornitori di servizio. Tali paesi possono non disporre di leggi sulla protezione dei dati personali analoghe a quelle del paese in cui i dati sono stati originariamente raccolti. Quando trasferiamo le informazioni da o sull\'utente o sull\'utilizzo dei nostri prodotti o dei Servizi in altri paesi, le proteggeremo così come descritto nella presente Informativa sulla Privacy. Utilizzando i nostri prodotti, i Servizi o altrimenti fornendoci informazioni, si acconsente al trasferimento di informazioni da o sull\'utente o sull\'utilizzo dei nostri prodotti o dei Servizi in paesi al di fuori del paese di residenza, inclusi gli Stati Uniti.","privacy_policy_view_cross_border_transfers_paragraph_two":"Se l\'utente si trova nello Spazio economico europeo o in Svizzera, rispettiamo i requisiti previsti dalla normativa applicabile, fornendo un\'adeguata protezione per il trasferimento di informazioni personali in paesi al di fuori dello Spazio economico europeo o della Svizzera. Tesla ha certificato la sua osservanza ai sensi del Privacy Shield UE-USA come specificato dal Dipartimento del Commercio e della Commissione Europea in riguardo al trattamento di alcuni dati personali trasferiti dallo Spazio Economico Europeo a Tesla e alle sue controllate negli Stati Uniti. La Privacy Policy Conforme al {privacyShield} si trova qui.","privacy_policy_view_devices":"Da o sull\'utente o i suoi dispositivi","privacy_policy_view_energy_products":"Da o su i prodotti energetici Tesla dell\'utente","privacy_policy_view_eu_policy_warning":"Bisogna accettare l\'Informativa sulla Privacy per registrare il Suo Powerwall e monitorarlo tramite l\'app mobile Tesla.","privacy_policy_view_eu_warranty_warning":"Se non da il suo consenso all\'Informativa sulla Privacy, potremmo non essere in grado di onorare nella sua completezza la Garanzia di dieci anni. Tesla onorerà la Garanzia per almeno quattro anni dalla data della prima installazione del suo Powerwall, in corcondanza con le esclusioni e limitazioni descritte nella Garanzia {warrantyLink}.","privacy_policy_view_grid_services":"Powerwall è in grado di aumentare l\'affidabilità della rete elettrica offrendo servizi aggiuntivi nell\'ambito di programmi opzionali forniti dalle società di servizi energetici o da terzi. Generalmente questi servizi comprendono lo scaricamento parziale del Powerwall in orari adeguati in cambio di benefit di natura economica. Inoltre ci viene richiesto di condividere le informazioni relative al tuo consumo di energia e al tuo Powerwall con le società di servizi energetici o terzi. Prima di inserirti in uno di questi programmi ti forniremo tutte le informazioni necessarie e ti daremo l\'opportunità di rinunciare. Se in quel momento decidi di non rinunciare, verrai iscritto al programma.","privacy_policy_view_grid_services_title":"Servizi Di Rete","privacy_policy_view_grid_warning":"Il consenso non è obbligatorio. Se non dai il tuo consenso, potremo darti l\'opportunità di iscriverti al programma in futuro.","privacy_policy_view_here":"qui","privacy_policy_view_homeowner_na":"Proprietario non disponibile","privacy_policy_view_homeowner_required":"Deve essere completata dal proprietario dell\'abitazione o sito commerciale.","privacy_policy_view_information_collection_devices_bullet_five":"Attraverso il browser o dispositivo: Alcune informazioni vengono raccolte dalla maggior parte dei browser o automaticamente attraverso il dispositivo dell’utente, quale l\'indirizzo Media Access Control (MAC), tipo di computer (Windows o Macintosh), risoluzione dello schermo, nome e versione del sistema operativo, produttore e modello del dispositivo, lingua, tipo e versione dell\'internet browser e nome e versione dei Servizi (quale l\'app Tesla) che l’utente utilizza. Utilizziamo queste informazioni per assicurare che i Servizi funzionino correttamente.","privacy_policy_view_information_collection_devices_bullet_four":"Offline: Possiamo raccogliere informazioni da o sull\'utente in modalità offline, ad esempio quando si visita un negozio Tesla o una struttura per riparazioni, quando si partecipa a uno dei nostri eventi, si firma per un test drive, si effettua un ordine per telefono o si contatta il nostro servizio cliente o il dipartimento vendite.","privacy_policy_view_information_collection_devices_bullet_one":"Attraverso i Servizi: Possiamo raccogliere informazioni da o sull\'utente attraverso i nostri siti web, applicazioni software, social media, messaggi e-mail o altri servizi digitali (i “Servizi”), ad esempio quando l\'utente si iscrive a una newsletter, effettua un acquisto o registra il suo prodotto con noi.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla: I clienti che acquistano alcuni prodotti Tesla riceveranno un account My Tesla, il quale viene ospitato sul nostro sito web. Possiamo raccogliere e trattare i seguenti tipi di dati per l\'account My Tesla dell’utente che l’utente sceglie di fornirci: le informazioni sulla registrazione come cliente; lo stato dell\'ordine; garanzia e altra documentazione dei prodotti Tesla e informazioni generali sui prodotti Tesla dell’utente (incluso, ad esempio, il numero identificativo del veicolo o numero di serie di un altro prodotto, informazioni sul piano di assistenza o pacchetto connettività) moduli assicurativi, patenti, accordi finanziari e informazioni simili. In qualunque momento, l\'utente può accedere all\'account My Tesla per aggiornare le informazioni da o sull\'utente, presenti su quell\'account.","privacy_policy_view_information_collection_devices_bullet_two":"Da altre fonti: Possiamo anche ricevere informazioni sull\'utente da altre fonti, quali database pubblici, partner di marketing congiunto, installatori certificati, centri di riparazione o assistenza per veicoli di terza parte e piattaforme di social.","privacy_policy_view_information_collection_energy_products_bullet_one":"Possiamo raccogliere informazioni sul prodotto quali la data di installazione, il numero dei prodotti installati e il/i numero/i di serie.","privacy_policy_view_information_collection_energy_products_bullet_two":"Per potere fornire e migliorare i nostri prodotti energetici e i nostri servizi, possiamo raccogliere dati riguardanti il luogo in cui il prodotto è stato installato e il modo in cui è stato configurato, dati riguardanti l\'utilizzo e le prestazioni del prodotto, dati riguardanti il consumo complessivo dell\'energia dell\'abitazione dell\'utente e altri dati concernenti problemi di diagnosi.","privacy_policy_view_information_collection_header":"Informazioni che possiamo raccogliere","privacy_policy_view_information_collection_paragraph_five":"Se non si desidera più che vengano raccolti i dati sulle prestazioni o altri dati sul veicolo Tesla dell’utente, si invita a contattarci secondo quanto indicato nella sezione “Come contattarci” riportata di seguito. Si prega di notare che, se si rinuncia alla raccolta dei dati sulle prestazioni del prodotto energetico Tesla, non saremo in grado di avvisare l\'utente in tempo reale in caso di eventuali problemi sul prodotto energetico, e ciò potrebbe comportare funzionalità ridotta, grave danno o mancato funzionamento del prodotto energetico e potrebbe altresì comportare la disattivazione di diverse funzioni del prodotto energetico inclusi i periodici aggiornamenti di software e firmware.","privacy_policy_view_information_collection_paragraph_four":"Possiamo raccogliere dall’utente una varietà di informazioni da o sui prodotti energetici Tesla dell\'utente, attraverso un installatore certificato o dai prodotti installati (direttamente o attraverso una pari attrezzatura quale un inverter), incluso:","privacy_policy_view_information_collection_paragraph_one":"Raccogliamo tre tipi principali di informazioni concernenti l\'utente o il suo utilizzo dei nostri prodotti e servizi: (1) informazioni da o sull\'utente o i suoi dispositivi; (2) informazioni da o sul suo veicolo Tesla; e (3) informazioni da o sui suoi prodotti energetici Tesla. A seconda dei prodotti e servizi Tesla che l\'utente ha richiesto, posseduto o utilizzato, non tutte le seguenti informazioni potrebbero essere rilevanti nel suo caso.","privacy_policy_view_information_collection_paragraph_three":"Quando si visita il nostro sito web o si utilizzano in altro modo i nostri Servizi, possiamo utilizzare cookie, pixel tag, strumenti analitici e altre tecnologie simili per contribuire a fornire e migliorare i nostri Servizi e nel modo di seguito esposto:","privacy_policy_view_information_collection_paragraph_two":"Possiamo raccogliere informazioni da o sull\'utente (quali nome, indirizzo, numero di telefono, indirizzo e-mail, metodo di pagamento, ecc.) o sui suoi dispositivi in una varietà di modi, incluso:","privacy_policy_view_information_collection_services_bullet_five":"Si possono conoscere le prassi seguite da Google nella raccolta di informazioni e come rifiutarle scaricando il plug-in per la disattivazione di Google Analytics disponibile su {website}.","privacy_policy_view_information_collection_services_bullet_four":"Strumenti analitici: Utilizziamo servizi di analytics del sito web e delle applicazioni forniti da soggetti terzi che utilizzano i cookie e altre tecnologie simili per raccogliere informazioni sul sito web o sull\'utilizzo delle applicazioni e per segnalare i trend, senza identificare i singoli visitatori. I soggetti terzi che ci forniscono questi servizi potrebbero raccogliere informazioni sull\'utilizzo dei siti web di soggetti terzi.","privacy_policy_view_information_collection_services_bullet_one":"Cookie: I cookie sono informazioni conservate direttamente sul computer che si sta utilizzando. I cookie ci consentono di raccogliere informazioni quali il tipo di browser, il tempo trascorso sui Servizi, le pagine visitate, le preferenze sulla lingua e altri dati sul traffico web. Utilizziamo le informazioni, come anche i nostri fornitori di servizi, per fini di sicurezza, per agevolare la navigazione online, visualizzare le informazioni in modo più efficiente, per personalizzare l\'esperienza dell\'utente mentre utilizza i Servizi e analizzare in altro modo l’ attività dell’utente. Possiamo riconoscere il computer dell\'utente in modo da assisterlo nell\'utilizzo dei Servizi. Raccogliamo altresì delle informazioni a fini statistici sull\'utilizzo dei Servizi per migliorare di continuo la progettazione e la funzionalità, capire il modo in cui vengono utilizzati i servizi e assisterci nella risoluzione dei problemi inerenti ai Servizi. I cookie ci consentono inoltre di selezionare le nostre pubblicità o offerte che rispondono maggiormente ai desideri dell\'utente e che verranno visualizzate. Possiamo anche utilizzare i cookie nella pubblicità online per vedere il modo in cui l’utente interagisce con la nostra pubblicità e possiamo utilizzare i cookie o altri file per capire come l’utente utilizza altri siti.","privacy_policy_view_information_collection_services_bullet_three":"Pixel tag e altre tecnologie simili: I pixel tag (anche noti come web beacon e clear GIF) potrebbero essere utilizzati in relazione ad alcuni Servizi per, tra le altre cose, rintracciare le azioni degli utenti dei Servizi (inclusi i destinatari delle e-mail), misurare il successo delle nostre campagne pubblicitarie e compilare la statistica sull\'utilizzo dei nostri Servizi e sul tasso di risposta.","privacy_policy_view_information_collection_services_bullet_two":"Se l’utente non desidera che i propri dati vengano raccolti attraverso i cookie quando si utilizza l\'account My Tesla o il nostro sito web, esiste una semplice procedura presente sulla maggior parte dei browser che consente di rifiutare automaticamente i cookie o di rifiutare o accettare il trasferimento sul computer di determinati cookie da un sito determinato. Si può altresì fare riferimento all\'indirizzo {website}. Tuttavia, qualora non si accettino questi cookie, si potrebbero riscontrare alcuni problemi nell\'utilizzo dei nostri Servizi. Ad esempio, potremmo non essere in grado di riconoscere il computer dell\'utente e si potrebbe dovere effettuare il login ogni volta che si vuole accedere ai relativi Servizi.","privacy_policy_view_information_rights_choices_agree_eu":"Bisogna accettare l\'Informativa sulla Privacy per registrare il Suo Powerwall e monitorarlo tramite l\'app mobile di Tesla.","privacy_policy_view_information_rights_choices_agree_one":"Bisogna accettare l\'Informativa sulla Privacy per registrare il Suo Powerwall e monitorarlo tramite l\'app mobile Tesla. Non è necessaria alcuna azione aggiuntiva se non si desidera accedere alle informazioni Powerwall tramite l\'app mobile Tesla.","privacy_policy_view_information_rights_choices_bullet_one":"L\'utente può accedere al suo account My Tesla per aggiornare le informazioni da o sull\'utente, presenti su quell\'account in qualunque momento.","privacy_policy_view_information_rights_choices_bullet_two":"Se l\'utente desidera rivedere, correggere, aggiornare, sopprimere o eliminare le informazioni da o sull\'utente stesso che ci sono state fornite in precedenza, può contattarci all\'indirizzo riportato di seguito.","privacy_policy_view_information_rights_choices_header":"Diritti e opzioni","privacy_policy_view_information_rights_choices_paragraph_four":"Si prega di notare che potremmo avere necessità di conservare alcune informazioni per la tenuta dei registri o laddove ciò sia richiesto per rispettare la normativa applicabile e/o per completare qualunque transazione che è stata iniziata prima della richiesta di modifica o cancellazione (ad esempio, quando effettua un acquisto o partecipa a una promozione, l\'utente non potrà essere in grado di modificare o cancellare le informazioni fornite fino al completamento di tale acquisto o promozione). Potrebbero altresì esserci delle informazioni che resteranno nei nostri database e altri archivi che non verranno rimossi.","privacy_policy_view_information_rights_choices_paragraph_one":"Come esposto in dettaglio nelle sezioni precedenti, offriamo varie opzioni in merito alla raccolta, all’utilizzo e alla condivisione da noi effettuati delle informazioni da e sull\'utente o sull\'utilizzo dei nostri prodotti o dei Servizi. Se previsto dalla normativa applicabile, l’utente può avere il diritto di richiedere l’accesso e ricevere informazioni su alcune informazioni relative all’utente che conserviamo, fare aggiornare e correggere le informazioni inesatte e bloccare o cancellare tali informazioni, secondo necessità. Questi diritti possono essere limitati in alcune circostanze dalla normativa locale. Offriamo all\'utente diversi metodi per accedere, correggere, aggiornare o richiedere il blocco o l\'eliminazione delle informazioni da o sull\'utente inclusi:","privacy_policy_view_information_rights_choices_paragraph_three":"Daremo seguito alla richiesta dell\'utente di esercitare suddetti diritti e scelte appena ragionevolmente praticabile.","privacy_policy_view_information_rights_choices_paragraph_two":"Nell’effettuare la richiesta, si invita l’utente a evidenziare chiaramente quale informazione si desidera modificare, se si desidera eliminare dal database l\'informazione che ci è stata fornita o altrimenti farci sapere quali limitazioni si desiderano applicare al nostro utilizzo delle informazioni che ci sono state fornite. Per ragioni di protezione dell\'utente, possiamo solo dare seguito alle richieste inerenti alle informazioni associate al particolare indirizzo e-mail utilizzato per mandarci la richiesta e potremmo avere la necessità di verificare l\'identità dell\'utente prima di eseguire la richiesta.","privacy_policy_view_information_share_header":"In che modo condividiamo le informazioni che raccogliamo","privacy_policy_view_information_share_paragraph_eight":"In altre circostanze","privacy_policy_view_information_share_paragraph_eleven":"Se si desidera annullare la sottoscrizione al trattamento delle informazioni per cui è stato previamente fornito il consenso espresso, si può farlo contattandoci nel modo indicato nella sezione “Come contattarci” riportata di seguito.","privacy_policy_view_information_share_paragraph_five":"Possiamo condividere informazioni con altri soggetti terzi autorizzati dall\'utente, nelle seguenti circostanze:","privacy_policy_view_information_share_paragraph_five_point_four":"Con fornitori di account di social media, se l’utente collega l\'account dei Servizi e l\'account di un social media. Così facendo, l\'utente ci autorizza a condividere le informazioni con il fornitore dell\'account del social media e comprende che l\'utilizzo delle informazioni che condividiamo sarà disciplinato dall\'informativa sulla privacy del fornitore dell\'account del social media.","privacy_policy_view_information_share_paragraph_five_point_one":"Con i nostri installatori certificati per agevolare la fornitura dei prodotti energetici richiesti dall’utente.","privacy_policy_view_information_share_paragraph_five_point_three":"Con soggetti terzi che siano sponsor di concorsi e promozioni simili, se l’utente sceglie di parteciparvi.","privacy_policy_view_information_share_paragraph_five_point_two":"Con centri assistenza e fornitori terzi, se l’utente decide di utilizzarli. Si noti che alcune informazioni sull\'utente sono archiviate su certi prodotti Tesla e possono essere accessibili direttamente dai centri assistenza o fornitori terzi che l’utente sceglie di utilizzare per attuare la diagnosi o l\'assistenza sul prodotto Tesla.","privacy_policy_view_information_share_paragraph_four":"Con altri soggetti terzi autorizzati dall\'utente","privacy_policy_view_information_share_paragraph_nine":"Possiamo condividere le informazioni in altre circostanze, quali:","privacy_policy_view_information_share_paragraph_nine_point_one":"Con il datore di lavoro dell’utente o altro gestore delle flotte o il proprietario del prodotto Tesla, se non posseduto direttamente dall\'utente e secondo quanto consentito dalla normativa applicabile.","privacy_policy_view_information_share_paragraph_nine_point_two":"Con un soggetto terzo in relazione a una riorganizzazione, fusione, vendita, joint venture, cessione, trasferimento o altra disposizione di tutta o parte della nostra attività, beni o azioni (incluso quanto in relazione a bancarotta o simile procedura).","privacy_policy_view_information_share_paragraph_one":"Possiamo condividere le informazioni che raccogliamo con i nostri fornitori di servizi e partner commerciali, con altri soggetti terzi autorizzati dall\'utente, con altri soggetti terzi laddove richiesto dalla legge e in altre circostanze. Di seguito si riportano esempi di come e in quali circostanze condividiamo le informazioni con questi soggetti.","privacy_policy_view_information_share_paragraph_seven":"Tesla può trasferire e divulgare le informazioni, incluse le informazioni che possono o non possono identificare singolarmente l\'utente, a soggetti terzi che sono tenuti a rispettare un obbligo legale (inclusi, in via non limitativa, i casi di citazione in giudizio); quando crediamo in buona fede che la legge lo richieda; in risposta ad una legittima richiesta da parte di una pubblica autorità che conduce un\'indagine, incluso il rispetto dei requisiti di applicazione della legge; per rispondere a un\'emergenza; per prevenire o fermare un\'attività che riteniamo sia, o corra il rischio di essere, illegale, non etica o legalmente perseguibile; o per proteggere i diritti, la proprietà o la sicurezza dei Servizi, di Tesla, di soggetti terzi, dei visitatori dei nostri Servizi, o del pubblico, secondo quanto stabilito a nostra sola discrezione.","privacy_policy_view_information_share_paragraph_six":"Con altri soggetti terzi quando richiesto dalla legge","privacy_policy_view_information_share_paragraph_ten":"Non condividiamo le informazioni che identificano singolarmente l\'utente con un soggetto terzo non affiliato per scopi pubblicitari salvo che l’utente abbia acconsentito a tale condivisione.","privacy_policy_view_information_share_paragraph_three":"Possiamo condividere informazioni con i nostri fornitori di servizi e partner commerciali laddove necessario per prestare i servizi per nostro conto o per conto dell\'utente, come nelle seguenti circostanze:","privacy_policy_view_information_share_paragraph_three_point_one":"Con le controllate di Tesla ai fini descritti nella presente Informativa sulla Privacy. Le controllate di Tesla sono società possedute o controllate da Tesla, Inc. e società in cui Tesla, Inc. detiene delle sostanziali partecipazioni.","privacy_policy_view_information_share_paragraph_three_point_three":"Con altri partner commerciali di soggetti terzi nella misura in cui essi siano coinvolti nell\'acquisto o nell\'assistenza ai prodotti Tesla dell’utente. Condividiamo informazioni limitate da e su l\'utente per consentire di trarre vantaggio da quei servizi che si sceglie di utilizzare, con partner tali società finanziarie, di leasing, di registrazione e di titolo.","privacy_policy_view_information_share_paragraph_three_point_two":"Con i nostri fornitori di servizi terzi e partner di canale per la fornitura di servizi quali di website hosting, analisi e archiviazione dati, elaborazione dei pagamenti, evasione dell\'ordine e installazione del prodotto, connessione wireless ai prodotti Tesla, assistenza clienti, manutenzione prodotto o relativi servizi, consegna e-mail, elaborazione carta di credito, revisione, pubblicità, elaborazione comando vocale e altri servizi simili.","privacy_policy_view_information_share_paragraph_two":"Con i nostri fornitori di servizi e partner commerciali","privacy_policy_view_information_use_commuicate":"Per comunicare con l\'utente","privacy_policy_view_information_use_header":"In che modo utilizziamo le informazioni che raccogliamo","privacy_policy_view_information_use_other_purposes":"Per altri fini","privacy_policy_view_information_use_paragraph_five":"Possiamo anche utilizzare le informazioni che raccogliamo per altri fini, come:","privacy_policy_view_information_use_paragraph_five_point_one":"Per finalità inerenti alla gestione del nostro business, quali: analisi dei dati, verifiche, monitoraggio e prevenzione su eventuali frodi; identificare i trend di utilizzo; determinare l\'efficacia delle nostre campagne pubblicitarie e gestire ed espandere le nostre attività aziendali.","privacy_policy_view_information_use_paragraph_five_point_two":"Fatto salvo quanto descritto in precedenza e in seguito, Tesla può utilizzare o condividere le informazioni che non possono identificare singolarmente l\'utente per qualunque fine, quali scopi operativi o di ricerca, per analisi di settore, per migliorare o modificare i nostri prodotti o servizi, per meglio personalizzare i nostri prodotti e servizi alle necessità dell\'utente, e laddove legalmente richiesto.","privacy_policy_view_information_use_paragraph_four":"Possiamo utilizzare le informazioni che raccogliamo per fornire e migliorare i nostri prodotti e servizi, come:","privacy_policy_view_information_use_paragraph_four_point_five":"Analizzare e migliorare la sicurezza dei nostri prodotti e servizi.","privacy_policy_view_information_use_paragraph_four_point_four":"Sviluppare e promuovere nuovi prodotti e servizi e migliorare o modificare i nostri prodotti e servizi esistenti.","privacy_policy_view_information_use_paragraph_four_point_one":"Completare ed esaudire l\'acquisto, ad esempio, elaborare i pagamenti, fare arrivare l\'ordine, comunicare con l\'utente in merito all\'acquisto e fornire il relativo servizio clienti.","privacy_policy_view_information_use_paragraph_four_point_six":"Fornire qualunque altro servizio richiesto.","privacy_policy_view_information_use_paragraph_four_point_three":"Monitorare le prestazioni del prodotto e fornire i servizi concernenti il prodotto dell’utente.","privacy_policy_view_information_use_paragraph_four_point_two":"Fornire assistenza al prodotto Tesla dell’utente, come contattare l’utente per fornire raccomandazioni sull\'assistenza e aggiornamenti wireless per il prodotto.","privacy_policy_view_information_use_paragraph_one":"Possiamo utilizzare le informazioni che raccogliamo per comunicare con l\'utente, per fornire e migliorare i nostri prodotti e servizi e per altri fini. Di seguito vengono riportati alcuni esempi delle finalità per cui utilizziamo le informazioni.","privacy_policy_view_information_use_paragraph_three":"Le scelte dell\'utente sulle comunicazioni:","privacy_policy_view_information_use_paragraph_three_point_one":"Ricevere comunicazioni elettroniche da parte nostra o delle nostre controllate: Se non si desidera più ricevere e-mail pubblicitarie da parte nostra o delle nostre controllate, si può annullare la sottoscrizione seguendo le istruzioni contenute in qualunque e-mail ricevuta da noi o contattandoci all\'indirizzo di seguito. Si prega di notare che potremo ancora inviare importanti messaggi amministrativi o sulla sicurezza anche se si annulla la sottoscrizione per la ricezione di e-mail pubblicitarie.","privacy_policy_view_information_use_paragraph_three_point_two":"Ricevere chiamate pubblicitarie da parte nostra: se si ricevono chiamate pubblicitarie da parte nostra e non si vogliono ricevere chiamate simili in futuro, si deve semplicemente chiedere di essere inclusi nella nostra lista “da non chiamare”. Si prega di notare che possiamo ancora chiamare per richieste amministrative, sulla sicurezza o problemi concernenti il servizio del prodotto anche se si annulla la sottoscrizione per la ricezione di chiamate pubblicitarie.","privacy_policy_view_information_use_paragraph_two":"Possiamo utilizzare le informazioni che raccogliamo per comunicare con l\'utente, come:","privacy_policy_view_information_use_paragraph_two_point_five":"Presentare i prodotti e le offerte personalizzati sulle esigenze dell\'utente e migliorare le nostre liste con informazioni provenienti da altre fonti.","privacy_policy_view_information_use_paragraph_two_point_four":"Inviare informazioni amministrative, per esempio, informazioni riguardanti i Servizi e le modifiche ai nostri termini, alle nostre condizioni e linee guida.","privacy_policy_view_information_use_paragraph_two_point_one":"Rispondere alle domande ed esaudire le richieste dell’utente, quale l\'invio di newsletter o informazioni sul prodotto, avvisi o opuscoli.","privacy_policy_view_information_use_paragraph_two_point_seven":"Facilitare il social sharing e la funzionalità delle comunicazioni.","privacy_policy_view_information_use_paragraph_two_point_six":"Consentire la partecipazione a concorsi o promozioni simili e gestire queste attività.","privacy_policy_view_information_use_paragraph_two_point_three":"Avvisare l\'utente in merito a informazioni concernenti la sicurezza o avvisare il primo intervento in caso di incidente che coinvolga il veicolo.","privacy_policy_view_information_use_paragraph_two_point_two":"Impostare, valutare e fornire dei commenti in merito al test drive Tesla dell\'utente.","privacy_policy_view_information_use_provide":"Fornire e migliorare i nostri prodotti e servizi","privacy_policy_view_links_header":"Collegamenti","privacy_policy_view_links_paragraph_one":"La presente Informativa sulla Privacy non regola, e non ne saremo pertanto responsabili, la privacy, le informazioni o le altre pratiche di qualunque soggetto terzo, incluso qualunque soggetto terzo che gestisca un sito o un servizio a cui si collegano i Servizi. L\'inclusione di un collegamento all\'interno dei Servizi non implica l\'avallo dei siti o servizi collegati da noi o dalle nostre controllate e non implica un\'affiliazione con il soggetto terzo.","privacy_policy_view_links_paragraph_two":"Si prega di notare che non siamo responsabili per la raccolta, l\'utilizzo e la divulgazione delle linee guida e delle procedure (incluse le procedure sulla sicurezza dei dati) di altre organizzazioni, quali qualunque sviluppatore o fornitore di app, fornitori di piattaforme di social o fornitore di servizio wireless, ivi inclusa qualunque informazione che l\'utente divulga ad altre organizzazioni attraverso o in relazione alle applicazioni del nostro software o alle nostre pagine dei social.","privacy_policy_view_minors_header":"Minori","privacy_policy_view_minors_paragraph":"I Servizi non sono destinati alle persone con un\'età inferiore agli anni sedici (16) e chiediamo che queste persone non forniscano nessuna informazione a Tesla.","privacy_policy_view_offers_eu":"Sì, desidero ricevere comunicazioni di marketing via e-mail, comprese indagini, promozioni e offerte, da parte di Tesla e dei suoi affiliati, riguardo ai prodotti e servizi Tesla. Il cliente ha il diritto di revocare il consenso in qualunque momento. Maggiori informazioni su {legalLink}.","privacy_policy_view_offers_title":"Consenso Al Marketing","privacy_policy_view_offers_usa":"Accetto di poter essere contattato da Tesla al numero telefonico specificato, tramite tecnologie automatiche e/o messaggi pre-registrati","privacy_policy_view_powerwall_warranty":"Garanzia Tesla Powerwall","privacy_policy_view_privacy_policy":"Informativa Sulla Privacy","privacy_policy_view_privacy_policy_agreement_eu":"Io, proprietario dell’ abitazione, ho letto interamente il documento “Informativa sulla Privacy del cliente Tesla” e acconsento al trattamento delle mie Informazioni personali da parte di Tesla come descritto nella “Informativa sulla Privacy del cliente Tesla”. Ha il diritto di revocare il suo consenso in qualsiasi momento, come descritto nella Informativa sulla Privacy del cliente Tesla.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Io, proprietario dell\'abitazione, ho letto integralmente l\'Informativa sulla Privacy del Cliente Tesla e acconsento al trattamento dei miei Dati Personali da parte di Tesla, come descritto nell\'Informativa sulla Privacy del Cliente Tesla.","privacy_policy_view_privacy_shield":"Informativa sulla protezione della Privacy","privacy_policy_view_retention_period_header":"Periodo di conservazione","privacy_policy_view_retention_period_paragraph":"Conserveremo le informazioni che raccogliamo da o su i nostri clienti, i nostri prodotti e i Servizi per il periodo necessario a rispettare le finalità esposte nella presente Informativa sulla Privacy salvo il caso in cui un periodo di conservazione maggiore sia richiesto o consentito dalla legge.","privacy_policy_view_security_header":"Sicurezza","privacy_policy_view_security_paragraph_one":"Ci adoperiamo per utilizzare misure organizzative, tecniche e amministrative ragionevoli per proteggere le informazioni all\'interno della nostra organizzazione. Purtroppo, nessun sistema di trasmissione o di conservazione dei dati può garantire una sicurezza sicura al 100%. Se l\'utente ha motivo di credere che le sue interazioni con noi non siano più sicure (ad esempio, se ha l’impressione che la sicurezza di qualsiasi account con noi sia stata compromessa), è pregato di informarci immediatamente del problema contattandoci in conformità alla sezione “Come contattarci” riportata di seguito.","privacy_policy_view_security_paragraph_two":"Se l\'utente vende o trasferisce il suo prodotto Tesla a un\'altra persona, è pregato di informarci in modo che possiamo stabilire se siano necessarie delle azioni supplementari per salvaguardare le informazioni da o sull\'utente dalla divulgazione all\'acquirente o al cessionario del prodotto Tesla.","privacy_policy_view_title":"Visualizza l\'intera informativa sulla Privacy","privacy_policy_view_updates_header":"Aggiornamenti alla presente informativa","privacy_policy_view_updates_paragraph":"Possiamo modificare la presente Informativa sulla Privacy. Si prega di guardare la voce “Ultimo aggiornamento” in fondo alla pagina per vedere quando la presente Informativa sulla Privacy è stata aggiornata l\'ultima volta. Qualunque modifica alla presente Informativa sulla Privacy diventerà effettiva quando l\'Informativa sulla Privacy aggiornata sarà resa pubblicata sui Servizi. Utilizzando i nostri prodotti, i Servizi o fornendoci altrimenti informazioni dopo tali modifiche, l\'utente accetta l\'Informativa sulla Privacy aggiornata.","privacy_policy_view_us_warranty_warning":"Bisogna accettare l\'Informativa sulla Privacy per registrare il Suo Powerwall e monitorarlo tramite l\'app mobile Tesla","privacy_policy_view_warranty_information":"Io, in qualità di proprietario, accetto i termini della Garanzia Tesla Powerwall disponibile {warrantyLink}. Questi termini includono una clausola di arbitrato con la quale rinuncio al diritto di intraprendere azioni legali o processi con giuria. È possibile recedere da tale clausola entro 30 giorni seguendo la procedura descritta nella stessa.","prompt_factory_reset_confirmation":"Confermare il ripristino delle impostazioni predefinite dell\'unità?","pvac-state-active":"Attivo","pvac-state-faulted":"Guasto","pvac-state-init":"Inizializzazione...","pvac-state-standby":"In attesa di fotovoltaico","pvac_alert_ac_fault":"Guasto CA dell\'inverter","pvac_alert_check_ac_note":"Controllare i cavi CA e la connessione alla rete. Riavviare l\'inverter e riprovare.","pvac_alert_check_dc_string1_note":"Controllare il cavo CC della stringa 1 e i pannelli. Riavviare l\'inverter e riprovare.","pvac_alert_check_dc_string2_note":"Controllare il cavo CC della stringa 2 e i pannelli. Riavviare l\'inverter e riprovare.","pvac_alert_check_dc_string3_note":"Controllare il cavo CC della stringa 3 e i pannelli. Riavviare l\'inverter e riprovare.","pvac_alert_check_dc_string4_note":"Controllare il cavo CC della stringa 4 e i pannelli. Riavviare l\'inverter e riprovare.","pvac_alert_confirm_grid_code_note":"Controllare i cavi CA e la connessione alla rete. Confermare il codice rete selezionato.","pvac_alert_dc_fault_string1":"Guasto CA dell\'inverter - Stringa 1","pvac_alert_dc_fault_string2":"Guasto CA dell\'inverter - Stringa 2","pvac_alert_dc_fault_string3":"Guasto CA dell\'inverter - Stringa 3","pvac_alert_dc_fault_string4":"Guasto CA dell\'inverter - Stringa 4","pvac_alert_freq_change":"Rete non conforme - Cambio frequenza","pvac_alert_internal_comms":"Problema di comunicazione interna","pvac_alert_over_freq":"Rete non conforme - Sovrafrequenza","pvac_alert_over_temp":"Sovratemperatura inverter","pvac_alert_over_voltage":"Rete non conforme - Sovratensione","pvac_alert_production_limited_note":"La produzione potrebbe essere limitata. Assicurare che le terminazioni dei cavi siano corrette, un\'areazione sufficiente e un ambiente di installazione adeguato.","pvac_alert_reboot_note":"Riavviare l\'inverter, verificare che il sistema sia aggiornato e messo in funzione.","pvac_alert_under_freq":"Rete non conforme - Sottofrequenza","pvac_alert_under_voltage":"Rete non conforme - Sottotensione","pvi-power-status-dc-only":"Solo CC","pvi-power-status-disabled":"Disattivato","pvi-power-status-enabled":"Attivato","pvi-reset-button-label":"Riavviare l\'inverter e azzerare gli avvisi","pvs-self-test-1":"Autodiagnosi (1/6): Problema di massa.","pvs-self-test-2":"Autodiagnosi (2/6): Guasto d\'arco","pvs-self-test-3":"Autodiagnosi (3/6): MCI","pvs-self-test-4":"Autodiagnosi (4/6): Isolamento","pvs-self-test-5":"Autodiagnosi (5/6): Relè saldato","pvs-self-test-6":"Autodiagnosi (6/6): Impedenza","pvs_alert_check_arc_fault_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino guasti d\'arco.","pvs_alert_check_dc_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di massa.","pvs_alert_check_dc_string1_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di isolamento, soprattutto sulla Stringa 1.","pvs_alert_check_dc_string2_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di isolamento, soprattutto sulla Stringa 2.","pvs_alert_check_dc_string3_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di isolamento, soprattutto sulla Stringa 3.","pvs_alert_check_dc_string4_note":"Controllare che i cavi CC, i collegamenti, i pannelli e i dispositivi di arresto rapido non presentino problemi di isolamento, soprattutto sulla Stringa 4.","pvs_alert_check_dc_strings_note":"Controllare i cavi CC, i collegamenti, i pannelli e le configurazioni delle stringhe.","pvs_alert_dc_arc_fault_detected":"Guasto d\'arco CC - Rilevato","pvs_alert_dc_arc_fault_lockout":"Guasto d\'arco CC - Blocco","pvs_alert_dc_ground_fault":"Problema di massa CC","pvs_alert_dc_isolation_string1":"Problema di isolamento CC - Stringa 1","pvs_alert_dc_isolation_string2":"Problema di isolamento CC - Stringa 2","pvs_alert_dc_isolation_string3":"Problema di isolamento CC - Stringa 3","pvs_alert_dc_isolation_string4":"Problema di isolamento CC - Stringa 4","pvs_alert_dc_over_voltage":"Sovratensione CC","pvs_alert_rapid_shutdown":"Avviato arresto rapido","pvs_alert_rapid_shutdown_note":"Controllare l\'interruttore CA e il circuito di arresto rapido per bassa tensione.","registration_container_continue_header":"Email del cliente inserita: {email}","registration_container_continue_modal_description":"Il cliente non sarà in grado di accedere all\'applicazione Tesla se l\'email non è corretta. Controlla che l\'indirizzo email sia corretto","registration_container_customer_email_required":"L\'indirizzo email è necessario per attivare l\'applicazione Tesla","registration_container_customer_information_title":"Informazioni dell\'utente","registration_container_fill_required_fields":"L\'installatore o il cliente devono compilare tutti i campi necessari","registration_container_loading_modal_registering":"Registrazione in corso","registration_container_reset_form_modal_description":"Conferma che vuoi procedere al reset del modulo","registration_container_reset_form_modal_header":"Le informazioni precedentemente inserite saranno perse","security_container_settings_title_customer":"Modifica o reimposta la password (Cliente)","security_container_settings_title_installer":"Modifica o reimposta la password (Installatore)","security_view_copied_to_clipboard":"Copiato!","security_view_not_wifi_qr_code_error":"Non è un codice QR Wi-Fi.","security_view_scan_qr_code_not_found_error":"Nessun codice QR trovato.","security_view_settings_change_password_error":"Le nuove password non corrispondono","security_view_settings_change_password_label":"MODIFICA PASSWORD","security_view_settings_completed":"COMPLETAMENTO","security_view_settings_new_password_label":"NUOVA PASSWORD","security_view_settings_old_password":"PASSWORD CORRENTE","security_view_settings_password_change_info":"Per modificare la password, immettere la password corrente e quella nuova","security_view_settings_password_customer":"PASSWORD","security_view_settings_password_customer_placeholder":"Ultimi cinque caratteri della password sull\'etichetta del Gateway","security_view_settings_password_installer_label":"Gateway password","security_view_settings_password_reset_info":"Per reimpostare la password, attivare/disattivare l\'unità Powerwall tramite l\'interruttore, quindi immettere gli ultimi 5 caratteri del numero di serie del gateway.","security_view_settings_password_reset_info_serial":"Per reimpostare la password, attivare/disattivare l\'unità Powerwall tramite l\'interruttore, quindi immettere gli ultimi 5 caratteri del numero di serie del gateway.","security_view_settings_password_reset_installer_info":"Per reimpostare la password, attivare/disattivare l\'interruttore sull\'unità Powerwall, quindi immettere il numero di serie del gateway.","security_view_settings_password_reset_installer_info_serial":"Per reimpostare la password, attivare/disattivare l\'interruttore sull\'unità Powerwall, quindi immettere il numero di serie del gateway.","security_view_settings_re_enter_password_label":"CONFERMARE LA NUOVA PASSWORD","security_view_settings_reset_password_label":"REIMPOSTA PASSWORD","security_view_settings_serial_customer":"NUMERO DI SERIE","security_view_settings_serial_customer_placeholder":"Ultimi 5 caratteri del numero di serie del gateway","security_view_settings_serial_installer_label":"Numero di serie del gateway","security_view_settings_success":"Password aggiornata correttamente","security_view_settings_success_new_password":"La nuova password è:","security_view_settings_toggled_password":"Password dimenticata?","self_test_result_viewer_resi_only":"Il visualizzatore del rapporto di autodiagnosi non è disponibile.","self_test_results_viewer_collapse_all":"Riduci tutto","self_test_results_viewer_column_name":"Nome","self_test_results_viewer_column_result":"Risultati","self_test_results_viewer_column_spec":"Specifiche","self_test_results_viewer_column_test_time":"Ora test","self_test_results_viewer_column_value":"Valore","self_test_results_viewer_expand_all":"Espandi tutti","self_test_results_viewer_failed":"Operazione non riuscita","self_test_results_viewer_in_progress":"In corso","self_test_results_viewer_inconclusive":"Inconcludente","self_test_results_viewer_not_started":"Non avviato","self_test_results_viewer_passed":"Superato","self_test_results_viewer_skipped":"Ignorato","self_test_results_viewer_warning":"Avvertenza","settings_container_confirm_reset_operation_mode":"Confermare modifica modalità su {operation}","settings_container_heco_modal_description":"Questa impostazione non può essere cambiata dopo la selezione. Confermare che il cliente sia attualmente iscritto al programma HECO Battery Bonus prima di inviare la selezione.","settings_container_heco_modal_title":"Conferma iscrizione","settings_container_heco_view_description":"L\'unità Powerwall si scaricherà una volta raggiunta la capacità giornaliera di messa in servizio per soddisfare i requisiti del programma. Questa impostazione non può essere cambiata dopo l\'attivazione.","settings_container_heco_view_scheduled_dispatch_start_time":"Ora di inizio","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"HECO Scheduled Dispatch","settings_container_heco_view_title":"Programma HECO Battery Bonus","settings_container_operation_modes_modal_content":"Utilizzare la schermata \\"Personalizza\\" dell\'app mobile Tesla per modificare le modalità operative.","settings_container_operation_modes_modal_reset":"RESETTA MODALITÀ","settings_container_operation_modes_modal_title":"Modalità operativa","settings_container_operation_modes_modal_warning":"Non sarà possibile annullare la modifica. Le modalità avanzate possono essere riattivate solo tramite l\'app mobile Tesla.","settings_container_operation_modes_reset_modal_title":"Resettare la modalità operativa?","settings_container_operation_settings_subtitle":"Imposta il nome del tuo sistema, il modo di operazione ed eventuali limiti sulla produzione energetica.","settings_container_operation_settings_title":"Configurazione Operativa","settings_container_save_instructions":"Seleziona CONTINUA per salvare.","settings_container_saving_site_info_modal":"Salvataggio impostazioni del sito","settings_container_site_import_description":"Il Limite importazione sito è un\'impostazione opzionale. Lasciare questo campo vuoto per disattivare la limitazione di importazione. Quando è attivata, questa impostazione specifica la potenza massima consentita che è possibile importare dalla rete nel sito.","settings_container_site_limits_header":"Limiti sito","settings_view_custom_modes_label":"Modo Preselezionato - {mode}","settings_view_energy_reserve_heco_label":"Le modifiche alla riserva backup sono limitate a causa dell\'iscrizione al programma HECO Battery Bonus. Il cliente sarà in grado di impostare la riserva backup nell\'app.","settings_view_energy_reserve_label":"RISERVA DI ENERGIA (COME RISERVA DURANTE MODO AUTO-ALIMENTATO)","settings_view_instruction_site_name":"Si prega di completare il nome del sito","settings_view_net_meter_mode":"Modalità di esportazione","settings_view_operation_label":"MODALITÀ OPERATIVA","settings_view_operation_set_label":"MODALITÀ OPERATIVA DA IMPOSTARE","settings_view_set_net_meter_mode_never_label":"Permanente senza esportazione","settings_view_set_net_meter_mode_solar_label":"Esportazione energia fotovoltaica","settings_view_site_name":"NOME DEL SITO","settings_view_site_name_placeholder":"Esempio: La Mia Casa","settings_view_solar_export_limitation_slider":"Limiti nell\'esportare energia da sistemi fotovoltaici","settings_view_solar_feature":"Questa funzione deve essere attivata per sistemi fotovoltaici che non possono generare energia verso la rete elettrica. Tipicamente nelle regioni di Hawaii (CSS) e Australia.","settings_view_solar_limitation":"POWERWALL INSTALLATA INSIEME A UN IMPIANTO FOTOVOLTAICO DIVERSO DA POWERWALL+?","settings_view_solar_zero_export":"POWERWALL INSTALLATO A FIANCO DI UN SISTEMA FOTOVOLTAICO A ZERO ESPORTAZIONI?","site_info_container_submit":"INVIA","solar_item_view_baudrate_label":"Velocità trasferimento (Baud)","solar_item_view_brand_input_label":"MARCA","solar_item_view_brand_label":"Marca","solar_item_view_check_inverter":"COLLEGAMENTO INVERTER {id}","solar_item_view_connection_warning":"Impossibile stabilire la connessione","solar_item_view_inverter_brand":"Marca Inverter","solar_item_view_inverter_communication":"Comunicazione con Inverter","solar_item_view_inverter_model_label":"Modello di Inverter","solar_item_view_ip_label":"INDIRIZZO IP","solar_item_view_model_label":"MODELLO","solar_item_view_power_rating_explanation":"Questa è la potenza totale del sistema fotovoltaico riguardo ai moduli / pannelli. Anche detta potenza nominale dell\'array. Per esempio, se avete 10 pannelli a 300 W, inserite 3000 W anche se l\'inverter è a 2500 W o 3500 W.","solar_item_view_pv_array_dc_power_rating":"Potenza Nominale dell\' Array Fotovoltaico","solar_item_view_pv_array_dc_power_rating_label":"ALIMENTAZIONE ARRAY FOTOVOLTAICO","solar_item_view_revenue_grade":"Ricavi energetici","solar_item_view_revenue_grade_explanation":"Abilitare questa opzione solamente se l\'inverter ha un contatore ad alta qualità integrato. Se questa opzione è abilitata, i dati dell\'inverter verranno letti dallo strumento anziché dall\'inverter.","solar_item_view_revenue_grade_title":"Ricavi energetici","solar_item_view_solar":"SOLARE {id}","solar_item_view_success":"CONNESSO!","solar_item_view_unable":"IMPOSSIBILE LEGGERE L\'INVERTER!","solar_list_view_continue_add_solar":"AGGIUNGI SOLARE","solar_view_continue_add_solar":"AGGIUNGI SOLARE","status_update_urgency_none":"Aggiornato","status_update_urgency_optional":"Aggiornamento opzionale","status_update_urgency_required":"Aggiornamento necessario","status_update_urgency_unknown":"Sconosciuta","success_view_awesome":"PERFETTO!","success_view_copied_to_clipboard":"Copiato!","success_view_installation_complete":"Installazione completata","success_view_new_password_error_title":"Password wizard","success_view_new_password_title":"Nuova password wizard","success_view_password_set":"Password già impostata","success_view_record_password":"Registrare la password prima di continuare","success_view_retry_registration":"RIPROVA REGISTRAZIONE","success_view_set_customer_password":"IMPOSTA PASSWORD CLIENTE","success_view_syncing_configuration":"Sincronizzazione della configurazione in corso","summary_container_company":"Azienda","summary_container_connection_type":"Tipo di connessione","summary_container_email":"E-mail","summary_container_installer_information":"Informazioni per l\'installatore","summary_container_ip_address":"Indirizzo IP","summary_container_location":"Posizione","summary_container_meter":"Contatore #{index}","summary_container_meter_information":"Informazioni sul contatore","summary_container_phone":"Numero di telefono","summary_container_print":"Stampa","summary_container_serial_number":"Numero di serie","summary_container_site_info":"Informazioni sul sito","summary_container_site_name":"Nome del sito","summary_container_subtitle":"Informazioni sul prodotto e sull\'installazione","summary_site_information":"INFORMAZIONI SUL SITO","summary_view_autonomous":"Controllo per fasce orarie","summary_view_backup":"Solo energia di riserva","summary_view_backup_capable":"Energia di riserva presente","summary_view_backup_reserve":"ENERGIA DI RISERVA","summary_view_backup_switch":"BACKUP SWITCH","summary_view_conductor_export":"LIMITE ESPORTAZIONE CONDUTTORE","summary_view_conductor_import":"LIMITE IMPORTAZIONE CONDUTTORE","summary_view_control":"Controllo sito","summary_view_customer_version":"VERSIONE CLIENTE","summary_view_direct":"Diretto","summary_view_disabled":"DISABILITATA","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"LIMITE ESPORTAZIONE FOTOVOLTAICO","summary_view_extra_programs":"PROGRAMMI EXTRA","summary_view_followers":"SECONDARI","summary_view_gateway":"GATEWAY","summary_view_grid_code":"CODICE DI RETE","summary_view_gsm":"CELLULARE","summary_view_heco_battery_bonus":"HECO Battery Bonus","summary_view_ip_address":"INDIRIZZO IP","summary_view_leader":"PRINCIPALE","summary_view_mode":"MODALITÀ","summary_view_msg_cannot_read_solar_assembly":"Arrestare prima il sistema per leggere il codice articolo e il numero di serie del gruppo fotovoltaico Powerwall+.","summary_view_network":"RETE","summary_view_non_backup":"Energia di riserva assente","summary_view_panel_limit":"CORRENTE MASSIMA PANNELLO","summary_view_part_number":"Numero di parte","summary_view_partnum":"Parte {partNumber}","summary_view_powerwall":"UNITÀ POWERWALL","summary_view_scheduler":"Aggregazione","summary_view_self_consumption":"Autoconsumo","summary_view_serial":"Seriale","summary_view_serialnum":"Serie {serialNumber}","summary_view_site_export":"LIMITE ESPORTAZIONE SITO","summary_view_site_import":"LIMITE IMPORTAZIONE SITO","summary_view_site_name":"NOME DEL SITO","summary_view_solar_assembly":"GRUPPO FOTOVOLTAICO","summary_view_sync":"CAPACITÀ ENERGIA DI RISERVA","summary_view_time":"ORA DI COMPILAZIONE RIEPILOGO","summary_view_time_zone":"FUSO ORARIO","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"Il dispositivo abbinato alla rete Wi-Fi al momento non risponde","system-device-unknown-sitecontroller":"Il dispositivo non ha ancora rilevato i propri dispositivi secondari","system_acpw_vitals_charge":"Livello di carica: {charge}%","system_acpw_vitals_power":"Alimentazione CA: {power}","system_acpw_vitals_power_charging":"Alimentazione CA: {power} Caricamento","system_acpw_vitals_power_discharging":"Alimentazione CA: {power} Scaricamento","system_acpw_vitals_state":"Stato Powerwall: {state}","system_acpw_vitals_voltage":"Tensione CA: {voltage}","system_controller_din":"Controller: {din}","system_device_alert_disabled":"Dispositivo disattivato","system_device_gateway_not_islanding":"Questo non è il controller a isola.","system_device_name_backup_switch":"Backup Switch ({sn})","system_device_name_battery_assembly":"Gruppo batteria ({sn})","system_device_name_gateway":"Gateway ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus_leader":"UnitàPowerwall+ principale","system_device_name_powerwall_plus_solo":"Unità Powerwall+","system_device_name_powerwall_plus_wired":"Unità Powerwall+ (cablata)","system_device_name_powerwall_plus_wireless":"Unità Powerwall+ (wireless)","system_device_name_remote_meter":"Contatore remoto ({sn})","system_device_name_solar_assembly_1":"Gruppo fotovoltaico","system_device_name_sync":"Controller contattore/contatore gateway({sn})","system_firmware_update":"Aggiornamento: {percent}% ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"Stato backup: {backupState}","system_islanding_vitals_grid_line":"Linea rete {lineNumber}: {v} {f}","system_islanding_vitals_island_line":"Linea isola {lineNumber}: {v} {f}","system_overview_connected":"Connesso a Tesla","system_overview_disconnected":"Non connesso a Tesla","system_overview_follower":"Powerwall secondario","system_overview_login_required":"Per visualizzare il funzionamento del sistema è necessario accedere","system_overview_scanning":"Scansione dispositivi...","system_overview_site_controller":"Controller sito","system_overview_updating":"Aggiornamento dispositivi...","system_pvi_vitals_ac_solar_power":"Potenza fotovoltaico CA: {power}/{current}","system_pvi_vitals_ac_solar_power_only":"Potenza fotovoltaico CA: {power}","system_pvi_vitals_lifetime_energy_kwh":"Energia: {energy}","system_pvi_vitals_state":"Stato: {message}","system_pvi_vitals_string":"Stringa {number}: {voltage}/{current}","system_pvi_vitals_string_not_connected":"Stringa {number}: Non connessa","system_remote_meter_ct_line":"Trasformatore di corrente {n} ({location}): {value}","system_remote_meter_no_cts":"Nessun trasformatore di corrente configurato","system_rescan_button_text":"Riscansiona dispositivi","system_scanning_label_text":"Scansione dispositivi...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Test che il sistema sta funzionando correttamente.","test_container_system_test_title":"Test del Sistema","test_inverter_container_error_grid_uncompliant":"Il test non può iniziare perché la rete è fuori norma.","test_inverter_container_error_not_idle":"Il test non può iniziare perché il sistema è ancora attivo.","test_inverter_container_results_error_plural_subtitle":"{num} Test falliti","test_inverter_container_results_error_singular_subtitle":"{num} Test fallito","test_inverter_container_results_success_plural_subtitle":"{num} Test superati","test_inverter_container_results_success_singular_subtitle":"{num} Test superato","test_inverter_container_results_success_subtitle":"Tutti i test passati con successo","test_inverter_container_results_title":"Risultati autotest Inverter","test_inverter_container_title":"Autotest Inverter","test_meter_composite_view_auxiliary_meter_setup_instructions":"Almeno un TA deve essere configurato per ogni meter ausiliario","test_meter_composite_view_auxiliary_meters_title":"Contatore ausiliario","test_meter_composite_view_configure_meters":"DI CONFIGURARE CONTATORI","test_meter_composite_view_current_transformer_setup_instructions":"Usa almeno un TA impostato come \\"sito\\" o come \\"carico\\", ma non entrambi i modi","test_meter_composite_view_external_meter_setup_instructions":"Per ogni contatore esterno deve essere configurato almeno un trasformatore di corrente.","test_meter_composite_view_external_meters_title":"Contatori esterni","test_meter_composite_view_internal_meters_gateway_title":"Contatori interni (Gateway)","test_meter_composite_view_internal_meters_title":"Meter interno","test_meter_composite_view_no_configured_meters":"NESSUN CONTATORE CONFIGURATO. SI PREGA {configure} PER CONTINUARE","test_meter_composite_view_note":"NOTA","test_meter_item_view_acuvim_label":"Contatore {id}: Contatore Acuvim","test_meter_item_view_backup_switch_label":"Contatore {id}: Contatore Backup Switch","test_meter_item_view_configure_phases_note":"Configura le fasi per abilitare i TA su questo meter","test_meter_item_view_internal_meter_x_gateway_label":"Contatore {id}: Contatore interno principale X (Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"Contatore {id}: Contatore interno ausiliario Y (Gateway)","test_meter_item_view_remote_w1_wifi_label":"Contatore {id}: Wi-Fi remoto","test_meter_item_view_remote_w1_wired_label":"Contatore {id}: Cablato da remoto","test_meter_item_view_remote_w2_wifi_label":"Contatore {id}: Wi-Fi remoto","test_meter_item_view_remote_w2_wired_label":"Contatore {id}: Cablato da remoto","test_meter_item_view_reset":"RESETTARE","test_meter_item_view_site_meter_title":"Contatore (Sito) interno","test_meter_item_view_sync_id":"Sync Meter {id}","test_meter_item_view_toggle_advanced":"Avanzate","test_meter_item_view_toggle_power":"Potenza","test_meter_item_view_wifi_id":"Contatore {id}","test_meter_item_view_wired_id":"Meter cablato {id}","test_view_canceled_status":"Test ѐ stato Cancellato","test_view_failed_status":"Test non ѐ Riuscito","test_view_idle_status":"Inizio Test di Sistema","test_view_init_status":"Preparazione Test","test_view_inverter_test_warning_message":"Se hai un inverter configurato per non esportare energia nella rete, il test di sistema del Gateway non è in grado di validare il sistema. Si prega spegnere l\'inverter fino a quando il test di sistema è stato completato.","test_view_passed_status":"Test ѐ OK","test_view_prep_status":"Inizializzazione dei Controlli: potrebbe richiedere alcuni minuti!","test_view_running_status":"Esecuzione del Test di Carica","test_view_skip_start_system_test_text":"Conferma che vuoi ignorare il test di sistema","test_view_start_system_test_warning":"ATTENZIONE","test_view_system_test_completed_message":"Test di Sistema Completato!","time_minute":"minuto","time_minutes":"minuti","time_second":"secondo","time_seconds":"secondi","time_started_at":"Heure de début {time}","timezone_container_subtitle":"Basandosi sulla tua posizione e indirizzo IP, possiamo aiutarti a selezionare il fuso orario per la tua installazione.","timezone_container_title":"Fuso orario","timezone_view_label":"fuso orario","toast_view_standard_title":"Nota","toast_view_warning_title":"Avvertenza","update_container_industrial_updating_description":"Il Controller sito si riavvierà ora automaticamente per poter installare l\'aggiornamento. {lb1}{lb2} Attendere 2 minuti, riconnettersi alla rete del Controller sito, quindi {refresh}","update_container_preparing_title":"Preparando per l\'ultimo aggiornamento","update_container_refresh_browser":"aggiornare la pagine web.","update_container_residential_updating_description":"Il gateway ora verrà resettato per applicare il nuovo aggiornamento. {lb1}{lb2} Si prega di attendere 2 minuti, quindi riconnettere alla rete dai del gateway, e {refresh}","update_container_skip_title":"Ignora l\'Aggiornamento?","update_container_subtitle":"Si prega di aggiornare il software di sistema","update_container_subtitle_industrial":"Controllare la disponibilità di aggiornamenti. Nota: per distribuire gli aggiornamenti alle batterie, accedere alla pagina Batteria.","update_container_title":"Aggiorna","update_container_updating_title":"Aggiornamento in corso","update_step_item_view_resolution_title":"Correzione suggerita","update_view_check_again":"CLIC PER RI-CONTROLLARE","update_view_check_for_update":"CONTROLLA AGGIORNAMENTI","update_view_check_for_update_industrial":"CONTROLLA AGGIORNAMENTI DEL CONTROLLER SITO","update_view_checking_update":"Controllo aggiornamenti in corso","update_view_current_version":"Versione corrente: {version}","update_view_current_version_label":"VERSIONE ATTUALE:","update_view_downloading":"SCARICAMENTO IN CORSO","update_view_downloading_update":"Trasferimento di aggiornamenti in corso","update_view_no_power_cicle":"NON SPEGNERE O RESETTARE!","update_view_percent_complete":"{percent} completo","update_view_progress":"PROGRESSO DELL\'AGGIORNAMENTO","update_view_staged":"NUOVA VERSIONE È PRONTA PER L\'AGGIORNAMENTO","update_view_staged_update":"Pronto ad aggiornare","update_view_staging":"PREPARAZIONE","update_view_staging_update":"Sto preparando l\'aggiornamento","update_view_time_remaining":"rimanente","update_view_up_to_date":"QUESTA VERSIONE È AGGIORNATA","update_view_update_now":"AGGIORNA","update_view_update_urgency_label":"Stato aggiornamento: {status}","update_view_updated_industrial":"Il software del Controller sito è aggiornato.","update_view_updated_residential":"Hai il firmware più recente.","update_view_wait_minutes":"SI PREGA DI ATTENDERE ALCUNI MINUTI...","validation_phone":"Inserire un numero di telefono valido","vitals_header_subtitle_firmware_update":"Aggiornamento firmware in corso...","vitals_header_subtitle_firmware_update_failed":"Aggiornamento firmware non riuscito. Controllare gli switch attivati e il cablaggio.","vitals_header_title":"Sistema","vitals_powerwall_state_ac_fault":"Guasto fase CA","vitals_powerwall_state_dc_fault":"Guasto fase CC","vitals_powerwall_state_grid_following":"Connesso a rete","vitals_powerwall_state_grid_forming":"A isola","vitals_powerwall_state_init":"Inizializzazione","vitals_powerwall_state_off":"Off","vitals_powerwall_state_standby":"Standby","vitals_powerwall_state_support_dc":"Supporto CC","warning":"ATTENZIONE","warning_off_grid":"Se il sistema è disconnesso dalla rete elettrica, ogni carico sostenuto dal Powerwall verrà spento entro 5 minuti.","warning_on_grid":"Se il sistema è connesso alla rete elettrica, Powerwall smetterà di caricare/scaricare energia.","warning_sitemaster_container_not_running":"Il Sitemaster non è in funzione","wifi_pairing_link_message":"Aggiungere un\'unità Powerwall collegata alla rete Wi-Fi","wifi_view_find_network":"TROVA RETE CON NOME (SSID)","wifi_view_note":"Nota: Il gateway è compatibile solo con reti Wi-Fi a 2.4 GHz.","wifi_view_note_five_ghz":"Nota: il Gateway è compatibile con le reti wireless a 2.4 GHz e 5 GHz.","wifi_view_readonly":"Questa è un\'unità Powerwall secondaria, pertanto non è possibile modificare la configurazione della relativa rete wireless.","wifi_view_security_label":"SICUREZZA","wizard_container_commissioning_wizard":"Configurazione Guidata Tesla","wizard_container_login_required":"Accesso necessario","wizard_container_title":"Cominciamo!","wizard_container_verifying_login_title":"Verifica accesso"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Error","advanced_settings_submit":"Enviar","advanced_settings_submitted":"Enviado","advanced_settings_title":"Configuración avanzada","alert_container_ac_phase_1_over_voltage":"Sobretensión de CA","alert_container_ac_phase_1_under_voltage":"Baja tensión de CA","alert_container_ac_phase_2_over_voltage":"Sobretensión de CA","alert_container_ac_phase_2_under_voltage":"Baja tensión de CA","alert_container_ac_phase_3_over_voltage":"Sobretensión de CA","alert_container_ac_phase_3_under_voltage":"Baja tensión de CA","alert_container_over_frequency":"Sobrefrecuencia de CA","alert_container_rate_of_change_frequency":"Índice de cambio de frecuencia de CA","alert_container_under_frequency":"Baja frecuencia de CA","app_container_engineering_mode_banner_message":"El modo de servicio de Tesla no requiere autenticación Detenga el sistema si va a realizar cambios operativos. Antes de cerrar el navegador, deje el sistema en un estado aceptable. Cierre el navegador cuando haya terminado, puesto que este modo no requiere autenticación.","app_container_engineering_mode_title":"Modo de servicio de Tesla","app_container_firmware_update_banner_message":"Mantenga la instalación y el cableado sin realizar cambios y permanezca en esta página hasta que la actualización haya finalizado.","app_container_firmware_update_banner_title":"Actualización de firmware en curso","app_container_sitemaster_message_title":"El sistema está funcionando. Para ver el estado de los bloques de batería, se debe apagar el sistema. Puede detener el sistema desde la página de inicio.","app_container_sitemaster_power_supply_mode_banner_message":"Batería produciendo tensión de CA para alimentar dispositivos para emparejamiento y configuración. Botón para detener el sistema en la página de destino.","app_container_sitemaster_power_supply_mode_banner_title":"Modo de creación de red eléctrica","app_container_sitemaster_running_banner_title":"Sistema en funcionamiento","auto_config_check_network_button":"Compruebe la red y habilite Wi-Fi","auto_config_check_system_and_summary":"Compruebe las páginas Sistema y Resumen.","auto_config_done_button_text":"Listo","auto_config_instructions_cannot_determine_grid_connection":"Antes de poner en marcha el sistema, compruebe el cableado al Backup Switch o al Gateway.","auto_config_instructions_determining_on_grid":"Si este mensaje permanece durante más de 3 minutos, compruebe el cableado al Backup Switch o al Gateway.","auto_config_instructions_finding_contactor_controller":"Si este mensaje permanece durante más de 3 minutos, compruebe el cableado al Backup Switch o al Gateway.","auto_config_instructions_finding_powerwalls":"Si este mensaje permanece durante más de 3 minutos, compruebe el cableado al Powerwall.","auto_config_instructions_finding_solar_powerwall":"Si este mensaje permanece durante más de 3 minutos, compruebe el cableado al Solar Powerwall.","auto_config_instructions_lookup_failed_retry":"Escanee la pegatina con el número de serie en Bolt para activar la configuración automática de Powerwall y después {retryButton}","auto_config_instructions_lookup_failed_wizard":"O bien, {wizardButton} para la configuración manual de Powerwall.","auto_config_instructions_missing_info_1":"Falló la configuración automática de Powerwall porque faltaba la siguiente información:","auto_config_instructions_missing_info_2":"{wizardButton} para introducirla manualmente.","auto_config_instructions_missing_info_3":"{registrationButton} manualmente.","auto_config_instructions_no_grid_connection":"Compruebe el cableado al Backup Switch o al Gateway","auto_config_instructions_no_grid_detected":"Compruebe el cableado y los disyuntores antes de poner en marcha el sistema.","auto_config_instructions_no_network_retry":"{networkLink} para activar la configuración automática de Powerwall y después {retryButton}","auto_config_instructions_no_network_wizard":"O bien, {wizardButton} para la configuración manual de Powerwall.","auto_config_instructions_retry":"{networkLink} si el problema persiste","auto_config_instructions_retry_wizard":"O bien, {wizardButton} para la configuración manual de Powerwall.","auto_config_instructions_updating":"Es necesario actualizar el software para poder iniciar la configuración automática de Powerwall. La actualización se descargará y aplicará automáticamente. Es posible que después tenga que reconectarse a la red Wi-Fi de Powerwall.","auto_config_missing_grid":"Red eléctrica para el emplazamiento del cliente","auto_config_missing_gridcode":"Código de red eléctrica para el emplazamiento del cliente","auto_config_missing_registration":"Información del cliente para registro del producto","auto_config_missing_timezone":"Zona horaria en el emplazamiento del cliente","auto_config_network_button_text":"Configurar la red","auto_config_registration_button_text":"Introducir información del cliente","auto_config_retry_button_label":"Reintentar","auto_config_run_button_label":"Configurar Powerwall automáticamente","auto_config_run_wizard_button_text":"Ejecutar el asistente","auto_config_section_title":"Configuración automática de Powerwall","auto_config_status_cancelled":"Se ha cancelado la configuración automática. Puede volver a intentarlo:","auto_config_status_cannot_determine_grid_connection":"No se ha podido determinar la conexión a la red eléctrica.","auto_config_status_complete":"Completado correctamente","auto_config_status_determining_on_grid":"Determinando conexión a la red eléctrica...","auto_config_status_finding_contactor_controller":"Buscando controlador del contactor...","auto_config_status_finding_powerwalls":"Buscando Powerwalls...","auto_config_status_finding_solar_powerwall":"Buscando Solar Powerwall...","auto_config_status_in_progress":"En curso","auto_config_status_lookup_failed":"Falló la búsqueda del número de serie","auto_config_status_missing_information":"Información faltante","auto_config_status_no_grid_connection":"No hay conexión a la red eléctrica","auto_config_status_no_grid_detected":"No se ha detectado ninguna red eléctrica.","auto_config_status_no_network":"No conectado a Tesla","auto_config_status_not_applicable":"La configuración automática no es necesaria o ya se ha ejecutado. Puede volver a ejecutarla:","auto_config_status_retrying":"Reintentando solicitud de red fallida","auto_config_status_timeout":"El tiempo de configuración automática se ha agotado. Puede volver a intentarlo:","auto_config_status_updating":"Se requiere actualización del software","auto_config_stop_system_modal_message":"El proceso de configuración automática no puede ejecutarse mientras está funcionando el sistema. Detenga el sistema e inténtelo de nuevo.","auto_config_stop_system_modal_title":"No se puede iniciar la configuración automática","battery_container_add_all_batteries_button_label":"AÑADIR TODO","battery_container_available_batteries_subtitle":"Estas baterías no participarán en el funcionamiento del sistema a menos que se añadan a la \\"Configured\\" list.","battery_container_available_batteries_title":"Bloques de baterías disponibles","battery_container_cannot_communicate":"Error de comunicación con Powerwall. Compruebe el cableado y la terminación del bus CAN.","battery_container_cannot_communicate_with_device":"No se puede comunicar con el dispositivo. Compruebe el cableado y la terminación del bus CAN.","battery_container_chinv":"VFD para compresor y calentador (CHINV) {index}","battery_container_configured_batteries_label":"Bloques de baterías configurados","battery_container_configured_batteries_subtitle":"Estas baterías no participarán en el funcionamiento del sistema.","battery_container_confirm_update_firmware":"Este proceso puede tardar varios minutos. No interrumpa la actualización ni salga de esta página.","battery_container_dcbc":"Bloque de baterías {index}","battery_container_dcbc_comms_failure":"Error de comunicación. Compruebe la conexión de red con la unidad y escanee de nuevo.","battery_container_dcbc_dcdisconnect_opened":"La maneta del interruptor de CC está en posición de apagado.","battery_container_dcbc_door_switch_opened":"La línea de habilitación de la puerta del inversor está abierta. Compruebe el interruptor de la puerta.","battery_container_dcbc_enable_line_return_low_estop":"El circuito de apagado remoto del inversor está abierto. Compruebe el circuito de apagado remoto.","battery_container_dcbc_enable_line_return_low_inv":"La línea de habilitación del sistema inversor está abierta. Compruebe el estado del interruptor automático.","battery_container_dcbc_enable_line_return_low_str":"La línea de habilitación para una o más filas de powerpack está abierta. Compruebe el cableado y las puertas de las unidades Powerpack. Para hacer un diagnóstico, consulte la guía de resolución de problemas de la línea de habilitación.","battery_container_delete_button_title":"Borrar este dispositivo","battery_container_diagnosis_incomplete":"Diagnóstico incompleto. Para poder realizar más comprobaciones, es preciso actualizar previamente el firmware.","battery_container_faults":"Fallas","battery_container_firmware_update_needed":"Se necesita actualizar el firmware.","battery_container_gateway_contactor_meter_controller":"Contactor del Gateway/Controlador del contador","battery_container_industrial_confirm_update_firmware":"Esto actualizará el firmware de cada bloque de baterías y sus componentes secundarios.","battery_container_industrial_confirm_update_firmware_info":"Esto actualizará el firmware de cada bloque de baterías en la \\"Configured\\" list and its subcomponents.","battery_container_internal_communications_fault":"Fallo interno de comunicaciones. Compruebe el cableado y la terminación del bus CAN y realice una actualización del firmware.","battery_container_meter_socket_adapter":"Backup Switch","battery_container_mpbc":"Bloque de baterías {index}","battery_container_mpthc":"Controlador térmico (MPTHC) {index}","battery_container_no_msa_detected":"No se ha detectado ningún Backup Switch.","battery_container_no_sync_detected":"No se ha detectado ningún controlador de contactor. No se ha detectado ninguna capacidad de respaldo.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"Ref.: {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Poste (LCC) {index}","battery_container_post_missing":"Falta poste {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Powerstage {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"El Powerwall está apagado. Asegúrese de que el interruptor esté en la posición ON.","battery_container_qbms":"Panel de gestión de la batería (QBMS)","battery_container_qhvp":"Procesador de alta tensión (QHVP)","battery_container_residential_confirm_update_firmware":"Esto actualizará el firmware de cada Powerwall y el controlador de contactor (si está presente).","battery_container_resolve_connectivity":"Resuelva los problemas de conectividad antes de realizar una actualización del firmware.","battery_container_scan":"ESCANEAR","battery_container_scan_in_progress":"ESCANEANDO...","battery_container_scbc":"Bloque de cargadores {index}","battery_container_scthc":"Controlador térmico (SCTHC) {index}","battery_container_self_tests_failure":"No ha superado la autocomprobación.","battery_container_self_tests_inconclusive":"Los resultados de la autocomprobación no son concluyentes.","battery_container_self_tests_internal_error":"Error de las autocomprobaciones debido a un error interno del sistema.","battery_container_self_tests_stall":"Tiempo de espera agotado: las autocomprobaciones no han podido comenzar.","battery_container_self_tests_system_down":"No es posible realizar autocomprobaciones mientras el sistema está apagado. Inicie el sistema e inténtelo de nuevo.","battery_container_self_tests_updating":"No es posible realizar autocomprobaciones mientras se actualizan las baterías. Inténtelo de nuevo cuando la actualización se haya completado.","battery_container_serial_number":"N.º de serie: {sn}","battery_container_solar_powerwall":"{index} Solar Powerwall","battery_container_starc":"Convertidor CC-CC (STARC) {index}","battery_container_stitch":"Control de potencia CC-CC (STITCH)","battery_container_synchronizer":"Controlador de contactor","battery_container_unknown":"Controlador de bus desconocido {index}","battery_container_update_failed":"Error de actualización. Inténtelo de nuevo y asegúrese de que el cableado y los interruptores de activación no se interrumpen durante el proceso de actualización.","battery_container_update_firmware":"ACTUALIZAR FIRMWARE","battery_container_update_in_progress":"ACTUALIZACIÓN EN CURSO...","battery_container_waiting_to_report_firmware":"Esperando que la unidad indique la versión del firmware.","battery_container_warnings":"Advertencias","button_label_generate":"GENERAR","can_reboot_message_backup":"Modo de respaldo","can_reboot_message_block_update":"Actualización de bloque en curso","can_reboot_message_enumeration":"Enumeración en curso","can_reboot_message_initializing":"Inicialización del sistema","can_reboot_message_power_flow_is_too_high":"El flujo de energía es demasiado alto","can_reboot_message_updating":"En curso actualización de paquete para la ubicación","caution":"PRECAUCIÓN","charger_settings_cabinet":"Armario {sn} {state}","charger_settings_cabinet_posts_warning":"Estos controles solamente detienen la poshabilitación y el bus de AT interno del armario. De todos modos, cuando acceda a los armarios debe aislar la energía y seguir el procedimiento de seguridad completo.","charger_settings_common_bus":"Bus común {state}","charger_settings_common_bus_warning":"Solamente detiene el bus de AT común. De todos modos, cuando acceda a los armarios debe aislar la energía y seguir el procedimiento de seguridad completo.","charger_settings_disabled":"deshabilitado","charger_settings_enabled":"habilitado","charger_settings_post":"Post {id} {state}","charger_settings_saving":"guardando {spinner}","client_protocols_container_subtitle":"Active o desactive los protocolos de cliente.","client_protocols_container_title":"Protocolos de cliente","client_protocols_menu_title":"Protocolos de cliente","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"API REST","client_protocols_view_modbus_label":"TCP/IP de Modbus","compliance_container_label_fcc_id":"ID de FCC: {fccId}","compliance_container_label_ic_id":"IC: {icId}","compliance_container_label_manufacturer":"Fabricante: {manufacturer}","compliance_container_label_model":"Modelo: {model}","compliance_container_title":"Cumplimiento","component-menu-title":"Componentes","conductor_limit":"Las baterías se controlan para evitar exceder los límites de corriente configurados en cada fase de los CT de los conductores. Vea la nota sobre la aplicación del límite del conductor para ver más detalles de donde se utiliza y qué límites se deben configurar.","conductor_min_current":"Límite de exportación del conductor","control_container_add_on":"ACCESORIO","control_container_always_active":"SIEMPRE ACTIVO","control_container_battery_ok":"EXPORTACIÓN TOTAL DE BATERÍA PERMITIDA","control_container_charge_power_target":"OBJETIVO DE POTENCIA DE CARGA","control_container_conductor_max_current":"Límite de importación del conductor","control_container_conductor_min_current_max_bound":"{mode} tiene un valor máximo de 200 A","control_container_conductor_min_current_min_bound":"{mode} tiene un valor mínimo de 5 A","control_container_control_subtitle":"Subtítulo de control","control_container_control_title":"Título de control","control_container_direct":"DIRECTO","control_container_disable":"Desactivar","control_container_discharge_power_target":"OBJETIVO DE POTENCIA DE DESCARGA","control_container_enabled":"ACTIVADO","control_container_energy_target":"OBJETIVO DE ENERGÍA. Este valor debe coincidir con el tamaño del sistema según los documentos de diseño y el informe de los inspectores","control_container_error_message":"{mode} es obligatorio","control_container_explanation_bullet_five_max_site_meter_power_kw":"Cuando la carga neta es superior a dicho límite, las baterías se descargarán en un esfuerzo por evitar sobrepasar ese límite.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Cuando la generación neta es superior a dicho límite, las baterías se cargarán en un esfuerzo por evitar sobrepasar ese límite.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Cuando la carga neta es inferior a dicho límite, las baterías se limitarán en su potencia de carga permitida.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Cuando la generación neta es inferior a dicho límite, las baterías se limitarán en su potencia de descarga permitida.","control_container_explanation_bullet_one_max_site_meter_power_kw":"El límite de importación del emplazamiento es un parámetro opcional. Deje este campo vacío para desactivar la limitación.","control_container_explanation_bullet_one_min_site_meter_power_kw":"El límite de exportación para la ubicación es un parámetro opcional. Deje este campo vacío para desactivar la limitación.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Este es un límite agregado en todas las fases de los medidores de todos los emplazamientos. (Nota: Cuando se utilizan medidores de carga, el medidor del emplazamiento se calcula utilizando carga, energía solar y batería).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Este es un límite agregado en todas las fases de los medidores de todos los emplazamientos. (Nota: Cuando se utilizan medidores de carga, el medidor del emplazamiento se calcula utilizando carga, energía solar y batería).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Cuando está activado, el registro principal de la instalación controla la potencia máxima que se puede importar de la red al emplazamiento.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Cuando está activado, el registro principal de la instalación controla la potencia máxima que se puede exportar de la red al emplazamiento.","control_container_explanation_export_restrictions_locked":"Determina cómo el sistema puede exportar energía a la red. Una vez definido, la regulación exige que solamente se pueda cambiar poniéndose en contacto con Tesla.","control_container_explanation_export_restrictions_unlocked":"La regulación requiere que las características de exportación solo se pueden establecer durante la puesta en servicio inicial. Póngase en contacto con Tesla para modificarlas.","control_container_explanation_nominal_system":"Este valor debe coincidir con el tamaño del sistema según los documentos de diseño y el informe del inspector.","control_container_heat_for_energy":"CALOR PARA ENERGÍA","control_container_heat_mode":"MODO DE CALOR","control_container_heco_committed_capacity":"Capacidad comprometida","control_container_heco_committed_discharge_power_W_max_bound":"{mode} tiene un valor máximo de 100 000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode} tiene un valor mínimo de 100 W","control_container_loading":"Cargando","control_container_max_site_meter_power_W_max_bound":"{mode} tiene un valor máximo de 50 000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} tiene un valor mínimo de 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} debe ser mayor o igual que 0","control_container_max_site_meter_power_kw":"Límite de importación del emplazamiento","control_container_max_site_meter_power_w":"Límite de importación del emplazamiento","control_container_menu":"Menú","control_container_min_site_meter_power_kW_positive":"{mode} debe ser mayor o igual que 0","control_container_min_site_meter_power_kw":"Límite de exportación del emplazamiento","control_container_min_site_meter_power_w":"Límite de exportación del emplazamiento","control_container_minimum_charge_power":"POTENCIA MÍNIMA DE CARGA","control_container_minimum_discharge_power":"POTENCIA MÍNIMA DE DESCARGA","control_container_misc":"VARIOS","control_container_net_meter_mode":"Restricciones de exportación del emplazamiento","control_container_never":"SIN EXPORTACIÓN AL EMPLAZAMIENTO","control_container_nominal_system_energy_kW_positive":"{mode} debe ser mayor o igual que 0","control_container_nominal_system_energy_kWh_positive":"{mode} debe ser mayor o igual que 0","control_container_nominal_system_energy_kwh":"Energía nominal del sistema","control_container_nominal_system_energy_max_error":"Energía nominal del sistema excede el límite máximo de energía","control_container_nominal_system_power_kw":"Potencia nominal del sistema","control_container_nominal_system_power_max_error":"La potencia nominal del sistema excede el límite máximo de potencia","control_container_number_error_message":"{mode} debe ser una entrada numérica","control_container_power":"POTENCIA","control_container_pv_only":"EXPORTACIÓN CORRECTA HASTA LECTURA DE MEDIDOR FV","control_container_reactive_mode":"MODO REACTIVO","control_container_real_mode":"MODO REAL","control_container_reset":"Restablecer","control_container_site_control":"CONTROL DEL EMPLAZAMIENTO","control_container_site_limits":"LÍMITES DEL EMPLAZAMIENTO","control_container_site_max_power":"POTENCIA MÁXIMA DEL EMPLAZAMIENTO","control_container_site_min_power":"POTENCIA MÍNIMA DEL EMPLAZAMIENTO","control_container_submit":"Enviar","control_container_submitting_control":"Enviando control","control_start":"INICIAR","control_stop":"DETENER","current_password_placeholder_text":"Introduzca su contraseña actual","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Amp {id}","current_transformer_item_view_battery_ct":"Batería","current_transformer_item_view_calculated_reading":"Calculada:","current_transformer_item_view_conductor_ct":"Conductor","current_transformer_item_view_ct_voltage_pairing_1":"Fase L1","current_transformer_item_view_ct_voltage_pairing_2":"Fase L2","current_transformer_item_view_ct_voltage_pairing_3":"Fase L3","current_transformer_item_view_ct_voltage_pairing_default":"Fase predeterminada","current_transformer_item_view_doubled_solar_ct":"Solar (1CT x2)","current_transformer_item_view_flip":"Invertir","current_transformer_item_view_generator_ct":"Generador","current_transformer_item_view_load_ct":"Carga","current_transformer_item_view_measure_pw_plus_input":"Midiendo un inversor Powerwall+","current_transformer_item_view_measured_reading":"Por CT:","current_transformer_item_view_missing_ct":"Falta","current_transformer_item_view_no_reading":"Sin lectura","current_transformer_item_view_none_ct":"Ninguno","current_transformer_item_view_phase_sequence_dropdown_title":"Fase","current_transformer_item_view_site_ct":"Sitio","current_transformer_item_view_smart_ct":"Inteligente","current_transformer_item_view_solar_ct":"Solar","current_transformer_item_view_solar_rgm_ct":"Solo ingresos de energía solar","current_transformers_container_800a_ct_ensure":"Asegúrese de que la selección de CT de esta página coincide con lo que está instalado.","current_transformers_container_800a_ct_larger":"Los CT de 800 A tienen un tamaño físico mayor que los CT de 200/264 A.","current_transformers_container_800a_ct_use_case":"Para medir conductores o paneles grandes (como 400 A/800 A), utilice y configure el CT de 800 A.","current_transformers_container_amps_explanation":"Corriente que fluye a través del transformador de corriente","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Asegúrese de que el CT esté instalado en la fase correcta ({sequence}).","current_transformers_container_configure_subtitle":"Configure los transformadores de corriente del medidor.","current_transformers_container_ct_flipping_ensure_direction":"En primer lugar, asegúrese de que la etiqueta del CT esté mirando hacia el inversor solar (para CT solar) o mirando hacia la alimentación de la red (para el CT del emplazamiento). A continuación, compruebe el cableado de la fase y verifique las lecturas indicadas de corriente, potencia y factor de potencia.","current_transformers_container_ct_flipping_modal_title":"Invertir TC en el software","current_transformers_container_ct_flipping_software_incorrect_metering":"Si se utiliza el software para invertir un TC instalado en la fase incorrecta producirá una lectura incorrecta.","current_transformers_container_ct_flipping_wrong_phase":"Una lectura de potencia negativa puede indicar que el CT está instalado hacia atrás o en la fase incorrecta.","current_transformers_container_double_check_recommendation":"Antes de continuar, compruebe el cableado, las derivaciones de voltaje, los TC y la configuración del medidor.","current_transformers_container_doubled_solar_ct_explanation":"Se puede utilizar un TC individual para medir un inversor FV compensado","current_transformers_container_doubled_solar_ct_modal_title":"Medición de un inversor solar de fase dividida con un CT","current_transformers_container_grid_code_phase_modal_title":"Advertencia: El número de TC no coincide con la recomendación de fase del código de red","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Advertencia: El número de TC no coincide con la recomendación de fase del código de red para varios medidores","current_transformers_container_grid_code_phase_multiple_warnings_message":"Un número inesperado de TC está conectado a los siguientes medidores {numMeters}:","current_transformers_container_grid_code_phase_warning_message":"Un número de CT inesperado está agregado al siguiente medidor:","current_transformers_container_grid_code_single_phase_warning":"El código de rejilla aplicado es monofásico. Los sistemas monofásicos normalmente tienen un servicio ya sea monofásico o trifásico. {lb} Se recomienda un número impar de TC (1 o 3).","current_transformers_container_grid_code_split_phase_warning":"El código de retícula aplicado es de fases separadas. Los sistemas de fases-separadas comúnmente tienen un TC en cada \\"caliente\\" conductor. {lb} Se recomienda un número par de TC (2 o 4).","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"Se necesita un contador Neurio que mida los inversores solares Powerwall+ para habilitar la medición del grado de ingresos (Revenue Grade Metering, RGM).","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Seleccione Sí si este mide un inversor solar Powerwall+. Seleccione No si este mide un inversor solar que no forma parte de un conjunto Powerwall+.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"¿Está midiendo un inversor Powerwall+?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Asegúrese de que la etiqueta del CT mire hacia el inversor solar.","current_transformers_container_label_modal_title":"Explicación de las Etiquetas","current_transformers_container_load_ct_ensure":"Al configurar los CT de carga, asegúrese de que se miden todas las cargas del emplazamiento y que se miden por separado las cargas con respaldo y sin respaldo.","current_transformers_container_load_ct_modal_title":"CT de carga","current_transformers_container_load_ct_recommended":"Solo se recomienda configurar los CT de carga para usos específicos donde no es posible configurar el CT de un emplazamiento.","current_transformers_container_meter_id":"Medidor {id}","current_transformers_container_no_load_and_site_ct":"No puede haber a la vez un CT de carga y un CT del emplazamiento.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"No puede haber cargas detrás del CT.","current_transformers_container_no_site_or_load_warning":"NO HAY EMPLAZAMIENTOS O TRANSFORMADORES DE CORRIENTE DE CARGA CONFIGURADOS","current_transformers_container_no_solar_ct_warning":"NO HAY TRANSFORMADOR DE CORRIENTE SOLAR CONFIGURADO","current_transformers_container_no_solar_inverter_warning":"NO HAY UN INVERSOR SOLAR CONFIGURADO","current_transformers_container_phase_usages_modal_title":"Advertencia: La configuración del CT no coincide con la configuración de la fase","current_transformers_container_phase_usages_warning":"El número de fases configuradas no coincide con el número de CT configurados. Se recomienda(n) {lb} {num} de CT configurado(s).","current_transformers_container_phase_usages_warning_message":"Número inesperado de CT conectados al medidor o medidores siguiente(s):","current_transformers_container_power_amperage_configure_warning":"{type} El Transformador de Corriente requiere ambos, energía y amperaje positivos, para poder ser configurado correctamente.","current_transformers_container_power_factor_explanation":"Factor de potencia (Potencia_Real / Potencia_Aparente). Sólo se muestra para altos niveles de potencia. Para cargas resistivas comunes, el factor de potencia debe ser cercano a 1. Un factor de potencia bajo puede indicar que un transformador de corriente está instalado de manera incorrecta, o que hay cargas capacitivas/inductivas muy grandes.","current_transformers_container_power_factor_out_of_range_warning":"La medición del factor de potencia está fuera del rango esperado. {lb} Factor de potencia medido: {powerFactor} PF {lb} Puede que el medidor esté instalado de manera incorrecta o en una fase incorrecta, o que haya cargas capacitivas/inductivas demasiado grandes.","current_transformers_container_system_test_configured_incorrect":"Advertencia: El TC {id} podría estar configurado incorrectamente","current_transformers_container_title":"Transformadores de corriente","current_transformers_container_voltage_out_of_range_warning":"El voltaje está fuera del rango {lb} Voltaje medido: {volts} V {lb} El voltaje medido de este CT está fuera del rango normal de operación.","current_transformers_container_volts_explanation":"Voltaje de línea a neutro en la toma de tensión asociada con el transformador de corriente","current_transformers_container_watts_explanation":"Potencia como corriente que fluye a través del transformador de corriente multiplicada por el voltaje de la toma de tensión asociada","customer_installation_view_email_label":"CORREO ELECTRÓNICO DEL CLIENTE","customer_installation_view_email_placeholder":"Correo electrónico","customer_registration_view_address_label":"DIRECCIÓN","customer_registration_view_address_placeholder":"Dirección","customer_registration_view_city_label":"CIUDAD","customer_registration_view_city_placeholder":"Ciudad","customer_registration_view_clear_form":"BORRAR FORMULARIO","customer_registration_view_country_label":"país","customer_registration_view_customer_information":"INFORMACIÓN DEL CLIENTE","customer_registration_view_email_address_label":"CORREO ELECTRÓNICO","customer_registration_view_email_address_label_confirmation":"REINTRODUCIR CORREO ELECTRÓNICO","customer_registration_view_email_placeholder":"Correo electrónico","customer_registration_view_family_name_label":"APELLIDOS","customer_registration_view_family_name_warning":"Introduzca los apellidos del cliente.","customer_registration_view_given_name_label":"NOMBRE DE PILA","customer_registration_view_given_name_warning":"Introduzca el nombre del cliente.","customer_registration_view_homeowner_family_name_placeholder":"Apellidos","customer_registration_view_homeowner_given_name_placeholder":"Nombre","customer_registration_view_installation_address":"DIRECCIÓN DE LA INSTALACIÓN","customer_registration_view_phone_number_label":"TELÉFONO","customer_registration_view_phone_placeholder":"Teléfono","customer_registration_view_skip_explanation":"Si se omite, para tener acceso al sistema, el propietario antes tendrá que realizar el registro por sí mismo a través de la app móvil de Tesla.","customer_registration_view_state_placeholder":"Estado","customer_registration_view_state_province_region_label":"ESTADO/PROVINCIA/REGIÓN","customer_registration_view_zip_label":"CÓDIGO POSTAL","customer_registration_view_zip_placeholder":"Código postal","diagnostic-alert-affected-children":"Componentes afectados ({count})","diagnostic-alerts-missing-alert-information":"Falta información sobre la alerta","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Artículo de Toolbox","diagnostic-alerts-toolbox-article-external-link":"Enlaces externos","diagnostic_alert_alert_name":"Nombre de alerta","diagnostic_alert_alert_type":"Tipo de alerta","diagnostic_alert_audience":"Destinatarios","diagnostic_alert_clear_condition":"Borrar condición","diagnostic_alert_description":"Descripción","diagnostic_alert_display_name":"Nombre mostrado","diagnostic_alert_id":"ID de alerta","diagnostic_alert_impact_category":"Categoría del impacto","diagnostic_alert_latching":"Enclavamiento","diagnostic_alert_max":"Máx.","diagnostic_alert_min":"Mín.","diagnostic_alert_name":"Nombre","diagnostic_alert_node":"Nodo","diagnostic_alert_offset":"Desviación","diagnostic_alert_payload_signals":"Señales de datos","diagnostic_alert_potential_impact":"Impacto potencial","diagnostic_alert_safety_reason":"Motivo de seguridad","diagnostic_alert_scale":"Escala","diagnostic_alert_set_condition":"Establecer condición","diagnostic_alert_signal_name":"Nombre de la señal","diagnostic_alert_signoff":"Cerrar sesión","diagnostic_alert_sna_value":"Valor de SNA","diagnostic_alert_supplier_dtc_name":"Proveedor de nombre de DTC","diagnostic_alert_uiID":"ID de UI","diagnostic_alert_units":"Unidades","diagnostic_alert_urgent":"Urgente","diagnostic_category_item_view_alerts_description":"Alertas de sitios, componentes y subcomponentes","diagnostic_category_item_view_download_results":"RESULTADOS DE LA DESCARGA","diagnostic_category_item_view_internal_comms_description":"Compruebe las comunicaciones de todos los dispositivos","diagnostic_category_item_view_internal_comms_title":"Comunicaciones del dispositivo","diagnostic_category_item_view_live_results":"RESULTADOS EN VIVO","diagnostic_category_item_view_metering_description":"Compruebe las conexiones del medidor","diagnostic_category_item_view_metering_title":"Medición","diagnostic_category_item_view_networking_description":"Compruebe la conexión de red","diagnostic_category_item_view_networking_title":"Redes","diagnostic_category_item_view_no_selected_tests":"NO HAY PRUEBAS SELECCIONADAS","diagnostic_category_item_view_rerun_selected":"VOLVER A EJECUTAR {num} PRUEBAS SELECCIONADAS","diagnostic_category_item_view_rerun_selected_test":"VOLVER A EJECUTAR LA PRUEBA SELECCIONADA","diagnostic_category_item_view_run_selected":"EJECUTAR {num} PRUEBAS SELECCIONADAS","diagnostic_category_item_view_run_selected_test":"EJECUTAR LA PRUEBA SELECCIONADA","diagnostic_category_item_view_select_all_tests":"Seleccionar todo","diagnostic_category_item_view_self_tests_description":"Inicie las pruebas de carga y descarga en el sistema","diagnostic_category_item_view_self_tests_title":"Autocomprobaciones","diagnostic_category_item_view_toggle_all_tests":"Activar/Desactivar todo","diagnostic_input_view_blocks_label":"BLOQUES","diagnostic_input_view_individual_test_name_label":"NOMBRE DE PRUEBA INDIVIDUAL","diagnostic_input_view_max_allowed_charge_power_label":"POTENCIA DE CARGA MÁXIMA PERMITIDA","diagnostic_input_view_max_allowed_discharge_power_label":"POTENCIA DE DESCARGA MÁXIMA PERMITIDA","diagnostic_test_enable_line":"Línea de habilitación","diagnostic_test_item_view_ac_self_test_description":"Autocomprobación de corriente alterna","diagnostic_test_item_view_ac_self_test_description_2":"Ejecuta una secuencia de pruebas de pérdida de potencia en el sistema de CA. Los sistemas Powerpack utilizarán la configuración “MAX_ALLOWED_POWER”. Ajústelos a 0 para los sistemas Megapack y Supercharger.","diagnostic_test_item_view_dc_self_test_description":"Autocomprobación de corriente continua","diagnostic_test_item_view_dc_self_test_description_2":"Ejecuta una secuencia de pruebas en el sistema de CC, que incluyen comprobaciones térmicas.","diagnostic_test_item_view_enable_line_description":"Pruebe si hay tensión en la línea de habilitación para todos los Powerwall","diagnostic_test_item_view_enable_line_resolution":"Accione la línea de habilitación y vuelva a intentarlo","diagnostic_test_item_view_individual_self_test_description":"Seleccione en la lista de autocomprobaciones disponibles en los controladores de bus configurados.","diagnostic_test_item_view_meter_comms_description":"Use el comando ping para comprobar las comunicaciones del medidor","diagnostic_test_item_view_network_connection_description":"Pruebe la conexión a Internet y a los servidores de Tesla","diagnostic_test_item_view_network_connection_resolution":"Reconfigure las conexiones de las redes","diagnostic_test_item_view_resolution_generic_text":"Reconfigure {name} e inténtelo de nuevo","diagnostic_test_item_view_step_canceled":"La prueba ha sido cancelada por el usuario","diagnostic_test_item_view_step_config_update_status":"Compruebe el estado del servidor de configuración de Tesla","diagnostic_test_item_view_step_google_http":"Hacer ping a HTTP de Google","diagnostic_test_item_view_step_google_https":"Hacer ping a HTTPS de Google","diagnostic_test_item_view_step_hermes_status":"Compruebe el estado del servidor de registro de Tesla","diagnostic_test_item_view_step_results_ip_address":"Dirección IP","diagnostic_test_item_view_step_results_subnet_mask":"Subred","diagnostic_test_item_view_table_header_key":"Identificador","diagnostic_test_item_view_table_header_name":"Paso","diagnostic_test_item_view_table_header_value":"Valor","diagnostic_test_meter_comms":"Comunicaciones del medidor","diagnostic_test_network_connection":"Conexión de red","diagnostics_composite_view_no_tests_found":"NO SE ENCUENTRAN PRUEBAS DISPONIBLES","diagnostics_composite_view_run_all_selected_tests":"REALIZAR TODAS LAS PRUEBAS SELECCIONADAS","diagnostics_container_industrial_disruptive_tests_description":"Las pruebas siguientes activaran el funcionamiento del ventilador y los sistemas térmicos, que generarán ruido. Se debe esperar un consumo aproximado de 30 kW por inversor Además, las pruebas siguientes pueden alterar el funcionamiento normal del sistema:","diagnostics_container_required_inputs_description":"Las siguientes pruebas requieren entradas adicionales:","diagnostics_container_residential_disruptive_tests_description":"Las pruebas siguientes pueden alterar el funcionamiento normal tanto del Gateway como del Powerwall:","diagnostics_container_stop_test_title":"¿Detener la prueba {name}?","diagnostics_container_subtitle":"Herramientas para diagnosticar problemas en la instalación del sistema.","diagnostics_container_tests_running":"Pruebas diagnóstico ejecutándose","diagnostics_container_title":"Diagnósticos","disabled_reason_battery_breaker_open":"El interruptor de batería está abierto","disabled_reason_checking_firmware_update":"Comprobando si hay actualizaciones de firmware","disabled_reason_config":"Desactivado por archivo de configuración","disabled_reason_excessive_voltage_drop":"Caída de tensión excesiva","disabled_reason_firmware_update_failed":"Error en la actualización del firmware","disabled_reason_firmware_update_in_progress":"Actualización de firmware en curso","disabled_reason_gridcode_write_failed":"Falló la configuración del código de red eléctrica","disabled_reason_user_requested":"Desactivado a petición del usuario","dropdown_default_placeholder":"Escriba...","dropdown_list_view_not_listed_label":"No está en la lista: \\"{searchText}\\"","dropdown_list_view_select_all":"Seleccionar todo","dropdown_list_view_select_field":"Seleccione un campo.","dropdown_list_view_show_complete":"CAMBIAR A LISTA COMPLETA","dropdown_list_view_show_searchable":"CAMBIAR A LISTA DE BÚSQUEDA","enumeration_warning_details_miswired_12v":"Cuando se conectan dos Powerwall+, solo la unidad conectada al Gateway/Backup Switch debe tener 12 V aplicados. Para que desaparezca esta advertencia, desconecte la alimentación de 12 V de todos los Powerwall+ subsiguientes en la cadena y, después, pulse Volver a buscar dispositivos (en la parte inferior de esta página).","enumeration_warning_details_multiple_controllers_gateway":"Desenchufe el arnés de alimentación de todos los controladores del emplazamiento Powerwall+ situado en la parte superior derecha del Conjunto solar.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Desenchufe el arnés de alimentación del controlador del emplazamiento Expansion Powerwall+ (no conectado al Backup Switch), ubicado en la parte superior derecha del Conjunto solar.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Desenchufe el arnés de alimentación de todos los controladores del emplazamiento Powerwall+ situado en la parte superior derecha del Conjunto solar. Ponga en servicio el sistema conectándose al Backup Gateway.","enumeration_warning_details_multiple_controllers_unknown":"En una configuración multi-Powerwall+ con cableado CAN solo debe tener alimentación un controlador del emplazamiento.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Únicamente debe estar activo un controlador de emplazamiento. Cuando utilice Backup Gateway, desconecte todos los controladores Powerwall+. Cuando utilice un Backup Switch, desconecte todos controladores Powerwall+ excepto uno. Ejecutar wizard está deshabilitado hasta que solo haya un controlador de emplazamiento activo.","enumeration_warning_title_miswired_12v":"Error de cableado de 12 V","enumeration_warning_title_multiple_controllers":"Hay varios controladores del emplazamiento activos","error_details":"Detalles de error","error_item_view_check_network":"Compruebe la conexión de red.","error_item_view_disconnected":"Desconectado del Gateway. Compruebe la conexión de red y {refresh}","error_item_view_forgot_password":"Haga clic para restablecer la contraseña.","error_item_view_refresh_browser":"Actualice el navegador.","error_item_view_try_logging_in_again":"Intente iniciar sesión de nuevo.","ethernet_view_backup_dns_label":"SERVIDOR DNS DE RESPALDO","ethernet_view_backup_dns_warning":"Servidor DNS de respaldo válido","ethernet_view_configuration_label":"CONFIGURACIÓN","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY","ethernet_view_gateway_warning":"IP de Gateway (router) válida","ethernet_view_ip_address_label":"DIRECCIÓN IP","ethernet_view_ip_address_warning":"Dirección IP válida","ethernet_view_not_available":"No disponible","ethernet_view_primary_dns_label":"SERVIDOR DNS PRIMARIO","ethernet_view_primary_dns_warning":"Servidor DNS primario válido","ethernet_view_static_label":"Estática","ethernet_view_subnet_mask_label":"MÁSCARA DE SUBRED (OPC)","ethernet_view_subnet_mask_warning":"Máscara de subred válida","factory_reset_message":"Esto hará que la unidad se restablezca al estado por defecto que establece Tesla. Esta acción no se puede deshacer. Para que pueda funcionar, un instalador profesional deberá poner en servicio la unidad de nuevo. Es posible que tenga que volver a conectarse a la red Wi-Fi de la unidad.","field_false":"Falso","field_true":"Verdadero","follower_powerwall_message":"Este Powerwall está controlado por {leader}","follower_powerwall_title":"Powerwall seguidor","form_legend_text":"indica un campo obligatorio","generation_container_connecting_status":"Conectando","generation_container_connection":"Conexión de inversor {id}","generation_container_connection_summary":"Durante este proceso de conexión, es posible que se le desconecte temporalmente de la red. {lb} Compruebe que vuelve a conectarse a la red correcta. Puede tardar hasta 3 minutos.","generation_container_subtitle":"Añadir tanto la información del inversor solar como la del generador a continuación.","generation_container_title":"Generación","generator_item_view_disconnect_type_label":"TIPO DE DESCONEXIÓN","generator_item_view_generator":"GENERADOR {id}","generator_item_view_manufacturer_label":"FABRICANTE (OPC)","generator_item_view_model_label":"MODELO","generator_item_view_serial_label":"N.º DE SERIE","generator_item_view_sustained_power_label":"POTENCIA MANTENIDA","generator_view_add_generator":"AÑADIR GENERADOR","grid_code_container_off_grid_confirmation":"¿El sistema esta desconectado de la red?","grid_code_container_off_grid_detected":"Se ha detectado que el sistema está fuera de red. Asegúrese de que esta sea la configuración correcta.","grid_code_container_off_grid_warning":"{warning}: No se pudo detectar el estado de la red del sistema. Configurar el estado incorrecto de fuera de red puede resultar en fallo del sistema.","grid_code_container_results":"Resultados de la detección de red.","grid_code_container_retrieving":"Recuperando códigos de red","grid_code_container_saving":"Guardando código de red eléctrica","grid_code_container_subtitle":"Basándose en la ubicación y en las lecturas de los contadores, encuentre la mejor configuración para su instalación.","grid_services_view_grid_services":"Servicios de red eléctrica","heading_change_password":"Cambiar la contraseña","help_view_how_password":"Cómo encontrar la contraseña en un Gateway","help_view_how_password_description":"Abra la puerta del Gateway La contraseña se encuentra en la etiqueta después de \\"Password:\\"","help_view_how_serial_number":"Cómo encontrar el número de serie en un Gateway que no es de respaldo","help_view_how_serial_number_backup":"Cómo encontrar el número de serie en un Gateway de respaldo","help_view_how_serial_number_backup_description":"Abra la puerta del Gateway de respaldo El número de serie comienza con \\"(S):\\"","help_view_how_serial_number_description":"Abra la puerta del Gateway El número de serie comienza con \\"(S):\\"","help_view_how_to_enable_line":"Enlazar un Powerwall para activarlo o desactivarlo","help_view_how_to_enable_line_description":"Apague el interruptor del Powerwall y vuelva a encenderlo. En sistemas con varios Powerwall, solo necesita accionar un interruptor","hierarchy_charger":"Bloque de cargadores {name}","hierarchy_chinv":"VFD para compresor y calentador (CHINV)","hierarchy_converter":"Convertidor CC-CC (STARC)","hierarchy_inverter":"Bloque de baterías {name}","hierarchy_mega_thermal_controller":"Controlador térmico (MPTHC)","hierarchy_missing_post":"Falta poste","hierarchy_mpbc":"Bloque de baterías {name}","hierarchy_part_number":"Número de pieza","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Informe de pods","hierarchy_post":"Poste (LCC)","hierarchy_posts":"Postes","hierarchy_power_stage":"Etapa de potencia","hierarchy_power_stages":"Etapas de potencia","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Panel de gestión de la batería (QBMS)","hierarchy_qhvp":"Procesador de alta tensión (QHVP)","hierarchy_scthcs":"Controladores térmicos","hierarchy_serial_number":"Número de serie","hierarchy_sitemaster":"Registro principal de la instalación {name}","hierarchy_starcs":"Convertidores CC-CC","hierarchy_stitch":"Control de potencia CC-CC (STITCH)","hierarchy_thermal_controller":"Controlador térmico (SCTHC)","higher_order_login_login_required":"Es necesario iniciar sesión","higher_order_login_title":"Comencemos.","home_container_caution":"⚠️ Precaución","home_container_caution_deenergize":"Para desenergizar el sistema de forma segura, apague todos los interruptores del Powerwall.","home_container_caution_energized":"El sistema podría seguir energizado si las cadenas solares están conectadas.","home_container_inactive_meter":"Datos de medidor antiguos","home_container_inactive_meter_description":"Compruebe la conexión del medidor {type}.","home_container_inactive_meter_timestamp":"Última lectura del medidor: {timestamp}","home_container_login_required":"Es necesario iniciar sesión","home_container_missing_meter":"Falta un medidor","home_container_positive_meter":"Advertencia: Es posible que el medidor {type} esté configurado incorrectamente","home_container_positive_meter_description":"El medidor {type} requiere que tanto la potencia positiva como el amperaje estén correctamente configurados.","home_container_powerwall_error":"Error del sistema Powerwall","home_container_powerwall_start_error":"incapaz de iniciar el sistema: {reason}","home_container_site_controller_error":"Error del sistema del controlador del emplazamiento","home_container_sitemaster_alternative":"Nota: Normalmente el sistema debería desactivarse al apagar el interruptor de activación de todos los Powerwall y abriendo sus disyuntores.","home_container_sitemaster_confirm":"Haga clic en Sí a continuación solo si está seguro de que el sistema debería detenerse.","home_container_sitemaster_confirm_industrial":"¿Confirma que desea detener el sistema?","home_container_sitemaster_confirm_wizard":"Para ejecutar el Asistente es preciso que el sistema esté detenido. ¿Proceder y detener el sistema?","home_container_sitemaster_header_warning":"{warning} Se detendrá el funcionamiento del Powerwall y del sistema.","home_container_sitemaster_header_warning_industrial":"{warning} Este sistema se encuentra en un estado en el que Tesla no recomienda detenerlo. Motivo: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} Este sistema se encuentra en un estado en el que Tesla no recomienda detenerlo. Motivo: \\"{reason}\\"","home_container_sitemaster_logging":"Mientras el sistema esté desconectado, el registro se detendrá","home_container_sitemaster_reset":"Para iniciar el sistema después de haber sido apagado, haga clic en el botón de la página de inicio.","home_container_sitemaster_update":"Si hay alguna actualización en curso, se finalizará","home_container_start_powerwall":"Iniciar sistema","home_container_start_system_button":"INICIAR SISTEMA","home_container_stop_powerwall":"Detener sistema","home_container_stop_system_button":"DETENER SISTEMA","home_view_compliance":"CUMPLIMIENTO","home_view_download_all_logs":"Descargar todos los registros","home_view_download_logs":"DESCARGAR REGISTROS","home_view_download_logs_description_one":"Esto descarga un juego comprimido de registros del sistema que pueden ser útiles para diagnosticar problemas del sistema operativo, del software y de las redes.","home_view_download_logs_description_three":"Los registros están firmados y cifrados y se deben enviar al Servicio de Tesla Energy para su análisis.","home_view_download_logs_description_two":"Esto es especialmente útil cuando el Gateway no se puede conectar a la red y se necesita una solución de problemas avanzada.","home_view_login":"INICIAR SESIÓN","home_view_logout":"CERRAR SESIÓN","home_view_run_wizard":"EJECUTAR ASISTENTE","input_accept":"Acepto","input_confirm":"Acuso recibo de todas las advertencias del sistema.","input_consent":"Doy mi consentimiento","input_decline":"No acepto","input_no_consent":"No doy mi consentimiento","input_title_email":"Introduzca una dirección de correo electrónico válida: nombre@nombre.dominio","installation_container_relay_section_modal_title":"Relé de baja tensión del Gateway","installation_container_residual_current_device_modal_title":"Requisito de instalación para los interruptores diferenciales del emplazamiento","installation_container_subtitle":"Información sobre el instalador y el sitio","installation_container_sync_relay_usage_open_off_grid":"Relé abierto en estado desconectado de la red eléctrica","installation_container_title":"Información de instalación","installation_problem_detail_site_shutdown_0":"Para volver a habilitar el sistema:","installation_problem_detail_site_shutdown_1":"Encienda todos los interruptores ON/OFF del Powerwall","installation_problem_detail_site_shutdown_2":"Cierre las paradas de emergencia","installation_problem_detail_site_shutdown_3":"Asegúrese de que los puentes de apagado rápido están correctamente instalados","installation_problem_detail_site_shutdown_4":"Compruebe el cableado del circuito de apagado.","installation_problem_detail_title_site_shutdown":"Circuito de apagado del emplazamiento activado","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Circuito de apagado del emplazamiento activado por un apagado rápido de Powerwall+.","installation_problem_details_pvacs_with_no_solar_rgm":"Los medidores solares solo son necesarios cuando se miden inversores solares que no forman parte de un conjunto Powerwall+. Los medidores que miden un inversor Powerwall+ deben estar marcados como tales en la página de transformadores de corriente.","installation_problem_details_too_few_solar_rgm":"El número de TC que miden un inversor solar Powerwall+ debe coincidir con el número de inversores solares Powerwall+. Ejecute el wizard, empareje el medidor Neurio si fuera necesario y ajuste la configuración del TC en la página de transformadores de corriente.","installation_problem_details_too_many_solar_rgm":"El número de TC que miden un inversor solar Powerwall+ debe coincidir con el número de inversores solares Powerwall+. Ejecute el wizard y ajuste la configuración del TC en la página de transformadores de corriente.","installation_problem_title_pvacs_with_no_solar_rgm":"Medidor solar que no mide un inversor Powerwall+. ¿Es esto correcto?","installation_problem_title_site_shutdown":"Activado circuito de apagado del emplazamiento. Todos los inversores solares Powerwall y Powerwall+ están deshabilitados.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Circuito de apagado del emplazamiento activado por un apagado rápido de Powerwall+. Todos los inversores solares Powerwall y Powerwall+ están deshabilitados.","installation_problem_title_too_few_solar_rgm":"Hay muy pocos medidores solares midiendo el inversor Powerwall+","installation_problem_title_too_many_solar_rgm":"Hay demasiados medidores solares midiendo el inversor Powerwall+","installation_view_add_on_solar":"Agregar-en","installation_view_additional_connections_label":"CONEXIONES ADICIONALES","installation_view_back_wiring":"Anterior","installation_view_backup_configuration_label":"CONFIGURACIÓN DE RESPALDO","installation_view_basement_location":"Sótano","installation_view_company_label":"NOMBRE DE LA EMPRESA","installation_view_company_placeholder":"Nombre de la empresa","installation_view_conditioned_space_location":"Espacio condicionado","installation_view_existing_solar":"Existente","installation_view_floor_mounting":"Piso","installation_view_garage_location":"Cochera","installation_view_home_label":"CABLEADO DOMÉSTICO","installation_view_location_label":"LUGAR DE INSTALACIÓN POWERWALL","installation_view_modem_ethernet":"¿Hay conexión de módem celular a ethernet?","installation_view_modem_wifi":"¿Hay conexión de módem celular a wifi?","installation_view_mounting_label":"MONTAJE DE POWERWALL","installation_view_na_backup_configuration":"No aplicable","installation_view_new_solar":"Nuevo","installation_view_none_solar":"Ninguno","installation_view_outdoor_location":"Exterior","installation_view_pad_mounting":"Base","installation_view_partial_home_backup_configuration":"Parte de la casa","installation_view_phone_label":"TELÉFONO","installation_view_phone_placeholder":"Número de teléfono del instalador","installation_view_powerline_ethernet":"¿Hay conexión de línea de potencia a ethernet?","installation_view_pv_panel":"Panel FV","installation_view_relay_enabled":"Relé abierto en estado desconectado de la red eléctrica","installation_view_relay_label":"RELÉ DE BAJA TENSIÓN DEL GATEWAY","installation_view_relay_options_modal_content":"Cuando está conectado a la red o a otra fuente de alimentación de CA, este relé estará cerrado. {lb1} Cuando está desconectado de la red, este relé estará abierto. {lb1} Como ejemplo, se puede usar para que el aire acondicionado funcione con conexión a la red eléctrica y no funcione cuando está desconectado de la red eléctrica para impedir que la alta corriente de irrupción asociada sobrecargue los Powerwalls.","installation_view_relay_section_modal_content":"El Gateway tiene un relé integrado que se controla para activarse o desactivarse en función del estado del sistema. {lb1} Se puede usar para controlar un dispositivo externo, como una carga o una fuente de energía secundaria. {lb1} En el Gateway de respaldo 1, utilice los terminales 1 y 2 del conector auxiliar (conector Phoenix grande de color verde de 9 terminales). {lb1} En el Gateway de respaldo 2, utilice los terminales 3 y 4 (GSO/GSI) del conector auxiliar (conector Phoenix de color verde de 5 terminales). {lb1} Este relé es de 60 voltios/2 amperios nominales y se suele utilizar con circuitos de 12 V o 24 V. {lb1} Para obtener más información, consulte las notas de aplicación sobre eliminación de cargas y temas relacionados.","installation_view_residual_current_device":"¿Tiene un interruptor diferencial instalado corriente arriba del Gateway?","installation_view_residual_current_device_modal_content":"Determinadas instalaciones, como las redes eléctricas con configuración de puesta a tierra de tipo TT, pueden requerir interruptores diferenciales (RCD). {lb1}{lb2} Para reducir el riesgo de disparo por interferencia durante el funcionamiento desconectado de la red, Tesla recomienda que todos los interruptores diferenciales corriente arriba tengan retardo (tipo S) o bien se reubiquen los interruptores diferenciales del emplazamiento después del contactor del Gateway si fuera posible. {lb1}{lb2} Para obtener información adicional, consulte la nota de aplicación sobre interruptores diferenciales y protección contra fallos.","installation_view_satellite_ethernet":"¿Hay conexión de satélite a Ethernet?","installation_view_satellite_wifi":"¿Hay conexión de satélite a Wi-Fi?","installation_view_side_wiring":"Lateral","installation_view_solar_label":"INSTALACIÓN SOLAR","installation_view_solar_panels":"Paneles solares","installation_view_solar_roof":"Techo solar","installation_view_solar_type_label":"TIPO INSTALACIÓN SOLAR","installation_view_solarglass":"Vidrio solar","installation_view_stack_kit":"¿Hay juego de Stack Kit?","installation_view_type_commercial":"Comercial","installation_view_type_label":"INFORMACIÓN DE INSTALACIÓN","installation_view_type_perm_off_grid":"Desconectada permanentemente de la red eléctrica","installation_view_type_residential":"Residencial","installation_view_wall_mounting":"Muro","installation_view_whole_home_backup_configuration":"Toda la casa","installation_view_wifi_extender":"¿Hay extensión de Wi-Fi?","installation_view_wiring_label":"CABLEADO DEL POWERWALL","inverter_test_view_accuracy_magnitude":"Precisión de magnitud","inverter_test_view_accuracy_time":"Precisión de hora","inverter_test_view_complete":"Completado","inverter_test_view_current_magnitude":"Magnitud de corriente","inverter_test_view_fail":"Falló","inverter_test_view_na":"No aplicable","inverter_test_view_not_run":"No ejecutado","inverter_test_view_pass":"Pasó","inverter_test_view_running":"En marcha","inverter_test_view_set_magnitude":"Establecer magnitud","inverter_test_view_set_time":"Establecer hora","inverter_test_view_test_description":"Llevando a cabo autocomprobación del inversor","inverter_test_view_test_name_all":"Todas las pruebas","inverter_test_view_test_name_over_freq_stage_one":"Sobrefrecuencia nivel 1","inverter_test_view_test_name_over_freq_stage_two":"Sobrefrecuencia nivel 2","inverter_test_view_test_name_over_volt_one":"Sobretensión nivel 1","inverter_test_view_test_name_over_volt_two":"Sobretensión nivel 2","inverter_test_view_test_name_under_freq_stage_one":"Baja frecuencia nivel 1","inverter_test_view_test_name_under_freq_stage_two":"Baja frecuencia nivel 2","inverter_test_view_test_name_under_volt_one":"Baja tensión nivel 1","inverter_test_view_test_name_under_volt_two":"Baja tensión nivel 2","inverter_test_view_timestamp":"Registro de la hora","inverter_test_view_trip_magnitude":"Magnitud de disparo","inverter_test_view_trip_time":"Hora de disparo","inverter_test_view_warning":"Nota: La prueba del inversor puede tardar de 20 a 30 minutos por inversor.","label_fail":"Falló","label_inconclusive":"No concluyente","label_pass":"Pasó","legal_container_customer_policy_subtitle":"Debe ser completado por el propietario de la vivienda.","legal_container_customer_policy_title":"Política sobre el Escudo de Privacidad del cliente y garantía limitada de Tesla","legal_container_no_meters_warning":"NO SE HAN CONFIGURADO MEDIDORES","legal_container_no_powerwalls_warning":"NO SE HAN DETECTADO POWERWALLS","login_type_customer":"Cliente","login_type_engineer":"Técnico","login_type_installer":"Instalador","login_view_cancel_login_auth":"Cancelar inicio de sesión","login_view_change_forgot_password":"CAMBIAR LA CONTRASEÑA O CONTRASEÑA OLVIDADA","login_view_compliance":"CUMPLIMIENTO","login_view_customer_email_placeholder":"Correo electrónico del cliente","login_view_email":"CORREO ELECTRÓNICO","login_view_email_placeholder":"Correo electrónico del instalador principal","login_view_forgot_password":"CONTRASEÑA OLVIDADA","login_view_forgot_password_login_type":"Seleccione el tipo de inicio de sesión","login_view_language_label":"IDIOMA","login_view_login_type_label":"TIPO DE INICIO DE SESIÓN","login_view_password_placeholder":"Ingrese su contraseña","login_view_start_login_auth":"COMENZAR PROCESO DE INICIO DE SESIÓN","login_view_start_login_auth_how_to_enable_line_description":"Para iniciar sesión, apague el interruptor de encendido del Powerwall y vuelva a encenderlo. En sistemas con varios Powerwall, solo necesita accionar un interruptor","login_view_username":"NOMBRE DE USUARIO","login_view_username_placeholder":"Nombre de usuario","login_warning_view_expand":"Si el Asistente no se ejecuta, {click}.","login_warning_view_firmware_update":"Si hay una actualización de firmware en curso","login_warning_view_heading":"{warning} Al iniciar el Asistente se detiene el funcionamiento de la batería.","login_warning_view_protect_system":"Para proteger al sistema, el Asistente no se ejecutará:","login_warning_view_stop_operation":"Forzar ejecución del Asistente (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Actualmente solo se admiten los navegadores web Chrome y Safari.","login_warning_view_system_force_launch":"Si desea ejecutar el Asistente y detener el funcionamiento del sistema, seleccione Forzar ejecución del Asistente.","login_warning_view_system_off_grid":"Si el sistema eléctrico no está conectado a la red","login_warning_view_warning_click":"haga clic para obtener más información","mater_item_view_bad_barcode":"Escaneado código de barras incorrecto","mater_item_view_barcode_scan_failed":"Fallo en el escaneo del código de barras","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Batería","meter_aggregate_type_load":"Carga","meter_aggregate_type_site":"Emplazamiento","meter_aggregate_type_solar":"Solar","meter_container_add_meter_error":"Comprobando medidor","meter_container_add_meter_status":"Añadiendo medidor","meter_container_authorizing_status":"Autorizando","meter_container_decode":"No ha sido posible descodificar el número de serie a partir de la imagen.","meter_container_detecting_status":"Detectando medidores cableados","meter_container_failed_status":"No se ha podido añadir el medidor","meter_container_reconnecting_status":"Reconectando","meter_container_skip_title":"No se ha puesto en servicio ningún medidor. ¿Confirma que desea continuar?","meter_container_starting_status":"Iniciando","meter_container_subtitle":"Para conectarlo, introduzca el ID breve y el número de serie del medidor de energía. Compruebe los medidores después de ponerlos en servicio.","meter_container_subtitle_industrial":"Introduzca las direcciones IP del medidor de energía y las ubicaciones para conectarse. Compruebe los medidores después de ponerlos en servicio.","meter_container_success_status":"Medidor añadido correctamente","meter_container_title":"Medidores","meter_container_unknown_status":"Desconocido","meter_container_updating_status":"Actualizando medidor","meter_container_verification":"Comprobación del {id} de medidor","meter_container_verification_gw1":"Durante este proceso de emparejamiento Wi-Fi, es posible que se le desconecte temporalmente de la red Wi-Fi del Gateway. {lb} Compruebe que vuelve a conectarse a la red correcta. Puede tardar hasta 3 minutos.","meter_container_verification_gw2":"El proceso de emparejamiento Wi-Fi puede tardar hasta 3 minutos.","meter_container_verify_meter_error":"Comprobando medidor","meter_container_verifying_status":"Comprobando medidor","meter_item_view_add_failed":"No se ha podido añadir el medidor","meter_item_view_add_failed_help":"Compruebe la identificación corta y el número de serie. Encienda y apague el medidor y conéctelo cuando suene el tono. Si el problema persiste, elimine el medidor y vuelva a intentarlo.","meter_item_view_advanced_settings":"CONFIGURACIÓN AVANZADA (OPCIONAL)","meter_item_view_battery_ct":"Batería","meter_item_view_battery_location":"Batería","meter_item_view_check_meter":"COMPROBAR CONEXIÓN DEL MEDIDOR {id}","meter_item_view_conductor_location":"Conductor","meter_item_view_cts":"{count} TC detectados","meter_item_view_doubled_solar_location":"Solar doble","meter_item_view_generator_location":"Generador","meter_item_view_ip_address":"DIRECCIÓN IP","meter_item_view_load_location":"Carga","meter_item_view_mac_address":"DIRECCIÓN MAC","meter_item_view_meter_location":"UBICACIÓN DEL MEDIDOR","meter_item_view_none_location":"Ninguna","meter_item_view_remote_ip_address_placeholder":"p. ej. 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"p. ej. 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"p. ej. OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"p. ej. 01234","meter_item_view_serial":"N.º DE SERIE","meter_item_view_short_id":"ID ABREVIADA","meter_item_view_site_ct":"Emplazamiento","meter_item_view_site_location":"Emplazamiento","meter_item_view_solar_ct":"Solar","meter_item_view_solar_location":"Solar","meter_item_view_solar_rgm_location":"Solo ingresos de energía solar","meter_item_view_success":"¡CONECTADO!","meter_item_view_unable":"NO HA SIDO POSIBLE LEER EL MEDIDOR","meter_item_view_upgrading":"EL MEDIDOR SE ESTÁ ACTUALIZANDO","meter_list_view_add":"AÑADIR MEDIDOR WI-FI","meter_list_view_add_ip":"AÑADIR MEDIDOR IP","meter_list_view_detect":"DETECTAR MEDIDORES CABLEADOS","meter_list_view_enable_inverter_readings":"Habilitar lecturas del inversor de batería","meter_list_view_inverter_meter":"MEDIDORES DE INVERSOR","meter_list_view_inverter_meter_desc":"Cuando está activado y no hay medidores de batería configurados, el controlador de la instalación utilizará las lecturas de los inversores de batería como medidor de batería.","meter_msa_id":"BACKUP SWITCH {id}","meter_sync_id":"SINCRONIZAR MEDIDOR {id}","meter_sync_x_id":"MEDIDOR PRIMARIO INTERNO X (GATEWAY) {id}","meter_sync_y_id":"MEDIDOR AUXILIAR INTERNO Y (GATEWAY) {id}","meter_update_modal_fetch_status_error":"Error: No se puede obtener el estado de actualización del medidor","meter_update_modal_footer":"La actualización del medidor puede tardar hasta 2 minutos","meter_update_modal_remaining_time":"Tiempo restante: {seconds} segundos","meter_update_modal_timeout_error":"Error: Tiempo de espera agotado mientras se actualizaba el medidor","meter_update_modal_title":"La actualización del medidor está en curso","meter_validation_container_error":"La validación del medidor no está disponible mientras el controlador del emplazamiento está ejecutándose.","meter_validation_container_error_placeholder":"Validación del medidor no disponible: {error}.","meter_validation_container_power_command":"Comando de potencia","meter_validation_container_power_start":"Iniciar","meter_validation_container_power_stop":"Detener","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Comando de potencia reactiva","meter_validation_container_real_power_command":"Comando de potencia real","meter_validation_container_show_per_phase":"Mostrar valores por fase","meter_validation_container_title":"Validación del medidor","meter_validation_container_usage":"Envíe un comando de potencia y valide los datos del medidor. Debe permanecer en esta página para mantener la continuidad del comando de potencia. Los valores negativos harán que el sistema cargue. Los valores positivos harán que el sistema descargue.","meter_validation_control_subtitle":"Control","meter_validation_control_title":"Título de control","meter_validation_disable":"Desactivar","meter_validation_loading":"Cargando","meter_validation_menu":"Menú","meter_validation_reset":"Restablecer","meter_validation_submit":"Enviar","meter_validation_submitting_control":"Enviando control","meter_validation_title":"Validación del medidor","meter_validation_view_apparent_power":"Potencia aparente (kVA)","meter_validation_view_battery_location":"Batería","meter_validation_view_conductor_location":"Conductor","meter_validation_view_current":"Corriente (A)","meter_validation_view_doubled_solar_location":"Solar doble","meter_validation_view_generator_location":"Generador","meter_validation_view_hz":"Hz","meter_validation_view_inverters":"Inversores ({length})","meter_validation_view_ka":"kA","meter_validation_view_kv":"kV","meter_validation_view_kvar":"kVAr","meter_validation_view_kw":"kW","meter_validation_view_kwh":"kWh","meter_validation_view_load_location":"Carga","meter_validation_view_meter":"Medidores ({length})","meter_validation_view_none_location":"Ninguna","meter_validation_view_pf":"Factor de potencia","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Promedio","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Total","meter_validation_view_reactive_power":"Potencia reactiva (kVAr)","meter_validation_view_real_power":"Potencia real (kW)","meter_validation_view_site_location":"Emplazamiento","meter_validation_view_solar_location":"Solar","meter_validation_view_solar_rgm_location":"Solo ingresos de energía solar","meter_validation_view_voltage":"Tensión (V)","meter_w1_wifi_id":"MEDIDOR {id}","meter_w1_wired_id":"MEDIDOR CABLEADO {id}","meter_w2_wifi_id":"MEDIDOR {id}","meter_w2_wired_id":"MEDIDOR CABLEADO {id}","meter_wifi_id":"Contador {id}","meter_wired_id":"MEDIDOR CABLEADO {id}","metrics_aggregate":"Sistema","metrics_apparent_power":"Potencia aparente ({unit})","metrics_battery":"Batería","metrics_current":"Corriente ({unit})","metrics_meter":"Medidor","metrics_no_metrics":"No hay métricas para mostrar.","metrics_power_factor":"Factor de potencia","metrics_reactive_power":"Potencia reactiva ({unit})","metrics_real_power":"Potencia real ({unit})","metrics_subtitle":"Métricas","metrics_voltage_l_n":"Tensión L-N ({unit})","modal_acknowledge":"CONFIRMAR","modal_confirm":"CONFIRMAR","modal_exit":"SALIR","modal_no":"NO","modal_note":"Nota","modal_ok":"Correcto","modal_reconfigure":"RECONFIGURAR","modal_yes":"SÍ","modbus_container_title":"Interfaz Modbus","modbus_table_register_address":"Dirección","modbus_table_register_name":"Nombre","modbus_table_register_type":"Tipo","modbus_table_register_value":"Valor","modbus_table_register_value_decimal":"Valor (decimal)","modbus_table_register_value_hex":"Valor (hex)","msa-off-grid":"Desconectado de la red eléctrica","msa-on-grid":"Conectado a la red eléctrica","navigation_email":"CORREO ELECTRÓNICO","network-switch-menu-item":"Conmutadores de red","network_cellular_configured":"Configurada, pero no conectada. Asegúrese de que haya red de telefonía móvil disponible y no haya obstrucciones alrededor de la antena.","network_connected":"Conectado","network_container_connect_ethernet":"Conectando a ethernet","network_container_connect_to_internet":"Espere hasta que el sistema intente conectarse a Internet.","network_container_connect_wifi":"Conectándose a {ssid}","network_container_connect_wifi_description":"Es posible que durante este proceso tenga que reconectarse a la red del Gateway para continuar la instalación.","network_container_connman":"El administrador de conexiones de red se conecta de manera dinámica a la red mejor.","network_container_connman_body":"Para garantizar la conexión, configure todos los tipos de conexión disponibles:","network_container_delete_network":"¿Borrar red configurada?","network_container_ethernet_and_wifi_warning":"Configure las redes Ethernet y Wi-Fi disponibles para garantizar la conexión.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configure las redes ethernet disponibles para garantizar la conectividad.","network_container_network_description":"Conéctese a Internet con todos los tipos de red disponibles.","network_container_network_subtitle":"Red","network_container_no_internet_bullet_four":"Powerwall puede enviar datos de rendimiento a Tesla para que la Asistencia técnica pueda identificar posibles problemas","network_container_no_internet_bullet_four_industrial":"Los dispositivos pueden enviar datos de rendimiento a Tesla para que la Asistencia técnica pueda identificar posibles problemas","network_container_no_internet_bullet_one":"La información de registro del Powerwall se envía a Tesla y se activa la garantía completa de 10 años","network_container_no_internet_bullet_three":"El cliente puede utilizar la aplicación móvil de Tesla para supervisar el uso de energía y controlar Powerwall","network_container_no_internet_bullet_two":"Powerwall puede recibir actualizaciones remotas de firmware, lo que permite mejoras de rendimiento y nuevas funciones","network_container_no_internet_bullet_two_industrial":"Los dispositivos pueden recibir actualizaciones remotas del firmware, lo que permite mejoras de rendimiento y nuevas funciones","network_container_no_internet_bullet_zero":"Antes de la puesta en marcha, se puede determinar si es necesario actualizar el firmware","network_container_no_internet_no_cell_title":"Si el emplazamiento de la instalación tiene una conexión a Internet disponible, no omita este paso. Conéctese al servicio de Internet del cliente a través de Ethernet (preferiblemente) o Wi-Fi.","network_container_no_internet_title":"Si el sitio de instalación tiene una conexión a Internet disponible, no omita este paso. Conecta Powerwall al servicio de Internet del cliente a través de Ethernet (preferido) o Wi-Fi, o establezca un enlace celular.","network_container_no_internet_warning":"Es importante establecer una conexión a internet fiable para:","network_container_scan_networks":"Escanear redes Wi-Fi","network_container_scan_wifi_disconnect_warning":"Advertencia: El escaneo de nuevas redes desconectará temporalmente la conexión inalámbrica.","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"Configure las redes Wi-Fi disponibles para garantizar la conectividad.","network_disabled":"Desactivado","network_disconnected":"No conectado","network_ethernet_configured":"Configurada, pero no conectada. Compruebe la conexión del cable Ethernet.","network_switches_container_discover_failure":"Último fallo de detección: {error}","network_switches_container_discover_switches":"Detectar conmutadores de red","network_switches_container_discovered_label":"Conmutadores de red detectados","network_switches_container_discovering_stop_button":"Detener detección","network_switches_container_discovery_switches_running_label":"Actualmente se está ejecutando la detección de conmutadores de red. Puede detener la detección a continuación.","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"Los conmutadores de red solo se admiten en sistemas industriales.","network_switches_container_password_not_set":"No se ha establecido contraseña","network_switches_container_password_set":"Se ha establecido contraseña","network_switches_container_passwords_error":"Estado de configuración de contraseña: {status}","network_switches_container_set_password_label":"Establezca una contraseña en los conmutadores de red que aún utilizan la contraseña predeterminada de fábrica.\\n A todas las contraseñas se asignará el mismo valor.","network_switches_container_set_passwords":"Establecer contraseñas","network_switches_container_set_passwords_button":"Establecer contraseña","network_switches_container_setting_passwords_button":"Configurando contraseña...","network_switches_container_start_discovering_button":"Iniciar detección","network_switches_container_start_discovery_help":"La detección de conmutadores de red se ejecuta de forma automática y periódica, pero puede activarse con el botón Iniciar búsqueda.","network_switches_container_subtitle":"Ver conmutadores de red","network_switches_container_title":"Conmutadores de red","network_view_check_connection":"COMPROBAR LA CONEXIÓN A INTERNET","network_view_connection_failed":"¡NO CONECTADO!","network_view_connection_success":"¡CONEXIÓN CORRECTA!","network_view_continue_no_internet":"CONTINUAR SIN INTERNET","network_view_default_error":"Error de conexión","network_view_local_network_connected":"Red local conectada","network_view_local_network_disconnected":"Error de red local","network_view_tesla_internet_connected":"Servicios de Tesla e Internet conectados","network_view_tesla_internet_disconnected":"Error de conexión de Servicios de Tesla e Internet","network_warning":"Advertencia","network_wifi_configured":"Configurada, pero no conectada. Compruebe su configuración Wi-Fi.","open_meter_validatiion_container_title":"Abrir validación del medidor","operation_mode_autonomous":"Modo autónomo","operation_mode_backup":"Carga de respaldo solamente","operation_mode_self_consumption":"Modo de autoconsumo","operation_mode_site_control":"Control del emplazamiento","overview_menu_control_title":"Control","overview_menu_diagnostics_title":"Diagnósticos","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Conectado","overview_menu_network_no_connection":"Sin conexión","overview_menu_registration_complete":"Completado","overview_menu_registration_incomplete":"Incompleto","overview_menu_registration_pending":"Conexión a internet pendiente","overview_menu_security_title":"Cambie o restablezca la contraseña","overview_menu_settings_title":"Configuración","overview_menu_summary_title":"Resumen","overview_menu_system_title":"Sistema","overview_menu_update_title":"Actualización de software","overview_menu_view_alerts_event":"Evento","overview_menu_view_alerts_events":"Eventos","overview_menu_view_inverter_title":"Prueba del inversor","overview_menu_view_network_title":"Red","overview_menu_view_registration_title":"Registro","overview_menu_view_test_title":"Prueba automática","overview_meter_validation_title":"Validación del medidor","password_generate_error":"Se ha producido un error al generar una nueva contraseña. Verifique la conectividad y la contraseña actual e inténtelo de nuevo.","password_generate_help_text":"Introduzca la contraseña existente para generar una nueva contraseña aleatoria.","password_generate_menu_title":"Cambiar contraseña","password_generate_notice":"Se ha cambiado la contraseña. Registre la nueva contraseña antes de salir de esta página.","phase_container_detect_timeout":"Tiempo agotado al detectar fase","phase_container_detection_attempt":"Intento n.º {num}","phase_container_grid_code_validating_modal_title":"Validando código de red","phase_container_grid_compliant_description":"Red conforme {checkmark}","phase_container_grid_modal_description":"La red será conforme en {time} segundos.","phase_container_grid_modal_title":"Esperando a la conformidad de la red","phase_container_modal_description":"La detección de fase puede tardar hasta 2 minutos por Powerwall.","phase_container_modal_title":"Realizando detección de fase","phase_container_saving_phases_modal_title":"Guardando fases","phase_container_subtitle":"Ver qué línea está activada en cada Powerwall y actualizar el estado de línea","phase_container_supported_error":"No se ha detectado ninguna Powerwall. No es posible la detección de fases.","phase_container_title":"Fase","phase_container_voltage_caution_body":"Tensión inesperada de {voltage} V detectada en {lineNumber}. Vuelva a comprobar si {lineStatus} es la configuración adecuada para esta fase.","phase_container_warning_body":"No se han seleccionado fases de respaldo. Por consiguiente, el sistema no admitirá ninguna carga cuando se pierda la conexión a la red.","phase_container_warning_modal_header":"La unidad de respaldo está desactivada","phase_line_id":"Línea {id}","phase_line_item_view_line":"Línea","phase_line_item_view_line_status_backup":"De respaldo","phase_line_item_view_line_status_configured":"Sin respaldo","phase_line_item_view_line_status_not_configured":"No configurado","phase_line_status_backup":"De respaldo","phase_line_status_configured":"Sin respaldo","phase_line_status_not_configured":"No configurada","phase_view_detect":"DETECTAR FASES","phase_view_split_phase":"Fase dividida","power_flow_view_go_off_grid":"DESCONECTARSE DE LA RED","power_flow_view_go_on_grid":"CONECTARSE A LA RED","power_flow_view_grid_button_disabled_reason":"Para desconectarse de la red, debe encenderse el sistema.","power_flow_view_grid_spinner_alt_label":"Sistema en transición","power_flow_view_start_system":"INICIAR SISTEMA","power_flow_view_stop_system":"DETENER SISTEMA","powerwall_container_industrial_no_additional_title":"No se encuentran bloques de baterías adicionales","powerwall_container_industrial_subtitle":"Se enumeran los bloques de baterías detectados automáticamente por el controlador del emplazamiento. Escanee de nuevo si el bloque de baterías no aparece en la lista.","powerwall_container_industrial_subtitle_auto_detection":"Se enumeran todos los bloques de baterías detectados automáticamente por el controlador del emplazamiento. Si un bloque de baterías no aparece en la lista, compruebe el equipo de red (incluyendo el cableado) y asegúrese de que los controladores del bus están encendidos.","powerwall_container_industrial_title":"Bloque de baterías","powerwall_container_industrial_updating":"Verificando bloques de baterías","powerwall_container_no_additional_powerwalls_description":"Consulte el Manual de instalación del Powerwall para obtener consejos sobre cómo resolver posibles problemas de cableado.","powerwall_container_no_additional_powerwalls_title":"No se ha encontrado ningún otro Powerwall","powerwall_container_scan_again":"ESCANEAR DE NUEVO","powerwall_container_scanning":"Escaneando","powerwall_container_scanning_for_more":"Buscando más","powerwall_container_subtitle":"En la lista aparecen todos los Powerwall detectados automáticamente por el Gateway. Escanee de nuevo si un Powerwall no está en la lista.","powerwall_container_subtitle_component_auto_detection":"Se enumeran todos los componentes detectados automáticamente por el Gateway. Si un componente no está en la lista, compruebe el cableado.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Verificando Powerwalls","powerwall_container_updating_note":"Nota: Puede tardar hasta 60 segundos por Powerwall.","powerwall_item_view_blank_numbers":"Esperando verificación...","powerwall_item_view_numbers":"Número de pieza: {partNumber} Número de serie: {serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"Cancelar","powerwall_pairing_connect":"Conectar","powerwall_pairing_done":"Listo","powerwall_pairing_error_already_paired":"Error de emparejamiento: el dispositivo ya está emparejado","powerwall_pairing_error_bad_pairing_response":"Error de emparejamiento: el dispositivo se ha negado a emparejarse. Asegúrese de que se haya detenido el seguidor","powerwall_pairing_error_bad_qr_code":"No es un código QR de Wi-Fi","powerwall_pairing_error_changes_prohibited":"Error de emparejamiento: Prohibido","powerwall_pairing_error_internal":"Error de emparejamiento: error interno","powerwall_pairing_error_no_qr_code":"No se ha encontrado ningún código QR","powerwall_pairing_error_no_response":"Error de emparejamiento: el dispositivo no ha respondido.","powerwall_pairing_error_not_leader":"Error de emparejamiento: este es un dispositivo seguidor. Reconectarse al dispositivo líder.","powerwall_pairing_error_prohibited_uncommissioned":"Fallo de emparejamiento: este Powerwall aún no se ha puesto en servicio","powerwall_pairing_error_too_many_devices":"Error de emparejamiento: ya está emparejado el número máximo de dispositivos","powerwall_pairing_error_unknown":"Error de emparejamiento: Error desconocido","powerwall_pairing_error_wifi_connection_failed":"Error de emparejamiento: No ha sido posible conectarse a Wi-Fi. Compruebe la contraseña.","powerwall_pairing_error_wifi_not_found":"Error de emparejamiento: No se encuentra la red Wi-Fi","powerwall_pairing_exception":"Error de emparejamiento: Excepción","powerwall_pairing_instructions_2":"Introduzca o escanee el SSID y la contraseña de la red Wi-Fi para el Powerwall que se va a emparejar. Busque un código QR en el dispositivo.","powerwall_pairing_password_label":"Contraseña:","powerwall_pairing_scan_qr_code":"Escanear código QR","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"Emparejamiento completado. Durante un minuto (o más tiempo si hay una actualización en curso) es posible que el nuevo dispositivo no empiece a responder. Para descartar, haga clic en Listo.","powerwall_pairing_state_monitoring":"Emparejamiento de un nuevo dispositivo. Puede tardar hasta un minuto.","powerwall_starting":"Iniciando Powerwall","powerwall_view_detected_backup":"Se ha detectado capacidad de reserva","powerwall_view_detected_synchrometers":"Capacidad de medidor detectada","powerwall_view_failed":"FALLÓ","powerwall_view_no_backup":"No se ha detectado ninguna capacidad de respaldo","powerwall_view_no_sync":"No se ha detectado ningún sincronizador","powerwall_view_scan":"ESCANEAR","powerwall_view_success":"ACTUALIZADO","powerwall_view_synchrometer_detected":"Sincromedidores detectados","powerwall_view_synchronizer_detected":"Sincronizador detectado","powerwall_view_update":"VERIFICAR POWERWALLS","privacy_policy_view_accept_warranty_title":"Aceptar garantía limitada de Powerwall de Tesla","privacy_policy_view_contact_bullet_one":"a través del correo electrónico a la dirección {privacyEmail};","privacy_policy_view_contact_bullet_two":"Por correo postal a Tesla, Inc., Dirigido a: Legal, 45500 Fremont Boulevard, Fremont, California 94538, Estados Unidos.","privacy_policy_view_contact_header":"Cómo ponerse en contacto con nosotros","privacy_policy_view_contact_paragraph_one":"Si tiene alguna pregunta o comentario, o para excluirse de ciertos servicios, póngase en contacto con nosotros:","privacy_policy_view_contact_paragraph_three":"Si se encuentra en el AEE o en Suiza, su filial de Tesla local puede ser la entidad responsable de procesar su información personal.","privacy_policy_view_contact_paragraph_two":"Tenga en cuenta que la comunicación por correo electrónico no siempre es segura, así que no incluya información de su tarjeta de crédito ni información confidencial en los mensajes de correo electrónico que nos envíe.","privacy_policy_view_cross_border_transfers_header":"Transferencias interfronterizas","privacy_policy_view_cross_border_transfers_paragraph_one":"Los Servicios se controlan y gestionan desde Estados Unidos. La información procedente de o acerca de usted o de su uso de nuestros productos o los Servicios podría almacenarse y procesarse en cualquier país en los que dispongamos de instalaciones o en el que trabajemos con proveedores de servicios. Estos países podrían no tener las mismas leyes de protección de datos que el país en el que inicialmente nos proporcionó esa información. Cuando transfiramos información procedente de o acerca de usted o de su uso de nuestros productos o los Servicios a otros países, la protegeremos tal y como se describe en la presente Política de privacidad. Al usar nuestros productos, los Servicios, o proporcionarnos información de algún otro modo, nos estará autorizando a transferir la información procedente de o acerca de usted o de su uso de nuestros productos o los Servicios a países fuera de su país de residencia, incluyendo los Estados Unidos.","privacy_policy_view_cross_border_transfers_paragraph_two":"Si se encuentra en el AEE o en Suiza, cumplimos los requisitos legales aplicables protegiendo adecuadamente la transferencia de información personal a países fuera del AEE o Suiza. Tesla ha certificado su unión al Marco del Escudo de Privacidad entre la UE y los EE. UU tal y como lo han redactado el Departamento de Comercio estadounidense y la Comisión Europea con respecto al procesamiento de cierta información personal transferida del AEE a Tesla y a sus subsidiarias de propiedad absoluta en EE. UU. {privacyShield} de Tesla está disponible aquí.","privacy_policy_view_devices":"Procedente de o acerca de usted o sus dispositivos","privacy_policy_view_energy_products":"Información de o acerca de sus productos de energía Tesla","privacy_policy_view_eu_policy_warning":"Debe aceptar la Política de privacidad para registrar su Powerwall y controlarlo desde la aplicación móvil de Tesla.","privacy_policy_view_eu_warranty_warning":"Si no acepta la Política de privacidad del cliente de Tesla, puede que no podamos proporcionarle la garantía completa de diez años. Tesla ofrecerá la garantía durante al menos cuatro años tras la fecha en que se instaló su Powerwall por primera vez, lo cual está sujeto a las exclusiones y limitaciones descritas en la garantía {warrantyLink}.","privacy_policy_view_grid_services":"Su Powerwall puede respaldar la fiabilidad de la red eléctrica prestando servicios en programas opcionales ofrecidos por las compañías eléctricas o por terceros. Estos servicios suelen implicar una descarga parcial de su Powerwall en momentos determinados a cambio de algún beneficio económico para usted, y requieren que compartamos sus datos de uso de electricidad e información de su Powerwall con empresas eléctricas o terceros. Antes de incluirle en alguno de estos programas, le ofreceremos detalles del programa y le daremos la opción de renunciar a él. Si no renuncia en ese momento, se le incluirá en el programa.","privacy_policy_view_grid_services_title":"Servicios de red eléctrica","privacy_policy_view_grid_warning":"No tiene por qué aceptar. Si no da su consentimiento, todavía podemos darle la oportunidad de inscribirse en estos programas más adelante.","privacy_policy_view_here":"aquí","privacy_policy_view_homeowner_na":"PROPIETARIO DE LA VIVIENDA NO DISPONIBLE","privacy_policy_view_homeowner_required":"Debe rellenarla el propietario de la vivienda","privacy_policy_view_information_collection_devices_bullet_five":"A través de su navegador o dispositivo móvil: La mayoría de navegadores o dispositivos móviles recopilan algunos datos automáticamente, como la dirección Media Access Control (MAC), el tipo de computadora (Windows o Macintosh), la resolución de la pantalla, el nombre y la versión del sistema operativo, el fabricante y el modelo del dispositivo, el idioma, el tipo y la versión del navegador de Internet, y el nombre y la versión de los Servicios (como la aplicación de Tesla) que está usando. Usamos esta información para asegurarnos de que los Servicios funcionan correctamente.","privacy_policy_view_information_collection_devices_bullet_four":"Sin conexión: Podemos recopilar información procedente de o acerca de usted sin conexión, p. ej. si visita una tienda o una instalación de reparación Tesla, asiste a uno de nuestros eventos, se registra para una prueba de conducción, realiza un pedido por teléfono o se pone en contacto con nuestro servicio al cliente o departamento de ventas.","privacy_policy_view_information_collection_devices_bullet_one":"A través de los servicios: Podemos recopilar información sobre usted a través de nuestros sitios web, aplicaciones de software, páginas de redes sociales, correos electrónicos u otros servicios digitales (los “Servicios”), por ejemplo, cuando usted se suscribe a un boletín de noticias, realice alguna compra o registre su producto en Tesla.","privacy_policy_view_information_collection_devices_bullet_three":"Mi Tesla: Los clientes que adquieren ciertos productos de Tesla reciben una cuenta de Mi Tesla, disponible en nuestra página web. Dependiendo de la información que usted desee facilitarnos, existirá la posibilidad de que recopilemos y tratemos los siguientes tipos de datos de su cuenta My Tesla: la información de su registro como cliente, el estado de su pedido, la garantía y otro tipo de documentación de sus productos Tesla (incluyendo, por ejemplo, el número de identificación del vehículo u otros números de serie del producto, información sobre el plan de servicio o paquete de conectividad), la documentación del seguro, permiso de conducción, contratos de financiación e información similar. Puede acceder a su cuenta de Mi Tesla para actualizar su información en la cuenta en cualquier momento.","privacy_policy_view_information_collection_devices_bullet_two":"De otras fuentes: También podemos recibir información acerca de usted de otras fuentes, como bases de datos públicas, socios de marketing conjuntos, instaladores certificados, centros de servicio o de reparación de vehículos de terceros, y plataformas de redes sociales.","privacy_policy_view_information_collection_energy_products_bullet_one":"Podemos recopilar información acerca de su producto, como su fecha de instalación, el número de productos instalados y el número o números de serie.","privacy_policy_view_information_collection_energy_products_bullet_two":"Con el fin de proporcionar y mejorar nuestros productos y servicios de energía, podemos recopilar datos con respecto a dónde está instalado el producto y cómo está configurado, los datos relacionados con el uso y el rendimiento del producto, los datos relativos a su consumo total de energía en el hogar, así como otros datos necesarios para diagnosticar problemas.","privacy_policy_view_information_collection_header":"Información que podríamos recopilar","privacy_policy_view_information_collection_paragraph_five":"Si ya no desea que recopilemos datos de rendimiento o cualquier otro dato de su producto de energía Tesla, por favor póngase en contacto con nosotros como se indica en la sección “Cómo ponerse en contacto con nosotros” que se incluye a continuación. Tenga en cuenta que si decide excluirse de la recopilación de datos de rendimiento de su producto eléctrico Tesla, no podremos notificarle acerca de problemas aplicables a su producto eléctrico en tiempo real, lo cual podría provocar que su producto eléctrico sufra funcionalidad reducida, daños graves o inutilización, y también pueden anularse muchas características de su producto eléctrico, incluidas las actualizaciones periódicas de software y firmware.","privacy_policy_view_information_collection_paragraph_four":"Podemos recopilar información de o relacionada con usted (tales como su nombre, dirección, número telefónico, correo electrónico, información de pago, etc.) o de sus dispositivos, de varias maneras, incluyendo:","privacy_policy_view_information_collection_paragraph_one":"Recopilamos tres tipos principales de información acerca de usted y su uso de nuestros productos y servicios: (1) Información procedente de o acerca de usted o sus dispositivos; (2) información procedente de o acerca de su vehículo Tesla; e (3) información procedente de o acerca de sus productos eléctricos de Tesla. Dependiendo de los productos y servicios de Tesla que solicite, haya adquirido o use, puede que no todos estos tipos de información sean aplicables a su caso.","privacy_policy_view_information_collection_paragraph_three":"Cuando visite nuestra página web o use nuestros servicios de algún otro modo, podríamos usar cookies, etiquetas de píxeles, herramientas de análisis y otras tecnologías similares para ayudar a prestar y mejorar nuestros Servicios, tal y como se indica a continuación:","privacy_policy_view_information_collection_paragraph_two":"Podemos recopilar información procedente de o acerca de usted (como su nombre, dirección, número de teléfono, dirección de correo electrónico, información de pago, etc.) o sus dispositivos de varios modos, incluyendo:","privacy_policy_view_information_collection_services_bullet_five":"Puede informarse acerca de cómo procede Google para recopilar esta información y cómo puede hacer para excluirse descargando para su navegador el complemento para no ser incluido en Google Analytics, disponible en {website}.","privacy_policy_view_information_collection_services_bullet_four":"Herramientas de análisis: Utilizamos servicios de análisis de páginas web y de aplicaciones prestados por terceros que emplean cookies y otras tecnologías similares para recopilar información acerca del uso de nuestra página web o aplicación, y para crear informes de tendencias, todo ello sin identificar a cada visitante. Los proveedores terceros que nos prestan estos servicios también podrían recopilar información acerca de su uso de páginas web de terceros.","privacy_policy_view_information_collection_services_bullet_one":"Cookies: Las cookies son piezas de información almacenadas directamente en el ordenador que utiliza. Las cookies nos permiten recopilar información como el tipo de navegador, el tiempo invertido en los Servicios, las páginas visitadas, las preferencias de idioma y los datos de tráfico web. Tanto nosotros como nuestros proveedores de servicios utilizamos la información con fines de seguridad, para facilitar la navegación en línea, para mostrar información de un modo más eficaz, para personalizar su experiencia durante el uso de los Servicios y para analizar de otro modo la actividad del usuario. Podemos reconocer su computadora para ayudarle a utilizar los Servicios. También recopilamos información estadística acerca del uso de los Servicios para mejorar continuamente su diseño y funcionalidad, para entender cómo se usan los Servicios y para ayudarnos a resolver problemas con los propios Servicios. Las cookies nos permiten seleccionar cuáles de nuestros anuncios u ofertas podrían atraerle más para después mostrárselos. También podemos usar cookies en publicidad en línea para ver cómo interactúa con nuestros anuncios, y podríamos utilizar cookies u otros archivos para entender cómo usa otras páginas web.","privacy_policy_view_information_collection_services_bullet_three":"Etiquetas de píxeles y otras tecnologías similares: Uso de pixel tags y otras tecnologías similares: Las pixel tags (también conocidas como web beacons (balizas web) y clear GIFs) pueden utilizarse en relación con algunos Servicios, para realizar, entre otras cosas, un seguimiento de las acciones de los usuarios de los Servicios (incluidos los receptores de correo electrónico), medir el éxito de nuestras campañas de publicidad y recopilar estadísticas sobre el uso de los Servicios y las tasas de respuesta.","privacy_policy_view_information_collection_services_bullet_two":"Si no desea que se recopile información mediante el uso de cookies al utilizar su cuenta Mi Tesla o nuestra página web, la mayoría de los navegadores permiten rechazar automáticamente las cookies con facilidad o le dan la opción de rechazar o aceptar la transferencia a su ordenador de una cookie (o cookies) en particular de una página determinada. Quizá también desee consultar {website}. No obstante, si no acepta estas cookies, puede sufrir ciertos inconvenientes al usar los Servicios. Por ejemplo, quizá no podamos reconocer su computadora, y tendrá que iniciar sesión cada vez que visite los Servicios aplicables.","privacy_policy_view_information_rights_choices_agree_eu":"Debe aceptar la Política de privacidad para registrar su Powerwall y controlarlo desde la aplicación móvil de Tesla.","privacy_policy_view_information_rights_choices_agree_one":"Debe aceptar la Política de privacidad para registrar su Powerwall y controlarlo desde la aplicación móvil de Tesla. No es necesario que tome ninguna otra medida si no desea acceder a la información de su Powerwall a través de la aplicación móvil de Tesla.","privacy_policy_view_information_rights_choices_bullet_one":"Puede acceder a su cuenta de Mi Tesla para actualizar su información en la cuenta en cualquier momento.","privacy_policy_view_information_rights_choices_bullet_two":"Si desea revisar, corregir, actualizar, suprimir o borrar información procedente de o acerca de usted que usted mismo nos haya facilitado previamente, puede ponerse en contacto con nosotros en las direcciones indicadas a continuación.","privacy_policy_view_information_rights_choices_header":"Derechos y opciones","privacy_policy_view_information_rights_choices_paragraph_four":"Tenga en cuenta que podríamos retener cierta información para nuestros archivos o para cumplir requisitos legales o completar alguna transacción que haya iniciado antes de solicitar dicho cambio o borrado (p. ej. cuando efectúa una compra o participa en una promoción podría no poder cambiar o borrar la información indicada hasta haber finalizado esa compra o promoción). También podría quedar información residual que permanecería en nuestras bases de datos y otros registros, y que no se eliminará.","privacy_policy_view_information_rights_choices_paragraph_one":"Como ha quedado detallado en las secciones anteriores, le damos muchas opciones respecto a la recolección, tratamiento y cesión por nuestra parte de la información sobre Usted o sobre el uso de los productos o los Servicios. Sujeto a las disposiciones legales aplicables en su jurisdicción, Usted también podrá tener derecho a solicitar acceso a la información personal que conservamos sobre Usted y a recibir información sobre la misma, actualizarla y rectificar cualquier error que pudiere haber en la misma, así como bloquearla o eliminarla según corresponda. En algunas circunstancias, estos derechos podrían estar limitados por la legislación local. Le proporcionamos varios métodos para acceder, corregir, actualizar o solicitar el bloqueo o la eliminación de su información personal, incluyendo:","privacy_policy_view_information_rights_choices_paragraph_three":"Nosotros cumpliremos con su solicitud o solicitudes para el ejercicio de estos derechos tan pronto como sea razonablemente posible.","privacy_policy_view_information_rights_choices_paragraph_two":"En su solicitud, explique claramente qué información desea que cambiemos, si desea que suprimamos de nuestra base de datos la información que nos ha facilitado o las limitaciones que desea imponer en nuestro uso de dicha información. Para su protección, puede que solo atendamos a las solicitudes con respecto a la información asociada a la dirección de correo electrónico particular que use para enviarnos dicha solicitud, y tendríamos que verificar su identidad antes de implementar la solicitud.","privacy_policy_view_information_share_header":"Cómo podríamos compartir la información que recopilamos","privacy_policy_view_information_share_paragraph_eight":"En otras circunstancias","privacy_policy_view_information_share_paragraph_eleven":"Si usted decide excluirse de algún tratamiento de información que previamente usted hubiere consentido expresamente, podrá hacerlo poniéndose en contacto con nosotros, como se indica en la sección “Cómo ponerse en contacto con nosotros” incluida más adelante.","privacy_policy_view_information_share_paragraph_five":"Podemos compartir información con otros terceros que usted autorice, por ejemplo en los casos siguientes:","privacy_policy_view_information_share_paragraph_five_point_four":"Con su proveedor de cuentas de redes sociales, si conecta su cuenta de Servicios y su cuenta de redes sociales. En tal caso, usted nos autoriza a compartir información con el proveedor de su cuenta de redes sociales y entiende que el uso de la información que compartamos se regirá por la política de privacidad del proveedor de su cuenta de redes sociales.","privacy_policy_view_information_share_paragraph_five_point_one":"Con nuestros instaladores certificados, para facilitar el suministro de productos eléctricos que usted haya solicitado.","privacy_policy_view_information_share_paragraph_five_point_three":"Con promotores terceros para concursos y promociones similares, si desea participar.","privacy_policy_view_information_share_paragraph_five_point_two":"Con proveedores o centros de servicio terceros, si escoge trabajar con ellos. Tenga en cuenta que en ciertos productos Tesla se habrá almacenado cierta información acerca de usted, y podría estar accesible directamente para los proveedores o centros de servicio terceros con los que desee trabajar para diagnosticar o realizar el servicio a su producto Tesla.","privacy_policy_view_information_share_paragraph_four":"Con otros terceros autorizados por Usted","privacy_policy_view_information_share_paragraph_nine":"Podemos compartir información en otras circunstancias, como por ejemplo:","privacy_policy_view_information_share_paragraph_nine_point_one":"Con su superior o con otro operador de flota o el propietario del producto Tesla, si usted no es directamente el propietario y conforme a lo autorizado en la legislación aplicable.","privacy_policy_view_information_share_paragraph_nine_point_two":"Con un tercero en relación con cualquier reorganización, fusión, venta, empresa conjunta, cesión, transferencia u otra disposición de toda la empresa o una parte de ella, sus activos o sus acciones (incluyendo en relación con una bancarrota o procedimiento similar).","privacy_policy_view_information_share_paragraph_one":"Podemos compartir la información que recopilamos con nuestros proveedores de servicios y socios empresariales, con otras terceras partes que usted autorice, con terceras partes cuando la ley lo exija, y en otras circunstancias. A continuación encontrará algunos ejemplos de cómo compartimos información con estas partes y en qué circunstancias.","privacy_policy_view_information_share_paragraph_seven":"Tesla puede entregar y revelar información, incluida información que pudiese o no identificarle personalmente, a terceros para cumplir una obligación legal (incluyendo, pero sin limitarse a citaciones); cuando creemos de buena fe que la ley lo requiere; en respuesta a una solicitud legal por parte de autoridades gubernamentales que estén llevado a cabo una investigación, incluyendo el cumplimiento de requisitos de imposición legal; para comprobar u obligar el cumplimiento de nuestras políticas y procedimientos; para responder a una emergencia; para evitar o detener actividades que consideremos que son o están en riesgo de ser ilegales, no éticas o enjuiciables; o para proteger los derechos, propiedad o seguridad de los Servicios, de Tesla, de terceros, de visitantes de nuestros Servicios, o del público, lo cual determinaremos a nuestra discreción.","privacy_policy_view_information_share_paragraph_six":"Con otros terceros cuando la ley lo requiera","privacy_policy_view_information_share_paragraph_ten":"No compartimos información que le identifique personalmente con terceros no afiliados para sus actividades de marketing a menos que usted autorice que se comparta dicha información.","privacy_policy_view_information_share_paragraph_three":"Podremos compartir información con nuestros proveedores de servicios y partners comerciales cuando fuere necesario para prestar servicios por nuestra cuenta o por cuenta de Usted, por ejemplo, en los siguientes casos:","privacy_policy_view_information_share_paragraph_three_point_one":"Con afiliados de Tesla para los fines descritos en la presente Política de privacidad. Los afiliados de Tesla son empresas propiedad de o controladas por Tesla, Inc. y empresas en las que Tesla, Inc. tiene un interés de propiedad sustancial.","privacy_policy_view_information_share_paragraph_three_point_three":"Con otros socios empresariales terceros en la medida en que estén implicados en su compra o en el servicio a sus productos Tesla. Compartimos información limitada procedente de o acerca de usted para que pueda disfrutar de estos servicios si desea utilizarlos, con socios dedicados a servicios financieros, arrendamiento, registro y empresas de título.","privacy_policy_view_information_share_paragraph_three_point_two":"Con nuestros proveedores de servicios y socios de canal terceros, para prestar servicios como alojamiento web, análisis y almacenamiento de datos, procesamiento de pagos, ejecución de pedidos e instalación de productos, conectividad inalámbrica a productos Tesla, tecnología informática y la correspondiente infraestructura, servicio al cliente, mantenimiento del producto o servicios relacionados, entrega de correos electrónicos, procesamiento de tarjetas de crédito, auditoría, marketing, procesamiento de comandos por voz y otros servicios similares.","privacy_policy_view_information_share_paragraph_two":"Con nuestros proveedores de servicios y socios empresariales","privacy_policy_view_information_use_commuicate":"Para comunicarnos con usted","privacy_policy_view_information_use_header":"Cómo podríamos utilizar la información que recopilamos","privacy_policy_view_information_use_other_purposes":"Para otras finalidades","privacy_policy_view_information_use_paragraph_five":"También podemos utilizar la información que recopilamos con otros fines, por ejemplo:","privacy_policy_view_information_use_paragraph_five_point_one":"Para nuestros fines empresariales, como: análisis de datos, auditorías, control y prevención del fraude, identificación de tendencias de uso, análisis de la efectividad de nuestras campañas promocionales y ejecución y expansión de nuestras actividades empresariales.","privacy_policy_view_information_use_paragraph_five_point_two":"Excepto según lo descrito en los párrafos anteriores y siguientes, Tesla puede utilizar o compartir información que no le identifique personalmente con cualquier fin, como para fines operativos o de investigación, para el análisis del sector, para mejorar o modificar nuestros productos y servicios, para adaptar mejor nuestros productos y servicios a sus necesidades, y cuando sea legalmente necesario.","privacy_policy_view_information_use_paragraph_four":"Podremos utilizar la información que recabemos para proporcionar y mejorar nuestros productos y servicios, por ejemplo:","privacy_policy_view_information_use_paragraph_four_point_five":"Para analizar y mejorar la protección y seguridad de nuestros productos y servicios.","privacy_policy_view_information_use_paragraph_four_point_four":"Para desarrollar y promover nuevos productos y servicios, y para mejorar o modificar sus productos y servicios existentes.","privacy_policy_view_information_use_paragraph_four_point_one":"Para completar y finalizar su compra, por ejemplo, para procesar sus pagos, hacer que le entreguen el pedido, ponernos en contacto con Usted con respecto a su compra y proporcionarle servicios relacionados al cliente.","privacy_policy_view_information_use_paragraph_four_point_six":"Para proporcionar otros servicios que Usted solicite.","privacy_policy_view_information_use_paragraph_four_point_three":"Para supervisar el rendimiento de su producto Tesla y proporcionarle servicios relacionados con su producto.","privacy_policy_view_information_use_paragraph_four_point_two":"Para proporcionarle el servicio a su producto Tesla, por ejemplo, para ponernos en contacto con Usted para hacerle recomendaciones sobre el servicio técnico y proporcionarle actualizaciones inalámbricas para su producto.","privacy_policy_view_information_use_paragraph_one":"Podemos utilizar la información que recopilamos para comunicarnos con usted, para prestar y mejorar nuestros servicios y productos, y para otros fines. A continuación encontrará algunos ejemplos de cómo utilizamos la información con estos objetivos.","privacy_policy_view_information_use_paragraph_three":"Sus opciones de comunicación :","privacy_policy_view_information_use_paragraph_three_point_one":"Recibir comunicaciones electrónicas de Tesla o de parte de nuestras filiales: Si ya no desea recibir correos electrónicos publicitarios de la empresa matriz de Tesla o de parte de sus filiales, puede inhabilitar esta función siguiendo las instrucciones correspondientes que aparecen en cualquier correo nuestro, o poniéndose en contacto con nosotros en la dirección que aparece abajo. Tenga en cuenta que existe la posibilidad de que sigamos enviándole mensajes importantes sobre temas de administración o seguridad, incluso si inhabilita la opción de recibir correos electrónicos publicitarios.","privacy_policy_view_information_use_paragraph_three_point_two":"Recibir llamadas de marketing nuestras: Si recibe llamadas publicitarias nuestras y no desea volver a recibirlas, simplemente tiene que solicitarnos que lo inscribamos en nuestra lista de clientes a los que no debemos llamar. Tenga en cuenta que de todos modos podríamos llamarle en caso de incidencias administrativas, de seguridad o de servicio del producto, aunque se haya decidido no recibir llamadas de marketing.","privacy_policy_view_information_use_paragraph_two":"Podemos utilizar información que recabemos para comunicarnos con usted, por ejemplo:","privacy_policy_view_information_use_paragraph_two_point_five":"Para presentarle productos y ofertas adaptados a sus necesidades y para mejorar nuestras bases de datos con información de otras fuentes.","privacy_policy_view_information_use_paragraph_two_point_four":"Para enviarle información administrativa, por ejemplo información acerca de los Servicios y cambios en nuestros términos, condiciones y políticas.","privacy_policy_view_information_use_paragraph_two_point_one":"Para responder a sus consultas y atender a sus solicitudes, por ejemplo enviarle boletines o información acerca del producto, alertas informativas o folletos.","privacy_policy_view_information_use_paragraph_two_point_seven":"Para facilitar la interacción social y la funcionalidad de las comunicaciones.","privacy_policy_view_information_use_paragraph_two_point_six":"Para permitirle que participe en concursos y promociones similares, así como para administrar estas actividades.","privacy_policy_view_information_use_paragraph_two_point_three":"Para proporcionarle información de seguridad importante o notificar a las personas de contacto en caso de un accidente de su vehículo.","privacy_policy_view_information_use_paragraph_two_point_two":"Para configurar, evaluar e informarle acerca de su prueba de conducción de Tesla.","privacy_policy_view_information_use_provide":"Proporcionar y mejorar nuestros productos y servicios.","privacy_policy_view_links_header":"Enlaces","privacy_policy_view_links_paragraph_one":"La presente Política de privacidad no aborda, y nosotros no seremos responsables de, la privacidad, información u otras prácticas de terceros, incluyendo cualquier tercero que trabaje en cualquier emplazamiento o servicio vinculado a los Servicios. La inclusión de un enlace a los Servicios no implica el apoyo a la página web o servicio enlazado por nosotros o nuestros afiliados, ni implica una afiliación con el tercero.","privacy_policy_view_links_paragraph_two":"Tenga en cuenta que no somos responsables de las políticas y prácticas de recopilación, uso o divulgación (incluyendo las prácticas de seguridad respecto a los datos) de otras organizaciones, como cualquier otro desarrollador de aplicaciones, proveedor de aplicaciones, proveedor de plataformas de redes sociales, proveedor de sistemas operativos o proveedor de servicios inalámbricos, incluyendo cualquier información que revele a otras organizaciones a través de o en relación con nuestras aplicaciones de software o páginas en redes sociales.","privacy_policy_view_minors_header":"Menores","privacy_policy_view_minors_paragraph":"Los Servicios no están dirigidos a personas menores de dieciséis (16) años, y solicitamos a estos menores que no proporcionen información a Tesla.","privacy_policy_view_offers_eu":"Sí, deseo recibir comunicaciones de marketing por correo electrónico, incluidas encuestas, promociones y ofertas de Tesla y sus afiliados sobre productos y servicios de Tesla. Tiene derecho a retirar su consentimiento en cualquier momento. Más información {legalLink}.","privacy_policy_view_offers_title":"Anuncios de productos y nuevas ofertas","privacy_policy_view_offers_usa":"Acepto que se pongan en contacto conmigo en el número indicado con más información u ofertas acerca de productos Tesla. Entiendo que estas llamadas o mensajes de texto pueden utilizar marcación asistida por ordenador o mensajes pregrabados. Este consentimiento no es una condición para la compra.","privacy_policy_view_powerwall_warranty":"Garantía limitada del Powerwall de Tesla","privacy_policy_view_privacy_policy":"Notificación acerca de la privacidad","privacy_policy_view_privacy_policy_agreement_eu":"Yo, el propietario de la vivienda, he leído íntegramente la Política de privacidad del cliente de Tesla y doy mi consentimiento a Tesla para que procese mis datos personales tal y como se describe en la Política de privacidad del cliente de Tesla. Tendrá derecho a retirar el consentimiento en cualquier momento, tal y como se describe en la Política de privacidad del cliente de Tesla.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Yo, el propietario de la vivienda, he leído íntegramente la Política de privacidad del cliente de Tesla y doy mi consentimiento a Tesla para que procese mis datos personales tal y como se describe en la Política de privacidad del cliente de Tesla.","privacy_policy_view_privacy_shield":"Política de Escudo de privacidad","privacy_policy_view_retention_period_header":"Período de retención","privacy_policy_view_retention_period_paragraph":"Retendremos la información que recopilemos procedente de o acerca de nuestros clientes, nuestros productos y los Servicios durante el período necesario para cumplir los objetivos descritos en la presente Política de privacidad, a menos que la ley requiera o permita un período de retención mayor.","privacy_policy_view_security_header":"Seguridad","privacy_policy_view_security_paragraph_one":"Tratamos de imponer medidas organizativas, técnicas y administrativas razonables para proteger la información dentro de nuestra organización. Desafortunadamente, no existe ningún sistema de almacenamiento ni de transmisión de datos que pueda considerarse 100 % seguro. Si tiene algún motivo para pensar que su interacción con nosotros ya no es segura (por ejemplo, si le parece que la seguridad de cualquiera de sus cuentas en Tesla se ha puesto en riesgo), infórmenos inmediatamente del problema poniéndose en contacto con nosotros según se especifica en la sección “Cómo ponerse en contacto con nosotros” que aparece más adelante.","privacy_policy_view_security_paragraph_two":"Si vende o transfiere su producto Tesla a otra persona, por favor, notifíquenos para que podamos decidir si es necesario tomar alguna medida adicional para ayudar a proteger la información procedente de o acerca de usted para que no se divulgue al comprador o receptor del producto Tesla.","privacy_policy_view_title":"Ver Política de privacidad completa","privacy_policy_view_updates_header":"Actualizaciones a esta Política","privacy_policy_view_updates_paragraph":"Podremos hacer cambios a esta Política de Privacidad. Consulte la fecha de la \\"Última Actualización\\" que aparece al final de este documento para ver cuándo se revisó esta política por última vez. Los cambios a esta Política de Privacidad entrarán en vigor cuando publiquemos la Política modificada en los Servicios. El uso de nuestros productos, de los Servicios o el proporcionarnos su información personal de cualquier otra forma después de que se hagan estos cambios, se entenderá como una aceptación por su parte de la Política de Privacidad modificada.","privacy_policy_view_us_warranty_warning":"Debe aceptar la Garantía limitada de Tesla para registrar su Powerwall y controlarlo desde la aplicación móvil de Tesla.","privacy_policy_view_warranty_information":"Yo, el propietario de la vivienda, acepto los términos de la Garantía limitada del Powerwall de Tesla, disponible en {warrantyLink}. Estos términos incluyen una cláusula de arbitraje que anula mi derecho a iniciar o participar en demandas colectivas y juicios con jurado. Puedo excluirme de esta disposición dentro de los 30 días siguiendo el proceso descrito en la disposición.","prompt_factory_reset_confirmation":"¿Confirma que realmente desea restablecer los ajustes de fábrica de la unidad?","pvac-state-active":"Activo","pvac-state-faulted":"Averiado","pvac-state-init":"Inicializando...","pvac-state-standby":"Esperar a energía solar","pvac_alert_ac_fault":"Fallo de CA del inversor","pvac_alert_check_ac_note":"Compruebe el cableado de CA y la conexión a la red eléctrica. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_check_dc_string1_note":"Compruebe el cableado y los paneles de CC del Tramo 1. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_check_dc_string2_note":"Compruebe el cableado y los paneles de CC del Tramo 2. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_check_dc_string3_note":"Compruebe el cableado y los paneles de CC del Tramo 3. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_check_dc_string4_note":"Compruebe el cableado y los paneles de CC del Tramo 4. Reinicie el inversor y vuelva a intentar la operación.","pvac_alert_confirm_grid_code_note":"Compruebe el cableado de CA y la conexión a la red eléctrica. Confirmar código de red eléctrica seleccionado.","pvac_alert_dc_fault_string1":"Fallo de CC del inversor - Tramo 1","pvac_alert_dc_fault_string2":"Fallo de CC del inversor - Tramo 2","pvac_alert_dc_fault_string3":"Fallo de CC del inversor - Tramo 3","pvac_alert_dc_fault_string4":"Fallo de CC del inversor - Tramo 4","pvac_alert_freq_change":"Red no conforme - Cambio de frecuencia","pvac_alert_internal_comms":"Problema de comunicación interna","pvac_alert_over_freq":"Red no conforme - Sobrefrecuencia","pvac_alert_over_temp":"Sobretemperatura del inversor","pvac_alert_over_voltage":"Red no conforme - Sobretensión","pvac_alert_production_limited_note":"La producción podría estar limitada. Asegúrese de que las terminaciones de los cables sean las adecuadas, que haya suficiente flujo de aire y que el entorno de la instalación sea idóneo.","pvac_alert_reboot_note":"Reinicie el inversor, asegúrese de que el sistema está actualizado y que se ha completado la puesta en marcha.","pvac_alert_under_freq":"Red no conforme - Subfrecuencia","pvac_alert_under_voltage":"Red no conforme - Subtensión","pvi-power-status-dc-only":"Solo CC","pvi-power-status-disabled":"Desactivada","pvi-power-status-enabled":"Activada","pvi-reset-button-label":"Reinicie el inversor y borre las alertas","pvs-self-test-1":"Autocomprobación (1/6): Fallo de conexión a tierra","pvs-self-test-2":"Autocomprobación (2/6): Fallo de arco","pvs-self-test-3":"Autocomprobación (3/6): MCI","pvs-self-test-4":"Autocomprobación (4/6): Aislamiento","pvs-self-test-5":"Autocomprobación (5/6): Soldadura de relé","pvs-self-test-6":"Autocomprobación (6/6): Impedancia","pvs_alert_check_arc_fault_note":"Si hay problemas de fallo del arco eléctrico, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida.","pvs_alert_check_dc_note":"Si hay problemas de fallos de conexión a tierra, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida.","pvs_alert_check_dc_string1_note":"Si hay problemas de aislamiento, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida, centrándose en el Tramo 1.","pvs_alert_check_dc_string2_note":"Si hay problemas de aislamiento, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida, centrándose en el Tramo 2.","pvs_alert_check_dc_string3_note":"Si hay problemas de aislamiento, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida, centrándose en el Tramo 3.","pvs_alert_check_dc_string4_note":"Si hay problemas de aislamiento, compruebe el cableado de CC, las conexiones, los paneles y los dispositivos de desconexión rápida, centrándose en el Tramo 4.","pvs_alert_check_dc_strings_note":"Compruebe el cableado de CC, las conexiones, los paneles y las configuraciones de los tramos.","pvs_alert_dc_arc_fault_detected":"Fallo de arco de CC - Detectado","pvs_alert_dc_arc_fault_lockout":"Fallo de arco de CC - Bloqueo","pvs_alert_dc_ground_fault":"Fallo de conexión a tierra de CC","pvs_alert_dc_isolation_string1":"Problema de aislamiento de CC - Tramo 1","pvs_alert_dc_isolation_string2":"Problema de aislamiento de CC - Tramo 2","pvs_alert_dc_isolation_string3":"Problema de aislamiento de CC - Tramo 3","pvs_alert_dc_isolation_string4":"Problema de aislamiento de CC - Tramo 4","pvs_alert_dc_over_voltage":"Sobretensión de CC","pvs_alert_rapid_shutdown":"Desconexión rápida iniciada","pvs_alert_rapid_shutdown_note":"Compruebe el disyuntor de CA y el circuito de desconexión rápida de baja tensión.","registration_container_continue_header":"Correo electrónico del cliente introducido: {email}","registration_container_continue_modal_description":"El cliente no podrá acceder a la aplicación móvil de Tesla si el correo electrónico es incorrecto. Confirme que el correo electrónico del cliente es válido.","registration_container_customer_email_required":"El correo electrónico del cliente es necesario para activar la aplicación móvil de Tesla.","registration_container_customer_information_title":"Información del emplazamiento","registration_container_fill_required_fields":"El instalador o el cliente deben completar todos los campos requeridos.","registration_container_loading_modal_registering":"Registrando","registration_container_reset_form_modal_description":"Confirme que le gustaría llevar a cabo la reinicialización del formulario.","registration_container_reset_form_modal_header":"Se perderá toda la información introducida anteriormente.","security_container_settings_title_customer":"Cambiar o restablecer contraseña (Cliente)","security_container_settings_title_installer":"Cambiar o restablecer contraseña (Instalador)","security_view_copied_to_clipboard":"¡Copiado!","security_view_not_wifi_qr_code_error":"No es un código QR de Wi-Fi.","security_view_scan_qr_code_not_found_error":"No se ha encontrado ningún código QR.","security_view_settings_change_password_error":"Las nuevas contraseñas no coinciden","security_view_settings_change_password_label":"CAMBIAR CONTRASEÑA","security_view_settings_completed":"COMPLETADO","security_view_settings_new_password_label":"NUEVA CONTRASEÑA","security_view_settings_old_password":"CONTRASEÑA ACTUAL","security_view_settings_password_change_info":"Para cambiar la contraseña, ingrese la contraseña actual y una nueva contraseña.","security_view_settings_password_customer":"CONTRASEÑA","security_view_settings_password_customer_placeholder":"Últimos 5 caracteres de la contraseña que figuran en la pegatina del Gateway","security_view_settings_password_installer_label":"Contraseña del Gateway","security_view_settings_password_reset_info":"Para restablecer la contraseña, encienda el interruptor de un Powerwall y luego introduzca los 5 últimos caracteres de la contraseña de la etiqueta del Gateway.","security_view_settings_password_reset_info_serial":"Para restablecer la contraseña, encienda el interruptor de un Powerwall y luego introduzca los 5 últimos caracteres del número de serie del Gateway.","security_view_settings_password_reset_installer_info":"Para restablecer la contraseña, encienda el interruptor de un Powerwall y luego introduzca la contraseña de la etiqueta del Gateway.","security_view_settings_password_reset_installer_info_serial":"Para restablecer la contraseña, encienda el interruptor de un Powerwall y luego introduzca el número de serie del Gateway.","security_view_settings_re_enter_password_label":"VUELVA A INGRESAR LA NUEVA CONTRASEÑA","security_view_settings_reset_password_label":"RESTABLECER CONTRASEÑA","security_view_settings_serial_customer":"NÚMERO DE SERIE","security_view_settings_serial_customer_placeholder":"5 últimos caracteres del número de serie del Gateway","security_view_settings_serial_installer_label":"Número de serie del Gateway","security_view_settings_success":"La contraseña se actualizó con éxito","security_view_settings_success_new_password":"La nueva contraseña es:","security_view_settings_toggled_password":"¿Olvidó su contraseña?","self_test_result_viewer_resi_only":"El visor de registros de autocomprobación no está disponible.","self_test_results_viewer_collapse_all":"Contraer todo","self_test_results_viewer_column_name":"Nombre","self_test_results_viewer_column_result":"Resultado","self_test_results_viewer_column_spec":"Especificaciones","self_test_results_viewer_column_test_time":"Hora de prueba","self_test_results_viewer_column_value":"Valor","self_test_results_viewer_expand_all":"Ampliar todo","self_test_results_viewer_failed":"Incorrecto","self_test_results_viewer_in_progress":"En curso","self_test_results_viewer_inconclusive":"No concluyente","self_test_results_viewer_not_started":"No iniciada","self_test_results_viewer_passed":"Pasa","self_test_results_viewer_skipped":"Omitida","self_test_results_viewer_warning":"Advertencia","settings_container_confirm_reset_operation_mode":"Confirme el cambio de modo a {operation}","settings_container_heco_modal_description":"Este ajuste no puede modificarse después de seleccionarlo. Antes de enviar su selección, confirme que el cliente está realmente inscrito en el programa de bonificación de batería HECO.","settings_container_heco_modal_title":"Confirmar inscripción","settings_container_heco_view_description":"Powerwall se descargará, a la capacidad comprometida diariamente, para cumplir los requisitos del programa. Este ajuste no puede modificarse después de la activación.","settings_container_heco_view_scheduled_dispatch_start_time":"Hora de inicio","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"Envío programado de HECO","settings_container_heco_view_title":"Programa de bonificación de batería HECO","settings_container_operation_modes_modal_content":"Utilice la pantalla “Personalizar” de la aplicación móvil de Tesla para cambiar los modos de funcionamiento.","settings_container_operation_modes_modal_reset":"MODO DE RESTABLECIMIENTO","settings_container_operation_modes_modal_title":"Modo de funcionamiento","settings_container_operation_modes_modal_warning":"Este es un cambio unidireccional. Los modos avanzados solo se pueden reactivar a través de la aplicación móvil de Tesla.","settings_container_operation_modes_reset_modal_title":"¿Restablecer modo de funcionamiento?","settings_container_operation_settings_subtitle":"Indique el nombre de su sistema, el modo de funcionamiento y las limitaciones de exportación, si existe alguna.","settings_container_operation_settings_title":"Configuración de funcionamiento","settings_container_save_instructions":"Haga clic en CONTINUAR para guardar.","settings_container_saving_site_info_modal":"Guardando la configuración del emplazamiento","settings_container_site_import_description":"El límite de importación del emplazamiento es un parámetro opcional. Deje este campo vacío para deshabilitar la limitación de las importaciones. Cuando este ajuste está habilitado, especifica la potencia máxima que se puede importar de la red al emplazamiento.","settings_container_site_limits_header":"Límites del emplazamiento","settings_view_custom_modes_label":"MODO PRECONFIGURADO","settings_view_energy_reserve_heco_label":"Los cambios en la reserva de seguridad están restringidos debido a la inscripción en el programa de bonificación de batería HECO. El cliente podrá establecer una reserva de seguridad en su app.","settings_view_energy_reserve_label":"RESERVA DE RESPALDO DE EMERGENCIA","settings_view_instruction_site_name":"Introduzca un nombre para el sitio","settings_view_net_meter_mode":"Modo exportar","settings_view_operation_label":"MODO DE FUNCIONAMIENTO","settings_view_operation_set_label":"MODO DE FUNCIONAMIENTO QUE SE ESTABLECERÁ","settings_view_set_net_meter_mode_never_label":"No exportar permanente","settings_view_set_net_meter_mode_solar_label":"Exportar solar","settings_view_site_name":"NOMBRE DEL EMPLAZAMIENTO","settings_view_site_name_placeholder":"Ej. Mi casa","settings_view_solar_export_limitation_slider":"Limitación de exportación solar","settings_view_solar_feature":"Esta característica solo debe activarse cuando la interconexión requiere que el sistema solar no exporte energía a la red eléctrica. Típico en las regiones de Hawaii (CSS) y Australia.","settings_view_solar_limitation":"¿POWERWALL ESTÁ INSTALADO JUNTO A UN SISTEMA SOLAR QUE NO ES UN POWERWALL+?","settings_view_solar_zero_export":"¿POWERWALL INSTALADO JUNTO A UN SISTEMA SOLAR DE EXPORTACIÓN CERO?","site_info_container_submit":"ENVIAR","solar_item_view_baudrate_label":"Velocidad en baudios","solar_item_view_brand_input_label":"MARCA","solar_item_view_brand_label":"Marca","solar_item_view_check_inverter":"COMPROBAR CONEXIÓN DEL INVERSOR {id}","solar_item_view_connection_warning":"No se ha podido establecer la conexión","solar_item_view_inverter_brand":"Marca del inversor","solar_item_view_inverter_communication":"Configurar la comunicación directa del inversor","solar_item_view_inverter_model_label":"Modelo del inversor","solar_item_view_ip_label":"DIRECCIÓN IP","solar_item_view_model_label":"MODELO","solar_item_view_power_rating_explanation":"Se trata de la clasificación de potencia total del sistema fotovoltaico con respecto a los módulos/paneles. Esta es la potencia nominal de la matriz. Si por ejemplo tiene 10 paneles solares de 300 W, indique 3000 W, incluso si el inversor FV es de 2500 W o 3500 W.","solar_item_view_pv_array_dc_power_rating":"POTENCIA PICO DE CAMPO FV","solar_item_view_pv_array_dc_power_rating_label":"POTENCIA PICO DE CAMPO FV","solar_item_view_revenue_grade":"Nivel de ingresos","solar_item_view_revenue_grade_explanation":"Marque esta opción solo si el inversor tiene un medidor de nivel de ingresos integrado. Si esta opción está activada, los datos del inversor se leerán del medidor en lugar del inversor.","solar_item_view_revenue_grade_title":"Nivel de ingresos","solar_item_view_solar":"SOLAR {id}","solar_item_view_success":"¡CONEXIÓN CORRECTA!","solar_item_view_unable":"¡NO SE PUEDE LEER EL INVERSOR!","solar_list_view_continue_add_solar":"AÑADIR SOLAR","solar_view_continue_add_solar":"AÑADIR SOLAR","status_update_urgency_none":"Actualizado","status_update_urgency_optional":"Actualización opcional","status_update_urgency_required":"Actualización obligatoria","status_update_urgency_unknown":"Desconocido","success_view_awesome":"¡EXCELENTE!","success_view_copied_to_clipboard":"¡Copiado!","success_view_installation_complete":"Instalación finalizada","success_view_new_password_error_title":"Contraseña del Asistente","success_view_new_password_title":"Nueva contraseña de asistente","success_view_password_set":"La contraseña ya ha sido asignada","success_view_record_password":"Registre esta contraseña antes de continuar","success_view_retry_registration":"REINTENTAR REGISTRO","success_view_set_customer_password":"ASIGNAR LA CONTRASEÑA DEL CLIENTE","success_view_syncing_configuration":"Sincronizando configuración","summary_container_company":"Empresa","summary_container_connection_type":"Tipo de conexión","summary_container_email":"Correo electrónico","summary_container_installer_information":"Información del instalador","summary_container_ip_address":"Dirección IP","summary_container_location":"Ubicación","summary_container_meter":"Medidor n.º {index}","summary_container_meter_information":"Información del medidor","summary_container_phone":"Número de teléfono","summary_container_print":"Imprimir","summary_container_serial_number":"Número de serie","summary_container_site_info":"Información del emplazamiento","summary_container_site_name":"Nombre del emplazamiento","summary_container_subtitle":"Información del producto e instalación","summary_site_information":"INFORMACIÓN DEL EMPLAZAMIENTO","summary_view_autonomous":"Control programable","summary_view_backup":"Solo reserva","summary_view_backup_capable":"Con capacidad de respaldo","summary_view_backup_reserve":"RESERVA DE RESPALDO","summary_view_backup_switch":"BACKUP SWITCH","summary_view_conductor_export":"LÍMITE DE EXPORTACIÓN DEL CONDUCTOR","summary_view_conductor_import":"LÍMITE DE IMPORTACIÓN DEL CONDUCTOR","summary_view_control":"Control del emplazamiento","summary_view_customer_version":"VERSIÓN DEL CLIENTE","summary_view_direct":"Directo","summary_view_disabled":"DESHABILITADO","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"LÍMITE DE EXPORTACIÓN DEL FV","summary_view_extra_programs":"PROGRAMAS EXTRA","summary_view_followers":"SEGUIDORES","summary_view_gateway":"GATEWAY","summary_view_grid_code":"CÓDIGO DE RED","summary_view_gsm":"Teléfono móvil","summary_view_heco_battery_bonus":"Bonificación de batería HECO","summary_view_ip_address":"DIRECCIÓN IP","summary_view_leader":"LÍDER","summary_view_mode":"MODO","summary_view_msg_cannot_read_solar_assembly":"Primero detenga el sistema para ver el número de pieza y de serie del conjunto solar Powerwall+.","summary_view_network":"RED","summary_view_non_backup":"No es de respaldo","summary_view_panel_limit":"CORRIENTE MÁXIMA DEL PANEL","summary_view_part_number":"Número de pieza","summary_view_partnum":"Pieza {partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Conjunto","summary_view_self_consumption":"Autoconsumo","summary_view_serial":"Número de serie","summary_view_serialnum":"Número de serie {serialNumber}","summary_view_site_export":"LÍMITE DE EXPORTACIÓN DEL EMPLAZAMIENTO","summary_view_site_import":"LÍMITE DE IMPORTACIÓN DEL EMPLAZAMIENTO","summary_view_site_name":"NOMBRE DEL EMPLAZAMIENTO","summary_view_solar_assembly":"CONJUNTO SOLAR","summary_view_sync":"CAPACIDAD DE RESERVA DE RESPALDO DE EMERGENCIA","summary_view_time":"RESUMEN DE TIEMPO DE COMPILACIÓN","summary_view_time_zone":"ZONA HORARIA","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"El dispositivo con emparejamiento Wi-Fi no está respondiendo","system-device-unknown-sitecontroller":"El dispositivo aún no ha detectado a sus secundarios","system_acpw_vitals_charge":"Nivel de carga: {charge}%","system_acpw_vitals_power":"Alimentación de CA: {power}","system_acpw_vitals_power_charging":"Alimentación de CA: {Power} Cargando","system_acpw_vitals_power_discharging":"Alimentación de CA: {power} Descargando","system_acpw_vitals_state":"Estado de Powerwall: {state}","system_acpw_vitals_voltage":"Tensión de CA: {voltage}","system_controller_din":"Controlador: {din}","system_device_alert_disabled":"Dispositivo desactivado","system_device_alert_updating":"Actualizando firmware...","system_device_gateway_not_islanding":"Este no es el controlador de aislamiento.","system_device_leader":"Líder","system_device_name_backup_switch":"Backup Switch ({sn})","system_device_name_battery_assembly":"Conjunto de baterías ({sn})","system_device_name_gateway":"Pasarela ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus":"{role} Powerwall+","system_device_name_powerwall_plus_leader":"Powerwall+ líder","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+ (cableado)","system_device_name_powerwall_plus_wireless":"Powerwall+ (inalámbrico)","system_device_name_remote_meter":"Medidor remoto ({sn})","system_device_name_solar_assembly":"Conjunto solar ({sn})","system_device_name_solar_assembly_1":"Conjunto solar","system_device_name_sync":"Contactor de Gateway/Controlador de medidor ({sn})","system_firmware_update":"Actualizando: {percent} % ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"Estado de respaldo: {backupState}","system_islanding_vitals_grid_line":"Línea de red eléctrica {lineNumber}: {v} {f}","system_islanding_vitals_island_line":"Línea de isla {lineNumber}: {v} {f}","system_overview_connected":"Conectado a Tesla","system_overview_disconnected":"No conectado a Tesla","system_overview_follower":"Powerwall seguidor","system_overview_login_required":"Para ver el funcionamiento del sistema, es necesario iniciar sesión","system_overview_scanning":"Buscando dispositivos...","system_overview_site_controller":"Controlador del emplazamiento","system_overview_updating":"Actualizando dispositivos...","system_pvi_vitals_ac_solar_power":"Energía solar CA: {power} / {current}","system_pvi_vitals_ac_solar_power_only":"Energía solar CA: {power}","system_pvi_vitals_lifetime_energy_kwh":"Energía de por vida: {energy}","system_pvi_vitals_state":"Estado: {message}","system_pvi_vitals_string":"Tramo {number}: {voltage} / {current}","system_pvi_vitals_string_not_connected":"Tramo {number}: No conectada","system_remote_meter_ct_line":"CT {n} ({location}): {value}","system_remote_meter_no_cts":"No hay CT configurados","system_rescan_button_text":"Volver a buscar dispositivos","system_scanning_label_text":"Buscando dispositivos...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Compruebe que el sistema funciona según lo previsto.","test_container_system_test_title":"Prueba del sistema","test_inverter_container_error_grid_uncompliant":"La prueba no puede ejecutarse porque la red no cumple los requisitos.","test_inverter_container_error_not_idle":"El Powerwall debe estar en espera para realizar la prueba.","test_inverter_container_results_error_plural_subtitle":"{num} Pruebas fallaron","test_inverter_container_results_error_singular_subtitle":"{num} Prueba falló","test_inverter_container_results_success_plural_subtitle":"{num} Pruebas pasaron","test_inverter_container_results_success_singular_subtitle":"{num} Prueba pasó","test_inverter_container_results_success_subtitle":"Todas las pruebas pasaron","test_inverter_container_results_title":"Resultados de la prueba automática del inversor","test_inverter_container_title":"Autocomprobación del inversor","test_meter_composite_view_auxiliary_meter_setup_instructions":"Se debe configurar como mínimo un transformador de corriente para cada medidor auxiliar.","test_meter_composite_view_auxiliary_meters_title":"Medidores auxiliares","test_meter_composite_view_configure_meters":"CONFIGURAR MEDIDORES","test_meter_composite_view_current_transformer_setup_instructions":"Utilice como mínimo un CT de emplazamiento o un CT de carga, pero no ambos.","test_meter_composite_view_external_meter_setup_instructions":"Debe establecerse al menos un transformador de corriente para cada medidor externo.","test_meter_composite_view_external_meters_title":"Medidores externos","test_meter_composite_view_internal_meters_gateway_title":"Medidores internos (Gateway)","test_meter_composite_view_internal_meters_title":"Medidores internos","test_meter_composite_view_no_configured_meters":"NO HAY NINGÚN MEDIDOR CONFIGURADO. POR FAVOR {configure} PARA CONTINUAR.","test_meter_composite_view_note":"NOTA","test_meter_item_view_acuvim_label":"Medidor {id}: Medidor Acuvim","test_meter_item_view_backup_switch_label":"Medidor {id}: Medidor de Backup Switch","test_meter_item_view_configure_phases_note":"Configure las fases para activar los CT para este medidor","test_meter_item_view_internal_meter_x_gateway_label":"Medidor {id}: Medidor primario interno X (Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"Medidor {id}: Medidor auxiliar interno Y (Gateway)","test_meter_item_view_remote_w1_wifi_label":"Medidor {id}: Wi-Fi remota","test_meter_item_view_remote_w1_wired_label":"Medidor {id}: Conexión remota por cable","test_meter_item_view_remote_w2_wifi_label":"Medidor {id}: Wi-Fi remota","test_meter_item_view_remote_w2_wired_label":"Medidor {id}: Conexión remota por cable","test_meter_item_view_reset":"RESTABLECER TODO","test_meter_item_view_site_meter_title":"Medidor interno del emplazamiento","test_meter_item_view_sync_id":"Sincronizar medidor {id}","test_meter_item_view_toggle_advanced":"Avanzado","test_meter_item_view_toggle_power":"Potencia","test_meter_item_view_wifi_id":"Medidor {id}","test_meter_item_view_wired_id":"Medidor cableado {id}","test_view_canceled_status":"Prueba cancelada","test_view_failed_status":"La Prueba Ha Fallado","test_view_idle_status":"Comenzando la Prueba del Sistema","test_view_init_status":"Preparándose para el inicio de la prueba","test_view_inverter_test_warning_message":"Si dispone de un inversor FV de exportación 0, el procedimiento de autocomprobación del Gateway no puede calificar correctamente el sistema. Desconecte el inversor FV hasta que la autocomprobación se haya completado.","test_view_passed_status":"La Prueba Ha Pasado","test_view_prep_status":"Inicializando controles: ¡Puede tardar unos minutos!","test_view_running_status":"prueba de carga en ejecución","test_view_skip_start_system_test_text":"Confirmar para omitir la prueba del sistema","test_view_start_system_test_warning":"ADVERTENCIA","test_view_system_test_completed_message":"¡Prueba del sistema completada!","time_minute":"minuto","time_minutes":"minutos","time_second":"segundo","time_seconds":"segundos","time_started_at":"Iniciado a las: {time}","timezone_container_subtitle":"Según el sitio y la dirección IP, podemos ayudarle a encontrar la zona horaria de su instalación.","timezone_container_title":"Zona horaria","timezone_view_label":"zona horaria","toast_view_standard_title":"Nota","toast_view_warning_title":"Advertencia","update_container_industrial_updating_description":"El controlador del emplazamiento se reiniciará automáticamente ahora para instalar la actualización. {lb1}{lb2} Espere 2 minutos, conéctese de nuevo a la red del controlador del emplazamiento y a continuación {refresh}","update_container_preparing_title":"Preparando la actualización más reciente","update_container_refresh_browser":"Actualice su navegador.","update_container_residential_updating_description":"El Gateway se reiniciará ahora automáticamente para instalar la actualización. {lb1}{lb2} Por favor, espere 2 minutos, vuelva a conectarse a la red del Gateway y, a continuación, {refresh}","update_container_skip_title":"¿Omitir actualización?","update_container_subtitle":"Compruebe si hay actualizaciones. Nota: La orden de actualización del firmware a los Powerwalls se produce en la página del Powerwall.","update_container_subtitle_industrial":"Compruebe si hay actualizaciones. Nota: La orden de actualización del firmware a las baterías se produce en la página de baterías.","update_container_title":"Actualizar","update_container_updating_title":"Instalando actualización","update_step_item_view_resolution_title":"Solución recomendada","update_view_check_again":"HAGA CLIC PARA COMPROBAR DE NUEVO","update_view_check_for_update":"COMPROBAR ACTUALIZACIÓN DEL GATEWAY","update_view_check_for_update_industrial":"COMPROBAR SI HAY UN CONTROLADOR DEL EMPLAZAMIENTO ACTUALIZADO","update_view_checking_update":"Buscando actualizaciones","update_view_current_version":"Versión actual: {version}","update_view_current_version_label":"VERSIÓN ACTUAL:","update_view_downloading":"DESCARGANDO","update_view_downloading_update":"Descargando actualización","update_view_no_power_cicle":"¡NO APAGUE Y ENCIENDA!","update_view_percent_complete":"{percent} completo","update_view_progress":"PROGRESO DE ACTUALIZACIÓN","update_view_staged":"VERSIÓN NUEVA PREPARADA","update_view_staged_update":"Listo para actualizar","update_view_staging":"PREPARANDO","update_view_staging_update":"Preparando actualización","update_view_time_remaining":"restante","update_view_up_to_date":"VERSIÓN ACTUALIZADA","update_view_update_now":"ACTUALIZAR AHORA","update_view_update_urgency_label":"Estado de actualización: {status}","update_view_updated_industrial":"El software del controlador del emplazamiento está actualizado.","update_view_updated_residential":"El software del Gateway está actualizado.","update_view_wait_minutes":"POR FAVOR ESPERE UNOS MINUTOS","validation_phone":"Ingrese un número telefónico válido","vitals_header_subtitle_firmware_update":"Actualización de firmware en curso...","vitals_header_subtitle_firmware_update_failed":"Error en la actualización del firmware. Compruebe los interruptores de encendido y el cableado.","vitals_header_title":"Sistema","vitals_powerwall_state_ac_fault":"Fallo de etapa de CA","vitals_powerwall_state_dc_fault":"Fallo de etapa de CC","vitals_powerwall_state_grid_following":"Seguimiento de red eléctrica","vitals_powerwall_state_grid_forming":"Formación de red eléctrica","vitals_powerwall_state_init":"Inicializando","vitals_powerwall_state_off":"Apagado","vitals_powerwall_state_standby":"En espera","vitals_powerwall_state_support_dc":"Soporte de CC","warning":"ADVERTENCIA","warning_off_grid":"Si el sistema eléctrico está fuera de red, cualquier carga en reserva se anulará en 5 minutos.","warning_on_grid":"Si el sistema eléctrico está conectado a la red, Powerwall dejará de cargar/descargar.","warning_sitemaster_container_not_running":"El registro principal de la instalación no se está ejecutando","wifi_pairing_link_message":"Añada un Powerwall conectado por Wi-Fi","wifi_view_find_network":"ENCONTRAR RED POR SSID","wifi_view_note":"Nota: El Gateway solo es compatible con redes inalámbricas de 2,4 GHz.","wifi_view_note_five_ghz":"Nota: El Gateway es compatible con redes inalámbricas de 2,4 GHz y de 5 GHz.","wifi_view_readonly":"Este es un Powerwall seguidor, por lo que su configuración de red inalámbrica no se puede editar.","wifi_view_security_label":"SEGURIDAD","wizard_container_commissioning_wizard":"Asistente de Servicio de Tesla","wizard_container_login_required":"Es necesario iniciar sesión","wizard_container_title":"Comencemos.","wizard_container_verifying_login_title":"Verificando Inicio de sesión"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Fout","advanced_settings_submit":"Indienen","advanced_settings_submitted":"Ingediend","advanced_settings_title":"Geavanceerde instellingen","alert_container_ac_phase_1_over_voltage":"AC-overspanning","alert_container_ac_phase_1_under_voltage":"AC-onderspanning","alert_container_ac_phase_2_over_voltage":"AC-overspanning","alert_container_ac_phase_2_under_voltage":"AC-onderspanning","alert_container_ac_phase_3_over_voltage":"AC-overspanning","alert_container_ac_phase_3_under_voltage":"AC-onderspanning","alert_container_over_frequency":"AC-overfrequentie","alert_container_rate_of_change_frequency":"Snelheid van verandering AC-frequentie","alert_container_under_frequency":"AC-onderfrequentie","app_container_engineering_mode_banner_message":"Tesla-servicemodus vereist geen authenticatie. \'Stop systeem\' als u operationele wijzigingen aanbrengt. Laat het systeem in een acceptabele staat voordat u de browser sluit. Sluit de browser als u klaar bent, aangezien deze modus geen authenticatie vereist.","app_container_engineering_mode_title":"Tesla-servicemodus","app_container_firmware_update_banner_message":"Laat de installatie en bedrading ongemoeid en blijf op deze pagina totdat de update is voltooid.","app_container_firmware_update_banner_title":"Firmware-update wordt uitgevoerd","app_container_sitemaster_message_title":"Het systeem is momenteel actief. Om de status van de batterijblokken te kunnen zien, moet het systeem worden uitgeschakeld. U kunt het systeem stoppen vanaf de beginpagina.","app_container_sitemaster_power_supply_mode_banner_message":"Batterij die wisselspanning produceert om apparaten van stroom te voorzien voor koppeling en configuratie. Knop om het systeem op de beginpagina te stoppen.","app_container_sitemaster_power_supply_mode_banner_title":"Netvormingsmodus","app_container_sitemaster_running_banner_title":"Systeem actief","battery_container_cannot_communicate":"Kan niet communiceren met Powerwall Controleer bedrading en afsluiting van CAN-bus.","battery_container_chinv":"VFD voor compressor en verwarming (CHINV) {index}","battery_container_confirm_update_firmware":"Dit proces kan enkele minuten duren. Onderbreek de update niet en verlaat deze pagina niet.","battery_container_dcbc":"Batterijblok {index}","battery_container_dcbc_comms_failure":"Communicatiefout. Controleer netwerkverbinding met de unit en scan opnieuw.","battery_container_dcbc_dcdisconnect_opened":"DC-onderbrekingshendel staat in de uit-stand.","battery_container_dcbc_door_switch_opened":"Inschakelkabel omvormerdeur open. Onderzoek deurschakelaar.","battery_container_dcbc_enable_line_return_low_estop":"Uitschakelcontact op afstand van omvormer open. Onderzoek circuit van uitschakelcontact op afstand","battery_container_dcbc_enable_line_return_low_inv":"Inschakelkabel omvormersysteem open. Onderzoek feedback van stroomonderbreker.","battery_container_dcbc_enable_line_return_low_str":"Inschakelkabel voor een of meer Powerpack-rijen is open. Onderzoek bedrading en Powerpack-deuren. Zie de Enable Line Troubleshooting Guide voor diagnose.","battery_container_diagnosis_incomplete":"Diagnose onvolledig. Een firmware-update is vereist voordat verdere controles kunnen worden uitgevoerd.","battery_container_faults":"Storingen","battery_container_firmware_update_needed":"Firmware-update nodig.","battery_container_industrial_confirm_update_firmware":"Hiermee wordt de firmware van elk batterijblok en de subcomponenten bijgewerkt.","battery_container_internal_communications_fault":"Interne communicatiestoring. Controleer bedrading en afsluiting van CAN-bus en voer een firmware-update uit.","battery_container_mpbc":"Batterijblok {index}","battery_container_mpthc":"Temperatuurregeling (MPTHC) {index}","battery_container_no_sync_detected":"Geen schakelaarcontroller gedetecteerd. Geen back-upmogelijkheid gedetecteerd.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Paal (LCC) {index}","battery_container_post_missing":"Ontbrekende paal {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Vermogensfase {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"De Powerwall is uitgeschakeld. Zorg dat de schakelaar in de stand ON is.","battery_container_qbms":"Batterijmanagementsysteem (QBMS)","battery_container_qhvp":"Hoogspanningsprocessor (QHVP)","battery_container_residential_confirm_update_firmware":"Hiermee wordt de firmware van elke Powerwall en de schakelaarcontroller (indien aanwezig) bijgewerkt.","battery_container_resolve_connectivity":"Los connectiviteitsproblemen op voordat u een firmware-update uitvoert.","battery_container_scan":"SCANNEN","battery_container_scan_in_progress":"SCANNEN...","battery_container_scbc":"Laderblok {index}","battery_container_scthc":"Temperatuurregeling (SCTHC) {index}","battery_container_self_tests_failure":"Niet geslaagd voor zelftest.","battery_container_self_tests_inconclusive":"Resultaten zelftest niet doorslaggevend.","battery_container_self_tests_internal_error":"Zelftest mislukt vanwege interne systeemfout.","battery_container_self_tests_stall":"Time-out: zelftests kunnen niet starten.","battery_container_self_tests_system_down":"Kan geen zelftests uitvoeren terwijl het systeem is uitgeschakeld. Start het systeem en probeer het opnieuw.","battery_container_serial_number":"SERIENUMMER: {sn}","battery_container_starc":"DC-DC-omvormer (STARC) {index}","battery_container_stitch":"Controlevermogen DC-DC (STITCH)","battery_container_synchronizer":"Schakelaarcontroller","battery_container_unknown":"Onbekende buscontroller {index}","battery_container_update_failed":"Update mislukt. Probeer het opnieuw en zorg ervoor dat bedrading en activeringsschakelaars niet worden onderbroken tijdens het updateproces.","battery_container_update_firmware":"FIRMWARE BIJWERKEN","battery_container_update_in_progress":"UPDATE WORDT UITGEVOERD...","battery_container_waiting_to_report_firmware":"Wachten tot unit de firmwareversie meldt.","battery_container_warnings":"Waarschuwingen","caution":"ATTENTIE","client_protocols_container_subtitle":"Clientprotocollen inschakelen of uitschakelen.","client_protocols_container_title":"Clientprotocollen","client_protocols_menu_title":"Clientprotocollen","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"Modbus TCP/IP","conductor_limit":"Batterijen worden gecontroleerd om te voorkomen dat de geconfigureerde stroomlimieten voor elke fase van de stroomtrafo\'s van de geleider worden overschreden. Controleer het toepassingsvoorbeeld van de geleiderlimiet voor meer informatie over waar deze wordt gebruikt en welke limieten moeten worden geconfigureerd.","conductor_min_current":"Exportlimiet voor geleider","control_container_add_on":"TOEVOEGING","control_container_always_active":"ALTIJD ACTIEF","control_container_battery_ok":"VOLLEDIGE BATTERIJ-EXPORT TOEGESTAAN","control_container_charge_power_target":"DOEL LAADVERMOGEN","control_container_conductor_max_current":"Importlimiet voor geleider","control_container_conductor_min_current_max_bound":"{mode} heeft maximumwaarde van 200 A","control_container_conductor_min_current_min_bound":"{mode} heeft minimumwaarde van 5 A","control_container_control_subtitle":"Ondertitel controle","control_container_control_title":"Titel controle","control_container_direct":"DIRECT","control_container_disable":"Uitschakelen","control_container_discharge_power_target":"DOEL ONTLAADVERMOGEN","control_container_enabled":"INGESCHAKELD","control_container_energy_target":"ENERGIEDOEL Deze waarde moet overeenkomen met de systeemgrootte volgens de ontwerpdocumenten en het controleursrapport","control_container_error_message":"{mode} is vereist","control_container_explanation_bullet_five_max_site_meter_power_kw":"Wanneer het nettoverbruik groter is dan deze limiet, worden de batterijen zo goed mogelijk ontladen om te voorkomen dat deze limiet wordt overschreden.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Wanneer de netto-opwekking groter is dan deze limiet, worden de batterijen zo goed mogelijk opgeladen om te voorkomen dat deze limiet wordt overschreden.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Wanneer het nettoverbruik kleiner is dan deze limiet, worden de batterijen beperkt in hun toegestane laadvermogen.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Wanneer de netto-opwekking kleiner is dan deze limiet, worden de batterijen beperkt in hun toegestane ontlaadvermogen.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Importlimiet voor locatie is een optionele instelling. Laat dit veld leeg om beperking uit te schakelen.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Exportlimiet voor locatie is een optionele instelling. Laat dit veld leeg om beperking uit te schakelen.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Dit is een totale limiet voor alle fasen op alle locatiemeters. (Opmerking: wanneer verbruiksmeters worden gebruikt, wordt de locatiemeter berekend met behulp van verbruik, zonne-energie en batterij).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Dit is een totale limiet voor alle fasen op alle locatiemeters. (Opmerking: wanneer verbruiksmeters worden gebruikt, wordt de locatiemeter berekend met behulp van verbruik, zonne-energie en batterij).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Indien ingeschakeld, regelt de sitemaster de maximale energie die van het net naar de locatie mag worden geïmporteerd.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Indien ingeschakeld, regelt de sitemaster de maximale energie die van de locatie naar het net mag worden geëxporteerd.","control_container_explanation_export_restrictions_locked":"Bepaalt hoe het systeem energie naar het net kan exporteren. Eenmaal ingesteld, vereist de regelgeving dat deze alleen kan worden gewijzigd door contact op te nemen met Tesla.","control_container_explanation_export_restrictions_unlocked":"Regelgeving vereist dat exportkenmerken alleen kunnen worden ingesteld tijdens de eerste inbedrijfstelling. Neem contact op met Tesla voor wijziging.","control_container_explanation_nominal_system":"Deze waarde moet overeenkomen met de systeemgrootte volgens de ontwerpdocumenten en het controleursrapport.","control_container_heat_for_energy":"WARMTE VOOR ENERGIE","control_container_heat_mode":"WARMTEMODUS","control_container_loading":"Laden","control_container_max_site_meter_power_W_max_bound":"{mode} heeft maximumwaarde van 50000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} heeft minimumwaarde van 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} moet groter zijn dan of gelijk zijn aan 0","control_container_max_site_meter_power_kw":"Importlimiet voor locatie","control_container_max_site_meter_power_w":"Importlimiet voor locatie","control_container_menu":"Menu","control_container_min_site_meter_power_kW_positive":"{mode} moet groter zijn dan of gelijk zijn aan 0","control_container_min_site_meter_power_kw":"Exportlimiet voor locatie","control_container_min_site_meter_power_w":"Exportlimiet voor locatie","control_container_minimum_charge_power":"MINIMAAL LAADVERMOGEN","control_container_minimum_discharge_power":"MINIMAAL ONTLAADVERMOGEN","control_container_misc":"DIVERS","control_container_net_meter_mode":"Exportbeperkingen voor locatie","control_container_never":"GEEN LOCATIE-EXPORT","control_container_nominal_system_energy_kW_positive":"{mode} moet groter zijn dan of gelijk zijn aan 0","control_container_nominal_system_energy_kWh_positive":"{mode} moet groter zijn dan of gelijk zijn aan 0","control_container_nominal_system_energy_kwh":"Nominale systeemenergie","control_container_nominal_system_energy_max_error":"Nominale systeemenergie overschrijdt de maximale energielimiet","control_container_nominal_system_power_kw":"Nominaal systeemvermogen","control_container_nominal_system_power_max_error":"Nominaal systeemvermogen overschrijdt de maximale vermogenslimiet","control_container_number_error_message":"{mode} moet een numerieke invoer zijn","control_container_power":"VERMOGEN","control_container_pv_only":"EXPORT TOT PV-METERSTAND OK","control_container_reactive_mode":"REACTIEVE MODUS","control_container_real_mode":"REAL-MODUS","control_container_reset":"Herstellen","control_container_site_control":"LOCATIEREGELING","control_container_site_limits":"LOCATIELIMIETEN","control_container_site_max_power":"MAX. VERMOGEN LOCATIE","control_container_site_min_power":"MIN. VERMOGEN LOCATIE","control_container_submit":"Indienen","control_container_submitting_control":"Indieningscontrole","control_start":"START","control_stop":"STOP","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Versterker {id}","current_transformer_item_view_battery_ct":"Batterij","current_transformer_item_view_calculated_reading":"Berekend:","current_transformer_item_view_conductor_ct":"Geleider","current_transformer_item_view_ct_voltage_pairing_1":"Fase L1","current_transformer_item_view_ct_voltage_pairing_2":"Fase L2","current_transformer_item_view_ct_voltage_pairing_3":"Fase L3","current_transformer_item_view_ct_voltage_pairing_default":"Standaardfase","current_transformer_item_view_doubled_solar_ct":"Zonne-energie (1 stroomtrafo x2)","current_transformer_item_view_flip":"Spiegelen","current_transformer_item_view_generator_ct":"Generator","current_transformer_item_view_load_ct":"Verbruikers","current_transformer_item_view_measured_reading":"Per stroomtrafo:","current_transformer_item_view_no_reading":"Geen meting","current_transformer_item_view_none_ct":"Geen","current_transformer_item_view_phase_sequence_dropdown_title":"Fase","current_transformer_item_view_site_ct":"Locatie","current_transformer_item_view_solar_ct":"Zonne-energie","current_transformers_container_800a_ct_ensure":"Zorg ervoor dat de selectie van stroomtrafo\'s op deze pagina overeenkomt met wat is geïnstalleerd.","current_transformers_container_800a_ct_larger":"Stroomtrafo\'s van 800 A zijn fysiek groter dan de stroomtrafo\'s van 200/264 A.","current_transformers_container_800a_ct_use_case":"Gebruik en configureer de stroomtrafo van 800 A bij het meten van grote geleiders of panelen (zoals 400 A/800 A).","current_transformers_container_amps_explanation":"Stroom die door de stroomtransformator vloeit","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Zorg ervoor dat de stroomtrafo is geïnstalleerd voor de juiste fase ({sequence}).","current_transformers_container_configure_subtitle":"Configureer de meetstroomtransformatoren.","current_transformers_container_ct_flipping_ensure_direction":"Zorg er eerst voor dat het label van stroomtrafo naar de omvormer voor zonne-energie (voor stroomtrafo van zonne-energie) of naar de netvoeding (voor stroomtrafo van locatie) is gericht. Controleer vervolgens de fasebedrading en verifieer de gerapporteerde meetwaarden voor stroom, vermogen en vermogensfactor.","current_transformers_container_ct_flipping_modal_title":"Stroomtrafo omzetten in software","current_transformers_container_ct_flipping_software_incorrect_metering":"Het gebruik van software om een stroomtrafo die voor de verkeerde fase is geïnstalleerd om te zetten, resulteert in een onjuiste meting.","current_transformers_container_ct_flipping_wrong_phase":"Een negatieve vermogenswaarde kan erop duiden dat de stroomtrafo achterstevoren of voor de verkeerde fase is geïnstalleerd.","current_transformers_container_double_check_recommendation":"Controleer bedrading, spanningsaftakkingen, CT\'s en meterconfiguratie voordat u doorgaat.","current_transformers_container_doubled_solar_ct_explanation":"Eén stroomtrafo kan worden gebruikt om een gebalanceerde PV-omvormer te meten.","current_transformers_container_doubled_solar_ct_modal_title":"Meting van een gesplitste-fase zonne-omvormer met één stroomtrafo","current_transformers_container_grid_code_phase_modal_title":"Waarschuwing: Aantal CT\'s komt niet overeen met aanbeveling fase netcode","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Waarschuwing: Aantal CT\'s komt niet overeen met aanbeveling voor meerdere meters","current_transformers_container_grid_code_phase_multiple_warnings_message":"Onverwacht aantal CT\'s verbonden met de volgende {numMeters} meters:","current_transformers_container_grid_code_phase_warning_message":"Onverwacht aantal CT\'s verbonden met de volgende meter:","current_transformers_container_grid_code_single_phase_warning":"De toegepaste netcode is eenfase. Eenfasesystemen hebben normaal ofwel 1- ofwel 3-fasig aansluiting. {lb} Een oneven aantal CT\'s (1 of 3) wordt aanbevolen.","current_transformers_container_grid_code_split_phase_warning":"De toegepaste netcode is tweefase. Tweefasesystemen hebben normaal één CT voor iedere \\"spanningvoerende\\" geleider. {lb} Een even aantal CT\'s (2 of 4) wordt aanbevolen. ","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Zorg ervoor dat het label van de stroomtrafo naar de zonne-energieomvormer is gericht.","current_transformers_container_label_modal_title":"Uitleg bij labels","current_transformers_container_load_ct_ensure":"Zorg er bij het configureren van verbruiksstroomtrafo\'s voor dat alle verbruik van de huisinstallatie wordt gemeten en dat back-up- en niet-backverbruik afzonderlijk worden gemeten.","current_transformers_container_load_ct_modal_title":"Verbruiksstroomtrafo ","current_transformers_container_load_ct_recommended":"Het configureren van verbruiksstroomtrafo\'s wordt alleen aanbevolen voor specifiek gebruik waarbij het niet mogelijk is om een huisinstallatie-stroomtrafo te configureren.","current_transformers_container_meter_id":"Meter {id}","current_transformers_container_no_load_and_site_ct":"Er kan niet zowel een verbruiks- als een huisinstallatiestroomtrafo zijn.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"Er kan geen verbruik achter de stroomtrafo zijn.","current_transformers_container_no_site_or_load_warning":"GEEN TRAFO GECONFIGUREERD","current_transformers_container_no_solar_ct_warning":"GEEN STROOMTRAFO VOOR ZONNEPANELEN GECONFIGUREERD","current_transformers_container_no_solar_inverter_warning":"GEEN PV-OMVORMER GECONFIGUREERD","current_transformers_container_phase_usages_modal_title":"Waarschuwing: Stroomtrafoconfiguratie komt niet overeen met faseconfiguratie","current_transformers_container_phase_usages_warning":"Het aantal geconfigureerde fasen komt niet overeen met het aantal geconfigureerde stroomtrafo\'s. {lb} {num} geconfigureerde stroomtrafo\'s worden aanbevolen.","current_transformers_container_phase_usages_warning_message":"Onverwacht aantal stroomtrafo\'s verbonden met de volgende meter(s):","current_transformers_container_power_amperage_configure_warning":"Stroomtransformator {type} vereist dat zowel het positieve vermogen als het ampèrage correct worden geconfigureerd.","current_transformers_container_power_factor_explanation":"Vermogensfactor (Power_Real / Power_Apparent). Alleen weergegeven voor hoge vermogensniveaus. Voor algemene resistieve belastingen zou de vermogensfactor dicht bij 1 moeten liggen. Een lage vermogensfactor kan erop wijzen dat een stroomtransformator onjuist is geïnstalleerd of dat er sprake is van zeer grote capacitieve/inductieve belastingen.","current_transformers_container_power_factor_out_of_range_warning":"Meting vermogensfactor is buiten verwacht bereik. {lb} Gemeten vermogensfactor: {powerFactor} PF {lb} De meter is mogelijk onjuist geïnstalleerd of op een onjuiste fase, of er zijn zeer grote capacitieve/inductieve lasten.","current_transformers_container_system_test_configured_incorrect":"Waarschuwing: CT {id} is mogelijk onjuist geconfigureerd","current_transformers_container_title":"Stroomtransformatoren","current_transformers_container_voltage_out_of_range_warning":"Spanning is buiten bereik. {lb} Gemeten spanning: {volts} V {lb} Gemeten spanning van deze CT is buiten het normale bedrijfsbereik.","current_transformers_container_volts_explanation":"Spanning van lijn naar neutraal op de spanningsaftakking die bij de stroomtransformator hoort","current_transformers_container_watts_explanation":"Voeding als stroom die door de stroomtransformator vloeit, vermenigvuldigd met de spanning op de bijbehorende spanningsaftakking","customer_installation_view_email_label":"E-MAIL KLANT","customer_installation_view_email_placeholder":"E-mail","customer_registration_view_address_label":"ADRES","customer_registration_view_address_placeholder":"Adres","customer_registration_view_city_label":"PLAATS","customer_registration_view_city_placeholder":"Plaats","customer_registration_view_clear_form":"FORMULIER WISSEN","customer_registration_view_country_label":"Land","customer_registration_view_customer_information":"KLANTINFORMATIE","customer_registration_view_email_address_label":"E-MAIL","customer_registration_view_email_placeholder":"E-mail","customer_registration_view_family_name_label":"ACHTERNAAM","customer_registration_view_family_name_warning":"Voer de achternaam van de klant in.","customer_registration_view_given_name_label":"VOORNAAM","customer_registration_view_given_name_warning":"Voer de voornaam van de klant in.","customer_registration_view_homeowner_family_name_placeholder":"Achternaam","customer_registration_view_homeowner_given_name_placeholder":"Voornaam","customer_registration_view_installation_address":"Installatie adres","customer_registration_view_phone_number_label":"TELEFOON","customer_registration_view_phone_placeholder":"Telefoon","customer_registration_view_state_placeholder":"Provincie","customer_registration_view_state_province_region_label":"STAAT/PROVINCIE/REGIO","customer_registration_view_zip_label":"POSTCODE","customer_registration_view_zip_placeholder":"Postcode","diagnostic_category_item_view_download_results":"RESULTATEN DOWNLOADEN","diagnostic_category_item_view_internal_comms_description":"Controleer alle communicatie tussen apparaten","diagnostic_category_item_view_internal_comms_title":"Communicatie tussen apparaten","diagnostic_category_item_view_metering_description":"Controleer meterverbindingen","diagnostic_category_item_view_metering_title":"Bemetering","diagnostic_category_item_view_networking_description":"Controleer netwerkverbinding","diagnostic_category_item_view_networking_title":"Netwerk","diagnostic_category_item_view_no_selected_tests":"GEEN GESELECTEERDE TESTS","diagnostic_category_item_view_rerun_selected":"{num} GESELECTEERDE TESTS OPNIEUW UITVOEREN","diagnostic_category_item_view_rerun_selected_test":"GESELECTEERDE TEST OPNIEUW UITVOEREN","diagnostic_category_item_view_run_selected":"{num} GESELECTEERDE TESTS UITVOEREN","diagnostic_category_item_view_run_selected_test":"GESELECTEERDE TEST UITVOEREN","diagnostic_category_item_view_self_tests_description":"Laad- en ontlaadtests op het systeem starten","diagnostic_category_item_view_self_tests_title":"Zelftests","diagnostic_category_item_view_toggle_all_tests":"Alle wisselen","diagnostic_input_view_blocks_label":"BLOKKEN","diagnostic_input_view_max_allowed_charge_power_label":"MAX. TOEGESTAAN LAADVERMOGEN","diagnostic_input_view_max_allowed_discharge_power_label":"MAX. TOEGESTAAN ONTLAADVERMOGEN","diagnostic_test_enable_line":"Inschakelkabel","diagnostic_test_item_view_ac_self_test_description":"Zelftest wisselspanning","diagnostic_test_item_view_dc_self_test_description":"Zelftest gelijkspanning","diagnostic_test_item_view_enable_line_description":"Test inschakelkabel hoog voor alle Powerwalls","diagnostic_test_item_view_enable_line_resolution":"Zet inschakelkabel uit en weer aan en probeer het opnieuw","diagnostic_test_item_view_meter_comms_description":"Ping metercommunicatie","diagnostic_test_item_view_network_connection_description":"Test verbinding met internet en Tesla-servers","diagnostic_test_item_view_network_connection_resolution":"Herconfigureer netwerk","diagnostic_test_item_view_resolution_generic_text":"Herconfigureer {name} en probeer het opnieuw","diagnostic_test_item_view_step_canceled":"Test is geannuleerd door gebruiker","diagnostic_test_item_view_step_config_update_status":"Controleer status Tesla-configuratieserver","diagnostic_test_item_view_step_google_http":"Ping Google-HTTP","diagnostic_test_item_view_step_google_https":"Ping Google-HTTPS","diagnostic_test_item_view_step_hermes_status":"Controleer status Tesla-aanmeldserver","diagnostic_test_item_view_step_results_ip_address":"IP-adres","diagnostic_test_item_view_step_results_subnet_mask":"Subnet","diagnostic_test_item_view_table_header_key":"Identificatie","diagnostic_test_item_view_table_header_name":"Stap","diagnostic_test_item_view_table_header_value":"Waarde","diagnostic_test_meter_comms":"Metercommunicatie","diagnostic_test_network_connection":"Netwerkverbinding","diagnostics_composite_view_no_tests_found":"GEEN BESCHIKBARE TESTS GEVONDEN","diagnostics_composite_view_run_all_selected_tests":"ALLE GESELECTEERDE TESTS UITVOEREN","diagnostics_container_industrial_disruptive_tests_description":"De volgende tests laten de ventilator en thermische systemen werken, wat geluid genereert. Er kan ongeveer 30 kW per omvormerafname worden verwacht. Bovendien kunnen de volgende tests de normale werking van het systeem verstoren:","diagnostics_container_required_inputs_description":"De volgende tests vereisen extra invoer:","diagnostics_container_residential_disruptive_tests_description":"De volgende tests kunnen de normale werking van zowel de gateway als de Powerwall verstoren:","diagnostics_container_stop_test_title":"Test {name} stoppen?","diagnostics_container_subtitle":"Tools om problemen met de systeeminstallatie te diagnosticeren.","diagnostics_container_tests_running":"Diagnostische tests worden uitgevoerd","diagnostics_container_title":"Diagnose","dropdown_default_placeholder":"Typ...","dropdown_list_view_select_all":"Alles selecteren","dropdown_list_view_select_field":"Selecteer een veld.","dropdown_list_view_show_complete":"OVERSCHAKELEN NAAR COMPLETE LIJST","dropdown_list_view_show_searchable":"OVERSCHAKELEN NAAR DOORZOEKBARE LIJST","error_details":"Foutdetails","error_item_view_check_network":"Controleer netwerkverbinding.","error_item_view_disconnected":"Verbinding met gateway verbroken. Controleer netwerkverbinding en {refresh}","error_item_view_forgot_password":"Klik om wachtwoord te resetten.","error_item_view_refresh_browser":"Vernieuw browser.","error_item_view_try_logging_in_again":"Probeer opnieuw aan te melden.","ethernet_view_backup_dns_label":"BACK-UP DNS-SERVER","ethernet_view_backup_dns_warning":"Geldige back-up DNS-server","ethernet_view_configuration_label":"CONFIGURATIE","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY (OPT)","ethernet_view_gateway_warning":"Geldige gateway (router)-IP","ethernet_view_ip_address_label":"IP-ADRES","ethernet_view_ip_address_warning":"Geldig IP-adres","ethernet_view_not_available":"Niet beschikbaar","ethernet_view_primary_dns_label":"PRIMAIRE DNS-SERVER","ethernet_view_primary_dns_warning":"Geldige primaire DNS-server","ethernet_view_static_label":"Statisch","ethernet_view_subnet_mask_label":"SUBNETMASKER (OPT)","ethernet_view_subnet_mask_warning":"Geldig subnetmasker","field_false":"Niet waar","field_true":"Waar","form_legend_text":"duidt een vereist veld aan","generation_container_connecting_status":"Beginnend","generation_container_connection":"Omvormer {id} Verbinding","generation_container_connection_summary":"Tijdens dit verbindingsproces kunt u tijdelijk de verbinding met het netwerk verbreken. {lb} Zorg ervoor dat u opnieuw verbinding maakt met het juiste netwerk. Dit kan tot 3 minuten duren.","generation_container_subtitle":"Voeg hieronder informatie over de PV-omvormer en generator toe.","generation_container_title":"Genereren","generator_item_view_disconnect_type_label":"TYPE WERKSCHAKELAAR","generator_item_view_generator":"GENERATOR {id}","generator_item_view_manufacturer_label":"FABRIKANT (OPT)","generator_item_view_model_label":"MODEL","generator_item_view_serial_label":"SERIENUMMER","generator_item_view_sustained_power_label":"DUURZAAM VERMOGEN","generator_view_add_generator":"GENERATOR TOEVOEGEN","grid_code_container_off_grid_confirmation":"Is het systeem losgekoppeld van het elektriciteitsnet?","grid_code_container_off_grid_detected":"Van het net losgekoppeld systeem gedetecteerd. Controleer of dit de juiste instelling is.","grid_code_container_off_grid_warning":"{warning} Kan de netstatus van het systeem niet detecteren. Het instellen van de verkeerde netstatus kan leiden tot een systeemstoring.","grid_code_container_results":"Resultaten van detectie van elektriciteitsnet","grid_code_container_retrieving":"Netcodes ophalen","grid_code_container_saving":"Netcode opslaan","grid_code_container_subtitle":"Zoek op basis van locatie en meterstanden de beste instellingen voor uw installatie.","grid_services_view_grid_services":"Elektriciteitsnetservice","help_view_how_password":"Wachtwoord voor gateway zoeken","help_view_how_password_description":"Open de deur van de gateway. Het wachtwoord staat op de sticker achter \\"Password:\\"","help_view_how_serial_number":"Het serienummer vinden op een niet-back-upgateway","help_view_how_serial_number_backup":"Het serienummer vinden op een back-upgateway","help_view_how_serial_number_backup_description":"Open de deur van de back-upgateway. Het serienummer begint met een \\"(S):\\"","help_view_how_serial_number_description":"Open de deur van de gateway. Het serienummer begint met een \\"(S):\\"","help_view_how_to_enable_line":"Een Powerwall in-/uitschakelen","help_view_how_to_enable_line_description":"Zet de schakelaar van de Powerwall in de uit-stand en vervolgens weer in de aan-stand. Bij systemen met meerdere Powerwalls hoeft u slechts één schakelaar te bedienen","hierarchy_charger":"Laderblok {index}","hierarchy_chinv":"VFD voor compressor en verwarming (CHINV)","hierarchy_converter":"DC-DC-omvormer (STARC)","hierarchy_inverter":"Batterijblok {name}","hierarchy_mega_thermal_controller":"Temperatuurregeling (MPTHC)","hierarchy_missing_post":"Ontbrekende paal","hierarchy_mpbc":"Batterijblok {name}","hierarchy_part_number":"Onderdeelnummer","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Rapportage pods","hierarchy_post":"Paal (LCC)","hierarchy_posts":"Palen","hierarchy_power_stage":"Vermogensfase","hierarchy_power_stages":"Vermogensfasen","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Batterijmanagementsysteem (QBMS)","hierarchy_qhvp":"Hoogspanningsprocessor (QHVP)","hierarchy_scthcs":"Temperatuurregelaars","hierarchy_serial_number":"Serienummer","hierarchy_sitemaster":"Sitemaster {name}","hierarchy_starcs":"DC-DC-omvormers","hierarchy_stitch":"Controlevermogen DC-DC (STITCH)","hierarchy_thermal_controller":"Temperatuurregeling (SCTHC)","higher_order_login_login_required":"Inloggen vereist","higher_order_login_title":"Laten we aan de slag gaan.","home_container_inactive_meter":"Verouderde metergegevens","home_container_inactive_meter_description":"Controleer {type} meterverbinding.","home_container_inactive_meter_timestamp":"Laatste meterstand op {timestamp}","home_container_login_required":"Inloggen vereist","home_container_missing_meter":"Meter ontbreekt","home_container_positive_meter":"Waarschuwing: Meter {type} is onjuist geconfigureerd","home_container_positive_meter_description":"Meter {type} vereist dat zowel het positieve vermogen als de stroomsterkte correct worden geconfigureerd.","home_container_powerwall_error":"Fout in Powerwall-systeem","home_container_site_controller_error":"Systeemfout sitecontroller","home_container_sitemaster_alternative":"Let op Normaal gesproken moet het systeem worden uitgeschakeld door de aan-uitschakelaar op alle Powerwalls uit te zetten en de stroomonderbrekers te openen.","home_container_sitemaster_confirm":"Klik hieronder alleen op Ja als u ervan overtuigd bent dat het systeem moet worden gestopt.","home_container_sitemaster_header_warning":"{warning} Dit stopt de Powerwall en de werking van het systeem.","home_container_sitemaster_logging":"Als het systeem uit is, wordt de logboekregistratie gestopt","home_container_sitemaster_reset":"Klik na het stoppen van het systeem nogmaals op de Start-knop op de landingspagina om het systeem weer te starten.","home_container_sitemaster_update":"Als een update wordt uitgevoerd, wordt deze beëindigd.","home_container_start_powerwall":"Powerwall-systeem starten","home_container_stop_powerwall":"Powerwall-systeem stoppen","home_view_download_all_logs":"Alle logs downloaden","home_view_download_logs":"LOGS DOWNLOADEN","home_view_download_logs_description_one":"Hiermee wordt een gecomprimeerde set systeemlogs gedownload die nuttig kunnen zijn bij het diagnosticeren van problemen met het besturingssysteem, de software en netwerken.","home_view_download_logs_description_three":"Logs zijn ondertekend en gecodeerd en moeten voor onderzoek naar Tesla Energy Service worden gestuurd.","home_view_download_logs_description_two":"Dit is vooral handig als de gateway niet met het netwerk kan worden verbonden en geavanceerde probleemoplossing nodig is.","home_view_login":"INLOGGEN","home_view_logout":"UITLOGGEN","home_view_run_wizard":"WIZARD STARTEN","input_accept":"Ik ga akkoord","input_consent":"Ik geef toestemming","input_decline":"Ik ga niet akkoord","input_no_consent":"Ik geef geen toestemming","input_title_email":"Voer een geldig e-mailadres in naam@naam.domein","installation_container_relay_section_modal_title":"Relais lage spanning gateway","installation_container_residual_current_device_modal_title":"Installatievereiste voor aardlekautomaten op locatie","installation_container_subtitle":"Informatie over installateur en locatie","installation_container_sync_relay_usage_open_off_grid":"Open relais bij loskoppeling van elektriciteitsnet","installation_container_title":"Informatie over installatie","installation_view_add_on_solar":"Add-on","installation_view_additional_connections_label":"AANVULLENDE VERBINDINGEN","installation_view_back_wiring":"Achterzijde","installation_view_backup_configuration_label":"NOODSTROOMCONFIGURATIE","installation_view_basement_location":"Kelder","installation_view_company_label":"BEDRIJFSNAAM","installation_view_company_placeholder":"Bedrijfsnaam","installation_view_conditioned_space_location":"Geconditioneerde ruimte","installation_view_existing_solar":"Bestaand","installation_view_floor_mounting":"Vloer","installation_view_garage_location":"Garage","installation_view_home_label":"HUISBEDRADING","installation_view_location_label":"POWERWALL INSTALLATIEPLAATS","installation_view_modem_ethernet":"Mobiele modem met Ethernet?","installation_view_modem_wifi":"Mobiele modem met wifi?","installation_view_mounting_label":"POWERWALL-MONTAGE","installation_view_na_backup_configuration":"Niet toepasbaar","installation_view_new_solar":"Nieuw","installation_view_none_solar":"Geen","installation_view_outdoor_location":"Buiten","installation_view_pad_mounting":"Blok","installation_view_partial_home_backup_configuration":"Deel van woning","installation_view_phone_label":"TELEFOON","installation_view_phone_placeholder":"Telefoonnummer installateur","installation_view_powerline_ethernet":"Voedingsaansluiting met Ethernet?","installation_view_pv_panel":"PV-paneel","installation_view_relay_enabled":"Open relais bij loskoppeling van elektriciteitsnet","installation_view_relay_label":"RELAIS LAGE SPANNING GATEWAY","installation_view_relay_options_modal_content":"Bij aansluiting op het elektriciteitsnet of op een andere wisselspanningsbron wordt dit relais gesloten. {lb1} Bij loskoppeling van elektriciteitsnet is dit relais open. {lb1} Dit kan bijvoorbeeld worden gebruikt om airconditioning te laten werken wanneer deze op het elektriciteitsnet is aangesloten en vervolgens niet wanneer deze niet op het elektriciteitsnet is aangesloten om te voorkomen dat de bijbehorende hoge inschakelstroom de Powerwalls overbelast.","installation_view_relay_section_modal_content":"De gateway heeft een ingebouwd relais dat wordt bediend om in en uit te schakelen aan de hand van de systeemstatus. {lb1} Dit kan worden gebruikt om een extern apparaat aan te sturen, zoals een verbruiker of een secundaire energiebron. {lb1} Gebruik op back-upgateway 1 de pennen 1 en 2 op de hulpconnector (9-pens grote groene Phoenix-connector). {lb1} Gebruik op back-upgateway 2 de pennen 3 en 4 op de hulpconnector (5-pens grote groene Phoenix-connector). {lb1} Dit relais heeft een vermogen van 60 volt / 2 ampère en wordt gewoonlijk gebruikt met circuits van 12 V of 24 V. {lb1} Bekijk verlaging van het verbruik en gerelateerde toepassingsvoorbeelden voor meer details.","installation_view_residual_current_device":"Is er een aardlekautomaat stroomopwaarts van gateway geïnstalleerd?","installation_view_residual_current_device_modal_content":"Voor bepaalde installaties kunnen aardlekautomaten op locatieniveau vereist zijn, zoals netwerken met TT-aardingsconfiguratie. {lb1}{lb2} Om het risico van hinderlijke uitschakeling bij gebruik zonder aansluiting op het elektriciteitsnet te verminderen, raadt Tesla aan ervoor te zorgen dat alle stroomopwaartse aardlekautomaten tijdvertraagd zijn (type S), of indien mogelijk de aardlekautomaat van de locatie na de contactgever van de gateway te plaatsen. {lb1}{lb2} Raadpleeg voor aanvullende informatie het toepassingsvoorbeeld over de aardlekautomaat en aardlekbeveiliging.","installation_view_satellite_ethernet":"Satellietverbinding met Ethernet?","installation_view_satellite_wifi":"Satellietverbinding met wifi?","installation_view_side_wiring":"Zijkant","installation_view_solar_label":"INSTALLATIE VAN ZONNEPANELEN","installation_view_solar_type_label":"TYPE ZONNE-INSTALLATIE","installation_view_solarglass":"Zonneglas","installation_view_stack_kit":"Heeft Stack Kit?","installation_view_type_commercial":"Bedrijf","installation_view_type_label":"INFORMATIE OVER INSTALLATIE","installation_view_type_perm_off_grid":"Permanent buiten elektriciteitsnetwerk","installation_view_type_residential":"Woonwijk","installation_view_wall_mounting":"Wand","installation_view_whole_home_backup_configuration":"Hele woning","installation_view_wifi_extender":"Wifi-verlenger?","installation_view_wiring_label":"BEDRADING POWERWALL","inverter_test_view_accuracy_magnitude":"Nauwkeurigheid grootte","inverter_test_view_accuracy_time":"Nauwkeurigheid tijd","inverter_test_view_complete":"Voltooid","inverter_test_view_current_magnitude":"Grootte stroom","inverter_test_view_fail":"Mislukt","inverter_test_view_na":"N.v.t.","inverter_test_view_not_run":"Niet uitgevoerd","inverter_test_view_pass":"Geslaagd","inverter_test_view_running":"Wordt uitgevoerd","inverter_test_view_set_magnitude":"Grootte instellen","inverter_test_view_set_time":"Tijd instellen","inverter_test_view_test_description":"Zelftest van de omvormer wordt uitgevoerd","inverter_test_view_test_name_all":"Alle tests","inverter_test_view_test_name_over_freq_stage_one":"Overfrequentie fase 1","inverter_test_view_test_name_over_freq_stage_two":"Overfrequentie fase 2","inverter_test_view_test_name_over_volt_one":"Overspanning fase 1","inverter_test_view_test_name_over_volt_two":"Overspanning fase 2","inverter_test_view_test_name_under_freq_stage_one":"Onderfrequentie fase 1","inverter_test_view_test_name_under_freq_stage_two":"Onderfrequentie fase 2","inverter_test_view_test_name_under_volt_one":"Onderspanning fase 1","inverter_test_view_test_name_under_volt_two":"Onderspanning fase 2","inverter_test_view_timestamp":"Tijdstempel","inverter_test_view_trip_magnitude":"Grootte uitschakelen","inverter_test_view_trip_time":"Tijd uitschakelen","inverter_test_view_warning":"Let op De omvormertest kan 20 tot 30 minuten per omvormer duren.","label_fail":"Mislukt","label_inconclusive":"Onduidelijk","label_pass":"Geslaagd","legal_container_customer_policy_subtitle":"Dient te worden ingevuld door de huiseigenaar.","legal_container_customer_policy_title":"Privacybeleid en beperkte garantie voor Tesla-klanten","legal_container_no_meters_warning":"GEEN METERS GECONFIGUREERD","legal_container_no_powerwalls_warning":"GEEN POWERWALLS GEDETECTEERD","login_type_customer":"Klant","login_type_engineer":"Technicus","login_type_installer":"Installateur","login_view_cancel_login_auth":"Aanmelding annuleren","login_view_change_forgot_password":"PASWOORD WIJZIGEN OF VERGETEN","login_view_customer_email_placeholder":"E-mail klant","login_view_email":"E-MAIL","login_view_email_placeholder":"e-mail hoofdinstallateur","login_view_forgot_password":"PASWOORD VERGETEN","login_view_forgot_password_login_type":"Selecteer inlogwijze","login_view_language_label":"TAAL","login_view_login_type_label":"INLOGWIJZE","login_view_password_placeholder":"Voer uw passwoord in","login_view_start_login_auth":"AANMELDINGSPROCES STARTEN","login_view_start_login_auth_how_to_enable_line_description":"Zet de schakelaar van de Powerwall in de uit-stand en vervolgens weer in de aan-stand om u aan te melden. Bij systemen met meerdere Powerwalls hoeft u slechts één schakelaar te bedienen","login_view_username":"GEBRUIKERSNAAM","login_view_username_placeholder":"Gebruikersnaam","login_warning_view_expand":"Als de wizard niet start {click}.","login_warning_view_firmware_update":"Wanneer een firmware-update wordt uitgevoerd","login_warning_view_heading":"{warning} Door het starten van de wizard wordt de werking van de batterij onderbroken.","login_warning_view_protect_system":"Om het systeem te beschermen, wordt de wizard niet gestart","login_warning_view_stop_operation":"wizard geforceerd starten (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Momenteel worden alleen Chrome en Safari als webbrowser ondersteund.","login_warning_view_system_force_launch":"Als u de wizard wilt starten en de werking van het systeem wilt stoppen, selecteer dan wizard geforceerd starten.","login_warning_view_system_off_grid":"Wanneer het elektrische systeem niet op het elektriciteitsnet is aangesloten","login_warning_view_warning_click":"klik voor meer","meter_aggregate_type_battery":"Batterij","meter_aggregate_type_load":"Laden","meter_aggregate_type_site":"Locatie","meter_aggregate_type_solar":"Zonne-energie","meter_container_add_meter_error":"Meter verifiëren","meter_container_add_meter_status":"Meter toevoegen","meter_container_authorizing_status":"Autoriseren","meter_container_decode":"Kon serienummer niet vanaf afbeelding decoderen.","meter_container_detecting_status":"Bekabelde meters detecteren","meter_container_failed_status":"Toevoegen van meter is mislukt","meter_container_reconnecting_status":"Opnieuw verbinding maken","meter_container_skip_title":"Er zijn geen meters in gebruik genomen, weet u zeker dat u door wilt gaan?","meter_container_starting_status":"Starten","meter_container_subtitle":"Voer de verkorte ID(\'s) en serienummer(s) van de energiemeter in om verbinding te maken. Test elke meter nadat deze in gebruik is genomen.","meter_container_subtitle_industrial":"Voer IP-adres(sen) en locatie(s) van de energiemeter in om verbinding te maken. Test elke meter nadat deze in gebruik is genomen.","meter_container_success_status":"Meter is toegevoegd","meter_container_title":"Meters","meter_container_unknown_status":"Onbekend","meter_container_updating_status":"Meter updaten","meter_container_verification":"Verificatie van meter {id}","meter_container_verification_gw1":"Tijdens dit wifi-koppelingsproces is het mogelijk dat u tijdelijk geen verbinding hebt met het wifi-netwerk van de gateway. {lb} Zorg dat u opnieuw verbinding maakt met het juiste netwerk. Dit kan 3 minuten duren.","meter_container_verification_gw2":"Het wifi-koppelingsproces kan tot wel 3 minuten duren.","meter_container_verify_meter_error":"Meter verifiëren","meter_container_verifying_status":"Meter verifiëren","meter_item_view_advanced_settings":"GEAVANCEERDE INSTELLINGEN (OPTIONEEL)","meter_item_view_battery_ct":"Batterij","meter_item_view_battery_location":"Batterij","meter_item_view_check_meter":"VERBINDING METER {id} CONTROLEREN","meter_item_view_conductor_location":"Geleider","meter_item_view_cts":"{count} stroomtrafo\'s gedetecteerd","meter_item_view_doubled_solar_location":"Verdubbelde zonne-energie","meter_item_view_generator_location":"Generator","meter_item_view_ip_address":"IP-ADRES","meter_item_view_load_location":"Laden","meter_item_view_mac_address":"MAC-ADRES","meter_item_view_meter_location":"METERLOCATIE","meter_item_view_none_location":"Geen","meter_item_view_serial":"SERIENUMMER","meter_item_view_short_id":"VERKORTE ID","meter_item_view_site_ct":"Locatie","meter_item_view_site_location":"Locatie","meter_item_view_solar_ct":"Zonne-energie","meter_item_view_solar_location":"Zonne-energie","meter_item_view_success":"VERBINDING IS GEMAAKT!","meter_item_view_unable":"KAN METER NIET DETECTEREN!","meter_item_view_upgrading":"METER IS BIJGEWERKT!","meter_list_view_add":"WIFI METER TOEVOEGEN","meter_list_view_add_ip":"IP-METER TOEVOEGEN","meter_list_view_detect":"BEKABELDE METERS DETECTEREN","meter_list_view_enable_inverter_readings":"Aflezingen batterijomvormers inschakelen","meter_list_view_inverter_meter":"OMVORMERMETERS","meter_list_view_inverter_meter_desc":"Wanneer dit is ingeschakeld en er geen batterijmeters zijn geconfigureerd, gebruikt de sitecontroller aflezingen van de batterijomvormers als batterijmeter.","meter_sync_id":"SYNC METER {id}","meter_update_modal_fetch_status_error":"Kan de update-status van de meter niet ophalen","meter_update_modal_footer":"Meter-update kan tot 2 minuten duren","meter_update_modal_remaining_time":"Resterende tijd: {seconds} seconden","meter_update_modal_timeout_error":"Er is een time-out opgetreden tijdens het bijwerken van de meter","meter_update_modal_title":"Meter-update is onderweg","meter_validation_container_error":"Metervalidatie niet beschikbaar terwijl sitecontroller actief is.","meter_validation_container_error_placeholder":"Metervalidatie niet beschikbaar: {error}.","meter_validation_container_power_command":"Vermogensopdracht","meter_validation_container_power_start":"Starten","meter_validation_container_power_stop":"Stop","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Reactief-vermogensopdracht","meter_validation_container_real_power_command":"Werkelijk-vermogensopdracht","meter_validation_container_title":"Metervalidatie","meter_validation_container_usage":"Stuur een vermogensopdracht en valideer de metergegevens. U moet op deze pagina blijven om de vermogensopdracht continu te houden. Bij negatieve waarden wordt het systeem opgeladen. Bij positieve waarden wordt het systeem ontladen.","meter_validation_control_subtitle":"Regel","meter_validation_control_title":"Titel controle","meter_validation_disable":"Uitschakelen","meter_validation_loading":"Laden","meter_validation_menu":"Menu","meter_validation_reset":"Herstellen","meter_validation_submit":"Indienen","meter_validation_submitting_control":"Indieningscontrole","meter_validation_title":"Metervalidatie","meter_validation_view_apparent_power":"Schijnbaar vermogen (kVA)","meter_validation_view_battery_location":"Batterij","meter_validation_view_conductor_location":"Geleider","meter_validation_view_current":"Stroom (A)","meter_validation_view_doubled_solar_location":"Verdubbelde zonne-energie","meter_validation_view_generator_location":"Generator","meter_validation_view_hz":"Hz","meter_validation_view_inverters":"Omvormers ({length})","meter_validation_view_ka":"kA","meter_validation_view_kv":"kV","meter_validation_view_kvar":"kVAr","meter_validation_view_kw":"kW","meter_validation_view_kwh":"kWh","meter_validation_view_load_location":"Laden","meter_validation_view_meter":"Meters ({length})","meter_validation_view_none_location":"Geen","meter_validation_view_pf":"Vermogensfactor","meter_validation_view_phase_a":"A","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Totaal","meter_validation_view_reactive_power":"Reactief vermogen (kVAr)","meter_validation_view_real_power":"Werkelijk vermogen (kW)","meter_validation_view_site_location":"Locatie","meter_validation_view_solar_location":"Zonne-energie","meter_validation_view_voltage":"Spanning (U)","meter_wifi_id":"METER {id}","meter_wired_id":"BEDRADE METER {id}","metrics_aggregate":"Systeem","metrics_apparent_power":"Schijnbaar vermogen ({unit})","metrics_battery":"Batterij","metrics_current":"Stroom ({unit})","metrics_meter":"Meter","metrics_no_metrics":"Geen gegevens om weer te geven","metrics_power_factor":"Vermogensfactor","metrics_reactive_power":"Reactief vermogen ({unit})","metrics_real_power":"Werkelijk vermogen ({unit})","metrics_subtitle":"Gegevens","metrics_voltage_l_n":"Spanning L-N ({unit})","modal_acknowledge":"ERKENNEN","modal_confirm":"BEVESTIGEN","modal_exit":"AFSLUITEN","modal_no":"NEE","modal_note":"Let op","modal_ok":"OK","modal_reconfigure":"HERCONFIGUREREN","modal_yes":"JA","modbus_container_title":"Modbus-interface","modbus_table_register_address":"Adres","modbus_table_register_name":"Naam","modbus_table_register_type":"Type","modbus_table_register_value":"Waarde","modbus_table_register_value_decimal":"Waarde (decimaal)","modbus_table_register_value_hex":"Waarde (hex)","navigation_email":"E-MAIL","network_cellular_configured":"Geconfigureerd maar niet verbonden. Zorg ervoor dat het mobiele netwerk beschikbaar is en dat er geen obstakels rond de antenne zijn.","network_connected":"Verbonden","network_container_connect_ethernet":"Verbinden met Ethernet","network_container_connect_to_internet":"Wacht tot het systeem verbinding probeert te maken met internet.","network_container_connect_wifi":"Verbinding maken met {ssid}","network_container_connect_wifi_description":"Tijdens dit proces moet u mogelijk opnieuw verbinding maken met het Gateway-netwerk om de installatie voort tezetten.","network_container_connman":"Powerwall Connectie Beheerder verbindt automatisch met het beste netwerk.","network_container_connman_body":"Om een verbinding te garanderen, configureer alle beschikbare verbindingstypen:","network_container_delete_network":"Geconfigureerd netwerk verwijderen?","network_container_ethernet_and_wifi_warning":"Configureer beschikbare Ethernet en Wifi netwerken om een verbinding te garanderen.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configureer beschikbare Ethernet netwerken om een verbinding te garanderen.","network_container_network_description":"Om een verbinding te garanderen, configureer alle beschikbare verbindingstypen","network_container_network_subtitle":"Netwerk","network_container_no_internet_bullet_four":"De Powerwall prestatiegegevens naar Tesla kan verzenden zodat de technische ondersteuning problemen kan identificeren","network_container_no_internet_bullet_four_industrial":"Apparaten kunnen prestatiegegevens naar Tesla verzenden zodat de technische ondersteuning problemen kan identificeren","network_container_no_internet_bullet_one":"De Powerwall-registratiegegevens naar Tesla worden verzonden om de volledige 10 jaar garantie te activeren","network_container_no_internet_bullet_three":"De klant de mobiele app van Tesla kan gebruiken om het energieverbruik in de gaten te houden en de Powerwall te bedienen.","network_container_no_internet_bullet_two":"De Powerwall externe firmware-updates kan ontvangen die prestatieverbeteringen en nieuwe functies mogelijk maken","network_container_no_internet_bullet_two_industrial":"Apparaten kunnen externe firmware-updates ontvangen die prestatieverbeteringen en nieuwe functies mogelijk maken","network_container_no_internet_title":"Als de installatielocatie een beschikbare internetverbinding heeft, mag u deze stap niet overslaan. Verbind de Powerwall via Ethernet (voorkeur) of Wifi met internet van de klant of maak verbinding met een mobiel netwerk.","network_container_no_internet_warning":"Het is belangrijk een betrouwbare internetverbinding tot stand te brengen, zodat","network_container_scan_networks":"Scan Wifi Netwerken","network_container_scan_wifi_disconnect_warning":"Waarschuwing: Scannen voor nieuwe netwerken verbreekt tijdelijk de draadloze verbinding.","network_container_wifi_subtitle":"Wifi","network_container_wifi_warning":"Configureer beschikbare Wifi netwerken om een verbinding te garanderen.","network_disabled":"Uitgeschakeld","network_disconnected":"Niet verbonden","network_ethernet_configured":"Geconfigureerd maar niet verbonden. Controleer de ethernetkabelverbinding.","network_view_check_connection":"INTERNETVERBINDING CONTROLEREN","network_view_connection_failed":"NIET VERBONDEN!","network_view_connection_success":"VERBINDING IS GEMAAKT!","network_view_continue_no_internet":"DOORGAAN ZONDER INTERNET","network_view_default_error":"Verbindingsfout","network_view_local_network_connected":"Lokaal netwerk verbonden","network_view_local_network_disconnected":"Fout in lokaal netwerk","network_view_tesla_internet_connected":"Tesla Services en internet verbonden","network_view_tesla_internet_disconnected":"Verbindingsfout Tesla Services en internet","network_warning":"Waarschuwing","network_wifi_configured":"Geconfigureerd maar niet verbonden. Controleer uw wifi-instellingen.","open_meter_validatiion_container_title":"Metervalidatie openen","operation_mode_autonomous":"Autonome modus","operation_mode_backup":"Alleen back-up laden","operation_mode_self_consumption":"Modus eigen gebruik","operation_mode_site_control":"Locatieregeling","overview_menu_control_title":"Regel","overview_menu_diagnostics_title":"Diagnose","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Verbonden","overview_menu_network_no_connection":"Geen verbinding","overview_menu_registration_complete":"Voltooid","overview_menu_registration_incomplete":"Niet voltooid","overview_menu_registration_pending":"In afwachting van internetverbinding","overview_menu_security_title":"Paswoord wijzigen of resetten","overview_menu_summary_title":"Overzicht","overview_menu_update_title":"Software-update","overview_menu_view_alerts_event":"Gebeurtenis","overview_menu_view_alerts_events":"Gebeurtenissen","overview_menu_view_inverter_title":"Omvormertest","overview_menu_view_network_title":"Netwerk","overview_menu_view_registration_title":"Registratie","overview_menu_view_test_title":"Zelftest","overview_meter_validation_title":"Metervalidatie","phase_container_detect_timeout":"Time-out fasedetectie","phase_container_detection_attempt":"Poging #{num}","phase_container_grid_code_validating_modal_title":"Netcode valideren","phase_container_grid_compliant_description":"Netconform {checkmark}","phase_container_grid_modal_description":"Net is conform over {time} seconden.","phase_container_grid_modal_title":"Wachten op netconformiteit ","phase_container_modal_description":"Fasedetectie kan tot wel 2 minuten per Powerwall duren.","phase_container_modal_title":"Fasedetectie wordt uitgevoerd","phase_container_saving_phases_modal_title":"Fasen opslaan","phase_container_subtitle":"Bekijk op welke lijn elke Powerwall is en werk de lijnstatus bij","phase_container_supported_error":"Geen Powerwalls gedetecteerd. Fasedetectie wordt niet ondersteund.","phase_container_title":"Fase","phase_container_voltage_caution_body":"Onverwachte spanning {voltage}V gedetecteerd op {lineNumber}. Controleer nogmaals of {lineStatus} de juiste instelling is voor deze fase.","phase_container_warning_body":"Er zijn geen back-upfasen geselecteerd. Daarom ondersteunt het systeem geen verbruik wanneer de verbinding met het net is verbroken.","phase_container_warning_modal_header":"Back-up is uitgeschakeld","phase_line_id":"Lijn-{id}","phase_line_item_view_line":"Lijn","phase_line_item_view_line_status_backup":"Back-up","phase_line_item_view_line_status_configured":"Geen back-up","phase_line_item_view_line_status_not_configured":"Niet geconfigureerd","phase_line_status_backup":"Back-up","phase_line_status_configured":"Geen back-up","phase_line_status_not_configured":"Niet geconfigureerd","phase_view_detect":"FASEN DETECTEREN","phase_view_split_phase":"Fasesplitsing","power_flow_view_start_system":"SYSTEEM STARTEN","power_flow_view_stop_system":"SYSTEEM STOPPEN","powerwall_container_industrial_no_additional_title":"Geen extra batterijblokken gevonden","powerwall_container_industrial_subtitle":"In de lijst staan alle batterijblokken die automatisch zijn gedetecteerd door de sitecontroller. Scan opnieuw als het batterijblok niet in de lijst staat.","powerwall_container_industrial_title":"Batterijblok","powerwall_container_industrial_updating":"Batterijblokken verifiëren","powerwall_container_no_additional_powerwalls_description":"Raadpleeg de Powerwall-installatiehandleiding voor tips over het oplossen van eventuele problemen met de bekabeling.","powerwall_container_no_additional_powerwalls_title":"Geen extra Powerwalls gevonden","powerwall_container_scan_again":"OPNIEUW SCANNEN","powerwall_container_scanning":"Scannen","powerwall_container_scanning_for_more":"Scannen voor meer","powerwall_container_subtitle":"Vermeld worden alle Powerwalls die automatisch door de Gateway worden gedetecteerd. Scan opnieuw als een Powerwall niet in de lijst staat.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Powerwalls verifiëren","powerwall_container_updating_note":"Let op Dit kan 60 seconden per Powerwall duren.","powerwall_item_view_blank_numbers":"In afwachting van verificatie…","powerwall_item_view_numbers":"OnderdeelNummer {partNumber} Serienummer {serialNumber}","powerwall_item_view_powerwall":"POWERWALL {id}","powerwall_starting":"Powerwall starten","powerwall_view_detected_backup":"Gedetecteerde back-upmogelijkheden","powerwall_view_detected_synchrometers":"Gedetecteerde metermogelijkheid","powerwall_view_failed":"MISLUKT","powerwall_view_no_backup":"Geen back-upmogelijkheden gedetecteerd","powerwall_view_no_sync":"Geen synchronisatieroutine gedetecteerd","powerwall_view_scan":"SCANNEN","powerwall_view_success":"GELUKT","powerwall_view_synchrometer_detected":"Synchrometers gedetecteerd","powerwall_view_synchronizer_detected":"Synchronisatieroutine gedetecteerd","powerwall_view_update":"POWERWALLS VERIFIËREN","privacy_policy_view_accept_warranty_title":"Akkoord gaan met de beperkte garantie van Tesla Powerwall","privacy_policy_view_contact_bullet_one":"via e-mail naar {privacyEmail};","privacy_policy_view_contact_bullet_two":"via post naar Tesla Inc. t.a.v. Legal 45500 Fremont Boulevard Fremont California 94538, Verenigde Staten.","privacy_policy_view_contact_header":"Contact","privacy_policy_view_contact_paragraph_one":"Om contact met ons op te nemen voor een vraag of opmerking of om u af te melden voor bepaalde diensten, neemt u contact met ons op","privacy_policy_view_contact_paragraph_three":"Als u zich bevindt in de Europese Economische Ruimte of Zwitserland, kan uw plaatselijke bij Tesla aangesloten bedrijf de entiteit zijn die verantwoordelijk is voor het verwerken van uw persoonsgegevens.","privacy_policy_view_contact_paragraph_two":"Let op dat e-mailcommunicatie niet altijd beveiligd is, dus neem geen creditcardgegevens of gevoelige informatie op in uw e-mails naar ons.","privacy_policy_view_cross_border_transfers_header":"Internationale overdrachten","privacy_policy_view_cross_border_transfers_paragraph_one":"De Diensten worden geregeld en geëxploiteerd vanuit de Verenigde Staten. Informatie van of over u of uw gebruik van onze producten of de Diensten kan worden opgeslagen en verwerkt in elk land waar wij faciliteiten hebben of waar wij serviceproviders inschakelen. In deze landen geldt mogelijk niet dezelfde wetgeving ten aanzien van gegevensbescherming als in het land waarin u die gegevens in eerste instantie hebt verstrekt. Wanneer wij informatie van of over u of uw gebruik van onze producten of de Diensten overdragen naar andere landen zullen wij deze beschermen zoals beschreven in dit privacybeleid. Door gebruik te maken van onze producten, de Diensten of het anderszins verstrekken van informatie aan ons stemt u in met de overdracht van informatie van of over u of uw gebruik van onze producten of de Diensten naar landen buiten het land waar u verblijft, inclusief de Verenigde Staten.","privacy_policy_view_cross_border_transfers_paragraph_two":"Als u zich in de EER of Zwitserland bevindt, voldoen wij aan de van toepassing zijnde wettelijke vereisten die een adequate bescherming bieden voor de overdracht van persoonsgegevens naar landen buiten de EER of Zwitserland. Tesla heeft verklaard zich te houden aan het EU-VS Privacy Shield Framework, zoals uiteengezet door het Department of Commerce (Amerikaans ministerie van Handel) en de Europese Commissie, met betrekking tot de verwerking van bepaalde persoonsgegevens die van de EER naar Tesla en haar 100%-dochterondernemingen in de VS worden overgedragen. Tesla\'s {privacyShield} is hier beschikbaar.","privacy_policy_view_devices":"Van of over u of uw apparaten","privacy_policy_view_energy_products":"Van en over uw Tesla Energy-producten","privacy_policy_view_eu_policy_warning":"U dient akkoord te gaan met het privacybeleid om uw Powerwall te registreren en gegevens bij te houden in de mobiele Tesla-app.","privacy_policy_view_eu_warranty_warning":"Als u niet instemt met het Privacybeleid voor klanten van Tesla kunnen wij de volledige tienjarige garantie mogelijk niet honoreren. Tesla zal uw garantie honoreren gedurende ten minste vier jaar na de datum waarop uw Powerwall voor het eerst is geïnstalleerd, behoudens de uitsluitingen en beperkingen die in de garantie{warrantyLink} worden vermeld.","privacy_policy_view_grid_services":"Uw Powerwall kan de betrouwbaarheid van het elektriciteitsnet ondersteunen door services te leveren via optionele programma\'s van nutsbedrijven of derden. Deze services omvatten doorgaans een gedeeltelijke ontlading van uw Powerwall op gunstige tijdstippen in ruil voor financiële voordelen. Hiervoor dienen wij uw energieverbruik en Powerwall-gegevens te delen met nutsbedrijven of derden. Voordat we u aanmelden voor zo\'n programma, informeren we u over de details van het programma en geven we u de optie om niet deel te nemen. Als u zich op dat moment niet terugtrekt, wordt u aangemeld voor het programma.","privacy_policy_view_grid_services_title":"Elektriciteitsnetservice","privacy_policy_view_grid_warning":"U hoeft geen toestemming te geven. Als u geen toestemming geeft, kunnen we u later alsnog de kans geven deel te nemen aan deze programma\'s.","privacy_policy_view_here":"hier","privacy_policy_view_homeowner_na":"HUISEIGENAAR NIET BESCHIKBAAR","privacy_policy_view_homeowner_required":"Dient te worden ingevuld door de huiseigenaar","privacy_policy_view_information_collection_devices_bullet_five":"Via uw browser of apparaat: Bepaalde informatie wordt verzameld door de meeste browsers of automatisch via uw apparaat, zoals uw Media Access Control (MAC) adres, computertype (Windows of Macintosh), schermresolutie, besturingssysteem en versie, producent en model van uw apparaat, taal, browsertype en -versie en de naam en versie van de Diensten (zoals de Tesla App) die u gebruikt. Wij gebruiken deze informatie om te verzekeren dat de Diensten naar behoren werken.","privacy_policy_view_information_collection_devices_bullet_four":"Offline: Wij kunnen informatie van of over u offline verzamelen, zoals wanneer u een bezoek brengt aan een Tesla-winkel of reparatiefaciliteit, een van onze evenementen bijwoont, wanneer u zich aanmeldt voor een testrit, telefonisch een bestelling plaatst of contact opneemt met onze klantenservice of verkoopafdeling.","privacy_policy_view_information_collection_devices_bullet_one":"Via de Diensten: Wij kunnen informatie verzamelen van of over u via onze websites, software-applicaties, socialmediasites, e-mailberichten of andere digitale diensten (de \\"Diensten\\"), bijvoorbeeld wanneer u zich aanmeldt voor een nieuwsbrief, wanneer u een aankoop doet of wanneer u uw product registreert bij ons.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla Klanten die bepaalde Tesla-producten aanschaffen, ontvangen een My Tesla-account, dat gehost wordt op onze website. Wij kunnen de volgende soorten gegevens verzamelen en verwerken voor uw My Tesla-account; u kunt aangeven welke gegevens u aan ons verstrekt; uw klantregistratiegegevens; de status van uw bestelling; garantie en andere documentatie voor uw Tesla-producten; algemene informatie over uw Tesla-producten (bijvoorbeeld het voertuigidentificatienummer of ander productserienummer, informatie over het serviceprogramma of het connectiviteitspakket), verzekeringsformulieren, rijbewijzen, financieringsovereenkomsten en soortgelijke informatie. U kunt toegang krijgen tot uw Tesla-account om de informatie van of over u in dat account te allen tijde bij te werken.","privacy_policy_view_information_collection_devices_bullet_two":"Vanuit andere bronnen: Wij kunnen ook informatie over u ontvangen uit andere bronnen, zoals openbare gegevensbestanden, gezamenlijke marketingpartners, erkende installateurs, externe voertuigreparateurs of dienstencentra en socialmediaplatforms.","privacy_policy_view_information_collection_energy_products_bullet_one":"Wij kunnen informatie verzamelen over uw product, zoals uw installatiedatum, aantal geïnstalleerde producten enserienummer(s).","privacy_policy_view_information_collection_energy_products_bullet_two":"Om onze producten en diensten aan te bieden en te verbeteren, kunnen wij informatie verzamelen over waar uw product is geïnstalleerd en hoe het is geconfigureerd, gegevens met betrekking tot het gebruik en de prestaties van het product, gegevens met betrekking tot uw totale energieverbruik thuis en andere relevante gegevens om problemen te identificeren.","privacy_policy_view_information_collection_header":"Informatie die wij verzamelen","privacy_policy_view_information_collection_paragraph_five":"Als u niet langer wilt dat wij prestatiegegevens of andere gegevens van uw Tesla Energy-product verzamelen, neem dan contact met ons op zoals uiteengezet in de paragraaf \\"Contact\\" hieronder. Houd er rekening mee dat als u zich afmeldt voor het verzamelen van prestatiegegevens van uw Tesla Energy-product, wij u niet in real-time op de hoogte kunnen stellen van problemen met betrekking tot uw energieproduct en dat dit kan leiden tot beperking van de functionaliteit, ernstige schade of onbruikbaarheid van uw energieproduct. Daarnaast kunnen vele functies van uw energieproduct worden uitgeschakeld, waaronder periodieke software- en firmware-updates.","privacy_policy_view_information_collection_paragraph_four":"Wij kunnen een verscheidenheid aan informatie verzamelen van en over uw Tesla Energy-producten van u, via een erkende installateur of van de geïnstalleerde producten (direct of via gekoppelde apparatuur, zoals eenomvormer), waaronder","privacy_policy_view_information_collection_paragraph_one":"Wij verzamelen drie soorten informatie met betrekking tot u of uw gebruik van onze producten en diensten (1) informatie van of over uzelf of uw apparaten; (2) informatie van of over uw Tesla-auto; en (3) informatie van of over uw Tesla Energy-producten. Afhankelijk van de producten en diensten van Tesla die u aanvraagt, bezit of gebruikt, kan het zijn dat niet al deze informatie op u van toepassing is.","privacy_policy_view_information_collection_paragraph_three":"Wanneer u onze website bezoekt of anderszins onze Diensten gebruikt, kunnen wij gebruik maken van cookies, pixel tags, analytics tools en andere gelijksoortige technologieën om ons te helpen bij het leveren en verbeteren vanonze Diensten, zoals hieronder uiteengezet","privacy_policy_view_information_collection_paragraph_two":"Wij kunnen op verschillende manieren informatie verzamelen van of over u (zoals uw naam, adres, telefoonnummer, e-mail, betaalinformatie, etc.) of uw apparaten, waaronder:","privacy_policy_view_information_collection_services_bullet_five":"U kunt meer te weten komen over de praktijken van Google in verband met deze informatieverzameling en hoe u zich hiervoor kunt afmelden door de opt-out browser add-on van Google Analytics te downloaden die beschikbaar is op{website}.","privacy_policy_view_information_collection_services_bullet_four":"Analytics tools: Wij maken gebruik van diensten voor website- en toepassingsanalyses van derden die cookies en soortgelijke technologieën gebruiken om informatie over het gebruik van websites of toepassingen te verzamelen en trends te rapporteren zonder individuele bezoekers te identificeren. Derden die ons van deze diensten voorzien, kunnen ook informatie verzamelen over uw gebruik van websites van derden.","privacy_policy_view_information_collection_services_bullet_one":"Cookies zijn stukjes informatie die direct worden opgeslagen op de computer die u gebruikt. Cookies stellen ons in staat om informatie te verzamelen zoals het browsertype, de tijd die wordt besteed op de bezochte pagina\'s van de Diensten, taalvoorkeuren en andere internetverkeersgegevens. Onze serviceproviders en wijzelf gebruiken deze informatie voor veiligheidsdoeleinden om de onlinenavigatie te vergemakkelijken, zodat informatie effectiever kan worden weergegeven om uw ervaring te personaliseren tijdens het gebruik van de Diensten en om gebruikersactiviteiten te analyseren. We kunnen uw computer herkennen zodat wij u kunnen helpen bij het gebruik van de Diensten. We verzamelen ook statistische informatie over het gebruik van de Diensten om het ontwerp en de functionaliteit ervan voortdurend te verbeteren, te begrijpen hoe de Diensten worden gebruikt en ons te helpen bij het oplossen van vragen met betrekking tot de Diensten. Met cookies kunnen wij selecteren welke van onze advertenties of aanbiedingen u het meest aan zullen spreken en welke wij dus aan u willen tonen. We kunnen ook cookies gebruiken in onlinereclame om te zien hoe u met onze advertenties omgaat en we kunnen cookies of andere bestanden gebruiken om inzicht te krijgen in uw gebruik van andere websites.","privacy_policy_view_information_collection_services_bullet_three":"Pixel tags en andere soortgelijke technologieën Pixel tags (ook bekend als web beacons en clear GIFS) kunnen worden gebruikt in verband met sommige Diensten om, onder andere, de handelingen van gebruikers van de Diensten te volgen (inclusief e-mailontvangers), het succes van onze marketingcampagnes te meten en statistieken samen te stellen over het gebruik van de Diensten en responspercentages.","privacy_policy_view_information_collection_services_bullet_two":"Als u niet wilt dat informatie wordt verzameld door middel van cookies wanneer u uw My Tesla-account of onze website gebruikt, bieden de meeste browsers een eenvoudige procedure om cookies automatisch te weigeren of u krijgt de keuze om de overdracht naar uw computer van een bepaalde cookie (of cookies) van een bepaalde website te weigeren of te accepteren. U kunt ook {website} raadplegen. Als u deze cookies echter niet accepteert, kunt u ongemak ondervinden bij het gebruik van de Diensten. Zo kunnen we uw computer bijvoorbeeld niet herkennen en kan het zijn dat u moet inloggen telkens wanneer u de betreffende Diensten bezoekt.","privacy_policy_view_information_rights_choices_agree_eu":"U dient akkoord te gaan met het privacybeleid om uw Powerwall te registreren en gegevens bij te houden in de mobiele Tesla-app.","privacy_policy_view_information_rights_choices_agree_one":"U dient akkoord te gaan met het privacybeleid om uw Powerwall te registreren en gegevens bij te houden in de mobiele Tesla-app. Er is geen verdere actie nodig als u geen toegang wilt hebben tot uw Powerwall-gegevens via de mobiele Tesla-app.","privacy_policy_view_information_rights_choices_bullet_one":"U kunt toegang krijgen tot uw Tesla-account om de informatie van of over u in dat account te allen tijde bij tewerken.","privacy_policy_view_information_rights_choices_bullet_two":"Indien u informatie van of over u, welke eerder door u aan ons is verstrekt, wilt nakijken, corrigeren, bijwerken, schrappen of verwijderen, kunt u contact met ons opnemen op het onderstaande adres.","privacy_policy_view_information_rights_choices_header":"Rechten en keuzes","privacy_policy_view_information_rights_choices_paragraph_four":"Let op dat wij bepaalde informatie dienen te behouden voor onze administratie of wettelijke vereisten en/of om transacties te voltooien die u begon voordat u een dergelijke wijziging of verwijdering heeft aangevraagd (wanneer u bijvoorbeeld een aankoop doet of deelneemt aan een promotie, bent u mogelijk niet in staat om de informatie die u hebt opgegeven te veranderen of te verwijderen tot na de voltooiing van een dergelijke aankoop of promotie). Er kan ook resterende informatie zijn die in ons databases en andere administratie achterblijft die niet worden verwijderd.","privacy_policy_view_information_rights_choices_paragraph_one":"Zoals beschreven in de bovenstaande paragrafen geven wij u vele keuzes met betrekking tot het verzamelen, gebruiken en delen van informatie van of over u of uw gebruik van onze producten of de Diensten. Afhankelijk van de toepasselijke wetgeving in bepaalde rechtsgebieden kunt u ook het recht hebben om toegang te vragen tot en informatie te ontvangen over bepaalde informatie die wij over u bijhouden, onnauwkeurigheden in die informatie bij te werken en te corrigeren en de informatie te laten blokkeren of verwijderen. Deze rechten kunnen in bepaalde gevallen door de lokale wetgeving worden beperkt. Wij geven u verschillende methoden om toegang te verkrijgen tot correcte updates of verzoeken om blokkering of verwijdering van informatie van of over u, waaronder","privacy_policy_view_information_rights_choices_paragraph_three":"Wij zullen uw verzoek(en) om deze rechten en keuzes uit te oefenen zo snel als redelijkerwijs mogelijk is inwilligen.","privacy_policy_view_information_rights_choices_paragraph_two":"Geef in uw verzoek duidelijk aan welke informatie u zou willen wijzigen, of u de informatie die u ons heeft verstrekt uit onze database wilt laten verwijderen of laat ons op een andere manier weten welke beperkingen u ons wilt opleggen aan het gebruik van de informatie die u aan ons heeft verstrekt. Voor uw bescherming mogen wij alleen verzoeken uitvoeren met betrekking tot de informatie die verband houdt met het specifieke e-mailadres dat u gebruikt om ons uw verzoek te sturen en wij moeten mogelijk uw identiteit controleren voordat wij uw verzoekuitvoeren.","privacy_policy_view_information_share_header":"Hoe delen wij de informatie die wij verzamelen","privacy_policy_view_information_share_paragraph_eight":"In andere gevallen","privacy_policy_view_information_share_paragraph_eleven":"Als u zich wilt afmelden voor de verwerking van informatie waarvoor u uw uitdrukkelijke, voorafgaande toestemming hebt gegeven, kunt u dit doen door contact met ons op te nemen zoals uiteengezet in de paragraaf\\"Contact\\" hieronder.","privacy_policy_view_information_share_paragraph_five":"Wij kunnen informatie delen met andere derden die u goedkeurt, zoals in de volgende gevallen","privacy_policy_view_information_share_paragraph_five_point_four":"Met de aanbieder van uw socialmedia-account als u uw Diensten-account en uw socialmedia-account koppelt. Als u dit doet, machtigt u ons om informatie te delen met de aanbieder van uw socialmedia-account en bevestigt u dat het gebruik van de informatie die wij delen, komt te vallen onder het privacybeleid van de aanbieder van uw socialmedia-account.","privacy_policy_view_information_share_paragraph_five_point_one":"Met onze erkende installateurs om de door u verzochte levering van energieproducten aan u te faciliteren.","privacy_policy_view_information_share_paragraph_five_point_three":"Met externe sponsors van wedstrijden en gelijksoortige promoties, indien u ervoor kiest om deel te nemen.","privacy_policy_view_information_share_paragraph_five_point_two":"Met externe servicecentra of providers, indien u ervoor kiest om hiervan gebruik te maken. Let op dat sommige informatie over u wordt bewaard op bepaalde Tesla-producten en direct toegankelijk kunnen zijn voor de externe servicecentra of providers die u wenst te gebruiken om uw Tesla-product te controleren of onderhouden.","privacy_policy_view_information_share_paragraph_four":"Met andere derden die u goedkeurt","privacy_policy_view_information_share_paragraph_nine":"Wij kunnen informatie delen in andere gevallen, zoals","privacy_policy_view_information_share_paragraph_nine_point_one":"Met uw werkgever of andere wagenparkbeheerder of de eigenaar van het Tesla-product, als u niet de directe eigenaar bent en zoals toegestaan uit hoofde van de van toepassing zijnde wet.","privacy_policy_view_information_share_paragraph_nine_point_two":"Met een derde partij in verband met een reorganisatie, fusie, verkoop, joint venture, toewijzing, overdracht of andere beschikking van alle of een deel van onze onderneming, activa of aandelen (waaronder in verband met een faillissement of gelijksoortige procedures).","privacy_policy_view_information_share_paragraph_one":"Wij kunnen informatie die wij verzamelen via onze serviceproviders en zakenpartners delen met derden die u hebt gemachtigd, met andere externe partijen wanneer dit wettelijk verplicht is en in andere gevallen. Hieronder vindt u voorbeelden van hoe wij informatie delen met deze partijen en in welke gevallen.","privacy_policy_view_information_share_paragraph_seven":"Tesla mag informatie overdragen en bekendmaken, inclusief informatie die u wel of niet persoonlijk identificeert, aan derden om te voldoen aan een wettelijke verplichting (inclusief, maar niet beperkt tot, dagvaardingen); wanneer we naar eigen goeddunken geloven dat het wettelijk vereist is; in reactie op een wettig verzoek door overheidsinstanties die een onderzoek uitvoeren, waaronder om te voldoen aan handhavingsvereisten; om ons beleid en procedures te verifiëren of af te dwingen; om te reageren op een noodgeval; om activiteiten te voorkomen of te stoppen die wij kunnen beschouwen als, of die mogelijk illegaal, onethisch of juridisch aanvechtbaar zijn; of om de rechten, het eigendom, de veiligheid of beveiliging van de Diensten, Tesla, derden, bezoekers aan onze Diensten, of het publiek, zoals door ons bepaald naar ons oordeel, te beschermen.","privacy_policy_view_information_share_paragraph_six":"Met andere derden indien wettelijk toegestaan","privacy_policy_view_information_share_paragraph_ten":"Wij delen geen informatie die u persoonlijk identificeert met niet-aangesloten derde partijen voor hun marketingdoeleinden tenzij u ervoor kiest de betreffende informatie te delen.","privacy_policy_view_information_share_paragraph_three":"Wij kunnen informatie delen met onze serviceproviders en zakenpartners wanneer dat nodig is om diensten te verlenen namens ons of u, zoals in de volgende gevallen","privacy_policy_view_information_share_paragraph_three_point_one":"Met Tesla-filialen voor de doeleinden die zijn beschreven in dit privacybeleid. Tesla-filialen zijn bedrijven die in eigendom zijn van en gecontroleerd worden door Tesla Inc. en bedrijven waarin Tesla Inc. een substantieel eigendomsbelang heeft.","privacy_policy_view_information_share_paragraph_three_point_three":"Met andere externe zakenpartners voor zover zij betrokken zijn bij uw aankoop of de service van uw Tesla-producten. We delen beperkte informatie van of over u om u in staat te stellen gebruik te maken van deze diensten als u ervoor kiest om ze te gebruiken bij dergelijke partners zoals leasemaatschappijen en bedrijven die voertuigen op naam zetten.","privacy_policy_view_information_share_paragraph_three_point_two":"Met onze externe serviceproviders en distributiepartners om diensten te leveren, zoals websitehosting, data-analyse en -opslag, betalingsverwerking, orderverwerking en productinstallatie, draadloze verbinding met Tesla-producten, informatietechnologie en gerelateerde infrastructuur, klantenservice, productonderhoud of gerelateerde diensten, e-maillevering, creditcardverwerking, auditing, marketing, spraakopdrachtverwerking en andere gelijksoortige diensten.","privacy_policy_view_information_share_paragraph_two":"Met onze serviceproviders en zakenpartners","privacy_policy_view_information_use_commuicate":"Om met u te communiceren","privacy_policy_view_information_use_header":"Hoe gebruiken wij de informatie die wij verzamelen","privacy_policy_view_information_use_other_purposes":"Voor andere doeleinden","privacy_policy_view_information_use_paragraph_five":"Wij kunnen informatie die wij verzamelen ook gebruiken voor andere doeleinden, zoals","privacy_policy_view_information_use_paragraph_five_point_one":"Voor onze zakelijke doeleinden, zoals data-analyse, audits, fraudecontrole en -preventie, identificeren van gebruikstrends, bepalen van de doeltreffendheid van onze reclamecampagnes en het exploiteren en uitbreiden van onze zakelijke activiteiten.","privacy_policy_view_information_use_paragraph_five_point_two":"Behalve zoals hieronder en hierboven uiteengezet, kan Tesla informatie die u niet persoonlijk identificeert voor elk doeleinde gebruiken en delen, zoals voor operationele of onderzoeksdoeleinden, voor brancheonderzoek, om onze producten en diensten te verbeteren of aan te passen, om onze producten en diensten beter af te stemmen op uw behoeften, en indien wettelijk vereist.","privacy_policy_view_information_use_paragraph_four":"Wij kunnen informatie die wij verzamelen gebruiken om onze producten en diensten aan te bieden en te verbeteren, zoals","privacy_policy_view_information_use_paragraph_four_point_five":"Om de veiligheid en beveiliging van onze producten en diensten te analyseren en verbeteren.","privacy_policy_view_information_use_paragraph_four_point_four":"Om nieuwe producten en diensten te ontwikkelen en te bevorderen en om onze bestaande producten en diensten te verbeteren of aan te passen.","privacy_policy_view_information_use_paragraph_four_point_one":"Om uw aankoop te voltooien en te realiseren, bijvoorbeeld om uw betalingen te verwerken, uw bestelling aan u te leveren, met u te communiceren over uw aankoop en u de gepaste klantenservice te bieden.","privacy_policy_view_information_use_paragraph_four_point_six":"Om enige andere diensten die u hebt aangevraagd te leveren.","privacy_policy_view_information_use_paragraph_four_point_three":"Om de prestaties van uw Tesla-product te volgen en om diensten te leveren die verband houden met uw product.","privacy_policy_view_information_use_paragraph_four_point_two":"Om onderhoud te bieden voor uw Tesla-product, zoals het doen van service-aanbevelingen en om updates voor uw product te leveren.","privacy_policy_view_information_use_paragraph_one":"Wij kunnen de informatie die we verzamelen gebruiken om met u te communiceren over het leveren en verbeteren van onze producten en diensten en voor andere doeleinden. Hieronder vindt u een aantal voorbeelden van hoe wij informatie voor deze doeleinden gebruiken.","privacy_policy_view_information_use_paragraph_three":"Uw communicatiekeuzes","privacy_policy_view_information_use_paragraph_three_point_one":"Elektronische communicatie van ons of onze filialen ontvangen Als u geen marketinggerelateerde e-mails van ons of onze filialen meer wilt ontvangen, kunt u zich afmelden voor ontvangst door de instructies voor uitschrijven te volgen in de e-mails die u van ons ontvangt of door contact met ons op te nemen op onderstaand adres. Houd er rekening mee dat we u nog steeds belangrijke administratieve berichten en veiligheidsmeldingen kunnen sturen, zelfs als u zich afmeldt voor het ontvangen van marketinggerelateerde e-mails.","privacy_policy_view_information_use_paragraph_three_point_two":"Marketinggerelateerde telefoontjes van ons ontvangen Als u een marketinggerelateerd telefoontje van ons ontvangt en in de toekomst geen soortgelijke telefoontjes wilt ontvangen, vraag dan gewoon of u op onze \\"bel-me-niet\\"-lijst kunt worden geplaatst. Houd er rekening mee dat we u nog steeds kunnen bellen met betrekking tot administratieve zaken, veiligheid of productdiensten, zelfs als u zich afmeldt voor het ontvangen van marketinggerelateerde telefoontjes.","privacy_policy_view_information_use_paragraph_two":"Wij kunnen informatie die wij verzamelen, gebruiken om met u te communiceren, zoals","privacy_policy_view_information_use_paragraph_two_point_five":"Om u producten en aanbiedingen aan te bieden die op u zijn afgestemd en om onze overzichten met informatie van andere diensten te verbeteren.","privacy_policy_view_information_use_paragraph_two_point_four":"Om administratieve gegevens naar u te sturen, bijvoorbeeld informatie over de Diensten en wijzigingen in onze bepalingen, voorwaarden en beleid.","privacy_policy_view_information_use_paragraph_two_point_one":"Om uw vragen te beantwoorden en uw verzoeken in te willigen, zoals het naar u versturen van nieuwsbrieven of productinformatie, informatiemeldingen of brochures.","privacy_policy_view_information_use_paragraph_two_point_seven":"Om sociaal delen en communicatiefunctionaliteit te faciliteren.","privacy_policy_view_information_use_paragraph_two_point_six":"Om u in staat te stellen om deel te nemen aan wedstrijden en gelijksoortige promoties en om deze activiteiten te beheren.","privacy_policy_view_information_use_paragraph_two_point_three":"Om u te adviseren over belangrijke veiligheidsgerelateerde informatie of om eerstehulpverleners in kennis testellen in het geval van een ongeval met uw auto.","privacy_policy_view_information_use_paragraph_two_point_two":"Om uw Tesla-testrit te plannen, te beoordelen en feedback erover te geven.","privacy_policy_view_information_use_provide":"Om onze producten en diensten aan te bieden en te verbeteren","privacy_policy_view_links_header":"Links","privacy_policy_view_links_paragraph_one":"Dit Privacybeleid heeft geen betrekking op en wij zijn niet verantwoordelijk voor de privacygegevens of andere praktijken van derden, waaronder begrepen derden die een site of dienst exploiteren waarnaar de Diensten via een link verwijzen. Het opnemen van een link onder de Diensten impliceert geen goedkeuring van de gelinkte site hofdienst door ons of door onze filialen, noch impliceert het enige verbondenheid met de externe partij.","privacy_policy_view_links_paragraph_two":"Let op: wij zijn niet verantwoordelijk voor het beleid en de werkwijzen (inclusief de werkwijzen op het gebied van gegevensbeveiliging) ten aanzien van verzameling, gebruik of bekendmaking van andere organisaties, bijvoorbeeld andere app-ontwikkelaars, app-aanbieders, aanbieders van socialmediaplatforms, aanbieders van besturingssystemen of aanbieders van draadloze diensten, waaronder begrepen informatie die u bekendmaakt aan andere organisaties via of in verband met onze software-applicaties of socialmediasites.","privacy_policy_view_minors_header":"Minderjarigen","privacy_policy_view_minors_paragraph":"De Diensten zijn niet bedoeld voor personen jonger dan zestien (16) jaar en wij verzoeken deze personen om geeninformatie te verstrekken aan Tesla.","privacy_policy_view_offers_eu":"Ja, ik wil graag per e-mail marketingberichten ontvangen, waaronder enquêtes, promoties en aanbiedingen van Tesla en zijn partners, met betrekking tot de producten en services van Tesla. U hebt het recht om op elk gewenst moment uw toestemming in te trekken. Meer informatie {legalLink}.","privacy_policy_view_offers_title":"Aankondigingen van producten en nieuwe aanbiedingen","privacy_policy_view_offers_usa":"Ik ga ermee akkoord dat er via het opgegeven nummer contact met mij kan worden opgenomen voor meer informatie of aanbiedingen van Tesla-producten. Ik begrijp dat er bij deze gesprekken of tekstberichten gebruik kan worden gemaakt van computergestuurde menu\'s of vooraf opgenomen berichten. Deze toestemming is geen aankoopvoorwaarde.","privacy_policy_view_powerwall_warranty":"Beperkte garantie van Tesla Powerwall","privacy_policy_view_privacy_policy":"Privacybeleid","privacy_policy_view_privacy_policy_agreement_eu":"Ik, de huiseigenaar, heb het Privacybeleid voor klanten van Tesla volledig gelezen en ga akkoord met de verwerking van mijn persoonlijke gegevens door Tesla zoals beschreven in het Privacybeleid voor klanten van Tesla. U hebt het recht om op elk gewenst moment uw toestemming in te trekken, zoals beschreven in het Privacybeleid voor klanten van Tesla.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Ik, de huiseigenaar, heb het Privacybeleid voor klanten van Tesla volledig gelezen en ga akkoord met de verwerking van mijn persoonlijke gegevens door Tesla zoals beschreven in het Privacybeleid voor klanten van Tesla.","privacy_policy_view_privacy_shield":"Privacyschildbeleid","privacy_policy_view_retention_period_header":"Bewaartermijn","privacy_policy_view_retention_period_paragraph":"Wij bewaren informatie die wij verzamelen van of over onze klanten, onze producten en de Diensten zolang als nodig is om de doelen uiteengezet in dit Privacybeleid te verwezenlijken, tenzij een langere bewaarperiode wettelijk is vereist of toegestaan.","privacy_policy_view_security_header":"Beveiliging","privacy_policy_view_security_paragraph_one":"Wij streven ernaar redelijke organisatorische, technische en administratieve maatregelen te nemen om informatie binnen onze organisatie te beschermen. Helaas kan geen enkel systeem voor gegevensoverdracht of opslag gegarandeerd 100% veilig zijn. Als u reden hebt om aan te nemen dat uw interactie met ons niet langer veilig is (bijvoorbeeld als u van mening bent dat de veiligheid van een account bij ons in het gedrang is gekomen), dient u ons onmiddellijk op de hoogte te stellen van het probleem door contact met ons op te nemen zoals uiteengezet inde paragraaf \\"Contact\\" hieronder.","privacy_policy_view_security_paragraph_two":"Indien u uw Tesla-product verkoopt of overdraagt aan een andere persoon, laat het ons dan weten zodat we kunnen bepalen of aanvullende maatregelen vereist zijn om te helpen bij het beschermen van de informatie van of over u tegen bekendmaking aan de koper of verkrijger van het Tesla-product.","privacy_policy_view_title":"Het volledige privacybeleid lezen","privacy_policy_view_updates_header":"Wijzigingen in dit beleid","privacy_policy_view_updates_paragraph":"Wij kunnen dit Privacybeleid wijzigen. Neem een kijkje bij \\"Laatste update\\" onderaan deze pagina om te zien wanneer dit Privacybeleid voor het laatst is herzien. Alle wijzigingen in dit Privacybeleid worden van kracht wanneer we het herziene Privacybeleid onder de Diensten plaatsen. Door gebruik te maken van onze producten, de Diensten of door op andere wijze informatie aan ons te verstrekken na deze wijzigingen, accepteert u het herziene Privacybeleid.","privacy_policy_view_us_warranty_warning":"U dient akkoord te gaan met de beperkte garantie van Tesla om uw Powerwall te registreren en gegevens bij te houden in de mobiele Tesla-app.","privacy_policy_view_warranty_information":"Ik, de huiseigenaar, ga akkoord met de voorwaarden van de beperkte garantie van Tesla Powerwall {warrantyLink}. Deze voorwaarden omvatten een arbitragebepaling die afstand neemt van mijn recht om collectieve claims en juryrechtszaken in te leiden of daaraan deel te nemen. Ik kan mij binnen 30 dagen uit deze bepaling terugtrekken door het in de bepaling beschreven proces te volgen.","registration_container_continue_header":"E-mail klant ingevoerd: {email}","registration_container_continue_modal_description":"De klant heeft geen toegang tot de mobiele Tesla-app als de e-mail onjuist is. Bevestig dat de e-mail van de klant geldig is.","registration_container_customer_email_required":"E-mail klant is nodig om de mobiele Tesla-app in te schakelen.","registration_container_customer_information_title":"Klantinformatie","registration_container_fill_required_fields":"Installateur of klant moet alle vereiste velden invullen.","registration_container_loading_modal_registering":"Registreren","registration_container_reset_form_modal_description":"Bevestig dat u wilt doorgaan met het resetten van het formulier.","registration_container_reset_form_modal_header":"Alle eerder ingevoerde informatie gaat verloren.","security_container_settings_title_customer":"Wachtwoord wijzigen of resetten (klant)","security_container_settings_title_installer":"Wachtwoord wijzigen of resetten (installateur)","security_view_copied_to_clipboard":"Gekopieerd!","security_view_settings_change_password_error":"Nieuwe paswoorden komen niet overeen.","security_view_settings_change_password_label":"PASWOORD WIJZIGEN","security_view_settings_completed":"VOLTOOIEN","security_view_settings_new_password_label":"NIEUW PASWOORD","security_view_settings_old_password":"HUIDIG PASWOORD","security_view_settings_password_change_info":"Voer het huidige en het nieuwe paswoord in om het paswoord te wijzigen.","security_view_settings_password_customer":"PASSWORD","security_view_settings_password_customer_placeholder":"Laatste 5 tekens van het wachtwoord op de gateway-sticker","security_view_settings_password_installer_label":"Gateway-wachtwoord","security_view_settings_password_reset_info":"Om het paswoord te resetten, bedient u de schakelaar op een Powerwall en voert u vervolgens de laatste 5 tekens van het serienummer van de gateway in.","security_view_settings_password_reset_info_serial":"Om het wachtwoord te resetten, bedient u de schakelaar op een Powerwall en voert u vervolgens de laatste 5 tekens van het serienummer van de gateway in.","security_view_settings_password_reset_installer_info":"Om het paswoord te resetten, bedient u de schakelaar op een Powerwall en voert u vervolgens het serienummer van de gateway in.","security_view_settings_password_reset_installer_info_serial":"Om het wachtwoord te resetten, bedient u de schakelaar op een Powerwall en voert u vervolgens het serienummer van de gateway in.","security_view_settings_re_enter_password_label":"VOER NIEUW PASWOORD OPNIEUW IN","security_view_settings_reset_password_label":"PASWOORD RESETTEN","security_view_settings_serial_customer":"SERIENUMMER","security_view_settings_serial_customer_placeholder":"Laatste 5 tekens van het serienummer van de gateway","security_view_settings_serial_installer_label":"Serienummer van Gateway","security_view_settings_success":"Paswoord is gewijzigd","security_view_settings_success_new_password":"Het nieuwe paswoord is:","security_view_settings_toggled_password":"Paswoord vergeten?","settings_container_confirm_reset_operation_mode":"Moduswijziging in {operation} bevestigen","settings_container_operation_modes_modal_content":"Gebruik het scherm \'Aanpassen\' van de mobiele Tesla-app om bedieningsmodi te wijzigen.","settings_container_operation_modes_modal_reset":"RESETMODUS","settings_container_operation_modes_modal_title":"Bedieningsmodus","settings_container_operation_modes_modal_warning":"Dit is een wijziging in één richting. Geavanceerde modi kunnen alleen opnieuw worden ingeschakeld via de mobiele Tesla-app.","settings_container_operation_modes_reset_modal_title":"Bedieningsmodus resetten?","settings_container_operation_settings_subtitle":"Stel de naam in van uw systeembedieningsmodus en eventuele exportbeperkingen.","settings_container_operation_settings_title":"Bedieningsinstellingen","settings_container_saving_site_info_modal":"Locatie-instellingen opslaan","settings_view_custom_modes_label":"Voorgeconfigureerde modus - {mode}","settings_view_energy_reserve_label":"ENERGIERESERVE (VOOR BACK-UP TIJDENS EIGEN VERBRUIK)","settings_view_instruction_site_name":"Voer een locatienaam in","settings_view_operation_label":"BEDIENINGSMODUS","settings_view_operation_set_label":"IN TE STELLEN BEDIENINGSMODUS","settings_view_site_name":"NAAM LOCATIE","settings_view_site_name_placeholder":"Bijv.: Mijn huis","settings_view_solar_export_limitation_slider":"Beperking van de uitvoer van zonne-energie","settings_view_solar_feature":"Deze functie moet alleen geactiveerd worden wanneer de interconnectie vereist dat het zonne-energie systeem geen energie exporteert naar het elektriciteitsnet. Typisch in Hawaii (VS) en Australië.","settings_view_solar_zero_export":"POWERWALL GEÏNSTALLEERD LANGS EEN ZONNE-ENERGIESYSTEEM MET NULEXPORT?","site_info_container_submit":"VERZENDEN","solar_item_view_baudrate_label":"Baudrate","solar_item_view_brand_input_label":"MERK","solar_item_view_brand_label":"Merk","solar_item_view_check_inverter":"CONTROLEER INVERTER {id} VERBINDING","solar_item_view_connection_warning":"Kon geen verbinding tot stand brengen","solar_item_view_inverter_brand":"Merk omvormer","solar_item_view_inverter_communication":"Communicatie omvormer","solar_item_view_inverter_model_label":"Model omvormer","solar_item_view_ip_label":"IP ADRES","solar_item_view_model_label":"MODEL","solar_item_view_power_rating_explanation":"Dit is het totale nominale vermogen van het PV-systeem ten opzichte van de modules/panelen. Dit is het nominale vermogen van de zonnepanelen. Als u bijvoorbeeld 10x 300 W aan zonnepanelen hebt, vermeld dan 3000 W, zelfs als de PV-omvormer 2500 W of 3500 W is.","solar_item_view_pv_array_dc_power_rating":"NOMINAAL DC-VERMOGEN ZONNEPANELEN","solar_item_view_pv_array_dc_power_rating_label":"PV ARRAY DC-KRACHTGRAAD","solar_item_view_revenue_grade":"Rendement","solar_item_view_revenue_grade_explanation":"Controleer dit alleen als de omvormer een geïntegreerde meter voor opbrengstkwaliteit heeft. Gegevens van de omvormer worden van de meter gelezen in plaats van van de omvormer als deze optie is ingeschakeld.","solar_item_view_revenue_grade_title":"Rendement","solar_item_view_solar":"ZONNE-ENERGIE {id}","solar_item_view_success":"SUCCESVOL VERBONDEN!","solar_item_view_unable":"KAN DE INVERTER NIET LEZEN!","solar_list_view_continue_add_solar":"VOEG SOLAR TOE","solar_view_continue_add_solar":"ZONNE-ENERGIE TOEVOEGEN","success_view_awesome":"GEWELDIG!","success_view_copied_to_clipboard":"Gekopieerd!","success_view_installation_complete":"Installatie voltooid","success_view_new_password_error_title":"Paswoord wizard","success_view_new_password_title":"Nieuw paswoord wizard","success_view_password_set":"Paswoord is al ingesteld","success_view_record_password":"Noteer dit paswoord voordat u doorgaat","success_view_retry_registration":"PROBEER OPNIEUW TE REGISTREREN","success_view_set_customer_password":"KLANTPASWOORD INSTELLEN","success_view_syncing_configuration":"Configuratie synchroniseren","summary_container_company":"Bedrijf","summary_container_connection_type":"Type verbinding","summary_container_email":"E-mail","summary_container_installer_information":"Informatie over Installateur","summary_container_ip_address":"IP-ADRES","summary_container_location":"Locatie","summary_container_meter":"Meter #{index}","summary_container_meter_information":"Meterinformatie","summary_container_phone":"Telefoonnummer","summary_container_print":"Afdrukken","summary_container_serial_number":"Serienummer","summary_container_site_info":"Informatie over locatie","summary_container_site_name":"Naam van locatie","summary_container_subtitle":"Product- en installatie-informatie","summary_site_information":"INFORMATIE OVER LOCATIE","summary_view_autonomous":"Tijdgestuurde regeling","summary_view_backup":"Alleen noodstroom","summary_view_backup_capable":"Noodstroom mogelijk","summary_view_backup_reserve":"NOODSTROOMRESERVE","summary_view_conductor_export":"EXPORTLIMIET VOOR GELEIDER","summary_view_conductor_import":"IMPORTLIMIET VOOR GELEIDER","summary_view_control":"Locatieregeling","summary_view_customer_version":"KLANTVERSIE","summary_view_disabled":"UITGESCHAKELD","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"EXPORTEERLIMIET PV","summary_view_gateway":"GATEWAY","summary_view_grid_code":"NETCODE","summary_view_gsm":"MOBIEL","summary_view_ip_address":"IP-ADRES","summary_view_mode":"MODUS","summary_view_network":"NETWERK","summary_view_non_backup":"Geen noodstroom","summary_view_part_number":"OnderdeelNummer","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Aggregatie","summary_view_self_consumption":"Eigen verbruik","summary_view_serial":"Serienummer","summary_view_site_export":"EXPORTLIMIET VOOR LOCATIE","summary_view_site_import":"IMPORTLIMIET VOOR LOCATIE","summary_view_site_name":"NAAM LOCATIE","summary_view_sync":"NOODSTROOMFUNCTIE","summary_view_time":"COMPILEERTIJD OVERZICHT","summary_view_time_zone":"TIJDZONE","summary_view_wifi":"Wifi","system_overview_connected":"Verbonden met Tesla","system_overview_disconnected":"Niet verbonden met Tesla","system_overview_site_controller":"Sitecontroller","test_container_configure_subtitle":"Test of het systeem werkt zoals verwacht.","test_container_system_test_title":"Systeemtest","test_inverter_container_error_grid_uncompliant":"De test kan niet worden uitgevoerd omdat het net niet compatibel is.","test_inverter_container_error_not_idle":"De Powerwall moet in stand-by staan om de test uit te voeren.","test_inverter_container_results_error_plural_subtitle":"{num} tests mislukt","test_inverter_container_results_error_singular_subtitle":"{num} test mislukt","test_inverter_container_results_success_plural_subtitle":"{num} tests geslaagd","test_inverter_container_results_success_singular_subtitle":"{num} test geslaagd","test_inverter_container_results_success_subtitle":"Alle tests geslaagd","test_inverter_container_results_title":"Resultaten van zelftest omvormer","test_inverter_container_title":"Zelftest van omvormer","test_meter_composite_view_auxiliary_meter_setup_instructions":"Voor elke hulpmeter moet ten minste één stroomtrafo worden ingesteld.","test_meter_composite_view_auxiliary_meters_title":"Hulpmeters","test_meter_composite_view_configure_meters":"METERS CONFIGUREREN","test_meter_composite_view_current_transformer_setup_instructions":"Gebruik ten minste één huisinstallatie-stroomtrafo OF verbruiksstroomtrafo maar niet beide.","test_meter_composite_view_internal_meters_title":"Interne meters","test_meter_composite_view_no_configured_meters":"GEEN GECONFIGUREERDE METERS. {configure} OM DOOR TE GAAN.","test_meter_composite_view_note":"OPMERKING","test_meter_item_view_configure_phases_note":"Configureer fasen om stroomtrafo\'s voor deze meter in te schakelen","test_meter_item_view_reset":"RESET","test_meter_item_view_site_meter_title":"Interne locatiemeter","test_meter_item_view_sync_id":"Sync meter {id}","test_meter_item_view_toggle_advanced":"Geavanceerd","test_meter_item_view_toggle_power":"Voeding","test_meter_item_view_wifi_id":"Meter {id}","test_meter_item_view_wired_id":"Bedrade meter {id}","test_view_canceled_status":"Test geannuleerd","test_view_failed_status":"Test mislukt","test_view_idle_status":"Begin van systeemtest","test_view_init_status":"Start van test voorbereiden","test_view_inverter_test_warning_message":"Als u een 0 Export-PV-omvormer heeft, is de zelftestprocedure van de Gateway niet in staat het systeem adequaatte kwalificeren. Schakel de PV-omvormer uit totdat de zelftest is voltooid.","test_view_passed_status":"Test geslaagd","test_view_prep_status":"Bedieningselementen initialiseren Kan enkele minuten duren!","test_view_running_status":"Laadtests worden uitgevoerd","test_view_skip_start_system_test_text":"Bevestigen om de systeemtest over te slaan","test_view_start_system_test_warning":"WAARSCHUWING","test_view_system_test_completed_message":"Systeemtest voltooid!","time_minute":"minuut","time_minutes":"minuten","time_second":"seconde","time_seconds":"seconden","time_started_at":"Gestart om {time}","timezone_container_subtitle":"Op basis van locatie en IP-adres kunnen wij u helpen de tijdzone voor uw installatie te vinden.","timezone_container_title":"Tijdzone","timezone_view_label":"tijdzone","toast_view_standard_title":"Let op","toast_view_warning_title":"Waarschuwing","update_container_industrial_updating_description":"De sitecontroller start nu automatisch opnieuw om de update te installeren. {lb1}{lb2} Wacht 2 minuten, maak opnieuw verbinding met het Sitecontroller-netwerk en {refresh}","update_container_preparing_title":"Voorbereiden op meest recente update","update_container_refresh_browser":"Ververs uw browser.","update_container_residential_updating_description":"De Gateway start nu automatisch opnieuw om de volledige update toe te passen. {lb1}{lb2} Wacht 2 minuten, maak opnieuw verbinding met het Gateway-netwerk en dan {refresh}","update_container_skip_title":"Update overslaan?","update_container_subtitle":"Werk uw systeem bij om de nieuwste software en firmware-updates te ontvangen.","update_container_subtitle_industrial":"Controleer op updates. Opmerking: Het pushen van firmware-update naar batterijen vindt plaats op de batterijpagina.","update_container_title":"Bijwerken","update_container_updating_title":"Systeem wordt bijgewerkt","update_step_item_view_resolution_title":"Voorgestelde oplossing","update_view_check_again":"KLIK OM OPNIEUW TE CONTROLEREN","update_view_check_for_update":"CONTROLEREN OP UPDATE","update_view_check_for_update_industrial":"CONTROLEREN OP UPDATE SITECONTROLLER","update_view_checking_update":"Controleren op update","update_view_current_version_label":"HUIDIGE VERSIE","update_view_downloading":"DOWNLOADEN","update_view_downloading_update":"Update downloaden","update_view_no_power_cicle":"NIET UIT- EN AANZETTEN!","update_view_percent_complete":"{percent} voltooid","update_view_progress":"VOORTGANG VAN BIJWERKEN","update_view_staged":"NIEUWE VERSIE TIJDELIJK OPGESLAGEN","update_view_staged_update":"Klaar voor update","update_view_staging":"TIJDELIJK OPSLAAN","update_view_staging_update":"Tijdelijk opslaan update","update_view_time_remaining":"resterend","update_view_up_to_date":"VERSIE UP-TO-DATE","update_view_update_now":"NU BIJWERKEN","update_view_updated_industrial":"Software voor sitecontroller is up-to-date.","update_view_updated_residential":"Uw systeem heeft de nieuwste firmware.","update_view_wait_minutes":"WACHT ENKELE MINUTEN","validation_phone":"Voer geldig telefoonnummer in","warning":"WAARSCHUWING","warning_off_grid":"Als het elektrische systeem niet op het elektriciteitsnet is aangesloten, dalen de ondersteunende ladingenbinnen 5 minuten.","warning_on_grid":"Als het elektrische systeem op het elektriciteitsnet is aangesloten, stopt de Powerwall met opladen/ontladen.","warning_sitemaster_container_not_running":"De Sitemaster wordt niet uitgevoerd","wifi_view_find_network":"NETWERK ZOEKEN VIA SSID","wifi_view_note":"Let op De Gateway is alleen compatibel met 2,4 GHz draadloze netwerken.","wifi_view_note_five_ghz":"Opmerking: De gateway is compatibel met draadloze netwerken van zowel 2,4 GHz als 5 GHz.","wifi_view_security_label":"BEVEILIGING","wizard_container_commissioning_wizard":"Tesla inbedrijfstellingswizard","wizard_container_login_required":"Inloggen vereist","wizard_container_title":"Laten we aan de slag gaan.","wizard_container_verifying_login_title":"Inloggen controleren"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"Erreur","advanced_settings_submit":"Envoyer","advanced_settings_submitted":"Envoyé","advanced_settings_title":"Paramètres avancés","alert_container_ac_phase_1_over_voltage":"Surtension CA","alert_container_ac_phase_1_under_voltage":"Sous-tension CA","alert_container_ac_phase_2_over_voltage":"Surtension CA","alert_container_ac_phase_2_under_voltage":"Sous-tension CA","alert_container_ac_phase_3_over_voltage":"Surtension CA","alert_container_ac_phase_3_under_voltage":"Sous-tension CA","alert_container_over_frequency":"Sur-fréquence CA","alert_container_rate_of_change_frequency":"Taux de variation CA de la fréquence","alert_container_under_frequency":"Sous-fréquence CA","app_container_engineering_mode_banner_message":"Le mode d\'entretien de Tesla ne requiert pas d\'authentification. Veuillez « Arrêter le système » si vous apportez des modifications opérationnelles. Avant de quitter le navigateur, laissez le système dans un état acceptable. Quand vous aurez terminé, veuillez fermer le navigateur, car ce mode ne requiert pas d\'authentification.","app_container_engineering_mode_title":"Mode d\'entretien de Tesla","app_container_firmware_update_banner_message":"Laissez l\'installation et le câblage tels qu\'ils sont et demeurez sur cette page jusqu\'à la fin de la mise à jour.","app_container_firmware_update_banner_title":"Mise à jour du microprogramme en cours","app_container_sitemaster_message_title":"Le système est actuellement en cours d\'exécution. Le système doit être arrêté pour qu\'il soit possible d\'afficher le statut des blocs de batterie. Vous devez arrêter le système à partir de la page d\'accueil.","app_container_sitemaster_power_supply_mode_banner_message":"Batterie produisant la tension CA pour alimenter les appareils pour le couplage et la configuration. Bouton permettant d\'arrêter le système sur la page d\'arrivée.","app_container_sitemaster_power_supply_mode_banner_title":"Mode Formation réseau","app_container_sitemaster_running_banner_title":"Système en cours d\'exécution","auto_config_check_network_button":"Vérifiez le réseau et activez le WiFi","auto_config_check_system_and_summary":"Vérifiez le Système et les pages de Synthèse","auto_config_done_button_text":"Effectué","auto_config_instructions_cannot_determine_grid_connection":"Vérifiez le câblage du commutateur de secours ou du dispositif Gateway avant de démarrer le système.","auto_config_instructions_determining_on_grid":"Si le message persiste pendant plus de 3 minutes, vérifiez le câblage du Commutateur ou de la Passerelle de Secours.","auto_config_instructions_finding_contactor_controller":"Si le message persiste pendant plus de 3 minutes, vérifiez le câblage du Commutateur ou de la Passerelle de Secours.","auto_config_instructions_finding_powerwalls":"Si ce message demeure affiché pendant plus de trois minutes, vérifiez le câblage du Powerwall.","auto_config_instructions_finding_solar_powerwall":"Si le message persiste pendant plus de 3 minutes, vérifiez le câblage du Powerwall Solaire.","auto_config_instructions_lookup_failed_retry":"Scannez l’étiquette du numéro de série dans Bolt pour activer le réglage automatique du Powerwall, puis la commande {retryButton}","auto_config_instructions_lookup_failed_wizard":"Ou {wizardButton} pour un réglage manuel du Powerwall.","auto_config_instructions_missing_info_1":"Le réglage automatique du Powerwall a échoué car il manquait les informations suivantes :","auto_config_instructions_missing_info_2":"{wizardButton} pour une saisie manuelle.","auto_config_instructions_missing_info_3":"{registrationButton} manuellement.","auto_config_instructions_no_grid_connection":"Vérifiez le câblage du Commutateur ou de la Passerelle de Secours.","auto_config_instructions_no_grid_detected":"Vérifiez le câblage et les disjoncteurs avant de démarrer le système.","auto_config_instructions_no_network_retry":"{networkLink} pour activer le réglage automatique du Powerwall puis {retryButton}","auto_config_instructions_no_network_wizard":"Ou {wizardButton} pour un réglage manuel du Powerwall.","auto_config_instructions_retry":"{networkLink} si le problème persiste","auto_config_instructions_retry_wizard":"Ou {wizardButton} pour un réglage manuel du Powerwall.","auto_config_instructions_updating":"Une mise à jour du logiciel est nécessaire avant d\'initier le réglage automatique du Powerwall. La mise à jour sera automatiquement téléchargée et appliquée. Il se peut que vous deviez reconnecter le réseau WiFi du Powerwall par la suite.","auto_config_missing_grid":"Réseau pour le site client","auto_config_missing_gridcode":"Code réseau pour le site client","auto_config_missing_registration":"Informations client pour l’enregistrement du produit","auto_config_missing_timezone":"Fuseau horaire sur le site du client","auto_config_network_button_text":"Régler le réseau","auto_config_registration_button_text":"Saisir les informations client","auto_config_retry_button_label":"Réessayer","auto_config_run_button_label":"Réglage automatique du Powerwall","auto_config_run_wizard_button_text":"Exécuter l’Assistant","auto_config_section_title":"Réglage automatique du Powerwall","auto_config_status_cancelled":"Le réglage automatique a été annulé. Essayer à nouveau :","auto_config_status_cannot_determine_grid_connection":"Impossible de déterminer la connexion au réseau.","auto_config_status_complete":"Cela a réussi","auto_config_status_determining_on_grid":"Détermination du raccordement au réseau en cours...","auto_config_status_finding_contactor_controller":"Recherche du Régulateur du contacteur en cours...","auto_config_status_finding_powerwalls":"Recherche des Powerwalls...","auto_config_status_finding_solar_powerwall":"Recherche du Powerwall Solaire en cours...","auto_config_status_in_progress":"En cours","auto_config_status_lookup_failed":"Échec de la recherche du numéro de série","auto_config_status_missing_information":"Informations manquantes","auto_config_status_no_grid_connection":"Pas de connexion au réseau","auto_config_status_no_grid_detected":"Aucun réseau détecté.","auto_config_status_no_network":"Non connecté à Tesla","auto_config_status_not_applicable":"Le réglage automatique n’est pas nécessaire ou a déjà été exécuté. Vous pouvez l’exécuter à nouveau :","auto_config_status_retrying":"Nouvel essai de demande de réseau","auto_config_status_timeout":"La configuration automatique a expiré. Essayer à nouveau :","auto_config_status_updating":"Mise à jour du logiciel nécessaire","auto_config_stop_system_modal_message":"Impossible d’exécuter le processus de réglage automatique pendant le fonctionnement du système. Arrêtez le système et essayez à nouveau.","auto_config_stop_system_modal_title":"Impossible de lancer le réglage automatique","battery_container_add_all_batteries_button_label":"TOUT AJOUTER","battery_container_available_batteries_subtitle":"Ces batteries ne participeront pas au fonctionnement du système à moins d’être ajoutées au \\"Configured\\" list.","battery_container_available_batteries_title":"Blocs de batterie disponibles","battery_container_cannot_communicate":"Communication avec le Powerwall impossible. Vérifiez le câblage et la terminaison du bus CAN.","battery_container_cannot_communicate_with_device":"Échec de communication avec le dispositif. Vérifiez le câblage et la terminaison du bus CAN.","battery_container_chinv":"VFD pour compresseur et chauffage (CHINV) {index}","battery_container_configured_batteries_label":"Blocs de batterie configurés","battery_container_configured_batteries_subtitle":"Ces batteries feront partie du fonctionnement du système.","battery_container_confirm_update_firmware":"Ce processus peut durer plusieurs minutes. N\'interrompez pas la mise à jour et ne quittez pas cette page.","battery_container_dcbc":"Bloc de batterie {index}","battery_container_dcbc_comms_failure":"Échec de la communication. Vérifiez la connexion entre le réseau et l\'unité et faites une nouvelle recherche.","battery_container_dcbc_dcdisconnect_opened":"La poignée de déconnexion CC est en position d\'arrêt.","battery_container_dcbc_door_switch_opened":"Ligne d\'activation de la porte de l\'onduleur. Vérifiez le commutateur de porte.","battery_container_dcbc_enable_line_return_low_estop":"Arrêt à distance de l\'onduleur ouvert. Vérifiez le circuit d\'arrêt à distance.","battery_container_dcbc_enable_line_return_low_inv":"Ligne d\'activation du système de l\'onduleur ouverte. Vérifiez le retour du disjoncteur.","battery_container_dcbc_enable_line_return_low_str":"La ligne d\'activation d\'une ou plusieurs rangées de Powerpacks est ouverte. Vérifiez le câblage et les portes du Powerpack. Pour établir un diagnostic, consultez le Guide de dépannage de la ligne d\'activation.","battery_container_delete_button_title":"Supprimer le dispositif","battery_container_diagnosis_incomplete":"Diagnostic incomplet. Il faut procéder à une mise à jour du microprogramme avant que d\'autres recherches puissent être effectuées.","battery_container_faults":"Défaillances","battery_container_firmware_update_needed":"Une mise à jour du microprogramme est requise.","battery_container_gateway_contactor_meter_controller":"Contacteur de la passerelle/Contrôleur de compteur","battery_container_industrial_confirm_update_firmware":"Cela entraînera la mise à jour du microprogramme de chaque bloc de batterie et de ses sous-composants.","battery_container_industrial_confirm_update_firmware_info":"Cela entraînera la mise à jour du microprogramme de chaque bloc de batterie dans le \\"Configured\\" list and its subcomponents.","battery_container_internal_communications_fault":"Défaillance des communications internes. Vérifiez le câblage et la terminaison du bus CAN et procédez à une mise à jour du microprogramme.","battery_container_meter_socket_adapter":"Commutateur de secours","battery_container_mpbc":"Bloc de batterie {index}","battery_container_mpthc":"Contrôleur thermique (MPTHC) {index}","battery_container_no_msa_detected":"Aucun commutateur de secours détecté.","battery_container_no_sync_detected":"Aucun régulateur de contacteur détecté. Aucune capacité de secours détectée.","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN : {pn}","battery_container_pod":"Pod {index}","battery_container_post":"Borne (LCC) {index}","battery_container_post_missing":"Borne manquante {index}","battery_container_powerpack":"Powerpack {index}","battery_container_powerstage":"Powerstage {index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"Le Powerwall est éteint. Assurez-vous que le commutateur est en position ON.","battery_container_qbms":"Qbert (QBMS)","battery_container_qhvp":"Processeur haute tension (QHVP)","battery_container_residential_confirm_update_firmware":"Cela entraînera la mise à jour du microprogramme de chaque Powerwall et du régulateur de contacteur (s\'il en existe un).","battery_container_resolve_connectivity":"Réglez les problèmes de connectivité avant d\'exécuter une mise à jour du microprogramme.","battery_container_scan":"RECHERCHER","battery_container_scan_in_progress":"RECHERCHE EN COURS...","battery_container_scbc":"Bloc chargeur {index}","battery_container_scthc":"Contrôleur thermique (SCTHC) {index}","battery_container_self_tests_failure":"A échoué à l\'auto-test.","battery_container_self_tests_inconclusive":"Les résultats de l\'auto-test ne sont pas concluants.","battery_container_self_tests_internal_error":"L\'auto-test a échoué en raison d\'une erreur interne du système.","battery_container_self_tests_stall":"Temps d\'attente dépassé : les auto-tests ne parviennent pas à démarrer.","battery_container_self_tests_system_down":"Impossible d\'exécuter les auto-tests pendant que le système est arrêté. Démarrez le système et essayez à nouveau.","battery_container_self_tests_updating":"Impossible d\'exécuter les auto-tests pendant la mise à jour des batteries. Essayez à nouveau une fois la mise à jour terminée.","battery_container_serial_number":"NS : {sn}","battery_container_solar_powerwall":"{index} Powerwall solaire","battery_container_starc":"Convertisseur CC-CC (STARC) {index}","battery_container_stitch":"Alimentation CC-CC (STITCH)","battery_container_synchronizer":"Régulateur du contacteur","battery_container_unknown":"Contrôleur de bus inconnu {index}","battery_container_update_failed":"Échec de la mise à jour. Essayez à nouveau et assurez-vous que le câblage et les commutateurs d\'activation ne sont pas interrompus pendant la procédure de mise à jour.","battery_container_update_firmware":"METTRE À JOUR LE MICROPROGRAMME","battery_container_update_in_progress":"MISE À JOUR EN COURS...","battery_container_waiting_to_report_firmware":"En attente de l\'envoi du rapport sur la version du microprogramme par l\'unité.","battery_container_warnings":"Avertissements","button_label_generate":"GÉNÉRER","can_reboot_message_backup":"Mode Secours","can_reboot_message_block_update":"Mise à jour du bloc en cours","can_reboot_message_enumeration":"Énumération en cours","can_reboot_message_initializing":"Système en cours d\'initialisation","can_reboot_message_power_flow_is_too_high":"La vitesse des pulsations est trop élevée","can_reboot_message_updating":"Mise à jour du Pack site en cours","caution":"ATTENTION","charger_settings_cabinet":"Armoire {sn} {state}","charger_settings_cabinet_posts_warning":"Ces contrôles arrêtent uniquement l’activation de la borne et le bus HT interne des armoires. Vous devez quand même isoler l’alimentation et suivre la procédure de sécurité complète lors de l’accès aux armoires.","charger_settings_common_bus":"Bus commun {state}","charger_settings_common_bus_warning":"Arrête le bus HT commun uniquement. Vous devez quand même isoler l’alimentation et suivre la procédure de sécurité complète lors de l’accès aux armoires.","charger_settings_disabled":"désactivé","charger_settings_enabled":"activé","charger_settings_post":"Borne {id} {state}","charger_settings_saving":"enregistrement {spinner}","client_protocols_container_subtitle":"Activez ou désactivez les protocoles clients.","client_protocols_container_title":"Protocoles clients","client_protocols_menu_title":"Protocoles clients","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"API REST","client_protocols_view_modbus_label":"Modbus TCP/IP ","compliance_container_label_fcc_id":"Numéro FCC : {fccId}","compliance_container_label_ic_id":"IC : {icId}","compliance_container_label_manufacturer":"Fabricant : {manufacturer}","compliance_container_label_model":"Modèle : {model}","compliance_container_title":"Conformité","component-menu-title":"Composants","conductor_limit":"Les batteries sont contrôlées pour éviter un dépassement des limites de courant configurées sur chaque phase des TC du conducteur. Revoyez la note d\'application sur la limite du conducteur pour obtenir plus de détails sur l\'endroit où cela est utilisé et savoir quelles limites devraient être configurées.","conductor_min_current":"Limite d\'exportation de conducteur","control_container_add_on":"MODULE COMPLÉMENTAIRE","control_container_always_active":"TOUJOURS ACTIF","control_container_battery_ok":"EXPORTATION COMPLÈTE DE LA BATTERIE AUTORISÉE","control_container_charge_power_target":"CIBLE DE PUISSANCE DE CHARGE","control_container_conductor_max_current":"Limite d\'importation de conducteur","control_container_conductor_min_current_max_bound":"{mode} a une valeur maximale de 200 A","control_container_conductor_min_current_min_bound":"{mode} a une valeur minimale de 5 A","control_container_control_subtitle":"Sous-titre du contrôle","control_container_control_title":"Titre de la commande","control_container_direct":"DIRECT","control_container_disable":"Désactiver","control_container_discharge_power_target":"CIBLE DE PUISSANCE DE DÉCHARGE","control_container_enabled":"ACTIVÉ","control_container_energy_target":"CIBLE D\'ÉNERGIE. Cette valeur doit correspondre à la taille du système telle qu\'elle est indiquée par les documents de conception et le rapport de l\'inspecteur.","control_container_error_message":"{mode} est requis","control_container_explanation_bullet_five_max_site_meter_power_kw":"Lorsque la charge nette est supérieure à cette limite, les batteries se déchargeront de la meilleure façon possible pour éviter de surpasser cette limite.","control_container_explanation_bullet_five_min_site_meter_power_kw":"Lorsque la génération nette est supérieure à cette limite, les batteries se déchargeront de la meilleure façon possible pour éviter de surpasser cette limite.","control_container_explanation_bullet_four_max_site_meter_power_kw":"Lorsque la charge nette est inférieure à cette limite, les batteries seront limitées à leur puissance de charge autorisée.","control_container_explanation_bullet_four_min_site_meter_power_kw":"Lorsque la génération nette est inférieure à cette limite, les batteries seront limitées à leur puissance de décharge autorisée.","control_container_explanation_bullet_one_max_site_meter_power_kw":"Limite d\'importation du site est un paramètre facultatif. Laissez ce champ vide pour désactiver les limites.","control_container_explanation_bullet_one_min_site_meter_power_kw":"Limite d\'exportation du site est un paramètre facultatif. Laissez ce champ vide pour désactiver les limites.","control_container_explanation_bullet_three_max_site_meter_power_kw":"Il s\'agit d\'une limite agrégée de toutes les phases sur tous les compteurs de site. (Remarque : lorsque des compteurs de charge sont utilisés, le compteur du site est calculé à l\'aide de Charge, Solaire et Batterie).","control_container_explanation_bullet_three_min_site_meter_power_kw":"Il s\'agit d\'une limite agrégée de toutes les phases sur tous les compteurs de site. (Remarque : lorsque des compteurs de charge sont utilisés, le compteur du site est calculé à l\'aide de Charge, Solaire et Batterie).","control_container_explanation_bullet_two_max_site_meter_power_kw":"Lorsque cette option est activée, le maître de site contrôle la puissance maximale qu\'il est permis d\'importer du réseau vers le site.","control_container_explanation_bullet_two_min_site_meter_power_kw":"Lorsque cette option est activée, le maître de site contrôle la puissance maximale qu\'il est permis d\'exporter du site vers le réseau.","control_container_explanation_export_restrictions_locked":"Détermine comment le système peut exporter de l\'alimentation vers le réseau. Une fois définie, la réglementation impose qu\'elle ne puisse être modifiée qu\'en contactant Tesla.","control_container_explanation_export_restrictions_unlocked":"La réglementation impose que les caractéristiques d\'exportation ne puissent être définies que durant la mise en service initiale. Pour modifier, veuillez contacter Tesla.","control_container_explanation_nominal_system":"Cette valeur doit correspondre à la taille du système telle qu\'elle est indiquée par les documents de conception et le rapport de l\'inspecteur.","control_container_heat_for_energy":"CHALEUR POUR ÉNERGIE","control_container_heat_mode":"MODE CHALEUR","control_container_heco_committed_capacity":"Capacité affectée","control_container_heco_committed_discharge_power_W_max_bound":"{mode} a une valeur maximale de 100 000 W (100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode} a une valeur minimale de 100 W","control_container_loading":"Chargement","control_container_max_site_meter_power_W_max_bound":"{mode} a une valeur maximale de 50 000 W (50 kW)","control_container_max_site_meter_power_W_min_bound":"{mode} a une valeur minimale de 1000 W (1 kW)","control_container_max_site_meter_power_kW_positive":"{mode} doit être supérieur ou égal à 0","control_container_max_site_meter_power_kw":"Limite d\'importation de site","control_container_max_site_meter_power_w":"Limite d\'importation de site","control_container_menu":"Menu","control_container_min_site_meter_power_kW_positive":"{mode} doit être supérieur ou égal à 0","control_container_min_site_meter_power_kw":"Limite d\'exportation de site","control_container_min_site_meter_power_w":"Limite d\'exportation de site","control_container_minimum_charge_power":"PUISSANCE DE CHARGE MINIMALE","control_container_minimum_discharge_power":"PUISSANCE DE DÉCHARGE MINIMALE","control_container_misc":"DIVERS","control_container_net_meter_mode":"Restrictions sur l\'exportation du site","control_container_never":"PAS D\'EXPORTATION DEPUIS LE SITE","control_container_nominal_system_energy_kW_positive":"{mode} doit être supérieur ou égal à 0","control_container_nominal_system_energy_kWh_positive":"{mode} doit être supérieur ou égal à 0","control_container_nominal_system_energy_kwh":"Énergie nominale du système","control_container_nominal_system_energy_max_error":"L\'énergie nominale du système excède la limite d\'énergie maximale","control_container_nominal_system_power_kw":"Puissance nominale du système","control_container_nominal_system_power_max_error":"La puissance nominale du système excède la limite d\'énergie maximale","control_container_number_error_message":"{mode} doit être une entrée numérique","control_container_power":"PUISSANCE","control_container_pv_only":"RELEVÉ D\'EXPORTATION JUSQU\'AU COMPTEUR PV OK","control_container_reactive_mode":"MODE RÉACTIF","control_container_real_mode":"MODE RÉEL","control_container_reset":"Réinitialiser","control_container_site_control":"CONTRÔLE DE SITE","control_container_site_limits":"LIMITES DE SITE","control_container_site_max_power":"PUISSANCE MAX. DU SITE","control_container_site_min_power":"PUISSANCE MIN. DU SITE","control_container_submit":"Envoyer","control_container_submitting_control":"Envoi de la commande","control_start":"DÉMARRER","control_stop":"FIN","current_password_placeholder_text":"Saisissez votre mot de passe actuel","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"Ampère {id}","current_transformer_item_view_battery_ct":"Batterie","current_transformer_item_view_calculated_reading":"Calculé(e) :","current_transformer_item_view_conductor_ct":"Conducteur","current_transformer_item_view_ct_voltage_pairing_1":"Phase L1","current_transformer_item_view_ct_voltage_pairing_2":"Phase L2","current_transformer_item_view_ct_voltage_pairing_3":"Phase L3","current_transformer_item_view_ct_voltage_pairing_default":"Phase par défaut","current_transformer_item_view_doubled_solar_ct":"Solaire (1TC x2)","current_transformer_item_view_flip":"Inverser","current_transformer_item_view_generator_ct":"Générateur","current_transformer_item_view_load_ct":"Charger","current_transformer_item_view_measure_pw_plus_input":"Mesure d’un onduleur Powerwall+","current_transformer_item_view_measured_reading":"Par TC :","current_transformer_item_view_missing_ct":"Manquant","current_transformer_item_view_no_reading":"Aucune lecture","current_transformer_item_view_none_ct":"Absent","current_transformer_item_view_phase_sequence_dropdown_title":"Phase","current_transformer_item_view_site_ct":"Site","current_transformer_item_view_smart_ct":"Intelligent","current_transformer_item_view_solar_ct":"Solaire","current_transformer_item_view_solar_rgm_ct":"Revenu solaire uniquement","current_transformers_container_800a_ct_ensure":"Assurez-vous que le choix du TC sur cette page correspond à ce qui est installé.","current_transformers_container_800a_ct_larger":"Les TC de 800 A ont une taille physique supérieure à celle des TC de 200/264 A.","current_transformers_container_800a_ct_use_case":"Lors du comptage des grands conducteurs ou panneaux (comme ceux de 400 A/800 A), utilisez et configurez des TC de 800 A.","current_transformers_container_amps_explanation":"Intensité traversant le transformateur de courant","current_transformers_container_check_phase_doubled_solar_ct_bullet":"Assurez-vous que le TC est installé sur la phase correcte ({sequence}).","current_transformers_container_configure_subtitle":"Configurez les transformateurs de courant du compteur.","current_transformers_container_ct_flipping_ensure_direction":"Assurez-vous d\'abord que l\'étiquette de TC est tournée vers l\'onduleur solaire (pour TC solaire) ou vers l\'alimentation réseau (pour TC de site). Vérifiez ensuite le câblage de la phase, puis vérifiez les relevés de courant, de puissance et de facteur de puissance rapportés.","current_transformers_container_ct_flipping_modal_title":"Inversion de TC dans le logiciel","current_transformers_container_ct_flipping_software_incorrect_metering":"Si vous utilisez le logiciel pour inverser un TC installé sur la mauvaise phase, vous obtiendrez un comptage incorrect.","current_transformers_container_ct_flipping_wrong_phase":"Un relevé de puissance négatif peut indiquer que le TC est installé à l\'envers ou sur la mauvaise phase.","current_transformers_container_double_check_recommendation":"Revérifiez le câblage, les prises de tension, les TC et la configuration du compteur avant de continuer.","current_transformers_container_doubled_solar_ct_explanation":"Un seul TC peut être utilisé pour compter un onduleur PV équilibré","current_transformers_container_doubled_solar_ct_modal_title":"Comptage d\'un onduleur solaire à phase auxiliaire avec un TC","current_transformers_container_grid_code_phase_modal_title":"Avertissement : le nombre de TC ne correspond pas à la phase du code de réseau recommandée","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"Avertissement : le nombre de TC ne correspond pas à la phase du code de réseau recommandée pour plusieurs compteurs","current_transformers_container_grid_code_phase_multiple_warnings_message":"Un nombre de TC imprévu est relié aux {numMeters} compteurs suivants :","current_transformers_container_grid_code_phase_warning_message":"Un nombre de TC imprévu est relié au compteur suivant :","current_transformers_container_grid_code_single_phase_warning":"Le code de réseau appliqué est monophasé. Les systèmes monophasés ont généralement un service monophasé ou triphasé. {lb} Un nombre impair de TC (1 ou 3) est recommandé.","current_transformers_container_grid_code_split_phase_warning":"Le code de réseau appliqué est phase auxiliaire. Les systèmes à phase auxiliaire disposent généralement d\'un TC sur chaque conducteur \\"chaud\\". {lb} Un nombre pair de TC (2 ou 4) est recommandé.","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"Un compteur Neurio mesurant les onduleurs solaires Powerwall+ est nécessaire pour activer le compteur de niveau de revenus (RGM).","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Sélectionnez Oui si la mesure concerne un onduleur solaire Powerwall+. Sélectionnez Non si la mesure concerne un onduleur solaire ne faisant pas partie d’un ensemble Powerwall+.","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"La mesure concerne-t-elle un onduleur Powerwall+ ?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"Assurez-vous que l\'étiquette sur les côtés du TC est tournée vers l\'onduleur solaire.","current_transformers_container_label_modal_title":"Explication des étiquettes","current_transformers_container_load_ct_ensure":"Lors de la configuration des TC de charge, assurez-vous que toutes les charges sur site sont comptées et que les charges avec sauvegarde et celles sans sauvegarde sont comptées séparément.","current_transformers_container_load_ct_modal_title":"TC de charge","current_transformers_container_load_ct_recommended":"Il est recommandé de configurer des TC de charge uniquement pour des utilisations spécifiques pour lesquelles il n\'est pas possible de configurer un TC de site.","current_transformers_container_meter_id":"Compteur {id}","current_transformers_container_no_load_and_site_ct":"Il ne peut pas y avoir à la fois un TC de charge et un TC de site.","current_transformers_container_no_loads_doubled_solar_ct_bullet":"Il ne peut pas y avoir de charges derrière le TC.","current_transformers_container_no_site_or_load_warning":"AUCUN TRANSFORMATEUR DE COURANT DE CHARGE OU DE SITE CONFIGURÉ","current_transformers_container_no_solar_ct_warning":"AUCUN TRANSFORMATEUR DE COURANT SOLAIRE CONFIGURÉ","current_transformers_container_no_solar_inverter_warning":"AUCUN ONDULEUR SOLAIRE CONFIGURÉ","current_transformers_container_phase_usages_modal_title":"Avertissement : la configuration du TC ne correspond pas à la configuration de la phase","current_transformers_container_phase_usages_warning":"Le nombre de phases configurées ne correspond pas au nombre de TC configurés. {lb} {num} TC configuré(s) est/sont recommandé(s).","current_transformers_container_phase_usages_warning_message":"Un nombre de TC imprévu est relié au(x) compteur(s) suivant(s) :","current_transformers_container_power_amperage_configure_warning":"Le TC {type} nécessite une alimentation et un ampérage positifs pour être configuré correctement.","current_transformers_container_power_factor_explanation":"Facteur de puissance (Puissance_réelle / Puissance_apparente). Ne s\'affiche que pour les niveaux de puissance élevés. Pour les charges résistives courantes, le facteur de puissance doit être proche de 1. Un facteur de puissance faible peut indiquer que le transformateur de courant n\'est pas installé correctement ou qu\'il existe des charges capacitives/inductives très importantes.","current_transformers_container_power_factor_out_of_range_warning":"La mesure de facteur de puissance relevée est en dehors de la plage prévue. {lb} Facteur de puissance mesuré : FP {powerFactor} {lb} Le compteur est peut être mal installé, ou son phasage est incorrect, ou les charges capacitives ou inductives sont très importantes.","current_transformers_container_system_test_configured_incorrect":"Avertissement : le TC {id} est peut-être configuré de manière incorrecte","current_transformers_container_title":"Transformateurs de courant","current_transformers_container_voltage_out_of_range_warning":"Tension hors plage. {lb} Tension mesurée : {volts} V {lb} La tension mesurée sur ce TC est en dehors de la plage de fonctionnement normale.","current_transformers_container_volts_explanation":"Tension d\'une ligne à neutre sur la prise de tension associée au transformateur de courant","current_transformers_container_watts_explanation":"Puissance, c\'est-à-dire l\'intensité passant par le transformateur de courant multipliée par la tension sur la prise de tension associée","customer_installation_view_email_label":"ADRESSE E-MAIL DU CLIENT","customer_installation_view_email_placeholder":"E-mail","customer_registration_view_address_label":"ADRESSE","customer_registration_view_address_placeholder":"Adresse","customer_registration_view_city_label":"VILLE","customer_registration_view_city_placeholder":"Ville","customer_registration_view_clear_form":"EFFACER LE FORMULAIRE","customer_registration_view_country_label":"Pays","customer_registration_view_customer_information":"INFORMATIONS SUR LE CLIENT","customer_registration_view_email_address_label":"ADRESSE E-MAIL","customer_registration_view_email_address_label_confirmation":"SAISISSEZ À NOUVEAU L\'ADRESSE E-MAIL","customer_registration_view_email_placeholder":"E-mail","customer_registration_view_family_name_label":"NOM DE FAMILLE (NOM)","customer_registration_view_family_name_warning":"Saisissez le nom du client.","customer_registration_view_given_name_label":"PRÉNOM","customer_registration_view_given_name_warning":"Saisissez le prénom du client.","customer_registration_view_homeowner_family_name_placeholder":"Nom","customer_registration_view_homeowner_given_name_placeholder":"Prénom","customer_registration_view_installation_address":"ADRESSE DE L’INSTALLATION","customer_registration_view_phone_number_label":"TÉLÉPHONE","customer_registration_view_phone_placeholder":"Téléphone","customer_registration_view_skip_explanation":"Si cette étape est ignorée, le propriétaire devra effectuer lui-même l’enregistrement par le biais de l’application mobile Tesla avant d’avoir accès au système.","customer_registration_view_state_placeholder":"État","customer_registration_view_state_province_region_label":"ÉTAT / PROVINCE / RÉGION","customer_registration_view_zip_label":"CODE POSTAL","customer_registration_view_zip_placeholder":"Code postal","diagnostic-alert-affected-children":"Composants concernés ({count})","diagnostic-alerts-missing-alert-information":"Informations sur l\'alerte manquante","diagnostic-alerts-missing-data":"","diagnostic-alerts-toolbox-article":"Article de la boîte à outils","diagnostic-alerts-toolbox-article-external-link":"Liens externes","diagnostic_alert_alert_name":"Nom de l\'alerte","diagnostic_alert_alert_type":"Type d\'alerte","diagnostic_alert_audience":"Public","diagnostic_alert_clear_condition":"Effacer la condition","diagnostic_alert_description":"Description","diagnostic_alert_display_name":"Nom d\'affichage","diagnostic_alert_id":"ID d\'alerte","diagnostic_alert_impact_category":"Catégorie d\'impact","diagnostic_alert_latching":"Verrouillage","diagnostic_alert_max":"Max","diagnostic_alert_min":"Min","diagnostic_alert_name":"Nom","diagnostic_alert_node":"Nœud","diagnostic_alert_offset":"Écart","diagnostic_alert_payload_signals":"Signaux de charge utile","diagnostic_alert_potential_impact":"Impact potentiel","diagnostic_alert_safety_reason":"Motif de sécurité","diagnostic_alert_scale":"Échelle","diagnostic_alert_set_condition":"Définir la condition","diagnostic_alert_signal_name":"Nom du signal","diagnostic_alert_signoff":"Signer pour valider","diagnostic_alert_sna_value":"Valeur SNA","diagnostic_alert_supplier_dtc_name":"Nom du code d\'anomalie du fournisseur","diagnostic_alert_uiID":"ID d\'IU","diagnostic_alert_units":"Unités","diagnostic_alert_urgent":"Urgent","diagnostic_category_item_view_alerts_description":"Alertes de site, composant et sous-composant","diagnostic_category_item_view_download_results":"TÉLÉCHARGER LES RÉSULTATS","diagnostic_category_item_view_internal_comms_description":"Vérifier toutes les communications de l\'appareil","diagnostic_category_item_view_internal_comms_title":"Communications de l\'appareil","diagnostic_category_item_view_live_results":"RÉSULTATS EN DIRECT","diagnostic_category_item_view_metering_description":"Vérifier les connexions du compteur","diagnostic_category_item_view_metering_title":"Comptage","diagnostic_category_item_view_networking_description":"Vérifier la connexion réseau","diagnostic_category_item_view_networking_title":"Mise en réseau","diagnostic_category_item_view_no_selected_tests":"PAS DE TESTS SÉLECTIONNÉS","diagnostic_category_item_view_rerun_selected":"RÉEXÉCUTER {num} TESTS SÉLECTIONNÉS","diagnostic_category_item_view_rerun_selected_test":"RÉEXÉCUTER LES TESTS SÉLECTIONNÉS","diagnostic_category_item_view_run_selected":"EXÉCUTER {num} TESTS SÉLECTIONNÉS","diagnostic_category_item_view_run_selected_test":"EXÉCUTER LES TESTS SÉLECTIONNÉS","diagnostic_category_item_view_select_all_tests":"Sélectionner tout","diagnostic_category_item_view_self_tests_description":"Lancer les tests de charge et de décharge sur le système","diagnostic_category_item_view_self_tests_title":"Auto-tests","diagnostic_category_item_view_toggle_all_tests":"Tout permuter","diagnostic_input_view_blocks_label":"BLOCS","diagnostic_input_view_individual_test_name_label":"NOM DU TEST INDIVIDUEL","diagnostic_input_view_max_allowed_charge_power_label":"PUISSANCE DE CHARGE MAX. AUTORISÉE","diagnostic_input_view_max_allowed_discharge_power_label":"PUISSANCE DE DÉCHARGE MAX. AUTORISÉE","diagnostic_test_enable_line":"Ligne d\'activation","diagnostic_test_item_view_ac_self_test_description":"Auto-test d\'alimentation CA","diagnostic_test_item_view_ac_self_test_description_2":"Exécute une séquence de tests de fluctuation de puissance sur le système CA. Les systèmes Powerpack utiliseront les paramètres « PUISSANCE_MAX_AUTORISÉE ». Définissez-les sur 0 pour les systèmes Megapack et Supercharger.","diagnostic_test_item_view_dc_self_test_description":"Auto-test d\'alimentation CC","diagnostic_test_item_view_dc_self_test_description_2":"Exécute une séquence de tests sur le système CC, y compris des vérifications thermiques.","diagnostic_test_item_view_enable_line_description":"Tester la ligne d\'activation haute pour tous les Powerwalls","diagnostic_test_item_view_enable_line_resolution":"Faire basculer la ligne d\'activation et réessayer","diagnostic_test_item_view_individual_self_test_description":"Sélectionnez une option parmi une liste d’auto-tests disponibles sur les contrôleurs de bus configurés.","diagnostic_test_item_view_meter_comms_description":"Envoyer une commande Ping aux communications du compteur","diagnostic_test_item_view_network_connection_description":"Tester la connexion à Internet et aux serveurs Tesla","diagnostic_test_item_view_network_connection_resolution":"Reconfigurer la mise en réseau","diagnostic_test_item_view_resolution_generic_text":"Reconfigurer {name} et réessayer","diagnostic_test_item_view_step_canceled":"Le test a été annulé par l\'utilisateur","diagnostic_test_item_view_step_config_update_status":"Vérifier le statut du serveur de configuration Tesla","diagnostic_test_item_view_step_google_http":"Envoyer une commande Ping au HTTP Google","diagnostic_test_item_view_step_google_https":"Envoyer une commande Ping au HTTPS Google","diagnostic_test_item_view_step_hermes_status":"Vérifier le statut du serveur de journalisation Tesla","diagnostic_test_item_view_step_results_ip_address":"Adresse IP","diagnostic_test_item_view_step_results_subnet_mask":"Sous-réseau","diagnostic_test_item_view_table_header_key":"Identifiant","diagnostic_test_item_view_table_header_name":"Étape","diagnostic_test_item_view_table_header_value":"Valeur","diagnostic_test_meter_comms":"Communications du compteur","diagnostic_test_network_connection":"Connexion au réseau","diagnostics_composite_view_no_tests_found":"PAS DE TESTS DISPONIBLES TROUVÉS","diagnostics_composite_view_run_all_selected_tests":"EXÉCUTER TOUS LES TESTS SÉLECTIONNÉS","diagnostics_container_industrial_disruptive_tests_description":"Les tests suivants déclencheront le fonctionnement des systèmes de ventilation et de chauffage, ce qui provoquera du bruit. Il faut s\'attendre à une consommation d\'environ 30 kW par onduleur. En outre, les tests suivants peuvent perturber le fonctionnement normal du système :","diagnostics_container_required_inputs_description":"Les tests suivants requièrent des entrées supplémentaires :","diagnostics_container_residential_disruptive_tests_description":"Les tests suivants peuvent perturber le fonctionnement normal de la passerelle et du Powerwall :","diagnostics_container_stop_test_title":"Arrêter le test {name} ?","diagnostics_container_subtitle":"Outils pour diagnostiquer les problèmes affectant l\'installation du système.","diagnostics_container_tests_running":"Tests diagnostiques en cours d\'exécution","diagnostics_container_title":"Diagnostics","disabled_reason_battery_breaker_open":"Le disjoncteur de batterie est ouvert","disabled_reason_checking_firmware_update":"Vérification de la mise à jour du microprogramme","disabled_reason_config":"Désactivé par le fichier de configuration","disabled_reason_excessive_voltage_drop":"Chute de tension excessive","disabled_reason_firmware_update_failed":"Échec de la mise à jour du microprogramme","disabled_reason_firmware_update_in_progress":"Mise à jour du microprogramme en cours","disabled_reason_gridcode_write_failed":"Échec de réglage du code de réseau","disabled_reason_user_requested":"Désactivé sur demande de l’utilisateur","dropdown_default_placeholder":"Tapez...","dropdown_list_view_not_listed_label":"Non répertorié : \\"{searchText}\\"","dropdown_list_view_select_all":"Sélectionner tout","dropdown_list_view_select_field":"Sélectionnez un champ.","dropdown_list_view_show_complete":"AFFICHER LA LISTE COMPLÈTE","dropdown_list_view_show_searchable":"AFFICHER LA LISTE CONSULTABLE","enumeration_warning_details_miswired_12v":"Lorsque vous connectez deux Powerwall+, seule l\'unité connectée au dispositif Gateway/commutateur de secours doit se voir appliquer une alimentation en 12 V. Supprimez l\'alimentation en 12 V de tous les Powerwall+ suivants dans la chaîne, puis relancez la recherche d\'appareils (au bas de cette page) pour effacer cet avertissement.","enumeration_warning_details_multiple_controllers_gateway":"Débranchez le faisceau d\'alimentation de tous les contrôleurs de site de Powerwall+ se trouvant dans le coin supérieur droit de l\'ensemble photovoltaïque.","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"Débranchez le faisceau d\'alimentation du contrôleur de site de Powerwall+ (non connecté au commutateur de secours) se trouvant dans le coin supérieur droit de l\'ensemble photovoltaïque.","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"Débranchez le faisceau d\'alimentation de tous les contrôleurs de site de Powerwall+ se trouvant dans le coin supérieur droit de l\'ensemble photovoltaïque. Mettez le système en service en le connectant au Backup Gateway.","enumeration_warning_details_multiple_controllers_unknown":"Dans une configuration à plusieurs Powerwall+ à connexion CAN câblée, il ne doit y avoir qu\'un contrôleur de site sous tension.","enumeration_warning_details_multiple_controllers_unknown_with_details":"Un seul contrôleur de site doit être actif. Lorsque vous utilisez le dispositif Backup Gateway, débranchez tous les contrôleurs Powerwall+. Lorsque vous utilisez un commutateur de secours, débranchez tous les contrôleurs Powerwall+ sauf un. La fonctionnalité Exécuter l’Assistant est désactivée jusqu’à ce qu’un seul contrôleur de site soit actif.","enumeration_warning_title_miswired_12v":"Erreur de câblage 12 V","enumeration_warning_title_multiple_controllers":"Plusieurs contrôleurs de sites sont actifs","error_details":"Détails de l\'erreur","error_item_view_check_network":"Vérifier la connexion réseau","error_item_view_disconnected":"Déconnecté(e) de la passerelle. Vérifier la connexion réseau et {refresh}","error_item_view_forgot_password":"Cliquez pour réinitialiser le mot de passe.","error_item_view_refresh_browser":"Actualiser le navigateur.","error_item_view_try_logging_in_again":"Essayez de vous connecter à nouveau.","ethernet_view_backup_dns_label":"SERVEUR DNS DE SAUVEGARDE","ethernet_view_backup_dns_warning":"Serveur DNS de sauvegarde valide","ethernet_view_configuration_label":"CONFIGURATION","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"GATEWAY","ethernet_view_gateway_warning":"IP de passerelle (routeur) valide","ethernet_view_ip_address_label":"ADRESSE IP","ethernet_view_ip_address_warning":"Adresse IP valide","ethernet_view_not_available":"Non disponible","ethernet_view_primary_dns_label":"SERVEUR DNS PRINCIPAL","ethernet_view_primary_dns_warning":"Serveur DNS principal valide","ethernet_view_static_label":"Statique","ethernet_view_subnet_mask_label":"MASQUE DE SOUS-RÉSEAU","ethernet_view_subnet_mask_warning":"Masque de sous-réseau valide","factory_reset_message":"Cela provoquera la réinitialisation de l’unité à l’état par défaut fourni par Tesla. Cette action est irréversible. L\'unité devra être remise en service par un installateur professionnel avant de pouvoir fonctionner. Vous devrez peut-être rétablir la connexion au réseau Wi-Fi de l\'unité.","field_false":"Faux","field_true":"Vrai","follower_powerwall_message":"Ce Powerwall est contrôlé par {leader}","follower_powerwall_title":"Powerwall suiveur","form_legend_text":"signale un champ obligatoire","generation_container_connecting_status":"Connexion de","generation_container_connection":"Connexion de l\'onduleur {id}","generation_container_connection_summary":"Pendant ce processus de connexion, il se peut que vous soyez temporairement déconnecté du réseau. {lb} Assurez-vous de vous reconnecter au bon réseau. Ceci peut prendre jusqu\'à 3 minutes.","generation_container_subtitle":"Ajoutez les informations de l’onduleur solaire et du générateur ci-dessous.","generation_container_title":"Génération","generator_item_view_disconnect_type_label":"TYPE DE DISJONCTEUR","generator_item_view_generator":"GÉNÉRATEUR {id}","generator_item_view_manufacturer_label":"FABRICANT (OPT)","generator_item_view_model_label":"MODÈLE","generator_item_view_serial_label":"SÉRIE","generator_item_view_sustained_power_label":"ALIMENTATION CONSTANTE","generator_view_add_generator":"AJOUTER UN GÉNÉRATEUR","grid_code_container_off_grid_confirmation":"Le système est-il déconnecté du réseau électrique?","grid_code_container_off_grid_detected":"Système hors réseau détecté. Vérifiez qu’il s’agit du bon paramètre.","grid_code_container_off_grid_warning":"{warning} : Impossible de détecter l’état hors réseau du système. Un mauvais paramétrage de l\'état hors réseau peut entraîner la défaillance du système.","grid_code_container_results":"Résultats de détection de réseau","grid_code_container_retrieving":"Récupération des codes de réseau","grid_code_container_saving":"Enregistrement du code réseau","grid_code_container_subtitle":"Trouvez les meilleurs paramètres pour votre installation par géolocalisation et en fonction des relevés de compteurs.","grid_services_view_grid_services":"Services au réseau","heading_change_password":"Modifier le mot de passe","help_view_how_password":"Recherche du mot de passe sur une passerelle","help_view_how_password_description":"Ouvrez la porte sur la passerelle. Le mot de passe se trouve sur l\'autocollant après \\"Password:\\"","help_view_how_serial_number":"Trouver le numéro de série sur une passerelle (hors passerelle de secours)","help_view_how_serial_number_backup":"Trouver le numéro de série sur une passerelle de secours","help_view_how_serial_number_backup_description":"Ouvrez la porte sur la passerelle de secours. Le numéro de série commence par \\"(S):\\"","help_view_how_serial_number_description":"Ouvrez la porte sur la passerelle. Le numéro de série commence par \\"(S):\\"","help_view_how_to_enable_line":"Activation/désactivation d\'un Powerwall","help_view_how_to_enable_line_description":"Désactivez le Powerwall avec le commutateur puis remettez-le en marche. Pour les systèmes comprenant plusieurs Powerwall, vous ne devez basculer qu\'un seul commutateur","hierarchy_charger":"Bloc chargeur {name}","hierarchy_chinv":"VFD pour compresseur et chauffage (CHINV)","hierarchy_converter":"Convertisseur CC-CC (STARC)","hierarchy_inverter":"Bloc batterie {name}","hierarchy_mega_thermal_controller":"Contrôleur thermique (MPTHC)","hierarchy_missing_post":"Borne manquante","hierarchy_mpbc":"Bloc batterie {name}","hierarchy_part_number":"Référence","hierarchy_pod":"Pod","hierarchy_pods_reporting":"Rapports des pods","hierarchy_post":"Borne (LCC)","hierarchy_posts":"Bornes","hierarchy_power_stage":"Étage de puissance","hierarchy_power_stages":"Étages de puissance","hierarchy_powerpack":"Powerpack {name}","hierarchy_qbms":"Carte de gestion de la batterie (QBMS)","hierarchy_qhvp":"Processeur haute tension (QHVP)","hierarchy_scthcs":"Contrôleurs thermiques","hierarchy_serial_number":"Numéro de série","hierarchy_sitemaster":"Maître de site {name}","hierarchy_starcs":"Convertisseurs CC-CC","hierarchy_stitch":"Alimentation CC-CC (STITCH)","hierarchy_thermal_controller":"Contrôleur thermique (SCTHC)","higher_order_login_login_required":"Identifiant requis","higher_order_login_title":"Commençons.\\n","home_container_caution":"⚠️ Mise en garde","home_container_caution_deenergize":"Pour désactiver le système en toute sécurité, mettez tous les commutateurs du Powerwall hors tension.","home_container_caution_energized":"Le système peut demeurer sous tension si des guirlandes solaires sont connectées.","home_container_inactive_meter":"Données de compteur obsolètes","home_container_inactive_meter_description":"Vérifiez la connexion {type} au compteur.","home_container_inactive_meter_timestamp":"Dernier relevé de compteur à {timestamp}","home_container_login_required":"Identifiant requis","home_container_missing_meter":"Le compteur est absent","home_container_positive_meter":"Avertissement : le compteur {type} est peut-être mal configuré","home_container_positive_meter_description":"Le compteur {type} nécessite une alimentation et un ampérage positifs pour être configuré correctement.","home_container_powerwall_error":"Erreur système du Powerwall","home_container_powerwall_start_error":"Impossible de démarrer le système : {reason}","home_container_site_controller_error":"Erreur du système de contrôleur de site","home_container_sitemaster_alternative":"Note: Le système ne doit être désactivé que lorsque les interrupteurs et les disjoncteurs de chaque Powerwall sont ouverts.","home_container_sitemaster_confirm":"Cliquez sur Oui ci-dessous uniquement si vous êtes sûr de vouloir arrêter le système.","home_container_sitemaster_confirm_industrial":"Voulez-vous vraiment arrêter le système ?","home_container_sitemaster_confirm_wizard":"Arrêter le système pour exécuter l’assistant. Continuez et arrêtez le système ?","home_container_sitemaster_header_warning":"{warning} Cette action va interrompre le fonctionnement du Powerwall.","home_container_sitemaster_header_warning_industrial":"{warning} Vu l\'état dans lequel se trouve le système, Tesla ne recommande pas qu\'il soit arrêté. Raison: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning} Vu l\'état dans lequel se trouve le système, Tesla ne recommande pas qu\'il soit arrêté. Raison: \\"{reason}\\"","home_container_sitemaster_logging":"La désactivation du système va interrompre le protocole d\'enregistrement.","home_container_sitemaster_reset":"Après un arrêt du système, pour redémarrer le système, cliquez sur le bouton Démarrer sur la page d’accueil.","home_container_sitemaster_update":"Si une mise à jour est en cours, elle va être abandonnée.","home_container_start_powerwall":"Démarrer le système","home_container_start_system_button":"DÉMARRER LE SYSTÈME","home_container_stop_powerwall":"Arrêter le système","home_container_stop_system_button":"ARRÊTER LE SYSTÈME","home_view_compliance":"CONFORMITÉ","home_view_download_all_logs":"Télécharger tous les journaux","home_view_download_logs":"TÉLÉCHARGER LES JOURNAUX","home_view_download_logs_description_one":"Cette opération lance le téléchargement d\'un ensemble compressé de journaux système pouvant être utiles pour effectuer un diagnostic des erreurs affectant le système d\'exploitation, le logiciel et la mise en réseau.","home_view_download_logs_description_three":"Les journaux sont signés et chiffrés ; ils doivent être envoyés au service Énergie de Tesla à des fins d\'enquête.","home_view_download_logs_description_two":"Cela est particulièrement utile lorsque la passerelle ne peut pas être connectée au réseau et qu\'un dépannage avancé est requis.","home_view_login":"CONNEXION","home_view_logout":"DÉCONNEXION","home_view_run_wizard":"EXÉCUTER L’ASSISTANT","input_accept":"J\'accepte","input_confirm":"J\'accuse réception de tous les avertissements du système.","input_consent":"J\'accepte","input_decline":"Je refuse","input_no_consent":"Je refuse","input_title_email":"Saisissez une adresse e-mail valide : name@name.domain","installation_container_relay_section_modal_title":"Relais de basse tension de la passerelle","installation_container_residual_current_device_modal_title":"Exigence d\'installation des RCD du site","installation_container_subtitle":"Informations relatives à l’installateur et au site","installation_container_sync_relay_usage_open_off_grid":"Ouvrir le relais en situation Hors réseau","installation_container_title":"Informations sur l\'installation","installation_problem_detail_site_shutdown_0":"Pour réactiver le système :","installation_problem_detail_site_shutdown_1":"Placez tous les interrupteurs du Powerwall+ en position Marche.","installation_problem_detail_site_shutdown_2":"Fermer les arrêts d’urgence","installation_problem_detail_site_shutdown_3":"S\'assurer que les cavaliers d’arrêt rapide sont correctement installés","installation_problem_detail_site_shutdown_4":"Vérifiez le câblage du circuit d’arrêt.","installation_problem_detail_title_site_shutdown":"Circuit d’arrêt du site déclenché","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Circuit d’arrêt du site déclenché par un arrêt rapide du Powerwall+.","installation_problem_details_pvacs_with_no_solar_rgm":"Les compteurs solaires ne sont nécessaires que pour mesurer les onduleurs solaires qui ne font pas partie d’un ensemble Powerwall+. Les compteurs qui mesurent un onduleur Powerwall+ doivent être marqués comme tels sur la page Transformateurs de courant.","installation_problem_details_too_few_solar_rgm":"Le nombre de TC mesurant un onduleur solaire Powerwall+ doit correspondre au nombre d’onduleurs solaires Powerwall+. Exécutez l’assistant, jumelez le compteur Neurio si nécessaire et ajustez la configuration du TC sur la page Transformateurs de courant.","installation_problem_details_too_many_solar_rgm":"Le nombre de TC mesurant un onduleur solaire Powerwall+ doit correspondre au nombre d’onduleurs solaires Powerwall+. Exécutez l’assistant et ajustez la configuration du TC sur la page Transformateurs de courant.","installation_problem_title_pvacs_with_no_solar_rgm":"Le compteur solaire ne mesure pas l’onduleur Powerwall+. Est-ce correct ?","installation_problem_title_site_shutdown":"Circuit d’arrêt du site déclenché. Tous les Powerwalls et onduleurs solaires Powerwall+ sont désactivés.","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Circuit d’arrêt du site déclenché par un arrêt rapide du Powerwall+. Tous les Powerwalls et onduleurs solaires Powerwall+ sont désactivés.","installation_problem_title_too_few_solar_rgm":"Pas assez de compteurs solaires mesurant l’onduleur Powerwall+","installation_problem_title_too_many_solar_rgm":"Trop de compteurs solaires mesurant l’onduleur Powerwall+","installation_view_add_on_solar":"Ajouts","installation_view_additional_connections_label":"CONNEXIONS ADDITIONNELLES","installation_view_back_wiring":"Postérieure","installation_view_backup_configuration_label":"CONFIGURATION DE LA CAPACITÉ DE SECOURS","installation_view_basement_location":"Sous-Sol","installation_view_company_label":"NOM DE L\'ENTREPRISE","installation_view_company_placeholder":"Nom de l\'entreprise","installation_view_conditioned_space_location":"Espace Confiné","installation_view_existing_solar":"Existant","installation_view_floor_mounting":"Au Sol","installation_view_garage_location":"Garage","installation_view_home_label":"CÂBLAGE DU DOMICILE","installation_view_location_label":"EMPLACEMENT DE L\'INSTALLATION DU POWERWALL","installation_view_modem_ethernet":"Modem cellulaire via Ethernet?","installation_view_modem_wifi":"Modem cellulaire via Wi-Fi?","installation_view_mounting_label":"MONTAGE DU POWERWALL","installation_view_na_backup_configuration":"N/A","installation_view_new_solar":"Nouveau","installation_view_none_solar":"Absent","installation_view_outdoor_location":"En Extérieur","installation_view_pad_mounting":"Socle","installation_view_partial_home_backup_configuration":"Maison partielle","installation_view_phone_label":"TÉLÉPHONE","installation_view_phone_placeholder":"Numéro de téléphone de l\'installateur","installation_view_powerline_ethernet":"Utilisation d\'adaptateur CPL?","installation_view_pv_panel":"Panneau PV","installation_view_relay_enabled":"Ouvrir le relais en situation Hors réseau","installation_view_relay_label":"RELAIS DE BASSE TENSION DE LA PASSERELLE","installation_view_relay_options_modal_content":"En situation Sur réseau ou en cas de connexion à une autre source de tension CA, ce relais sera fermé. {lb1} En situation Hors réseau, ce relais sera ouvert. {lb1} À titre d\'exemple, ceci peut être utilisé pour permettre à une climatisation de fonctionner en situation Sur réseau, puis de ne pas fonctionner en situation Hors réseau afin d\'empêcher le courant d\'appel élevé associé de surcharger les Powerwalls.","installation_view_relay_section_modal_content":"La passerelle dispose d\'un relais intégré qui est contrôlé afin de s\'allumer et de s\'éteindre en fonction du statut du système. {lb1} Cela peut servir à contrôler un appareil externe, comme une source de charge ou d\'énergie secondaire. {lb1} Sur la Backup Gateway 1, utilisez les broches 1 et 2 du connecteur auxiliaire (grand connecteur Phoenix vert à 9 broches). {lb1} Sur la Backup Gateway 2, utilisez les broches 3 et 4 (GSO/GSI) du connecteur auxiliaire (connecteur Phoenix vert à 5 broches). {lb1} Ce relais est adapté à 60 Volts / 2 Ampères, et il est couramment utilisé avec des circuits de 12 V ou 24 V. {lb1} Revoyez le délestage de charge et les notes d\'applications s\'y rapportant pour obtenir plus de détails.","installation_view_residual_current_device":"Le RCD est-il installé en amont de la passerelle ?","installation_view_residual_current_device_modal_content":"Des dispositifs à courant résiduel (Residual Current Device, RCD) au niveau du site peuvent être requis pour certaines installations, comme des réseaux avec configuration de mise à la terre TT. {lb1}{lb2} Pour réduire le risque d\'arrêt intempestif pendant un fonctionnement Hors réseau, Tesla recommande de s\'assurer que tous les RCD en amont sont à actionnement retardé (Type S) ou de relocaliser le RCD du site après le contacteur de la passerelle, dans la mesure du possible. {lb1}{lb2} Pour un complément d\'information, consultez la Note d\'application sur le RCD et la protection contre les défaillances.","installation_view_satellite_ethernet":"Satellitaire via Ethernet?","installation_view_satellite_wifi":"Connexion Satellitaire via Wi-Fi?","installation_view_side_wiring":"Latéral","installation_view_solar_label":"INSTALLATION PHOTOVOLTAÏQUE","installation_view_solar_panels":"Panneaux solaires","installation_view_solar_roof":"Toit solaire","installation_view_solar_type_label":"TYPE D\'INSTALLATION SOLAIRE","installation_view_solarglass":"Solarglass","installation_view_stack_kit":"Utilisation du Stack Kit?","installation_view_type_commercial":"Commercial","installation_view_type_label":"INFORMATIONS SUR L\'INSTALLATION","installation_view_type_perm_off_grid":"Hors réseau de façon permanente","installation_view_type_residential":"Résidentiel","installation_view_wall_mounting":"Au Mur","installation_view_whole_home_backup_configuration":"Maison complète","installation_view_wifi_extender":"Extension Wi-Fi?","installation_view_wiring_label":"CÂBLAGE DU POWERWALL","inverter_test_view_accuracy_magnitude":"Précision Amplitude","inverter_test_view_accuracy_time":"Précision Temps","inverter_test_view_complete":"Terminé","inverter_test_view_current_magnitude":"Amplitude de courant","inverter_test_view_fail":"Échec","inverter_test_view_na":"N/A","inverter_test_view_not_run":"Non exécuté","inverter_test_view_pass":"Succès","inverter_test_view_running":"Exécution en cours","inverter_test_view_set_magnitude":"Régler l\'amplitude","inverter_test_view_set_time":"Régler l’heure","inverter_test_view_test_description":"Exécution de l’auto-test de l’onduleur","inverter_test_view_test_name_all":"Tous les tests","inverter_test_view_test_name_over_freq_stage_one":"Sur-fréquence Phase 1","inverter_test_view_test_name_over_freq_stage_two":"Sur-fréquence Phase 2","inverter_test_view_test_name_over_volt_one":"Surtension Phase 1","inverter_test_view_test_name_over_volt_two":"Surtension Phase 2","inverter_test_view_test_name_under_freq_stage_one":"Sous-fréquence Phase 1","inverter_test_view_test_name_under_freq_stage_two":"Sous-fréquence Phase 2","inverter_test_view_test_name_under_volt_one":"Sous-tension Phase 1","inverter_test_view_test_name_under_volt_two":"Sous-tension Phase 2","inverter_test_view_timestamp":"Horodatage","inverter_test_view_trip_magnitude":"Amplitude d’amorçage","inverter_test_view_trip_time":"Temps d\'amorçage","inverter_test_view_warning":"Remarque : Le test de l’onduleur peut prendre 20 à 30 minutes par onduleur.","label_fail":"Échec","label_inconclusive":"Incertain","label_pass":"Succès","legal_container_customer_policy_subtitle":"Cette partie doit obligatoirement être remplie par le propriétaire.","legal_container_customer_policy_title":"Politique de confidentialité client Tesla et Garantie limitée","legal_container_no_meters_warning":"AUCUN COMPTEUR CONFIGURÉ","legal_container_no_powerwalls_warning":"AUCUN POWERWALL DÉTECTÉ","login_type_customer":"Client","login_type_engineer":"Ingénieur","login_type_installer":"Installateur","login_view_cancel_login_auth":"Annuler la connexion","login_view_change_forgot_password":"MODIFIER LE MOT DE PASSE OU MOT DE PASSE OUBLIÉ","login_view_compliance":"CONFORMITÉ","login_view_customer_email_placeholder":"Adresse e-mail du client","login_view_email":"ADRESSE E-MAIL","login_view_email_placeholder":"E-mail du responsable de l\'installation","login_view_forgot_password":"MOT DE PASSE OUBLIÉ","login_view_forgot_password_login_type":"Veuillez sélectionner le type de connexion","login_view_language_label":"LANGUE","login_view_login_type_label":"TYPE D\'IDENTIFIANT","login_view_password_placeholder":"Saisissez votre mot de passe","login_view_start_login_auth":"DÉMARRER LE PROCESSUS DE CONNEXION","login_view_start_login_auth_how_to_enable_line_description":"Pour vous connecter, mettez le commutateur d\'activation du Powerwall en position d\'arrêt, puis remettez-le en position de marche. Pour les systèmes comprenant plusieurs Powerwall, vous ne devez basculer qu\'un seul commutateur","login_view_username":"NOM D\'UTILISATEUR","login_view_username_placeholder":"Nom d\'utilisateur","login_warning_view_expand":"Si l’Assistant ne démarre pas {click}.","login_warning_view_firmware_update":"Lorsqu\'une mise à jour du microprogramme est en cours","login_warning_view_heading":"{warning} Le lancement de l\'assistant arrête le fonctionnement de la batterie.","login_warning_view_protect_system":"Pour protéger le système, l’Assistant ne démarre pas","login_warning_view_stop_operation":"Démarrage forcé de l\'Assistant (Force Launch Wizard)","login_warning_view_supported_browsers":"{warning} Les seuls navigateurs Web pris en charge actuellement sont Chrome et Safari.","login_warning_view_system_force_launch":"Si vous voulez démarrer l’Assistant et interrompre le fonctionnement du système, sélectionnez Démarrage forcé de l\'Assistant.","login_warning_view_system_off_grid":"Lorsque le système est déconnecté du réseau électrique","login_warning_view_warning_click":"cliquez ici pour en savoir plus","mater_item_view_bad_barcode":"Code-barres incorrect scanné","mater_item_view_barcode_scan_failed":"Échec de scan du code-barres","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"Batterie","meter_aggregate_type_load":"Charger","meter_aggregate_type_site":"Site","meter_aggregate_type_solar":"Solaire","meter_container_add_meter_error":"Vérification du compteur","meter_container_add_meter_status":"Ajout d\'un compteur","meter_container_authorizing_status":"Autorisation en cours","meter_container_decode":"Impossible de déchiffrer le numéro de série à partir de l’image.","meter_container_detecting_status":"Détection des compteurs câblés","meter_container_failed_status":"Échec de l’ajout du compteur","meter_container_reconnecting_status":"Reconnexion","meter_container_skip_title":"Aucun compteur n\'a été mis en service. Voulez-vous vraiment continuer ?","meter_container_starting_status":"Démarrage","meter_container_subtitle":"Saisissez les identifiants courts et les numéros de série de chaque compteur d’énergie pour les connecter au Gateway. Testez chaque compteur après sa mise en service.","meter_container_subtitle_industrial":"Saisissez la ou les adresses IP et le ou les emplacements des compteurs d’énergie pour vous connecter. Testez chaque compteur après sa mise en service.","meter_container_success_status":"Compteur ajouté avec succès","meter_container_title":"Compteurs","meter_container_unknown_status":"Inconnu","meter_container_updating_status":"Mise à jour du compteur","meter_container_verification":"Vérification du compteur {id}","meter_container_verification_gw1":"Pendant le processus de couplage Wi-Fi, vous pouvez être temporairement déconnecté du réseau Wi-Fi de la passerelle. {lb} Assurez-vous de vous reconnecter au bon réseau. Ceci peut prendre jusqu\'à 3 minutes.","meter_container_verification_gw2":"Le processus de couplage Wi-Fi peut prendre jusqu\'à trois minutes.","meter_container_verify_meter_error":"Vérification du compteur","meter_container_verifying_status":"Vérification du compteur","meter_item_view_add_failed":"Échec de l’ajout du compteur","meter_item_view_add_failed_help":"Vérifiez le numéro d\'identification abrégé et le numéro de série. Démarrez le compteur et effectuez la connexion lorsque le compteur émet un son. Si le problème persiste, supprimez le compteur et réessayez.","meter_item_view_advanced_settings":"PARAMÈTRES AVANCÉS (FACULTATIF)","meter_item_view_battery_ct":"Batterie","meter_item_view_battery_location":"Batterie","meter_item_view_check_meter":"VÉRIFIER CONNEXION COMPTEUR {id}","meter_item_view_conductor_location":"Conducteur","meter_item_view_cts":"{count} TC détecté(s)","meter_item_view_doubled_solar_location":"Solaire doublé","meter_item_view_generator_location":"Générateur","meter_item_view_ip_address":"ADRESSE IP","meter_item_view_load_location":"Charger","meter_item_view_mac_address":"ADRESSE MAC","meter_item_view_meter_location":"EMPLACEMENT DU COMPTEUR","meter_item_view_none_location":"Absent","meter_item_view_remote_ip_address_placeholder":"p.ex., 123.123.123.123","meter_item_view_remote_mac_address_placeholder":"p.ex., 12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"p.ex., OBB1231231234, VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"p.ex., 01.234","meter_item_view_serial":"SÉRIE","meter_item_view_short_id":"ID COURT","meter_item_view_site_ct":"Site","meter_item_view_site_location":"Site","meter_item_view_solar_ct":"Solaire","meter_item_view_solar_location":"Solaire","meter_item_view_solar_rgm_location":"Revenu solaire uniquement","meter_item_view_success":"CONNEXION RÉUSSIE !","meter_item_view_unable":"LECTURE DU COMPTEUR IMPOSSIBLE !","meter_item_view_upgrading":"LE COMPTEUR EST EN COURS DE MISE À NIVEAU !","meter_list_view_add":"AJOUTER UN COMPTEUR WI-FI","meter_list_view_add_ip":"AJOUTER COMPTEUR IP","meter_list_view_detect":"DÉTECTER COMPTEURS CÂBLÉS","meter_list_view_enable_inverter_readings":"Activer les relevés de l\'onduleur de la batterie","meter_list_view_inverter_meter":"COMPTEURS DE L\'ONDULEUR","meter_list_view_inverter_meter_desc":"En cas d\'activation et d\'absence de compteurs de la batterie configurés, le contrôleur de site utilise les relevés provenant des onduleurs de la batterie en tant que compteur de la batterie.","meter_msa_id":"COMMUTATEUR DE SECOURS {id}","meter_sync_id":"COMPTEUR DE SYNCHRONISATION {id}","meter_sync_x_id":"Compteur principal interne (Passerelle) {id}","meter_sync_y_id":"Compteur auxiliaire interne (Passerelle) {id}","meter_update_modal_fetch_status_error":"Erreur : Récupération du statut de mise à jour du compteur impossible","meter_update_modal_footer":"La mise à jour du compteur peut prendre jusqu\'à 2 minutes","meter_update_modal_remaining_time":"Temps restant: {seconds} secondes","meter_update_modal_timeout_error":"Erreur : Le temps d\'attente a été dépassé lors de la mise à jour du compteur","meter_update_modal_title":"La mise à jour du compteur est en cours","meter_validation_container_error":"Validation du compteur non disponible pendant l\'exécution du contrôleur de site.","meter_validation_container_error_placeholder":"Validation du compteur non disponible : {error}.","meter_validation_container_power_command":"Commande de puissance","meter_validation_container_power_start":"Démarrer","meter_validation_container_power_stop":"Feu stop","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"Commande de puissance réactive","meter_validation_container_real_power_command":"Commande de puissance réelle","meter_validation_container_show_per_phase":"Indiquer les valeurs par phase","meter_validation_container_title":"Validation du compteur","meter_validation_container_usage":"Envoyez une commande de puissance et validez les données du compteur. Vous devez demeurer sur cette page pour que la commande de puissance soit continue. Des valeurs négatives entraîneront le chargement du système. Des valeurs positives entraîneront le déchargement du système.","meter_validation_control_subtitle":"commande","meter_validation_control_title":"Titre de la commande","meter_validation_disable":"Désactiver","meter_validation_loading":"Chargement","meter_validation_menu":"Menu","meter_validation_reset":"Réinitialiser","meter_validation_submit":"Envoyer","meter_validation_submitting_control":"Envoi de la commande","meter_validation_title":"Validation du compteur","meter_validation_view_apparent_power":"Puissance apparente (kVA)","meter_validation_view_battery_location":"Batterie","meter_validation_view_conductor_location":"Conducteur","meter_validation_view_current":"Courant (A)","meter_validation_view_doubled_solar_location":"Solaire doublé","meter_validation_view_generator_location":"Générateur","meter_validation_view_hz":"Hz","meter_validation_view_inverters":"Onduleurs ({length})","meter_validation_view_ka":"kA","meter_validation_view_kv":"kV","meter_validation_view_kvar":"kVAr","meter_validation_view_kw":"kW","meter_validation_view_kwh":"kWh","meter_validation_view_load_location":"Charger","meter_validation_view_meter":"Compteurs ({length})","meter_validation_view_none_location":"Absent","meter_validation_view_pf":"Facteur de puissance","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"Moyenne","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"Total","meter_validation_view_reactive_power":"Puissance réactive (kVAr)","meter_validation_view_real_power":"Puissance réelle (kW)","meter_validation_view_site_location":"Site","meter_validation_view_solar_location":"Solaire","meter_validation_view_solar_rgm_location":"Revenu solaire uniquement","meter_validation_view_voltage":"Tension (V)","meter_w1_wifi_id":"COMPTEUR {id}","meter_w1_wired_id":"COMPTEUR CÂBLÉ {id}","meter_w2_wifi_id":"COMPTEUR {id}","meter_w2_wired_id":"COMPTEUR CÂBLÉ {id}","meter_wifi_id":"COMPTEUR {id}","meter_wired_id":"COMPTEUR CÂBLÉ {id}","metrics_aggregate":"Système","metrics_apparent_power":"Puissance apparente ({unit})","metrics_battery":"Batterie","metrics_current":"Courant ({unit})","metrics_meter":"Compteur","metrics_no_metrics":"Pas de mesure à afficher.","metrics_power_factor":"Facteur de puissance","metrics_reactive_power":"Puissance réactive ({unit})","metrics_real_power":"Puissance réelle ({unit})","metrics_subtitle":"Mesures","metrics_voltage_l_n":"Tension L-N ({unit})","modal_acknowledge":"VALIDER","modal_confirm":"CONFIRMER","modal_exit":"QUITTER","modal_no":"NON","modal_note":"Note","modal_ok":"OK","modal_reconfigure":"RECONFIGURER","modal_yes":"OUI","modbus_container_title":"Interface Modbus","modbus_table_register_address":"Adresse","modbus_table_register_name":"Nom","modbus_table_register_type":"Type","modbus_table_register_value":"Valeur","modbus_table_register_value_decimal":"Valeur (décimale)","modbus_table_register_value_hex":"Valeur (hex)","msa-off-grid":"Hors réseau","msa-on-grid":"Sur le réseau","navigation_email":"ADRESSE E-MAIL","network-switch-menu-item":"Commutateurs réseau","network_cellular_configured":"Configuré(e), mais pas connecté(e). Assurez-vous que le réseau cellulaire est disponible et qu\'il n\'y a aucun obstacle autour de l\'antenne.","network_connected":"Connecté","network_container_connect_ethernet":"Connexion à Ethernet","network_container_connect_to_internet":"Veuillez patienter pendant que le système tente de se connecter à Internet.","network_container_connect_wifi":"Connexion à {ssid}","network_container_connect_wifi_description":"Pendant ce processus, il se peut que vous deviez vous reconnecter au réseau Passerelle pour continuer l\'installation.","network_container_connman":"Le gestionnaire de connexion au réseau se connecte de manière dynamique au meilleur réseau.","network_container_connman_body":"Pour assurer la connectivité, configurez tous les types de connexions disponibles :","network_container_delete_network":"Supprimer le réseau configuré?","network_container_ethernet_and_wifi_warning":"Configurez les réseaux Ethernet et Wi-Fi disponibles pour assurer la connectivité.","network_container_ethernet_subtitle":"Ethernet","network_container_ethernet_warning":"Configurez les réseaux Ethernet disponibles pour assurer la connectivité.","network_container_network_description":"Connectez-vous à Internet avec tous les types de réseaux disponibles.","network_container_network_subtitle":"Réseau","network_container_no_internet_bullet_four":"Le Powerwall peut transmettre des données de performances à Tesla pour permettre à l\'Assistance technique d\'identifier les problèmes","network_container_no_internet_bullet_four_industrial":"Les appareils peuvent transmettre des données de performances à Tesla pour permettre à l’Assistance technique d’identifier les problèmes","network_container_no_internet_bullet_one":"Les informations d\'enregistrement du Powerwall sont transmises à Tesla dans le but d\'activer la garantie totale de 10 ans","network_container_no_internet_bullet_three":"Le client peut utiliser l\'application mobile Tesla pour suivre sa consommation d\'énergie et contrôler le Powerwall","network_container_no_internet_bullet_two":"Le Powerwall peut recevoir les mises à jour à distance du microprogramme pour améliorer ses performances et bénéficier de nouvelles fonctionnalités","network_container_no_internet_bullet_two_industrial":"Les appareils peuvent recevoir les mises à jour à distance du microprogramme pour améliorer ses performances et bénéficier de nouvelles fonctionnalités","network_container_no_internet_bullet_zero":"Il est possible de déterminer si une mise à jour du microprogramme est nécessaire avant la mise en service","network_container_no_internet_no_cell_title":"Si une connexion Internet est disponible sur ce site, merci de compléter cette étape. Connectez le Powerwall au service Internet du client par Ethernet (de préférence) ou par Wi-Fi.","network_container_no_internet_title":"Si une connexion Internet est disponible sur ce site, merci de compléter cette étape. Connectez le Powerwall au service Internet du client par Ethernet (de préférence) ou par Wi-Fi, ou établissez une connexion cellulaire.","network_container_no_internet_warning":"Il est important d’établir une connexion Internet robuste afin que","network_container_scan_networks":"Lister les réseaux Wi-Fi","network_container_scan_wifi_disconnect_warning":"Attention: Lister les réseaux Wi-Fi déconnectera temporairement la connection Wi-Fi actuelle.","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"Configurez les réseaux Wi-Fi disponibles pour assurer la connectivité.","network_disabled":"Désactivé","network_disconnected":"Déconnecté","network_ethernet_configured":"Configuré(e), mais pas connecté(e). Vérifiez la connexion du câble Ethernet.","network_switches_container_discover_failure":"Dernier échec de recherche : {error}","network_switches_container_discover_switches":"Découvrez les commutateurs réseau","network_switches_container_discovered_label":"Commutateurs réseau découverts","network_switches_container_discovering_stop_button":"Cessez la recherche","network_switches_container_discovery_switches_running_label":"Exécution en cours de la découverte de commutateurs réseau. Vous pouvez cesser la recherche ci-dessous.","network_switches_container_ip":"IP : {ip}","network_switches_container_mac":"MAC : {mac}","network_switches_container_not_supported":"Les commutateurs réseau sont pris en charge seulement sur les systèmes industriels.","network_switches_container_password_not_set":"Le mot de passe n’est pas défini","network_switches_container_password_set":"Le mot de passe est défini","network_switches_container_passwords_error":"État de définition du mot de passe : {status}","network_switches_container_set_password_label":"Définir le mot de passe sur tous les Commutateurs réseau utilisant encore le mot de passe défini par l\'usine.\\n Tous les mots de passe seront définis sur une même valeur.","network_switches_container_set_passwords":"Définir les mots de passe","network_switches_container_set_passwords_button":"Définir le mot de passe","network_switches_container_setting_passwords_button":"Mot de passe en cours de définition...","network_switches_container_start_discovering_button":"Lancez la découverte","network_switches_container_start_discovery_help":"La découverte des commutateurs réseau s’effectue automatiquement et périodiquement mais elle peut être déclenchée par le bouton Start Discovery.","network_switches_container_subtitle":"Affichez les commutateurs réseau","network_switches_container_title":"Commutateurs réseau","network_view_check_connection":"VÉRIFIER LA CONNEXION INTERNET","network_view_connection_failed":"NON CONNECTÉ !","network_view_connection_success":"CONNEXION RÉUSSIE !","network_view_continue_no_internet":"CONTINUER SANS INTERNET","network_view_default_error":"Erreur de connexion","network_view_local_network_connected":"Réseau local connecté","network_view_local_network_disconnected":"Erreur du réseau local","network_view_tesla_internet_connected":"Connecté(e) aux services Tesla et à Internet","network_view_tesla_internet_disconnected":"Erreur de la connexion aux Services Tesla et à Internet","network_warning":"Avertissement","network_wifi_configured":"Configuré(e), mais pas connecté(e). Vérifiez vos paramètres Wi-Fi.","open_meter_validatiion_container_title":"Validation du compteur ouvert","operation_mode_autonomous":"Mode autonome","operation_mode_backup":"Charge de secours uniquement","operation_mode_self_consumption":"Mode d\'autoconsommation","operation_mode_site_control":"Contrôle de site","overview_menu_control_title":"commande","overview_menu_diagnostics_title":"Diagnostics","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"Connecté","overview_menu_network_no_connection":"Aucune connexion","overview_menu_registration_complete":"Terminé","overview_menu_registration_incomplete":"Inachevé","overview_menu_registration_pending":"Connexion Internet en attente","overview_menu_security_title":"Modifier ou réinitialiser le mot de passe","overview_menu_settings_title":"Paramètres","overview_menu_summary_title":"Synthèse","overview_menu_system_title":"Système","overview_menu_update_title":"Mise à jour du logiciel","overview_menu_view_alerts_event":"Événement","overview_menu_view_alerts_events":"Événements","overview_menu_view_inverter_title":"Test de l’onduleur","overview_menu_view_network_title":"Réseau","overview_menu_view_registration_title":"Enregistrement","overview_menu_view_test_title":"Auto-test","overview_meter_validation_title":"Validation du compteur","password_generate_error":"Une erreur s’est produite lors de la création du nouveau mot de passe. Vérifiez la connectivité et le nouveau mot de passe, puis essayez à nouveau.","password_generate_help_text":"Saisir le mot de passe existant pour générer un nouveau mot de passe aléatoire.","password_generate_menu_title":"Modifier le mot de passe","password_generate_notice":"Le mot de passe a été changé. Enregistrez le nouveau mot de passe avant de quitter cette page.","phase_container_detect_timeout":"Délai d\'attente de la détection de phase dépassé","phase_container_detection_attempt":"Tentative n° {num}","phase_container_grid_code_validating_modal_title":"Validation du code réseau","phase_container_grid_compliant_description":"Conforme réseau {checkmark}","phase_container_grid_modal_description":"Le réseau sera conforme dans {time} secondes.","phase_container_grid_modal_title":"Attente de la conformité réseau","phase_container_modal_description":"La détection de phase peut prendre jusqu\'à deux minutes par Powerwall.","phase_container_modal_title":"Détection de phase en cours d\'exécution","phase_container_saving_phases_modal_title":"Enregistrement des phases","phase_container_subtitle":"Afficher la ligne sur laquelle chaque Powerwall est activé et mettre à jour le statut de la ligne","phase_container_supported_error":"Aucun Powerwall détecté. La détection de phase n\'est pas prise en charge.","phase_container_title":"Phase","phase_container_voltage_caution_body":"Tension {voltage}V inattendue détectée sur {lineNumber}. Vérifiez à nouveau que {lineStatus} est le paramètre approprié pour cette phase.","phase_container_warning_body":"Aucune phase de secours n\'a été sélectionnée. Le système ne peut donc prendre en charge aucune charge quand la connexion au réseau est perdue.","phase_container_warning_modal_header":"La sauvegarde est désactivée","phase_line_id":"Ligne-{id}","phase_line_item_view_line":"Ligne","phase_line_item_view_line_status_backup":"Fonction de secours","phase_line_item_view_line_status_configured":"Pas de sauvegarde","phase_line_item_view_line_status_not_configured":"Non configuré(e)","phase_line_status_backup":"Fonction de secours","phase_line_status_configured":"Pas de sauvegarde","phase_line_status_not_configured":"Non configuré(e)","phase_view_detect":"DÉTECTER LES PHASES","phase_view_split_phase":"Phase auxiliaire","power_flow_view_go_off_grid":"ALLER HORS RÉSEAU","power_flow_view_go_on_grid":"ALLER SUR LE RÉSEAU","power_flow_view_grid_button_disabled_reason":"Le système doit être lancé pour aller hors réseau.","power_flow_view_grid_spinner_alt_label":"Système en cours de transition","power_flow_view_start_system":"DÉMARRER LE SYSTÈME","power_flow_view_stop_system":"ARRÊTER LE SYSTÈME","powerwall_container_industrial_no_additional_title":"Pas de bloc de batterie supplémentaire trouvé","powerwall_container_industrial_subtitle":"La liste répertorie tous les blocs de batterie automatiquement détectés par le contrôleur de site. Effectuez une nouvelle recherche si le bloc de batterie n’est pas répertorié.","powerwall_container_industrial_subtitle_auto_detection":"La liste répertorie tous les blocs de batterie automatiquement détectés par le contrôleur de site. Si un bloc de batterie n’est pas répertorié, vérifiez l’équipement du réseau y compris le câblage, puis assurez-vous que les contrôleurs de bus sont activés.","powerwall_container_industrial_title":"Bloc de batterie","powerwall_container_industrial_updating":"Vérification des blocs de batterie","powerwall_container_no_additional_powerwalls_description":"Reportez-vous au Manuel d\'installation du Powerwall pour obtenir des conseils et résoudre les éventuels problèmes de câblage.","powerwall_container_no_additional_powerwalls_title":"Aucun autre Powerwall n’a été détecté","powerwall_container_scan_again":"NOUVELLE RECHERCHE","powerwall_container_scanning":"Recherche en cours","powerwall_container_scanning_for_more":"Recherche d’appareils supplémentaires","powerwall_container_subtitle":"Les Powerwalls détectés automatiquement par le Gateway sont affichés ci-dessous. Effectuez une nouvelle recherche si aucun Powerwall n’est affiché.","powerwall_container_subtitle_component_auto_detection":"Tous les composants automatiquement détectés par la Passerelle sont répertoriés. Vérifiez le câblage si un composant n’est pas répertorié.","powerwall_container_title":"Powerwall","powerwall_container_updating":"Vérification des Powerwalls","powerwall_container_updating_note":"Remarque : Cela peut prendre jusqu\'à 60 secondes par Powerwall.","powerwall_item_view_blank_numbers":"En attente de vérification…","powerwall_item_view_numbers":"Numéro d\'article:{partNumber} Numéro de série:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL : {id}","powerwall_pairing_cancel":"Annuler","powerwall_pairing_connect":"Connexion","powerwall_pairing_done":"Effectué","powerwall_pairing_error_already_paired":"Échec d\'appairage : dispositif déjà appairé","powerwall_pairing_error_bad_pairing_response":"Échec d\'appairage : le dispositif refuse l’appairage. Assurez-vous que le suiveur a bien été arrêté","powerwall_pairing_error_bad_qr_code":"Ceci n’est pas un code QR WiFi","powerwall_pairing_error_changes_prohibited":"Échec d\'appairage : Interdit","powerwall_pairing_error_internal":"Échec d\'appairage : erreur interne","powerwall_pairing_error_no_qr_code":"Aucune code QR n\'a été trouvé","powerwall_pairing_error_no_response":"Échec d\'appairage : le dispositif ne répond pas.","powerwall_pairing_error_not_leader":"Échec d\'appairage : il s\'agit d\'un dispositif de suivi. Reconnectez-le au dispositif principal.","powerwall_pairing_error_prohibited_uncommissioned":"Échec d\'appairage : ce Powerwall n\'a pas encore été mis en service","powerwall_pairing_error_too_many_devices":"Échec d\'appairage : le nombre maximum de dispositifs sont déjà connectés.","powerwall_pairing_error_unknown":"Échec d\'appairage : Erreur inconnue","powerwall_pairing_error_wifi_connection_failed":"Échec d\'appairage : Impossible de se connecter au WiFi. Vérifiez le mot de passe.","powerwall_pairing_error_wifi_not_found":"Échec d\'appairage : Réseau WiFI introuvable","powerwall_pairing_exception":"Échec d\'appairage : Exception","powerwall_pairing_instructions_2":"Saisir ou scanner le SSID WiFi et le mot de passe pour appairer le Powerwall. Recherchez un code QR sur le dispositif.","powerwall_pairing_password_label":"Mot de passe :","powerwall_pairing_scan_qr_code":"scanner le code QR","powerwall_pairing_ssid_label":"SSID :","powerwall_pairing_state_complete":"Appairage complet. Le nouveau dispositif peut ne pas commencer à répondre avant une minute ou plus (si une mise à jour est en cours). Cliquez sur Done (Terminé) pour Annuler","powerwall_pairing_state_monitoring":"Apparaige du nouveau dispositif. Ceci peut prendre jusqu\'à une minute.","powerwall_starting":"Démarrage du Powerwall","powerwall_view_detected_backup":"Capacité de secours détectée","powerwall_view_detected_synchrometers":"Capacité de compteur détectée","powerwall_view_failed":"ÉCHEC","powerwall_view_no_backup":"Aucune capacité de secours détectée","powerwall_view_no_sync":"Aucun synchronisateur détecté","powerwall_view_scan":"RECHERCHER","powerwall_view_success":"SUCCÈS","powerwall_view_synchrometer_detected":"Compteurs de synchronisation détectés","powerwall_view_synchronizer_detected":"Synchronisateur détecté","powerwall_view_update":"VÉRIFIER LES POWERWALLS","privacy_policy_view_accept_warranty_title":"Accepter la Garantie limitée du Powerwall Tesla","privacy_policy_view_contact_bullet_one":"par e-mail à l\'adresse {privacyEmail} ;","privacy_policy_view_contact_bullet_two":"Par courrier à l\'adresse Tesla Inc. Attn : Legal 45500 Fremont Boulevard Fremont California 94538 États-Unis.","privacy_policy_view_contact_header":"Comment nous contacter","privacy_policy_view_contact_paragraph_one":"Pour nous transmettre une question ou un commentaire, ou pour vous désinscrire de certains services, veuillez nous contacter :","privacy_policy_view_contact_paragraph_three":"Si vous résidez dans un pays de l\'EEE ou en Suisse, la filiale Tesla locale peut être l\'entité responsable du traitement de vos informations personnelles.","privacy_policy_view_contact_paragraph_two":"Veuillez noter que les communications par e-mail ne sont pas toujours sûres, veuillez donc ne pas y indiquer des informations concernant des cartes de crédit ou des informations sensibles.","privacy_policy_view_cross_border_transfers_header":"Transferts transfrontaliers","privacy_policy_view_cross_border_transfers_paragraph_one":"Les Services sont contrôlés et exploités à partir des États-Unis. Des Informations provenant de/à propos de vous ou de votre utilisation de nos produits ou des Services peuvent être stockées et analysées dans n’importe quel pays où nous sommes implantés ou dans lequel nous engageons des prestataires de services. Ces pays peuvent appliquer des lois sur la protection des données différentes de celles du pays dans lequel vous avez initialement fourni les données. Lorsque nous transférons des informations provenant de/à propos de vous ou de votre utilisation de nos produits ou des Services vers d\'autres pays, nous les protégeons comme décrit dans la présente Politique de confidentialité. En utilisant nos produits, les Services, ou en nous fournissant des informations par tout autre moyen, vous acceptez le transfert des informations provenant de/à propos de vous ou de votre utilisation de nos produits ou des Services vers des pays autres que votre pays de résidence, y compris les États-Unis.","privacy_policy_view_cross_border_transfers_paragraph_two":"Si vous êtes situé dans l\'EEE ou en Suisse, nous nous conformons aux prescriptions légales applicables assurant une protection adéquate des informations personnelles transférées à destination de pays en dehors de l\'EEE ou de la Suisse. Tesla a certifié son adhésion au Programme Privacy Shield EU-États-Unis mis en place par le Département du Commerce et la Commission européenne concernant le traitement de certaines informations personnelles transférées de l’EEE à Tesla et ses filiales en propriété exclusive aux États-Unis. La politique {privacyShield} de Tesla est disponible ici.","privacy_policy_view_devices":"Provenant de/à propos de vous ou de vos appareils","privacy_policy_view_energy_products":"Provenant de vos produits Tesla Energy ou les concernant","privacy_policy_view_eu_policy_warning":"Vous devez accepter la Politique de confidentialité pour enregistrer votre Powerwall et suivre ses informations via l\'application mobile Tesla.","privacy_policy_view_eu_warranty_warning":"Si vous n’acceptez pas la Politique de confidentialité client Tesla, nous ne pourrons honorer la totalité de votre Garantie de dix ans. Tesla honorera votre Garantie pendant au moins quatre ans à compter de la date de première installation de votre Powerwall, sous réserve des exclusions et des limitations décrites dans la Garantie {warrantyLink}.","privacy_policy_view_grid_services":"Votre Powerwall est capable d\'optimiser la fiabilité du réseau électrique en proposant des services dans le cadre de programmes facultatifs mis en place par des fournisseurs d\'énergie ou des tiers. Ces services consistent généralement à décharger partiellement votre Powerwall aux moments opportuns en échange d\'une compensation financière, et nécessitent que vous partagiez votre consommation électrique ainsi que les informations de votre Powerwall avec les fournisseurs d\'énergie ou des tiers. Avant de vous proposer de rejoindre l\'un de ces programmes, nous vous indiquerons les détails de ces derniers et vous offrirons la possibilité de vous en retirer le cas échéant. Si vous ne vous retirez pas à ce moment-là, vous serez inscrit au programme.","privacy_policy_view_grid_services_title":"Services au réseau","privacy_policy_view_grid_warning":"Vous n\'êtes pas obligé d\'accepter. Si vous refusez, nous vous offrirons la possibilité de rejoindre ces programmes ultérieurement.","privacy_policy_view_here":"ici","privacy_policy_view_homeowner_na":"PROPRIÉTAIRE DU DOMICILE NON DISPONIBLE","privacy_policy_view_homeowner_required":"Cette partie doit obligatoirement être remplie par le propriétaire","privacy_policy_view_information_collection_devices_bullet_five":"Par l\'intermédiaire de votre navigateur ou de votre appareil : Certaines informations sont collectées par la plupart des navigateurs ou automatiquement par l\'intermédiaire de votre appareil, comme par exemple votre adresse MAC (Media Access Control), le type d\'ordinateur (Windows ou Macintosh), la résolution de l\'écran, le nom et la version du système d\'exploitation, le fabricant et le modèle de l\'appareil, la langue utilisée, le type et la version du navigateur Internet ainsi que le nom et la version des Services (par exemple les Tesla App) que vous utilisez. Nous utilisons ces informations afin d’assurer que les Services puissent fonctionner correctement.","privacy_policy_view_information_collection_devices_bullet_four":"Hors ligne : Nous sommes susceptibles de collecter des informations auprès de vous ou vous concernant hors ligne, par exemple lorsque vous vous rendez dans un magasin ou un centre de réparation Tesla, lorsque vous assistez à l\'un de nos événements, lorsque vous vous inscrivez en vue d\'un essai de conduite, lorsque vous passez une commande par téléphone ou encore lorsque vous contactez notre service clientèle ou notre service commercial.","privacy_policy_view_information_collection_devices_bullet_one":"Via nos Services : Nous sommes susceptibles de collecter des informations auprès de vous ou vous concernant via nos sites Web, applications logicielles, pages de médias sociaux, e-mails ou autres services numériques (les « Services »), par exemple lorsque vous vous abonnez à une lettre d\'information, faites un achat ou enregistrez votre produit auprès de notre société.","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla : Les clients qui achètent certains produits Tesla recevront un compte My Tesla hébergé sur notre site Web. Il se peut que nous collections et traitions les types de données suivants, que vous choisissez de nous communiquer, pour votre compte My Tesla : vos informations d\'enregistrement de client ; le statut de votre commande ; la garantie ou d\'autres documents relatifs à vos produits Tesla ; ainsi que des informations d\'ordre général sur vos produits Tesla (notamment le numéro d\'identification du véhicule ou un autre numéro de série de produit, des informations sur le programme d\'entretien ou le module de connexion), les formulaires d\'assurance, le permis de conduire, les contrats de financement et autres. À tout moment, vous pouvez accéder à votre compte My Tesla pour mettre à jour les informations collectées auprès de vous ou vous concernant.","privacy_policy_view_information_collection_devices_bullet_two":"Via d\'autres sources : Nous sommes également susceptibles de recevoir des informations vous concernant et provenant d\'autres sources, par exemple de bases de données publiques, de partenaires de marketing, d\'installateurs agréés, de centres de réparation ou de services tiers ainsi que de plateformes de médias sociaux.","privacy_policy_view_information_collection_energy_products_bullet_one":"Nous sommes susceptibles de collecter des informations concernant votre produit, comme la date d\'installation, le nombre de produits installés et le(s) numéro(s) de série.","privacy_policy_view_information_collection_energy_products_bullet_two":"Pour améliorer la qualité de nos produits et de nos services, nous sommes susceptibles de collecter des données concernant l\'endroit où votre produit est installé et sa configuration, des données concernant l\'utilisation et les performances du produit, des données concernant votre consommation globale d\'énergie domestique ainsi que d\'autres données utilisées afin de diagnostiquer des problèmes.","privacy_policy_view_information_collection_header":"Informations que nous pouvons collecter","privacy_policy_view_information_collection_paragraph_five":"Si vous ne voulez plus que nous collections des données de performance ni d\'autres données provenant de votre produit Tesla Energy, veuillez nous contacter comme indiqué dans le paragraphe ”Comment nous contacter” ci-dessous. Veuillez noter que si vous choisissez de mettre fin à la collecte de données de performance provenant de votre produit Tesla, nous ne pourrons pas vous avertir en temps réel d\'éventuels problèmes concernant votre produit énergétique. Cela pourra par conséquent entraîner une dégradation des performances de votre produit énergétique, de graves dommages, voire l’impossibilité d\'utiliser votre produit. Cela pourra également entraîner la désactivation de nombreuses fonctionnalités de votre produit énergétique, et notamment des mises à jour régulières des logiciels et micrologiciels.","privacy_policy_view_information_collection_paragraph_four":"Nous sommes susceptibles de collecter différentes informations à partir de vos produits Tesla Energy ou les concernant par l\'intermédiaire d\'un installateur agréé ou à partir des produits installés (directement ou via des équipements jumelés, comme un onduleur), notamment :","privacy_policy_view_information_collection_paragraph_one":"Nous recueillons trois principaux types d\'informations vous concernant ou concernant votre utilisation de nos produits et services : (1) informations provenant de/à propos de vous ou de vos appareils ; (2) informations provenant de votre véhicule Tesla ou le concernant ; et (3) informations provenant de vos produits Tesla Energy ou les concernant. Selon les produits et services Tesla que vous demandez, possédez ou utilisez, il se peut que certains types d\'informations ne vous concernent pas.","privacy_policy_view_information_collection_paragraph_three":"Lorsque vous visitez notre site Web, ou lorsque vous utilisez nos Services d\'une quelconque manière, nous sommes susceptibles d\'utiliser des cookies, balises Web, outils d\'analyse et autres technologies similaires pour faciliter la fourniture et l\'amélioration de nos Services, comme indiqué ci-dessous :","privacy_policy_view_information_collection_paragraph_two":"Nous sommes susceptibles de collecter des informations auprès de vous ou vous concernant (comme vos nom, adresse, numéro de téléphone, e-mail, informations de paiement, etc.) ou concernant vos appareils, de différentes façons, notamment :","privacy_policy_view_information_collection_services_bullet_five":"Vous pouvez vous informer sur les pratiques de Google concernant cette collecte d’informations et sur la façon de vous désinscrire en téléchargeant l\'option Désactivation de Google Analytics, accessible à l\'adresse {website}.","privacy_policy_view_information_collection_services_bullet_four":"Outils d\'analyse : Nous avons recours à des services d\'analyse de sites Web et d\'applications fournis par des tiers qui utilisent des cookies ou d\'autres technologies comparables pour collecter des informations concernant l\'utilisation des sites Web ou des applications et pour étudier les tendances sans identifier les visiteurs individuels. Les tiers qui nous fournissent ces services peuvent également collecter des informations concernant votre utilisation de sites Web tiers.","privacy_policy_view_information_collection_services_bullet_one":"Cookies : Les cookies sont des éléments d’information stockés directement sur l’ordinateur que vous utilisez. Les cookies nous permettent de récupérer des informations comme le type de navigateur que vous utilisez, le temps que vous passez sur les pages Services, vos préférences linguistiques et d\'autres données de navigation en ligne. Nos prestataires de services et nous-mêmes utilisons ces informations à des fins de sécurité, pour faciliter votre navigation en ligne, pour vous fournir des informations plus ciblées, pour personnaliser votre expérience d\'utilisation des Services et pour analyser l\'activité des utilisateurs. Nous pouvons identifier votre ordinateur pour vous assister dans votre utilisation des Services. Nous recueillons également des informations statistiques concernant l\'utilisation des Services afin d\'améliorer en continu leur conception et leur fonctionnement, afin de mieux comprendre comment les Services sont utilisés et afin de mieux répondre aux questions éventuelles à propos des Services. En outre, les cookies nous permettent de sélectionner et de vous présenter les publicités et les offres qui sont les plus susceptibles de vous plaire. Nous pouvons aussi utiliser des cookies dans les publicités en ligne pour voir comment vous interagissez avec nos publicités et nous pouvons utiliser des cookies ou d\'autres fichiers pour comprendre la manière dont vous utilisez d\'autres sites Web.","privacy_policy_view_information_collection_services_bullet_three":"Balises Web et autres technologies comparables : Les balises Web (autrement connues comme pixels invisibles et GIF invisibles) peuvent être utilisées en relation avec certains Services afin, entre autres, de tracer les actions d\'utilisateurs des Services (y compris les destinataires d\'e-mails), de mesurer la réussite de nos campagnes marketing et de compiler des statistiques relatives à l\'utilisation des Services et aux taux de réponse.","privacy_policy_view_information_collection_services_bullet_two":"Si vous ne voulez pas que des informations soient collectées grâce à l\'utilisation de cookies lorsque vous utilisez votre compte My Tesla ou notre site Web, sachez que la plupart des navigateurs proposent une procédure simple qui vous permet de refuser automatiquement les cookies ou qui vous permet de refuser ou d\'accepter le transfert vers votre ordinateur d\'un cookie spécifique (ou de plusieurs cookies) à partir d\'un site donné. Nous vous conseillons de consulter {website}. Cependant, si vous n\'acceptez pas ces cookies, il se peut que votre expérience d\'utilisation des Services en pâtisse. Par exemple, il se peut que nous ne puissions pas identifier votre ordinateur et que vous deviez par conséquent vous identifier à chaque fois que vous visitez les pages Services.","privacy_policy_view_information_rights_choices_agree_eu":"Vous devez accepter la Politique de confidentialité pour enregistrer votre Powerwall et suivre ses informations via l\'application mobile Tesla.","privacy_policy_view_information_rights_choices_agree_one":"Vous devez accepter la Politique de confidentialité pour enregistrer votre Powerwall et suivre ses informations via l\'application mobile Tesla. Aucune autre action n\'est nécessaire si vous ne souhaitez pas accéder aux informations de votre Powerwall via l\'application mobile Tesla.","privacy_policy_view_information_rights_choices_bullet_one":"À tout moment, vous pouvez accéder à votre compte My Tesla pour mettre à jour les informations collectées auprès de vous ou vous concernant.","privacy_policy_view_information_rights_choices_bullet_two":"Si vous souhaitez examiner, corriger, mettre à jour, supprimer ou effacer des informations collectées auprès de vous ou vous concernant que vous nous avez fournies auparavant, vous pouvez nous contacter à l\'adresse ci-dessous.","privacy_policy_view_information_rights_choices_header":"Droits et choix","privacy_policy_view_information_rights_choices_paragraph_four":"Veuillez noter qu\'il est possible que nous ayons besoin de conserver certaines informations dans nos archives ou à fins de conformité et/ou en vue de conclure des transactions que vous avez entamées avant d\'avoir demandé le changement ou la suppression en question (par exemple lorsque vous effectuez un achat ou participez à une promotion, il est possible que vous ne puissiez pas modifier ou supprimer les informations fournies avant que l\'achat ou la promotion considérés soient terminés). Des informations résiduelles peuvent également se trouver dans nos bases de données ainsi que dans d\'autres archives, qui ne sont pas supprimées.","privacy_policy_view_information_rights_choices_paragraph_one":"Comme détaillé dans les paragraphes ci-dessus, nous vous proposons de nombreux choix quant à la collecte, l’utilisation et le partage des informations provenant de/à propos de vous ou de votre utilisation de nos produits ou des Services. Conformément au droit en vigueur, dans certaines juridictions, vous pouvez aussi disposer du droit de demander l\'accès et d\'obtenir des renseignements sur certaines données que nous conservons à votre sujet, d\'actualiser et de corriger les inexactitudes contenues dans ces données, et de bloquer ou de supprimer ces informations, autant que nécessaire. Ces droits peuvent être limités dans certaines circonstances par la législation locale. Nous vous proposons plusieurs méthodes vous permettant d\'accéder à, d’actualiser ou de demander le blocage ou la suppression des informations provenant de/à propos de vous, notamment","privacy_policy_view_information_rights_choices_paragraph_three":"Nous nous conformerons à votre/vos demande(s) d\'exercice de ces droits et de ces choix dès que cela sera raisonnablement possible.","privacy_policy_view_information_rights_choices_paragraph_two":"Dans votre demande, veuillez indiquer clairement quelles informations vous souhaitez modifier, que vous vouliez supprimer de notre base de données des informations que vous nous avez fournies ou nous faire part des limites que vous souhaitez appliquer à notre utilisation des informations que vous nous avez fournies. Pour votre protection, nous pouvons uniquement donner suite aux demandes concernant les informations associées à l’adresse e-mail spécifique que vous utilisez pour nous envoyer votre demande, et il se peut que nous devions vérifier votre identité avant d\'accéder à votre demande.","privacy_policy_view_information_share_header":"Comment nous partageons les informations collectées","privacy_policy_view_information_share_paragraph_eight":"Autres circonstances","privacy_policy_view_information_share_paragraph_eleven":"Si vous souhaitez retirer votre consentement pour tout traitement d\'informations auquel vous avez donné votre consentement préalable exprès, vous pouvez le faire en nous contactant comme indiqué dans le paragraphe ”Comment nous contacter” ci-dessous.","privacy_policy_view_information_share_paragraph_five":"Nous sommes susceptibles de partager des informations avec d\'autres tiers que vous autorisez, comme dans les circonstances suivantes :","privacy_policy_view_information_share_paragraph_five_point_four":"Avec les fournisseurs de comptes sur les réseaux sociaux, si vous connectez votre compte Services à l’un de vos comptes sur les réseaux sociaux. Si vous le faites, vous nous autorisez à partager des informations avec le fournisseur de votre compte de réseau social et vous comprenez que l\'utilisation des informations partagées sera régie par la politique de confidentialité du fournisseur de compte concerné.","privacy_policy_view_information_share_paragraph_five_point_one":"Avec nos installateurs agréés, afin de faciliter la fourniture des produits énergétiques que vous avez demandés.","privacy_policy_view_information_share_paragraph_five_point_three":"Aux sponsors tiers de concours et promotions similaires, si vous choisissez d\'y participer.","privacy_policy_view_information_share_paragraph_five_point_two":"Avec des centres ou des prestataires d’entretien tiers, si vous choisissez d\'en utiliser. Veuillez noter que certaines informations vous concernant sont stockées sur certains produits Tesla et peuvent être directement accessibles aux centres ou prestataires d’entretien tiers que vous choisissez d\'utiliser pour le diagnostic et l’entretien de votre produit Tesla.","privacy_policy_view_information_share_paragraph_four":"Avec d\'autres tiers autorisés par vous","privacy_policy_view_information_share_paragraph_nine":"Nous sommes susceptibles de partager des informations dans d\'autres circonstances, par exemple :","privacy_policy_view_information_share_paragraph_nine_point_one":"avec votre employeur ou un autre opérateur de flotte, ou encore le propriétaire du produit Tesla, si vous ne le possédez pas directement, et conformément au droit applicable.","privacy_policy_view_information_share_paragraph_nine_point_two":"avec un tiers, en relation avec une réorganisation, une fusion, une vente, co-entreprise, une cession, un transfert ou autre disposition de tout ou partie de nos activités, actifs ou titres (y compris en relation avec une procédure de faillite ou procédure similaire).","privacy_policy_view_information_share_paragraph_one":"Nous sommes susceptibles de partager les informations que nous collectons avec nos prestataires de services et nos partenaires commerciaux, avec d\'autres tiers autorisés par vous, avec d\'autres tiers lorsque la loi l’impose et dans d’autres circonstances. Vous trouverez ci-dessous des exemples illustrant la manière dont nous partageons les informations avec ces acteurs et dans ces circonstances.","privacy_policy_view_information_share_paragraph_seven":"Tesla est susceptible de transférer et de divulguer des informations, y compris des informations susceptibles ou non de vous identifier personnellement, à des tiers afin de se conformer à une obligation légale (y compris, mais sans s\'y limiter, des assignations) ; si nous considérons de bonne foi que la loi l\'exige ; en réponse à une demande légitime des autorités gouvernementales chargées d\'une enquête, y compris afin de respecter des obligations de police ; afin de contrôler ou de mettre en œuvre nos politiques et procédures ; afin de faire face à une situation d\'urgence ; afin de prévenir ou de faire cesser une activité que nous considérons comme étant ou pouvant être illégale, non conforme aux principes d’éthique ou passible de poursuites, ou encore de protéger les droits, la propriété, la sécurité des services, les droits de Tesla, de tiers, de visiteurs de nos Services ou du public, selon ce que nous aurons déterminé à notre discrétion absolue.","privacy_policy_view_information_share_paragraph_six":"Avec d\'autres tiers, si la loi l\'exige","privacy_policy_view_information_share_paragraph_ten":"Nous ne partageons pas d\'informations vous identifiant personnellement avec des tiers non affiliés dans l\'optique de leur marketing, à moins que vous ayez consenti à ce partage.","privacy_policy_view_information_share_paragraph_three":"Nous sommes susceptibles de partager des informations avec nos prestataires de services et nos partenaires commerciaux si cela est nécessaire pour la prestation de services pour notre compte ou votre compte, comme dans les situations suivantes :","privacy_policy_view_information_share_paragraph_three_point_one":"Avec les filiales de Tesla aux fins décrites dans la présente Politique de confidentialité. Les filiales de Tesla sont des entreprises appartenant à Tesla Inc. ou que Tesla Inc. contrôle et des entreprises dont Tesla Inc. possède des parts substantielles.","privacy_policy_view_information_share_paragraph_three_point_three":"Avec des partenaires commerciaux tiers dans la mesure où ils sont impliqués dans votre achat ou dans l’entretien de vos produits Tesla. Nous partageons des informations limitées provenant de vous ou vous concernant pour vous permettre de profiter pleinement de ces services si vous choisissez de les utiliser avec ces partenaires (sociétés de financement, leasing, immatriculation, etc.).","privacy_policy_view_information_share_paragraph_three_point_two":"Avec nos prestataires de services et partenaires de distribution tiers, pour fournir des services comme l\'hébergement de sites web, l\'analyse et le stockage de données, le traitement des paiements, l\'exécution des commandes et l\'installation des produits, la connectivité sans fil aux produits Tesla, les technologies de l\'information et infrastructure associée, le service clientèle, la maintenance des produits ou des services connexes, l’envoi d’e-mails, le traitement des cartes de crédit, l\'audit, le marketing, le traitement par commande vocale et d\'autres services similaires.","privacy_policy_view_information_share_paragraph_two":"Avec nos prestataires de services et nos partenaires commerciaux","privacy_policy_view_information_use_commuicate":"Communiquer avec vous","privacy_policy_view_information_use_header":"Comment nous utilisons les informations collectées","privacy_policy_view_information_use_other_purposes":"Autres finalités","privacy_policy_view_information_use_paragraph_five":"Nous sommes également susceptibles d\'utiliser des informations collectées à d\'autres fins, par exemple :","privacy_policy_view_information_use_paragraph_five_point_one":"À des fins commerciales : analyse de données, audits, contrôle et prévention de la fraude, identification des tendances d\'utilisation, détermination de l\'efficacité de nos campagnes promotionnelles ainsi que l\'exploitation et l\'expansion de nos activités commerciales.","privacy_policy_view_information_use_paragraph_five_point_two":"À l\'exception de ce qui est décrit ci-dessus et ci-dessous, Tesla est susceptible d\'utiliser ou de partager des informations qui ne vous identifieront pas personnellement, pour toute finalité, par exemple à des fins opérationnelles ou de recherche, en relation avec l\'analyse du secteur d\'activité ainsi que l\'amélioration ou la modification de nos produits et services, afin de mieux les personnaliser en fonction de vos besoins, et pour respecter des obligations légales.","privacy_policy_view_information_use_paragraph_four":"Nous sommes susceptibles d\'utiliser les informations collectées afin de fournir et améliorer nos produits et services, par exemple pour :","privacy_policy_view_information_use_paragraph_four_point_five":"Analyser et améliorer la sécurité de nos produits et services.","privacy_policy_view_information_use_paragraph_four_point_four":"Développer et promouvoir de nouveaux produits et services, et améliorer ou modifier notre gamme de produits et services.","privacy_policy_view_information_use_paragraph_four_point_one":"Finaliser et traiter votre achat, par ex. traiter vos paiements, organiser la livraison de votre commande, communiquer avec vous à propos de votre achat et vous fournir le service de clientèle connexe.","privacy_policy_view_information_use_paragraph_four_point_six":"Fournir tout autre service demandé.","privacy_policy_view_information_use_paragraph_four_point_three":"Vérifier les performances de votre produit Tesla et vous fournir des services le concernant.","privacy_policy_view_information_use_paragraph_four_point_two":"Fournir un service concernant votre produit Tesla, par exemple vous contacter pour vous communiquer des recommandations d’entretien et procéder à des mises à jour de votre produit à distance.","privacy_policy_view_information_use_paragraph_one":"Nous sommes susceptibles d’utiliser les informations collectées pour communiquer avec vous, dans le but de fournir et d\'améliorer nos produits et services et à d’autres fins. Vous trouverez ci-dessous des exemples illustrant la manière dont nous utilisons les informations à ces fins.","privacy_policy_view_information_use_paragraph_three":"Vos choix de communications :","privacy_policy_view_information_use_paragraph_three_point_one":"Réception de courriers électroniques de notre part ou de la part de nos filiales : Si vous ne voulez plus recevoir de courriers électroniques marketing de notre part ou de la part de nos filiales, vous pouvez vous désinscrire en suivant les instructions fournies dans tous les e-mails que nous vous envoyons ou en nous contactant à l\'adresse ci-dessous. Veuillez noter que nous pourrons toujours vous envoyer des messages administratifs et des messages de sécurité importants même si vous choisissez de ne plus recevoir d’e-mails marketing.","privacy_policy_view_information_use_paragraph_three_point_two":"Réception d\'appels marketing de notre part : Si vous recevez un appel marketing de notre part et si vous ne voulez plus recevoir d\'appels similaires à l\'avenir, il suffit de demander que l\'on vous mette sur notre « liste rouge ». Veuillez noter que nous pourrons toujours vous appeler pour des questions administratives, des questions de sécurité ou des questions liées à l\'entretien des produits même si vous choisissez de ne plus recevoir d\'appels marketing.","privacy_policy_view_information_use_paragraph_two":"Nous sommes susceptibles d\'utiliser les informations que nous collectons pour communiquer avec vous, par exemple :","privacy_policy_view_information_use_paragraph_two_point_five":"Présenter des produits et des offres personnalisés et pour améliorer nos listes par l\'ajout d\'informations provenant d\'autres sources.","privacy_policy_view_information_use_paragraph_two_point_four":"Vous adresser des informations administratives, par exemple des informations concernant les Services et les modifications de nos conditions générales et de nos politiques.","privacy_policy_view_information_use_paragraph_two_point_one":"Répondre à vos questions et satisfaire vos demandes, comme vous adresser des newsletters ou des informations produit, des alertes ou des brochures.","privacy_policy_view_information_use_paragraph_two_point_seven":"Pour faciliter le partage d\'informations et la fonctionnalité des communications sur les réseaux sociaux.","privacy_policy_view_information_use_paragraph_two_point_six":"Vous permettre de participer à des concours et à des promotions similaires et gérer ces activités.","privacy_policy_view_information_use_paragraph_two_point_three":"Vous communiquer d\'importantes informations de sécurité ou notifier les premiers secours en cas d\'accident impliquant votre véhicule.","privacy_policy_view_information_use_paragraph_two_point_two":"Organiser, évaluer et vous fournir des impressions concernant votre essai de conduite Tesla.","privacy_policy_view_information_use_provide":"Fournir et améliorer nos produits et services","privacy_policy_view_links_header":"Liens","privacy_policy_view_links_paragraph_one":"La présente Politique de confidentialité ne concerne pas et n\'entraîne en aucun cas notre responsabilité concernant les politiques de confidentialité ou autres pratiques de tiers, notamment des tiers exploitant des sites ou des services auxquels les Services sont liés. L’inclusion d\'un lien sur la page des Services ne constitue pas un soutien ou une approbation du site ou service lié, de notre part ou de la part de nos filiales. Elle ne constitue pas non plus une quelconque affiliation au tiers concerné.","privacy_policy_view_links_paragraph_two":"Veuillez noter que nous ne sommes pas responsables de la collecte, de l\'utilisation ou des politiques et des pratiques de divulgation (y compris les pratiques en matière de sécurité des données) d\'autres organisations, telles que d’autres développeurs d\'applications, fournisseurs d\'applications, prestataires de plateformes de médias sociaux, prestataires de systèmes d\'exploitation ou prestataire de services sans fil, y compris de toutes les informations que vous communiquez à d\'autres organisations par l\'intermédiaire de nos applications logicielles ou de nos pages de médias sociaux, ou en relation avec celles-ci.","privacy_policy_view_minors_header":"Mineurs","privacy_policy_view_minors_paragraph":"Les Services ne sont pas destinés aux personnes de moins de seize (16) ans et nous demandons à ce que ces personnes ne fournissent aucune information à Tesla.","privacy_policy_view_offers_eu":"Oui, je souhaite recevoir des communications marketing par e-mail, telles que des enquêtes, des promotions ou des offres de la part de Tesla et de ses filiales sur les produits et services Tesla. Vous avez le droit de retirer votre consentement à tout moment. En savoir plus {legalLink}.","privacy_policy_view_offers_title":"Communiqués sur les produits et nouvelles offres","privacy_policy_view_offers_usa":"J\'accepte d\'être contacté(e) au numéro indiqué pour recevoir des informations ou des offres sur les produits Tesla. Je comprends que ces appels ou ces SMS peuvent faire appel à une numérotation assistée par ordinateur ou comporter des messages pré-enregistrés. Ce consentement ne constitue pas une condition d\'achat.","privacy_policy_view_powerwall_warranty":"Garantie limitée du Powerwall Tesla","privacy_policy_view_privacy_policy":"Avis de confidentialité","privacy_policy_view_privacy_policy_agreement_eu":"Je soussigné(e), propriétaire, certifie avoir lu les informations relatives à la confidentialité client Tesla et consent au traitement de mes informations par Tesla comme décrit dans la Politique de confidentialité client Tesla. Vous avez le droit de retirer votre consentement à tout moment, comme décrit par la Politique de confidentialité client Tesla.","privacy_policy_view_privacy_policy_agreement_usa_australia":"Je soussigné(e), propriétaire, certifie avoir lu les informations relatives à la confidentialité client Tesla et consent au traitement de mes informations par Tesla comme décrit dans la Politique de confidentialité client Tesla.","privacy_policy_view_privacy_shield":"Politique de Confidentialité","privacy_policy_view_retention_period_header":"Durée de conservation des données","privacy_policy_view_retention_period_paragraph":"Nous conserverons les informations que nous aurons collectées auprès de, ou concernant, nos clients, nos produits et les Services pendant toute la durée nécessaire pour les finalités décrites dans la présente Politique de confidentialité, à moins qu\'une durée de conservation supérieure soit requise ou autorisée par la loi.","privacy_policy_view_security_header":"Sécurité","privacy_policy_view_security_paragraph_one":"Nous nous efforçons d\'employer des mesures organisationnelles, techniques et administratives raisonnables pour protéger les informations au sein de notre organisation. Malheureusement, la sécurité d\'un système de transmission ou de stockage de données ne peut être garantie à 100 %. Si vous avez des raisons de penser que vos interactions avec nous ne sont plus sécurisées (par exemple, si vous avez le sentiment que la sécurité d\'un compte que vous possédez chez nous a été compromise), veuillez nous avertir immédiatement du problème en nous contactant comme expliqué dans le paragraphe « Comment nous contacter » ci-dessous.","privacy_policy_view_security_paragraph_two":"Si vous vendez ou cédez votre produit Tesla à quelqu\'un d\'autre, veuillez nous en informer, de sorte que nous puissions décider s\'il convient de mettre en œuvre des mesures supplémentaires pour mieux protéger les informations collectées auprès de vous ou vous concernant contre toute communication à l\'acheteur ou au cessionnaire du produit Tesla.","privacy_policy_view_title":"Consultez la politique de confidentialité complète","privacy_policy_view_updates_header":"Mises à jour de la présente Politique","privacy_policy_view_updates_paragraph":"Nous sommes susceptibles de modifier la présente Politique de confidentialité. Veuillez consulter la légende “Dernière mise à jour“ au bas de cette page pour connaître la date à laquelle cette Politique de confidentialité a été révisée pour la dernière fois. Toute modification apportée à la présente Politique de confidentialité prendra effet dès la publication de la Politique de confidentialité révisée sur la page des Services. En utilisant nos produits, les Services, ou en nous fournissant des informations par tout autre moyen suite à ces modifications, vous acceptez la Politique de confidentialité révisée.","privacy_policy_view_us_warranty_warning":"Vous devez accepter la Garantie limitée Tesla pour enregistrer votre Powerwall et suivre ses informations via l\'application mobile Tesla.","privacy_policy_view_warranty_information":"Je soussigné(e), propriétaire, accepte les conditions de la Garantie limitée du Powerwall Tesla disponible {warrantyLink}. Ces conditions comprennent une clause d’arbitrage par laquelle je renonce à mon droit d\'entamer ou de participer à des recours collectifs et des procès par jury. Je peux dénoncer cette clause dans un délai de 30 jours en suivant la procédure décrite dans la clause.","prompt_factory_reset_confirmation":"Vous confirmez réellement vouloir réinitialiser l\'unité aux réglages d’usine ?","pvac-state-active":"Actif","pvac-state-faulted":"En défaillance","pvac-state-init":"Initialisation...","pvac-state-standby":"En attente du photovoltaïque","pvac_alert_ac_fault":"Défaillance AC de l\'onduleur","pvac_alert_check_ac_note":"Vérifiez le câblage AC et la connexion au réseau. Redémarrez l’onduleur et réessayez.","pvac_alert_check_dc_string1_note":"Vérifiez le câblage et les panneaux de la rangée 1 DC. Redémarrez l’onduleur et réessayez.","pvac_alert_check_dc_string2_note":"Vérifiez la rangée 2 DC, le câblage et les panneaux. Redémarrez l’onduleur et réessayez.","pvac_alert_check_dc_string3_note":"Vérifiez la rangée 3 DC, le câblage et les panneaux. Redémarrez l’onduleur et réessayez.","pvac_alert_check_dc_string4_note":"Vérifiez la rangée 4 DC, le câblage et les panneaux. Redémarrez l’onduleur et réessayez.","pvac_alert_confirm_grid_code_note":"Vérifiez le câblage AC et la connexion au réseau. Confirmez le code de réseau sélectionné.","pvac_alert_dc_fault_string1":"Défaillance DC de l\'onduleur - Rangée 1","pvac_alert_dc_fault_string2":"Défaillance DC de l\'onduleur - Rangée 2","pvac_alert_dc_fault_string3":"Défaillance DC de l\'onduleur - Rangée 3","pvac_alert_dc_fault_string4":"Défaillance DC de l\'onduleur - Rangée 4","pvac_alert_freq_change":"Réseau incompatible - Changement de fréquence","pvac_alert_internal_comms":"Problème de communication interne","pvac_alert_over_freq":"Réseau incompatible - Sur-fréquence","pvac_alert_over_temp":"Surchauffe de l\'onduleur","pvac_alert_over_voltage":"Réseau incompatible - Surtension","pvac_alert_production_limited_note":"La production peut être limitée. Veillez au bon câblage des terminaisons, à un débit d’air et à un espace suffisants autour de l’installation.","pvac_alert_reboot_note":"Redémarrez l’onduleur, s\'assurer que le système est à jour et totalement opérationnel.","pvac_alert_under_freq":"Réseau incompatible - Sous-fréquence","pvac_alert_under_voltage":"Réseau incompatible - Sous-tension","pvi-power-status-dc-only":"DC seulement","pvi-power-status-disabled":"Désactivé","pvi-power-status-enabled":"Activé","pvi-reset-button-label":"Relancez l’onduleur et effacez les alertes","pvs-self-test-1":"Auto-test (1/6) : Défaut de mise à la masse","pvs-self-test-2":"Auto-testAuto-test (2/6) : Défaut d’arc","pvs-self-test-3":"Auto-testAuto-test (3/6) : MCI","pvs-self-test-4":"Auto-testAuto-test (4/6) : Isolation","pvs-self-test-5":"Auto-testAuto-test (5/6) : Soudage de relais","pvs-self-test-6":"Auto-testAuto-test (6/6) : Impédance","pvs_alert_check_arc_fault_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les problèmes de défaut d’arc.","pvs_alert_check_dc_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts de mise à la masse.","pvs_alert_check_dc_string1_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts d\'isolation en se concentrant sur la 1ère rangée.","pvs_alert_check_dc_string2_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts d\'isolation en se concentrant sur la 2ème rangée.","pvs_alert_check_dc_string3_note":"Vérifier le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts d\'isolation en se concentrant sur la 3ème rangée.","pvs_alert_check_dc_string4_note":"Vérifiez le câblage DC, les connexions, les panneaux et les dispositifs à arrêt rapide contre les défauts d\'isolation sur la 4ème rangée.","pvs_alert_check_dc_strings_note":"Vérifier le câblage DC, les connexions, les panneaux et la configuration des rangées.","pvs_alert_dc_arc_fault_detected":"Défaut d’arc DC - détecté","pvs_alert_dc_arc_fault_lockout":"Défaut de mise à la masse - verrouillé","pvs_alert_dc_ground_fault":"Défaut de mise à la masse DC","pvs_alert_dc_isolation_string1":"Problème d\'isolation DC - Rangée 1","pvs_alert_dc_isolation_string2":"Problème d\'isolation DC - Rangée 2","pvs_alert_dc_isolation_string3":"Problème d\'isolation DC - Rangée 3","pvs_alert_dc_isolation_string4":"Problème d\'isolation DC - Rangée 4","pvs_alert_dc_over_voltage":"Surtension DC","pvs_alert_rapid_shutdown":"Arrêt rapide initié","pvs_alert_rapid_shutdown_note":"Vérifiez le disjoncteur AC et le circuit d\'arrêt rapide à faible tension.","registration_container_continue_header":"Adresse e-mail du client saisie : {email}","registration_container_continue_modal_description":"Le client ne pourra pas accéder à l\'application mobile Tesla si l\'adresse e-mail est incorrecte. Assurez-vous que l\'adresse e-mail du client est valide.","registration_container_customer_email_required":"L\'adresse e-mail du client est nécessaire pour activer l\'application mobile Tesla.","registration_container_customer_information_title":"Informations relatives au site","registration_container_fill_required_fields":"L\'installateur ou le client doit remplir tous les champs obligatoires.","registration_container_loading_modal_registering":"Enregistrement","registration_container_reset_form_modal_description":"Veuillez confirmer que vous voulez continuer avec la réinitialisation du formulaire.","registration_container_reset_form_modal_header":"Toute information précédemment saisie sera perdue.","security_container_settings_title_customer":"Modifier ou réinitialiser le mot de passe (client)","security_container_settings_title_installer":"Modifier ou réinitialiser le mot de passe (installateur)","security_view_copied_to_clipboard":"Copié!","security_view_not_wifi_qr_code_error":"N\'est pas un code QR de Wi-Fi.","security_view_scan_qr_code_not_found_error":"Aucun code QR trouvé.","security_view_settings_change_password_error":"Les nouveaux mots de passe ne correspondent pas","security_view_settings_change_password_label":"CHANGER LE MOT DE PASSE","security_view_settings_completed":"TERMINÉ","security_view_settings_new_password_label":"NOUVEAU MOT DE PASSE","security_view_settings_old_password":"MOT DE PASSE ACTUEL","security_view_settings_password_change_info":"Pour modifier le mot de passe, saisissez le mot de passe actuel, puis un nouveau mot de passe.","security_view_settings_password_customer":"MOT DE PASSE","security_view_settings_password_customer_placeholder":"Cinq derniers caractères du mot de passe de l\'autocollant de la passerelle","security_view_settings_password_installer_label":"Mot de passe de la passerelle","security_view_settings_password_reset_info":"Pour réinitialiser le mot de passe, basculez le commutateur sur le Powerwall, puis saisissez les 5 derniers caractères du numéro de série du Gateway.","security_view_settings_password_reset_info_serial":"Pour réinitialiser le mot de passe, basculez le commutateur sur le Powerwall, puis saisissez les 5 derniers caractères du numéro de série de la passerelle.","security_view_settings_password_reset_installer_info":"Pour réinitialiser le mot de passe, basculez le commutateur sur un Powerwall, puis saisissez le mot de passe de l\'autocollant de la passerelle.","security_view_settings_password_reset_installer_info_serial":"Pour réinitialiser le mot de passe, basculez le commutateur du Powerwall, puis saisissez le numéro de série de la passerelle.","security_view_settings_re_enter_password_label":"RE-SAISIR LE NOUVEAU MOT DE PASSE","security_view_settings_reset_password_label":"RÉINITIALISER LE MOT DE PASSE","security_view_settings_serial_customer":"NUMÉRO DE SÉRIE","security_view_settings_serial_customer_placeholder":"Les 5 derniers caractères du numéro de série de la passerelle","security_view_settings_serial_installer_label":"Numéro de série de la passerelle","security_view_settings_success":"Mot de passe mis à jour avec succès","security_view_settings_success_new_password":"Le nouveau mot de passe est :","security_view_settings_toggled_password":"Mot de passe oublié ?","self_test_result_viewer_resi_only":"L\'affichage du journal d\'auto-tests est indisponible.","self_test_results_viewer_collapse_all":"Tout réduire","self_test_results_viewer_column_name":"Nom","self_test_results_viewer_column_result":"Résultat","self_test_results_viewer_column_spec":"Spécifications","self_test_results_viewer_column_test_time":"Heure du test","self_test_results_viewer_column_value":"Valeur","self_test_results_viewer_expand_all":"Tout développer","self_test_results_viewer_failed":"Échec","self_test_results_viewer_in_progress":"En cours","self_test_results_viewer_inconclusive":"Incertain","self_test_results_viewer_not_started":"Non démarré","self_test_results_viewer_passed":"Réussi","self_test_results_viewer_skipped":"Ignoré","self_test_results_viewer_warning":"Avertissement","settings_container_confirm_reset_operation_mode":"Confirmer que le mode a été changé en {operation}","settings_container_heco_modal_description":"Ce paramètre ne peut pas être modifié après la sélection. Vérifiez que le client est actuellement inscrit au programme de bonus de batterie HECO avant de soumettre votre sélection.","settings_container_heco_modal_title":"Vérifier l’inscription","settings_container_heco_view_description":"Le Powerwall se déchargera, à la capacité affectée quotidiennement, pour répondre aux exigences du programme. Ce paramètre ne peut pas être modifié après l’activation.","settings_container_heco_view_scheduled_dispatch_start_time":"Heure de début","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"Distribution programmée HECO","settings_container_heco_view_title":"Programme de bonus de batterie HECO","settings_container_operation_modes_modal_content":"Utilisez l\'écran « Personnaliser » de l\'application mobile Tesla pour modifier les modes de fonctionnement.","settings_container_operation_modes_modal_reset":"RÉINITIALISER LE MODE","settings_container_operation_modes_modal_title":"Mode de fonctionnement","settings_container_operation_modes_modal_warning":"Cette modification est définitive. Les modes avancés peuvent uniquement être réactivés par le biais de l\'application mobile Tesla.","settings_container_operation_modes_reset_modal_title":"Réinitialiser le mode de fonctionnement ?","settings_container_operation_settings_subtitle":"Définissez le nom de votre système, son mode de fonctionnement ainsi que les limitations d\'exportation éventuelles.","settings_container_operation_settings_title":"Paramètres de fonctionnement","settings_container_save_instructions":"Cliquez sur CONTINUER pour enregistrer.","settings_container_saving_site_info_modal":"Enregistrement des paramètres du site","settings_container_site_import_description":"Limite d’importation de site est un paramètre facultatif. Laissez ce champ vide pour désactiver les limites d’importation. Lorsque ce paramètre est activé, il spécifie la puissance maximale qu’il est permis d’importer du réseau vers le site.","settings_container_site_limits_header":"Limites du site","settings_view_custom_modes_label":"MODE PRÉCONFIGURÉ","settings_view_energy_reserve_heco_label":"Les modifications apportées à la réserve de secours sont limitées en raison de l’inscription au programme de bonus de batterie HECO. Le client pourra définir une réserve de secours dans son application.","settings_view_energy_reserve_label":"RÉSERVE DE SECOURS","settings_view_instruction_site_name":"Saisissez un nom de site","settings_view_net_meter_mode":"Mode d’exportation","settings_view_operation_label":"MODE DE FONCTIONNEMENT","settings_view_operation_set_label":"MODE DE FONCTIONNEMENT À DÉFINIR","settings_view_set_net_meter_mode_never_label":"Non-exportation permanente","settings_view_set_net_meter_mode_solar_label":"Exportation solaire","settings_view_site_name":"NOM DU SITE","settings_view_site_name_placeholder":"Ex. Ma Maison","settings_view_solar_export_limitation_slider":"Limitation d’export solaire","settings_view_solar_feature":"Cette fonctionnalité ne devrait être activée que lorsque le fournisseur interdit l’exportation d’électricité photovoltaïque. C\'est le cas par exemple à Hawaï et en Australie.","settings_view_solar_limitation":"POWERWALL INSTALLÉ À CÔTÉ D’UN SYSTÈME SOLAIRE QUI N’EST PAS UN POWERWALL+ ?","settings_view_solar_zero_export":"POWERWALL INSTALLÉ EN MÊME TEMPS QU\'UN SYSTÈME SOLAIRE SANS EXPORTATION ?","site_info_container_submit":"ENVOYER","solar_item_view_baudrate_label":"Débit de transmission","solar_item_view_brand_input_label":"MARQUE","solar_item_view_brand_label":"Marque","solar_item_view_check_inverter":"VÉRIFIER LA CONNEXION DE L\'ONDULEUR {id}","solar_item_view_connection_warning":"Impossible d\'établir la connexion","solar_item_view_inverter_brand":"Marque d’onduleur","solar_item_view_inverter_communication":"Configurer la communication directe avec l\'onduleur","solar_item_view_inverter_model_label":"Modèle d’onduleur","solar_item_view_ip_label":"ADRESSE IP","solar_item_view_model_label":"MODÈLE","solar_item_view_power_rating_explanation":"Il s’agit de la puissance nominale totale du système photovoltaïque par rapport aux modules/panneaux. C\'est donc la puissance nominale de l’installation. Par exemple, si vous avez 10 panneaux solaires de 300 W, indiquez 3 000 W même si l’onduleur PV fait 2 500 W ou 3 500 W.","solar_item_view_pv_array_dc_power_rating":"PUISSANCE NOMINALE CONTINUE DU SYSTÈME PV","solar_item_view_pv_array_dc_power_rating_label":"PUISSANCE NOMINALE CC RÉSEAU PV","solar_item_view_revenue_grade":"Grade de revenu","solar_item_view_revenue_grade_explanation":"Cochez cette option uniquement si l\'onduleur dispose d\'un compteur de niveau de revenus intégré. Les données de l\'onduleur seront lues à partir du compteur à la place de l\'onduleur si cette option est activée.","solar_item_view_revenue_grade_title":"Grade de revenu","solar_item_view_solar":"SOLAIRE {id}","solar_item_view_success":"CONNECTÉ AVEC SUCCÈS!","solar_item_view_unable":"LECTURE DE L\'ONDULEUR IMPOSSIBLE !","solar_list_view_continue_add_solar":"AJOUTER UN ONDULEUR SOLAIRE SUPPLÉMENTAIRE","solar_view_continue_add_solar":"AJOUTER UN ONDULEUR SOLAIRE SUPPLÉMENTAIRE","status_update_urgency_none":"À jour","status_update_urgency_optional":"Mise à jour facultative","status_update_urgency_required":"Mise à jour obligatoire","status_update_urgency_unknown":"Inconnu","success_view_awesome":"GÉNIAL !","success_view_copied_to_clipboard":"Copié!","success_view_installation_complete":"Installation effectuée","success_view_new_password_error_title":"Assistant mot de passe","success_view_new_password_title":"Assistant nouveau mot de passe","success_view_password_set":"Le mot de passe est déjà défini","success_view_record_password":"Veuillez mémoriser ce mot de passe avant de continuer","success_view_retry_registration":"RETENTER L\'ENREGISTREMENT","success_view_set_customer_password":"DÉFINIR LE MOT DE PASSE DU CLIENT","success_view_syncing_configuration":"Synchronisation de la configuration","summary_container_company":"Entreprise","summary_container_connection_type":"Type de connexion","summary_container_email":"E-mail","summary_container_installer_information":"Informations destinées à l\'installateur","summary_container_ip_address":"Adresse IP","summary_container_location":"Lieu","summary_container_meter":"Compteur n° {index}","summary_container_meter_information":"Informations sur le compteur","summary_container_phone":"Numéro de téléphone","summary_container_print":"Imprimer","summary_container_serial_number":"Numéro de série","summary_container_site_info":"Informations relatives au site","summary_container_site_name":"Nom du site","summary_container_subtitle":"Informations sur l\'installation","summary_site_information":"INFORMATIONS RELATIVES AU SITE","summary_view_autonomous":"Contrôle par créneaux horaires","summary_view_backup":"Secours uniquement","summary_view_backup_capable":"Capacité de secours prête","summary_view_backup_reserve":"RÉSERVE DE SECOURS","summary_view_backup_switch":"COMMUTATEUR DE SECOURS","summary_view_conductor_export":"LIMITE D\'EXPORTATION DE CONDUCTEUR","summary_view_conductor_import":"LIMITE D\'IMPORTATION DE CONDUCTEUR","summary_view_control":"Contrôle de site","summary_view_customer_version":"VERSION CLIENT","summary_view_direct":"Direct","summary_view_disabled":"DÉSACTIVÉ","summary_view_ethernet":"ETHERNET","summary_view_export_limit":"LIMITE D\'EXPORTATION PV","summary_view_extra_programs":"PROGRAMMES SUPPLÉMENTAIRES","summary_view_followers":"SUCCESSIFS","summary_view_gateway":"GATEWAY","summary_view_grid_code":"CODE DE RÉSEAU","summary_view_gsm":"CELLULAIRE","summary_view_heco_battery_bonus":"Bonus de batterie HECO","summary_view_ip_address":"ADRESSE IP","summary_view_leader":"PRINCIPAL","summary_view_mode":"MODE","summary_view_msg_cannot_read_solar_assembly":"Arrêtez d’abord le système pour regarder la référence et le numéro de série de l’ensemble photovoltaïque Powerwall+.","summary_view_network":"RÉSEAU","summary_view_non_backup":"Hors secours","summary_view_panel_limit":"COURANT MAXIMAL DU PANEAU","summary_view_part_number":"Référence","summary_view_partnum":"Pièce {partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"Agrégation","summary_view_self_consumption":"Autosuffisance","summary_view_serial":"Série","summary_view_serialnum":"Série {serialNumber}","summary_view_site_export":"LIMITE D\'EXPORTATION DE SITE","summary_view_site_import":"LIMITE D\'IMPORTATION DE SITE","summary_view_site_name":"NOM DU SITE","summary_view_solar_assembly":"ENSEMBLE PHOTOVOLTAÏQUE","summary_view_sync":"CAPACITÉ DE SECOURS","summary_view_time":"SYNTHÈSE DURÉE DE COMPILATION","summary_view_time_zone":"FUSEAU HORAIRE","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"Le dispositif appairé au WiFi ne répons pas actuellement","system-device-unknown-sitecontroller":"Le dispositif n\'a pas encore découvert ses enfants","system_acpw_vitals_charge":"Niveau de charge : {Charge} %","system_acpw_vitals_power":"Alimentation CA : {power}","system_acpw_vitals_power_charging":"Alimentation CA : {power} en cours de charge","system_acpw_vitals_power_discharging":"Alimentation CA : {power} en cours de déchargement","system_acpw_vitals_state":"État du Powerwall : {state}","system_acpw_vitals_voltage":"Tension AC : {voltage}","system_controller_din":"Contrôleur : {din}","system_device_alert_disabled":"Dispositif désactivé","system_device_alert_updating":"Mises à jour du microprogramme en cours...","system_device_gateway_not_islanding":"Ce n\'est pas le contrôleur d\'îlotage.","system_device_leader":"Principal","system_device_name_backup_switch":"Commutateur de secours ({sn})","system_device_name_battery_assembly":"Ensemble de batterie ({sn})","system_device_name_gateway":"Passerelle ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus":"{role} Powerwall+","system_device_name_powerwall_plus_leader":"Powerwall+ leader","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+ (câblé)","system_device_name_powerwall_plus_wireless":"Powerwall+ (sans fil)","system_device_name_remote_meter":"Compteur à distance ({sn})","system_device_name_solar_assembly":"Ensemble photovoltaïque ({sn})","system_device_name_solar_assembly_1":"Ensemble photovoltaïque","system_device_name_sync":"Contacteur de la passerelle/Contrôleur de compteur ({sn})","system_firmware_update":"Mise à jour : {percent}% ({step}/{numSteps})","system_gateway_din":"Passerelle : {din}","system_islanding_vitals_backup_state":"État de réserve : {backupState}","system_islanding_vitals_grid_line":"Ligne du réseau {lineNumber} : {v} {f}","system_islanding_vitals_island_line":"Ligne de l’île {lineNumber} : {v} {f}","system_overview_connected":"Connecté à Tesla","system_overview_disconnected":"Non connecté à Tesla","system_overview_follower":"Powerwall suiveur","system_overview_login_required":"Identifiant requis pour afficher le fonctionnement du système","system_overview_scanning":"Recherche d’appareils...","system_overview_site_controller":"Contrôleur de site","system_overview_updating":"Mise à jour des appareils...","system_pvi_vitals_ac_solar_power":"Puissance photovoltaïque AC : {power} / {current}","system_pvi_vitals_ac_solar_power_only":"Puissance photovoltaïque AC : {power}","system_pvi_vitals_lifetime_energy_kwh":"Énergie pour la durée de vie : {energy}","system_pvi_vitals_state":"État : {message}","system_pvi_vitals_string":"Rangée {number} : {voltage} / {current}","system_pvi_vitals_string_not_connected":"Rangée {number} : Déconnecté","system_remote_meter_ct_line":"CT {n} ({emplacement}) : {valeur}","system_remote_meter_no_cts":"Pas de CT configuré","system_rescan_button_text":"Relancer la recherche d\'appareils","system_scanning_label_text":"Recherche d\'appareils...","system_vitals_missing_value":"---","test_container_configure_subtitle":"Testez le système pour vérifier qu\'il fonctionne correctement.","test_container_system_test_title":"Test du système","test_inverter_container_error_grid_uncompliant":"Le test ne peut pas être exécuté, car le réseau est non conforme.","test_inverter_container_error_not_idle":"Le Powerwall doit être en veille pour l’exécution du test.","test_inverter_container_results_error_plural_subtitle":"{num} tests échoués","test_inverter_container_results_error_singular_subtitle":"{num} test échoué","test_inverter_container_results_success_plural_subtitle":"{num} tests effectués avec succès","test_inverter_container_results_success_singular_subtitle":"{num} test effectué avec succès","test_inverter_container_results_success_subtitle":"Tous les tests ont été effectués avec succès","test_inverter_container_results_title":"Résultats de l’auto-test de l’onduleur","test_inverter_container_title":"Auto-test de l’onduleur","test_meter_composite_view_auxiliary_meter_setup_instructions":"Au moins un transformateur de courant doit être défini pour chaque compteur auxiliaire.","test_meter_composite_view_auxiliary_meters_title":"Compteurs auxiliaires","test_meter_composite_view_configure_meters":"CONFIGURER LES COMPTEURS","test_meter_composite_view_current_transformer_setup_instructions":"Utilisez au moins un TC de site OU un TC de charge, mais pas les deux.","test_meter_composite_view_external_meter_setup_instructions":"Au moins un transformateur de courant doit être défini pour chaque compteur externe.","test_meter_composite_view_external_meters_title":"Compteurs externes","test_meter_composite_view_internal_meters_gateway_title":"Compteurs internes (passerelles)","test_meter_composite_view_internal_meters_title":"Compteurs internes","test_meter_composite_view_no_configured_meters":"AUCUN COMPTEUR CONFIGURÉ. VEUILLEZ {configurer} POUR CONTINUER.","test_meter_composite_view_note":"REMARQUE","test_meter_item_view_acuvim_label":"Compteur {id} : Compteur Acuvim","test_meter_item_view_backup_switch_label":"Compteur {id} : Commutateur du compteur de secours","test_meter_item_view_configure_phases_note":"Configurez les phases pour activer les TC pour ce compteur","test_meter_item_view_internal_meter_x_gateway_label":"Compteur {id} : Compteur principal interne X (Passerelle)","test_meter_item_view_internal_meter_y_gateway_label":"Compteur {id} : Compteur auxiliaire interne Y (Passerelle)","test_meter_item_view_remote_w1_wifi_label":"Compteur {id} : Wi-Fi à distance","test_meter_item_view_remote_w1_wired_label":"Compteur {id} : Câblage à distance","test_meter_item_view_remote_w2_wifi_label":"Compteur {id} : Wi-Fi à distance","test_meter_item_view_remote_w2_wired_label":"Compteur {id} : Câblage à distance","test_meter_item_view_reset":"TOUT RÉINITIALISER","test_meter_item_view_site_meter_title":"Compteur de site interne","test_meter_item_view_sync_id":"Compteur de synchronisation {id}","test_meter_item_view_toggle_advanced":"Avancé","test_meter_item_view_toggle_power":"Puissance","test_meter_item_view_wifi_id":"Compteur {id}","test_meter_item_view_wired_id":"Compteur câblé {id}","test_view_canceled_status":"Le test a été annulé","test_view_failed_status":"Le test a échoué","test_view_idle_status":"Démarrage du test système","test_view_init_status":"Préparation du démarrage du test","test_view_inverter_test_warning_message":"Si vous avez un onduleur PV 0 Export, la procédure d\'auto-test de la passerelle ne peut pas qualifier le système de manière appropriée. Éteignez l’onduleur PV jusqu\'à la fin de l’auto-test.","test_view_passed_status":"Le test a été effectué avec succès","test_view_prep_status":"Initialisation des contrôles : Ceci peut prendre quelques minutes !","test_view_running_status":"Exécution des tests de charge","test_view_skip_start_system_test_text":"Confirmez pour ignorer le test système","test_view_start_system_test_warning":"AVERTISSEMENT","test_view_system_test_completed_message":"Test système terminé !","time_minute":"minute","time_minutes":"minutes","time_second":"seconde","time_seconds":"secondes","time_started_at":"Heure de début {time}","timezone_container_subtitle":"Par géolocalisation et en fonction de l’adresse IP, nous pouvons vous aider à trouver le fuseau horaire correct.","timezone_container_title":"Fuseau horaire","timezone_view_label":"fuseau horaire","toast_view_standard_title":"Note","toast_view_warning_title":"Avertissement","update_container_industrial_updating_description":"Le contrôleur de site va maintenant redémarrer automatiquement pour installer la mise à jour. {lb1}{lb2} Veuillez patienter deux minutes avant de vous reconnecter au réseau du contrôleur de site et de {refresh}","update_container_preparing_title":"Préparation à la dernière mise à jour","update_container_refresh_browser":"Rafraîchissez votre fenêtre de navigation.","update_container_residential_updating_description":"La passerelle va maintenant redémarrer automatiquement pour installer la mise à jour. {lb1}{lb2} Veuillez patienter deux minutes avant de vous reconnecter au réseau passerelle, puis {refresh}","update_container_skip_title":"Ignorer la mise à jour ?","update_container_subtitle":"Vérifiez les mises à jour. Remarque : la transmission de la mise à jour du microprogramme aux Powerwalls se produit sur la page Powerwall.","update_container_subtitle_industrial":"Vérifiez les mises à jour. Remarque : la transmission de la mise à jour du microprogramme aux batteries se produit sur la page Batterie.","update_container_title":"Mise à jour","update_container_updating_title":"Installation de la mise à jour","update_step_item_view_resolution_title":"Solution suggérée","update_view_check_again":"CLIQUEZ POUR REVÉRIFIER","update_view_check_for_update":"RECHERCHER LA MISE À JOUR DE LA PASSERELLE","update_view_check_for_update_industrial":"RECHERCHER LA MISE À JOUR DU CONTRÔLEUR DE SITE","update_view_checking_update":"Vérification des mises à jour","update_view_current_version":"Version actuelle : {version}","update_view_current_version_label":"VERSION ACTUELLE","update_view_downloading":"TÉLÉCHARGEMENT","update_view_downloading_update":"Téléchargement de la mise à jour","update_view_no_power_cicle":"NE PAS ÉTEINDRE L’APPAREIL !","update_view_percent_complete":"{percent} terminés","update_view_progress":"MISE À JOUR EN COURS","update_view_staged":"NOUVELLE VERSION ORGANISÉE","update_view_staged_update":"Prêt pour la mise à jour","update_view_staging":"ORGANISATION","update_view_staging_update":"Préparation de la mise à jour","update_view_time_remaining":"restant","update_view_up_to_date":"VERSION À JOUR","update_view_update_now":"METTRE À JOUR MAINTENANT","update_view_update_urgency_label":"Mettre à jour le statut : {status}","update_view_updated_industrial":"Le logiciel du contrôleur de site est à jour.","update_view_updated_residential":"Le logiciel de la passerelle est à jour.","update_view_wait_minutes":"VEUILLEZ PATIENTER QUELQUES MINUTES","validation_phone":"Insérez un numéro de téléphone valide","vitals_header_subtitle_firmware_update":"Mise à jour du microprogramme en cours...","vitals_header_subtitle_firmware_update_failed":"Échec de la mise à jour du microprogramme. Vérifiez les commutateurs activés et leur raccordement","vitals_header_title":"Système","vitals_powerwall_state_ac_fault":"Défaillance de niveau AC","vitals_powerwall_state_dc_fault":"Défaut de niveau DC","vitals_powerwall_state_grid_following":"Suivi de réseau","vitals_powerwall_state_grid_forming":"Formation de réseau","vitals_powerwall_state_init":"Initialisation","vitals_powerwall_state_off":"Désactivé","vitals_powerwall_state_standby":"En veille","vitals_powerwall_state_support_dc":"Assistance DC","warning":"AVERTISSEMENT","warning_off_grid":"Si le système électrique est déconnecté du réseau, les charges secourues seront éteintes dans un délai de 5 minutes.","warning_on_grid":"Si le système électrique est connecté au réseau, la recharge/décharge du Powerwall est interrompue.","warning_sitemaster_container_not_running":"Le maître du site n\'est pas en cours d\'exécution.","wifi_pairing_link_message":"Ajouter un Powerwall connecté par WiFi","wifi_view_find_network":"RECHERCHER RÉSEAU PAR SSID","wifi_view_note":"Remarque : La Passerelle est compatible uniquement avec les réseaux sans fil 2,4 GHz.","wifi_view_note_five_ghz":"Remarque : la passerelle est compatible avec les réseaux sans fil de 2,4 GHz et de 5 GHz.","wifi_view_readonly":"Ceci est un Powerwall suiveur, de sorte que sa configuration de réseau sans fil ne peut pas être modifiée.","wifi_view_security_label":"SÉCURITÉ","wizard_container_commissioning_wizard":"Assistant de mise en service Tesla","wizard_container_login_required":"Identifiant requis","wizard_container_title":"Commençons.\\n","wizard_container_verifying_login_title":"Vérifier l\'identifiant"}' ); }, function (e) { e.exports = JSON.parse( '{"advanced_settings_error":"エラー","advanced_settings_submit":"送信","advanced_settings_submitted":"送信完了","advanced_settings_title":"詳細設定","alert_container_ac_phase_1_over_voltage":"AC過電圧","alert_container_ac_phase_1_under_voltage":"AC不足電圧","alert_container_ac_phase_2_over_voltage":"AC過電圧","alert_container_ac_phase_2_under_voltage":"AC不足電圧","alert_container_ac_phase_3_over_voltage":"AC過電圧","alert_container_ac_phase_3_under_voltage":"AC不足電圧","alert_container_over_frequency":"AC周波数上昇","alert_container_rate_of_change_frequency":"周波数のAC変化率","alert_container_under_frequency":"AC周波数減少","app_container_engineering_mode_banner_message":"Tesla Service モードは認証は必要ありません。動作を変更する場合は、「システムを停止」してください。ブラウザを閉じる前に、システムの状態を準備してください。このモードでは認証は必要ありません。完了後はブラウザを閉じることができます。","app_container_engineering_mode_title":"Tesla Service モード","app_container_firmware_update_banner_message":"設置および配線を操作したり動かさずに、更新が完了するまで、このページを離れないでください。","app_container_firmware_update_banner_title":"ファームウェアをアップデート中です","app_container_sitemaster_message_title":"システムは現在実行されています。電池ブロックのステータスを表示するには、システムをシャットダウンする必要があります。システムは、ホームページから停止することができます。","app_container_sitemaster_power_supply_mode_banner_message":"ペアリングと構成のために電源装置にAC電圧を供給するバッテリー。ランディング ページでシステムを停止するボタン。","app_container_sitemaster_power_supply_mode_banner_title":"自立運転モード","app_container_sitemaster_running_banner_title":"システム実行中","auto_config_check_network_button":"ネットワークを点検してWiFiを有効にします","auto_config_check_system_and_summary":"システムおよび概要ページを点検します。","auto_config_done_button_text":"完了","auto_config_instructions_cannot_determine_grid_connection":"システムを始動させる前に、バックアップ スイッチまたはGatewayに至る配線を確認します。","auto_config_instructions_determining_on_grid":"このメッセージが3分を超えても消えない場合、自立運転スイッチまたはGatewayに至る配線を確認します。","auto_config_instructions_finding_contactor_controller":"このメッセージが3分を超えても消えない場合、自立運転スイッチまたはGatewayに至る配線を確認します。","auto_config_instructions_finding_powerwalls":"このメッセージが3分を超えても消えない場合、Powerwallの配線を確認します。","auto_config_instructions_lookup_failed_retry":"シリアル番号のステッカーをスキャンしてBoltに読み込ませ、自動Powerwallセットアップを有効にしてから、{retryButton}","auto_config_instructions_lookup_failed_wizard":"または手動Powerwallセットアップには{wizardButton}。","auto_config_instructions_missing_info_1":"以下の情報が欠落しているために自動Powerwallセットアップに失敗しました。","auto_config_instructions_missing_info_2":"手動で入力するには{wizardButton}。","auto_config_instructions_missing_info_3":"手動で{registrationButton}。","auto_config_instructions_no_grid_detected":"システムを指導する前に配線およびブレーカーを点検します。","auto_config_instructions_no_network_retry":"自動Powerwallセットアップを有効にするには{networkLink}、そして{retryButton}","auto_config_instructions_no_network_wizard":"または手動Powerwallセットアップには{wizardButton}。","auto_config_instructions_retry":"問題が解消しない場合{networkLink}","auto_config_instructions_retry_wizard":"または手動Powerwallセットアップには{wizardButton}。","auto_config_instructions_updating":"自動Powerwallセットアップを開始する前にソフトウェアのアップデートが必要です。アップデートは自動的にダウンロードされて適用されます。後ほどPowerwallのWiFiネットワークに再接続する必要がある場合があります。","auto_config_missing_grid":"顧客サイトの電力系統","auto_config_missing_gridcode":"顧客サイトのグリッドコード","auto_config_missing_registration":"製品登録のための顧客情報","auto_config_missing_timezone":"顧客サイトのタイムゾーン","auto_config_network_button_text":"ネットワークのセットアップ","auto_config_registration_button_text":"顧客情報の入力","auto_config_retry_button_label":"再試行","auto_config_run_button_label":"Powerwallを自動セットアップ","auto_config_run_wizard_button_text":"ウィザードの実行","auto_config_section_title":"自動Powerwallセットアップ","auto_config_status_cancelled":"自動セットアップはキャンセルされました。再試行可能:","auto_config_status_cannot_determine_grid_connection":"電力系統の接続を判定できませんでした。","auto_config_status_complete":"問題なく完了","auto_config_status_determining_on_grid":"電力系統の接続を判定...","auto_config_status_finding_contactor_controller":"開閉器コントローラを検索...","auto_config_status_finding_powerwalls":"Powerwallを検索...","auto_config_status_in_progress":"進行中","auto_config_status_lookup_failed":"シリアル番号の参照に失敗","auto_config_status_missing_information":"情報欠落","auto_config_status_no_grid_detected":"電力系統が見つかりません。","auto_config_status_no_network":"Teslaに接続されていません","auto_config_status_not_applicable":"自動セットアップは不要または実行済みです。再実行可能:","auto_config_status_retrying":"失敗したネットワークリクエストを再試行中","auto_config_status_timeout":"自動設定がタイムアウトしました。再試行可能:","auto_config_status_updating":"ソフトウェアのアップデートが必要です","auto_config_stop_system_modal_message":"システムの実行中は、自動セットアッププロセスを実行できません。システムを停止し、もう一度お試しください。","auto_config_stop_system_modal_title":"自動セットアップを始動できません","battery_container_add_all_batteries_button_label":"すべて追加","battery_container_available_batteries_subtitle":"に追加しない限り、バッテリーはシステム作動の一部ではありません。","battery_container_available_batteries_title":"使用可能なバッテリーブロック","battery_container_cannot_communicate":"Powerwallと通信できません。CANバス配線および終端抵抗を確認してください。","battery_container_cannot_communicate_with_device":"デバイスと通信できません。CANバス配線および終端抵抗を確認してください。","battery_container_chinv":"コンプレッサおよびヒーターVFD(CHINV){index}","battery_container_configured_batteries_label":"構成済みのバッテリー ブロック","battery_container_configured_batteries_subtitle":"これらのバッテリーはシステム運用の一部です。","battery_container_confirm_update_firmware":"このプロセスは数分かかる場合があります。更新を中断したり、このページを離れないでください。","battery_container_dcbc":"バッテリーブロック{name}","battery_container_dcbc_comms_failure":"通信失敗。ユニットのネットワーク接続をチェックして、もう一度スキャンしてください。","battery_container_dcbc_dcdisconnect_opened":"DC切断ハンドルがオフ位置にあります。","battery_container_dcbc_door_switch_opened":"インバータードア有効化ラインが開いています。ドアスイッチを確認してください。","battery_container_dcbc_enable_line_return_low_estop":"インバーター遠隔シャットダウンが開いています。遠隔シャットダウン回路を確認してください。","battery_container_dcbc_enable_line_return_low_inv":"インバータシステム有効化ラインが開いています。回路遮断器フィードバックを確認してください。","battery_container_dcbc_enable_line_return_low_str":"1つ以上のパワーパック列の有効化ラインが開いています。配線とパワーパックのドアを確認してください。診断用有効化ライン トラブルシューティングガイドを参照してください。","battery_container_delete_button_title":"このデバイスを削除","battery_container_diagnosis_incomplete":"診断が完了していません。このほかのチェックを実行する前に、ファームアップは必要です。","battery_container_faults":"故障","battery_container_firmware_update_needed":"ファームウェアのアップデートが必要です。","battery_container_gateway_contactor_meter_controller":"Gateway開閉器/メーター コントローラ","battery_container_industrial_confirm_update_firmware":"これにより、各電池ブロックおよびそのサブコンポーネントのファームウェアが更新されます。","battery_container_industrial_confirm_update_firmware_info":"これにより、内の各バッテリー ブロックのファームウェアが更新されます","battery_container_internal_communications_fault":"内部通信エラー。CANバス配線および終端を確認し、ファームアップを行なってください。","battery_container_meter_socket_adapter":"自立運転スイッチ","battery_container_mpbc":"バッテリー ブロック{index}","battery_container_mpthc":"サーマル コントローラー(MPTHC){index}","battery_container_no_msa_detected":"自立運転スイッチは検出されませんでした。","battery_container_no_sync_detected":"接触器コントローラーは検出されませんでした。バックアップ機能は検出されませんでした。","battery_container_package_number":"{PackagePartNumber}--{PackageSerialNumber}","battery_container_part_number":"PN: {pn}","battery_container_pod":"ポッド {index}","battery_container_post":"ポスト(LCC){index}","battery_container_post_missing":"欠落ポスト{index}","battery_container_powerpack":"パワーパック {index}","battery_container_powerstage":"パワーステージ{index}","battery_container_powerwall":"{index} Powerwall","battery_container_powerwall_switched_off":"Powerwallのスイッチが切られています。スイッチがON位置にあることを確認してください。","battery_container_qbms":"Qbert(QBMS)","battery_container_qhvp":"高電圧プロセッサー(QHVP)","battery_container_residential_confirm_update_firmware":"これは、各Powerwallのファームウェアおよび接触器コントローラー(ある場合)を更新します。","battery_container_resolve_connectivity":"ファームアップを実行する前に接続の問題を解決してください。","battery_container_scan":"スキャン","battery_container_scan_in_progress":"スキャン中…","battery_container_scbc":"充電器ブロック{index}","battery_container_scthc":"サーマル コントローラー(SCTHC){index}","battery_container_self_tests_failure":"自己テストで合格しませんでした。","battery_container_self_tests_inconclusive":"自己テスト結果が未決定です。","battery_container_self_tests_internal_error":"自己テストは内部システムエラーにより失敗しました。","battery_container_self_tests_stall":"タイムアウト:自己テストをスタートすることができません。","battery_container_self_tests_system_down":"システムのダウン中は、自己テストを実行することができません。システムを始動し、もう一度お試しください。","battery_container_self_tests_updating":"バッテリーをアップデートしている際は、セルフテストを実行することができません。アップデートが完了してから再試行してください。","battery_container_serial_number":"SN: {sn}","battery_container_solar_powerwall":"{index}ソーラーPowerwall","battery_container_starc":"DC-DCコンバーター(STARC){index}","battery_container_stitch":"コントロール パワーDC-DC(STITCH)","battery_container_synchronizer":"接触器コントローラー","battery_container_unknown":"未知のバス コントローラー{index}","battery_container_update_failed":"更新が失敗しました。配線を確認し、スイッチが更新処理中に中断されないようにして、もう一度お試しください。","battery_container_update_firmware":"ファームウェアのアップデート","battery_container_update_in_progress":"アップデートが進行中です…","battery_container_waiting_to_report_firmware":"ユニットからファームウェア・バージョンの報告を待機中。","battery_container_warnings":"警告","button_label_generate":"発電","can_reboot_message_backup":"自立運転モード","can_reboot_message_block_update":"ブロック アップデート進行中","can_reboot_message_enumeration":"計数進行中","can_reboot_message_initializing":"システム初期化中","can_reboot_message_power_flow_is_too_high":"電力フローが高すぎ","can_reboot_message_updating":"サイト パッケージ アップデート進行中","caution":"注意","charger_settings_cabinet":"Cabinet {sn} {state}","charger_settings_cabinet_posts_warning":"これらのコントロールはポスト イネーブルおよびキャビネット内部のHVバスだけを停止します。キャビネットにアクセスする際は依然として電力を遮断し、安全手順に従う必要があります。","charger_settings_common_bus":"Common Bus {state}","charger_settings_common_bus_warning":"コモンHVバスだけを停止しますキャビネットにアクセスする際は依然として電力を遮断し、安全手順に従う必要があります。","charger_settings_disabled":"無効","charger_settings_enabled":"有効","charger_settings_post":"Post {id} {state}","charger_settings_saving":"saving {spinner}","client_protocols_container_subtitle":"クライアント プロトコルの有効/無効を切り替える。","client_protocols_container_title":"クライアント プロトコル","client_protocols_menu_title":"クライアント プロトコル","client_protocols_view_dnp3_label":"DNP3","client_protocols_view_m2m_label":"REST API","client_protocols_view_modbus_label":"Modbus TCP/IP","compliance_container_label_fcc_id":"FCC ID:{fccId}","compliance_container_label_ic_id":"IC:{icId}","compliance_container_label_manufacturer":"製造者: {manufacturer}","compliance_container_label_model":"モデル: {model}","compliance_container_title":"コンプライアンス","component-menu-title":"コンポーネント","conductor_limit":"蓄電池の制御により、幹線あるいは受電点にて電流の制限値を設ける事ができる。","conductor_min_current":"幹線の逆潮流上限値","control_container_add_on":"追加機能","control_container_always_active":"常時スタンバイ","control_container_battery_ok":"フルバッテリーエクスポートが可能","control_container_charge_power_target":"充電パワーターゲット","control_container_conductor_max_current":"幹線の潮流上限値","control_container_conductor_min_current_max_bound":"{mode} の上限値は200A","control_container_conductor_min_current_min_bound":"{mode} の下限値は5A","control_container_control_subtitle":"コントロールサブタイトル","control_container_control_title":"コントロールタイトル","control_container_direct":"直接指令","control_container_disable":"無効","control_container_discharge_power_target":"放電パワーターゲット","control_container_enabled":"使用可能","control_container_energy_target":"エネルギーターゲットこの値は、正常な状態では、設計資料および検査報告書によるシステムサイズと一致します。","control_container_error_message":"{mode}は必須です","control_container_explanation_bullet_five_max_site_meter_power_kw":"この制限値より負荷が大きい場合、蓄電池はこの制限値を越えることを防ぐため可能な限り放電を行います。","control_container_explanation_bullet_five_min_site_meter_power_kw":"この制限値より総発電量が大きい場合、バッテリーはこの制限値を越えることを防ぐため可能な限り充電を行います。","control_container_explanation_bullet_four_max_site_meter_power_kw":"負荷がこの制限値を下回る場合、バッテリー充電は許容範囲内に制限されます。","control_container_explanation_bullet_four_min_site_meter_power_kw":"総発電量がこの制限値を下回る場合、バッテリー放電は許容範囲内に制限されます。","control_container_explanation_bullet_one_max_site_meter_power_kw":"受電点正潮流制限値はオプション設定です。制限値を無効化する場合はこの欄を空欄にします。","control_container_explanation_bullet_one_min_site_meter_power_kw":"受電点逆潮流制限値はオプションの設定です。制限値を無効化する場合はこの欄を空欄にします。","control_container_explanation_bullet_three_max_site_meter_power_kw":"これはすべての相にわたるサイトメーターの総限度値です。(注記: 負荷メーターが使用される場合、サイトメーターは負荷電力、太陽光発電力、また蓄電池電力を使用して計算されます。)","control_container_explanation_bullet_three_min_site_meter_power_kw":"これはすべての相にわたるサイトメーターの総限度値です。(注記: 負荷メーターが使用される場合、サイトメーターは負荷電力、太陽光発電力、また蓄電池電力を使用して計算されます。)","control_container_explanation_bullet_two_max_site_meter_power_kw":"有効にした場合、Sitemasterの制御により受電点からの買電電力の最大値をコントロールします。","control_container_explanation_bullet_two_min_site_meter_power_kw":"有効にした場合、Sitemasterの制御により受電点の逆潮電力の最大値をコントロールします。","control_container_explanation_export_restrictions_locked":"系統への逆潮をどのように行うかを決定します。設定後に変更を行う場合は、Teslaにお問い合わせいただく必要があります。","control_container_explanation_export_restrictions_unlocked":"逆潮電力の設定できるのは最初の試運転調整時のみとなっています。修正を希望される場合はTeslaにご連絡ください。","control_container_explanation_nominal_system":"この値は、正常な状態では、設計資料および検査報告書に従よるシステムサイズと一致します。","control_container_heat_for_energy":"ヒートモード:電力量確保","control_container_heat_mode":"ヒートモード","control_container_heco_committed_capacity":"確約容量","control_container_heco_committed_discharge_power_W_max_bound":"{mode}の最大値は100000 W(100 kW)","control_container_heco_committed_discharge_power_W_min_bound":"{mode}の最小値は100 W","control_container_loading":"読み込み中","control_container_max_site_meter_power_W_max_bound":"{mode} の上限値は50000W(50kW)","control_container_max_site_meter_power_W_min_bound":"{mode} の下限値は1000W(1kW)","control_container_max_site_meter_power_kW_positive":"{mode}は0以上である必要があります。","control_container_max_site_meter_power_kw":"受電点正潮流制限値","control_container_max_site_meter_power_w":"受電点正潮流制限値","control_container_menu":"メニュー","control_container_min_site_meter_power_kW_positive":"{mode}は0以上である必要があります。","control_container_min_site_meter_power_kw":"受電点逆潮流制限値","control_container_min_site_meter_power_w":"受電点逆潮流制限値","control_container_minimum_charge_power":"最小充電電力","control_container_minimum_discharge_power":"最小放電電力","control_container_misc":"MISC","control_container_net_meter_mode":"逆潮流の限度","control_container_never":"逆潮無し","control_container_nominal_system_energy_kW_positive":"{mode}は0以上である必要があります。","control_container_nominal_system_energy_kWh_positive":"{mode}は0以上である必要があります。","control_container_nominal_system_energy_kwh":"公称システム電力量","control_container_nominal_system_energy_max_error":"公称システム電力量が最大エネルギー限度を超えています。","control_container_nominal_system_power_kw":"公称システム電力","control_container_nominal_system_power_max_error":"公称システム電力が最大電力を超えています。","control_container_number_error_message":"{mode}は数値入力である必要があります。","control_container_power":"電力","control_container_pv_only":"太陽光メーターの計測値まで逆潮可能","control_container_reactive_mode":"無効電力モード","control_container_real_mode":"有効電力モード","control_container_reset":"リセット","control_container_site_control":"サイト コントロール","control_container_site_limits":"受電点の制限値","control_container_site_max_power":"サイト最大電力","control_container_site_min_power":"サイト最小電力","control_container_submit":"送信","control_container_submitting_control":"コントロール信号送信","control_start":"スタート","control_stop":"停止","current_password_placeholder_text":"現在のパスワードを入力してください","current_transformer_item_view_200a_ct":"200/264A","current_transformer_item_view_800a_ct":"800A","current_transformer_item_view_amp_dropdown_title":"アンペア{id}","current_transformer_item_view_battery_ct":"蓄電池","current_transformer_item_view_calculated_reading":"計算値:","current_transformer_item_view_conductor_ct":"幹線","current_transformer_item_view_ct_voltage_pairing_1":"L1相","current_transformer_item_view_ct_voltage_pairing_2":"L2相","current_transformer_item_view_ct_voltage_pairing_3":"L3相","current_transformer_item_view_ct_voltage_pairing_default":"デフォルト位相","current_transformer_item_view_doubled_solar_ct":"太陽光(1CT x2)","current_transformer_item_view_flip":"逆向き","current_transformer_item_view_generator_ct":"発電機","current_transformer_item_view_load_ct":"負荷","current_transformer_item_view_measure_pw_plus_input":"Powerwall+インバーターを測定","current_transformer_item_view_measured_reading":"CT当たり:","current_transformer_item_view_missing_ct":"喪失","current_transformer_item_view_no_reading":"読み取り値なし","current_transformer_item_view_none_ct":"なし","current_transformer_item_view_phase_sequence_dropdown_title":"相","current_transformer_item_view_site_ct":"サイト","current_transformer_item_view_smart_ct":"スマート","current_transformer_item_view_solar_ct":"太陽光","current_transformer_item_view_solar_rgm_ct":"太陽光収入のみ","current_transformers_container_800a_ct_ensure":"このページのCTの選択が設置済み機種と一致することを確認してください。","current_transformers_container_800a_ct_larger":"800 A CTは200/264のA CTより物理的に大きくなります。","current_transformers_container_800a_ct_use_case":"大型コンダクタあるいはパネル(400A/800Aのような)を測定する場合、800A CTを使用して設定を行ってください。","current_transformers_container_amps_explanation":"CTを通って流れる電流","current_transformers_container_check_phase_doubled_solar_ct_bullet":"正確な位相 ({sequence})でCTが設置されていることを確認してください。","current_transformers_container_configure_subtitle":"CTのメーターを設定してください。","current_transformers_container_ct_flipping_ensure_direction":"最初に、CTラベルがソーラーのインバーターに面している(ソーラーCTの場合)、または系統側に面している(サイトCTの場合)ことを確認してください。次に、各相の配線位置をチェックして、電流、力および力率読み取り値を確認してください。","current_transformers_container_ct_flipping_modal_title":"ソフトウェアによるのCTフリッピング","current_transformers_container_ct_flipping_software_incorrect_metering":"間違った位相で設置されたCTをソフトウエアにより反転させた場合、正しく測定できなくなります。","current_transformers_container_ct_flipping_wrong_phase":"マイナス電力値は、CTが逆あるいは間違った位相で設置されていることを示す場合があります。","current_transformers_container_double_check_recommendation":"続行する前に、配線、電圧、タップ、CTおよびメーター構成を再度確認してください。","current_transformers_container_doubled_solar_ct_explanation":"バランスPVインバーターの測定に単一のCTを使用することができます。","current_transformers_container_doubled_solar_ct_modal_title":"1つのCTでの単相3線のソーラーインバーターの測定","current_transformers_container_grid_code_phase_modal_title":"警告: CT数が推奨グリッド コード位相と一致しません。","current_transformers_container_grid_code_phase_multiple_meters_modal_title":"警告: CTの数が、複数のメーターの推奨グリッドコード位相と一致しません。","current_transformers_container_grid_code_phase_multiple_warnings_message":"下記の{numMeters} のメーターで予期しない数のCTが含まれています:","current_transformers_container_grid_code_phase_warning_message":"下記のメーターで予期しない数のCTが含まれています:","current_transformers_container_grid_code_single_phase_warning":"適用されるグリッドコードは単相です。単相システムは典型的には、1相あるいは3相サービスのどちらかです。{lb} 奇数個のCT(1または3)が推奨されます。","current_transformers_container_grid_code_split_phase_warning":"適用されるグリッドコードは単相3線です。典型的には単相3線は各相に一つずつCTを取り付けます。 {lb} 太陽光CTを一つにするオプションを除いて、CTの数は偶数(2か4)をお勧めします。","current_transformers_container_is_revenue_grade_solar_ct_modal_explanation_revised":"計量法に基づいた計量(RGM)を有効にするためには、Powerwall+ソーラーインバーターを測定するNeurioメーターが必要です。","current_transformers_container_is_revenue_grade_solar_ct_modal_prompt_revised":"Powerwall+ソーラーインバーターを測定していれば「はい」を選択します。Powerwall+アセンブリの一部でないソーラーインバーターを測定していれば「いいえ」を選択します。","current_transformers_container_is_revenue_grade_solar_ct_modal_title":"Powerwall+インバーターを測定していますか?","current_transformers_container_label_direction_doubled_solar_ct_bullet":"CTラベルがソーラーインバーターに面していることを確認してください。","current_transformers_container_label_modal_title":"ラベルの説明","current_transformers_container_load_ct_ensure":"負荷CTを構成する場合、サイト上の負荷がすべて測定され、バックアップのある負荷、およびバックアップのない負荷が別個に測定されていることを確認してください。","current_transformers_container_load_ct_modal_title":"CTのロード","current_transformers_container_load_ct_recommended":"サイトCTが使用できない場合のみ、負荷用CTを使用可能となります。","current_transformers_container_meter_id":"メーター{id}","current_transformers_container_no_load_and_site_ct":"負荷とサイトの両方のCTがあるとは限らない場合があります。","current_transformers_container_no_loads_doubled_solar_ct_bullet":"CTの裏には負荷を設置できません。","current_transformers_container_no_site_or_load_warning":"サイトまたは負荷電流の変圧器が設定されていません","current_transformers_container_no_solar_ct_warning":"ソーラーCTは設定されていません","current_transformers_container_no_solar_inverter_warning":"ソーラーインバーターは設定されていません","current_transformers_container_phase_usages_modal_title":"警告: CT設定が相構成と一致しません。","current_transformers_container_phase_usages_warning":"構成された位相の数が、構成されたCTの数と一致しません。{lb} {num} 個のCT設定が推奨されます。","current_transformers_container_phase_usages_warning_message":"下記のメーターで予期しない数のCTが含まれています:","current_transformers_container_power_amperage_configure_warning":"{type}CTでは、陽極電力とアンペア数の両方を正確に設定する必要があります。","current_transformers_container_power_factor_explanation":"力率(Power_Real/Power_Apparent)。高電源レベルでのみ表示されます。共通の抵抗型負荷については、力率は1の値の近くになります。低い力率は、CTの設置が不正確か、あるいは非常に大きい容量性/誘導負荷が存在する可能性があります。","current_transformers_container_power_factor_out_of_range_warning":"力率測定が規定範囲外です。{lb} 測定された力率: {powerFactor}PF{lb}メーターの設置が不正または位相が不正確か、あるいは、非常に大きな容量性/誘導負荷が存在する可能性があります。","current_transformers_container_system_test_configured_incorrect":"警告: CT{id}の設定が不正です。","current_transformers_container_title":"CT","current_transformers_container_voltage_out_of_range_warning":"電圧が規定範囲外です。{lb}測定電圧: {volts}V{lb}このCTの測定電圧は正常な動作範囲にありません。","current_transformers_container_volts_explanation":"ラインから電流変流器と関連する電圧タップ中の中立までの電圧","current_transformers_container_watts_explanation":"関連する電圧タップ中の電圧がかかったCTを流れる電力","customer_installation_view_email_label":"お客様のメールアドレス","customer_installation_view_email_placeholder":"Eメール","customer_registration_view_address_label":"建物名・号室","customer_registration_view_address_placeholder":"建物名・号室","customer_registration_view_city_label":"市区町村・番地","customer_registration_view_city_placeholder":"市区町村・番地","customer_registration_view_clear_form":"記入をクリア","customer_registration_view_country_label":"国","customer_registration_view_customer_information":"お客様情報","customer_registration_view_email_address_label":"メールアドレス","customer_registration_view_email_address_label_confirmation":"Eメールを再入力","customer_registration_view_email_placeholder":"Eメール","customer_registration_view_family_name_label":"苗字","customer_registration_view_family_name_warning":"苗字を入力してください","customer_registration_view_given_name_label":"名前","customer_registration_view_given_name_warning":"名前を入力してください","customer_registration_view_homeowner_family_name_placeholder":"苗字","customer_registration_view_homeowner_given_name_placeholder":"名前","customer_registration_view_installation_address":"設置先住所","customer_registration_view_phone_number_label":"電話番号","customer_registration_view_phone_placeholder":"電話","customer_registration_view_skip_explanation":"スキップした場合、所有者は、システムにアクセスする前にTeslaモバイルアプリから登録を実施することが必要になります。","customer_registration_view_state_placeholder":"都道府県","customer_registration_view_state_province_region_label":"都道府県","customer_registration_view_zip_label":"郵便番号","customer_registration_view_zip_placeholder":"郵便番号","diagnostic-alert-affected-children":"影響をうけるコンポーネント({count})","diagnostic-alerts-missing-alert-information":"アラート情報喪失","diagnostic-alerts-missing-data":"<フィールドに入力がありません>","diagnostic-alerts-toolbox-article":"ツールボックス記事","diagnostic-alerts-toolbox-article-external-link":"外部リンク","diagnostic_alert_alert_name":"アラート名","diagnostic_alert_alert_type":"アラートのタイプ","diagnostic_alert_audience":"対象","diagnostic_alert_clear_condition":"条件をクリア","diagnostic_alert_description":"説明","diagnostic_alert_display_name":"名前を表示","diagnostic_alert_id":"アラートID","diagnostic_alert_impact_category":"影響カテゴリー","diagnostic_alert_latching":"ラッチしている","diagnostic_alert_max":"最大","diagnostic_alert_min":"最小","diagnostic_alert_name":"名称","diagnostic_alert_node":"ノード","diagnostic_alert_offset":"オフセット","diagnostic_alert_payload_signals":"ペイロード信号","diagnostic_alert_potential_impact":"潜在的影響","diagnostic_alert_safety_reason":"安全上の理由","diagnostic_alert_scale":"スケール","diagnostic_alert_set_condition":"条件を設定","diagnostic_alert_signal_name":"信号名","diagnostic_alert_signoff":"サイン オフ","diagnostic_alert_sna_value":"SNA値","diagnostic_alert_supplier_dtc_name":"サプライヤーDTC名","diagnostic_alert_uiID":"UI ID","diagnostic_alert_units":"単位","diagnostic_alert_urgent":"緊急","diagnostic_category_item_view_alerts_description":"サイト、コンポーネントおよびサブコンポーネント アラート","diagnostic_category_item_view_download_results":"結果をダウンロード","diagnostic_category_item_view_internal_comms_description":"すべてのデバイス通信をチェックしてください","diagnostic_category_item_view_internal_comms_title":"デバイス通信","diagnostic_category_item_view_live_results":"最新の結果","diagnostic_category_item_view_metering_description":"メーターの接続を確認してください","diagnostic_category_item_view_metering_title":"測定","diagnostic_category_item_view_networking_description":"ネットワークの接続を確認してください","diagnostic_category_item_view_networking_title":"ネットワーキング","diagnostic_category_item_view_no_selected_tests":"選択されたテストはありません","diagnostic_category_item_view_rerun_selected":"選択された{num}テストを再実行","diagnostic_category_item_view_rerun_selected_test":"選択されたテストを再実行","diagnostic_category_item_view_run_selected":"選択された{num}テストを実行","diagnostic_category_item_view_run_selected_test":"選択されたテストを実行","diagnostic_category_item_view_select_all_tests":"全てを選択","diagnostic_category_item_view_self_tests_description":"システムの充電放電テストを開始します","diagnostic_category_item_view_self_tests_title":"自己診断テスト","diagnostic_category_item_view_toggle_all_tests":"すべて変更","diagnostic_input_view_blocks_label":"ブロック","diagnostic_input_view_individual_test_name_label":"個別テスト名","diagnostic_input_view_max_allowed_charge_power_label":"最大許容充電電力","diagnostic_input_view_max_allowed_discharge_power_label":"最大許容放電電力","diagnostic_test_enable_line":"ラインを有効化","diagnostic_test_item_view_ac_self_test_description":"AC電力自己診断テスト","diagnostic_test_item_view_ac_self_test_description_2":"一連のパワースロッシュテストをAC系統に実行します。Powerpackシステムは「MAX_ALLOWED_POWER」設定を使用します。これらをMegapackおよびスーパーチャージャーシステムに対して0に設定します。","diagnostic_test_item_view_dc_self_test_description":"DC電力自己診断テスト","diagnostic_test_item_view_dc_self_test_description_2":"DC系統に対して温度チェックを含む一連のテストを実行します。","diagnostic_test_item_view_enable_line_description":"PowerwallのスイッチがONの位置の確認テスト","diagnostic_test_item_view_enable_line_resolution":"スイッチをONにし、再度お試しください。","diagnostic_test_item_view_individual_self_test_description":"構成済みバスコントローラーで使用可能なセルフテストのリストを選択します。","diagnostic_test_item_view_meter_comms_description":"メーター通信の確認","diagnostic_test_item_view_network_connection_description":"インターネットとTeslaサーバーへの接続テスト","diagnostic_test_item_view_network_connection_resolution":"ネットワーキングを再設定","diagnostic_test_item_view_resolution_generic_text":"{name}を再設定し、再度お試しください。","diagnostic_test_item_view_step_canceled":"テストはユーザー操作により取り消されました。","diagnostic_test_item_view_step_config_update_status":"Tesla Configurationサーバーステータスのチェック","diagnostic_test_item_view_step_google_http":"Ping Google HTTP","diagnostic_test_item_view_step_google_https":"Ping Google HTTPS","diagnostic_test_item_view_step_hermes_status":"Tesla Loggingサーバーステータスのチェック","diagnostic_test_item_view_step_results_ip_address":"IP アドレス","diagnostic_test_item_view_step_results_subnet_mask":"サブネット:","diagnostic_test_item_view_table_header_key":"識別子","diagnostic_test_item_view_table_header_name":"ステップ ","diagnostic_test_item_view_table_header_value":"値","diagnostic_test_meter_comms":"メーター通信","diagnostic_test_network_connection":"ネットワーク接続","diagnostics_composite_view_no_tests_found":"利用可能なテストはありませんでした","diagnostics_composite_view_run_all_selected_tests":"選択されたテストをすべて実行","diagnostics_container_industrial_disruptive_tests_description":"次のテストで、ファンおよびサーマルシステムが作動し、ノイズを生成します。インバーター当たりおよそ30kWの消費が予期されます。さらに、次のテストで、システムの通常動作が中断されることがあります:","diagnostics_container_required_inputs_description":"次のテストには追加の入力が必要です。","diagnostics_container_residential_disruptive_tests_description":"次のテストを行った場合、ゲートウェイとPowerwallの両方の通常動作が中断されることがあります:","diagnostics_container_stop_test_title":"{name}テストを停止しますか?","diagnostics_container_subtitle":"システム設置に関する問題を分析するためのツール。","diagnostics_container_tests_running":"自己診断テスト中","diagnostics_container_title":"診断","disabled_reason_battery_breaker_open":"バッテリー ブレーカーが開いています","disabled_reason_checking_firmware_update":"ファームウェア アップデートの確認中","disabled_reason_config":"構成ファイルによって無効化","disabled_reason_excessive_voltage_drop":"過剰な電圧低下","disabled_reason_firmware_update_failed":"ファームウェアアップデートに失敗","disabled_reason_gridcode_write_failed":"グリッドコード設定に失敗","disabled_reason_user_requested":"ユーザー リクエストで無効化","dropdown_default_placeholder":"入力...","dropdown_list_view_not_listed_label":"記載なし: \\"{searchText}\\"","dropdown_list_view_select_all":"全てを選択","dropdown_list_view_select_field":"欄を選択してください。","dropdown_list_view_show_complete":"完全リストに切替","dropdown_list_view_show_searchable":"検索リストに切替","enumeration_warning_details_miswired_12v":"2つのPowerwall+を接続する場合、Gateway/バックアップ スイッチに接続されているユニットだけに12 Vを印加してください。チェーン内で後続するすべてのPowerwall+から12 Vを切り離し、(このページの末尾にある)デバイスを再スキャンして、この警告をクリアします。","enumeration_warning_details_multiple_controllers_gateway":"ソーラー アセンブリの右上にあるすべてのPowerwall+サイト コントローラの電源ハーネスのプラグを外します。","enumeration_warning_details_multiple_controllers_powerwall_with_msa":"ソーラー アセンブリの右上にある、拡張Powerwall+サイト コントローラ(バックアップ スイッチに接続していない)の電源ハーネスのプラグを外します。","enumeration_warning_details_multiple_controllers_powerwall_with_sync":"ソーラー アセンブリの右上にあるすべてのPowerwall+サイト コントローラの電源ハーネスのプラグを外します。Backup Gatewayを接続することで、システムの試運転を実施します。","enumeration_warning_details_multiple_controllers_unknown":"CANで配線された複数のPowerwall+をセットアップする場合は、サイト コントローラ1つだけしか電源が入っていないようにする必要があります。","enumeration_warning_details_multiple_controllers_unknown_with_details":"1つのサイトコントローラーだけが有効である必要があります。Backup Gatewayを使用する場合、すべてのPowerwall+コントローラーのプラグを抜きます。自立運転スイッチを使用する場合、1台を除きすべてのPowerwall+コントローラーのプラグを抜きます。1つのサイトコントローラーだけが有効になるまで「ウィザードを実行」は無効になります。","enumeration_warning_title_miswired_12v":"12 V配線エラー","enumeration_warning_title_multiple_controllers":"複数のサイト コントローラが通電中","error_details":"エラー詳細","error_item_view_check_network":"ネットワーク接続を確認してください。","error_item_view_disconnected":"ゲートウェイから切断されました。ネットワーク接続をチェックし{refresh}します。","error_item_view_forgot_password":"パスワードをリセットするには、クリックしてください。","error_item_view_refresh_browser":"ブラウザを更新。","error_item_view_try_logging_in_again":"もう一度ログインをお試しください。","ethernet_view_backup_dns_label":"バックアップDNSサーバー","ethernet_view_backup_dns_warning":"有効なバックアップDNSサーバー","ethernet_view_configuration_label":"設定","ethernet_view_dhcp_label":"DHCP","ethernet_view_gateway_label":"ゲートウェイ","ethernet_view_gateway_warning":"有効なゲートウェイ(ルーター)のIP","ethernet_view_ip_address_label":"IP アドレス","ethernet_view_ip_address_warning":"有効なIPアドレス","ethernet_view_not_available":"利用できません","ethernet_view_primary_dns_label":"プライマリDNSサーバー","ethernet_view_primary_dns_warning":"有効なプライマリDNSサーバー","ethernet_view_static_label":"固定","ethernet_view_subnet_mask_label":"サブネット マスク","ethernet_view_subnet_mask_warning":"有効なサブネット マスク","factory_reset_message":"これによりユニットはTesla指定のデフォルト状態にリセットされます。この操作は元に戻すことができません。使用可能にするには、このユニットを専門設置技術者によって再度試運転する必要があります。ユニットのWiFiネットワークを再接続する必要がある場合があります。","field_false":"誤り","field_true":"正しい","follower_powerwall_message":"このPowerwallは{leader}によって制御されています","follower_powerwall_title":"フォロワーPowerwall","form_legend_text":"必要なフィールドを表示","generation_container_connecting_status":"接続しています","generation_container_connection":"インバーター{id}接続","generation_container_connection_summary":"この接続プロセス中に、一時的にネットワークが切断されることがあります。{lb}正確なネットワークに再度接続したことを確認します。これには最長で 3 分ほどかかることがあります。","generation_container_subtitle":"ソーラーインバーターおよび発電機情報の両方を以下に追加してください。","generation_container_title":"発電","generator_item_view_disconnect_type_label":"解列手法","generator_item_view_generator":"発電機{id}","generator_item_view_manufacturer_label":"メーカー(OPT)","generator_item_view_model_label":"モデル","generator_item_view_serial_label":"シリアル","generator_item_view_sustained_power_label":"保持される電力","generator_view_add_generator":"発電機を追加","grid_code_container_off_grid_confirmation":"システムはオフグリッドですか?","grid_code_container_off_grid_detected":"オフグリッドシステムを検知しました。これが正確な設定であることを確かめてください。","grid_code_container_off_grid_warning":"{warning}: システムのオフグリッドステータスを検知することができませんでした。オフグリッドステータス設定不良はシステム障害に帰着するおそれがあります。","grid_code_container_results":"電力系統運用検出結果","grid_code_container_retrieving":"グリッドコードの検索","grid_code_container_saving":"電力系統コードの保存中","grid_code_container_subtitle":"場所とメーターの読み取り値に基づいて、設置に最良の設定を見つけてください。","grid_services_view_grid_services":"グリッド サービス","heading_change_password":"パスワードを変更する","help_view_how_password":"ゲートウェイ上でパスワードを見つける","help_view_how_password_description":"ゲートウェイのドアを開けてください。パスワードはラベルにあります。\\"Password:\\"","help_view_how_serial_number":"非バックアップゲートウェイ上でシリアル番号を見つける","help_view_how_serial_number_backup":"バックアップゲートウェイ上でシリアル番号を見つける","help_view_how_serial_number_backup_description":"バックアップゲートウェイのドアを開けてください。シリアル番号は/から始まります。\\"(S):\\"","help_view_how_serial_number_description":"ゲートウェイのドアを開けてください。シリアル番号は/から始まります。\\"(S):\\"","help_view_how_to_enable_line":"Powerwallの操作","help_view_how_to_enable_line_description":"Powerwallスイッチのオンとオフを切替えます複数台Powerwallシステムでは変更が必要なスイッチは一つだけです。","hierarchy_charger":"充電器ブロック{name}","hierarchy_chinv":"コンプレッサーとヒーターのVFD(CHINV)","hierarchy_converter":"DC-DCコンバーター(STARC)","hierarchy_inverter":"バッテリーブロック{name}","hierarchy_mega_thermal_controller":"サーマル コントローラー(MPTHC)","hierarchy_missing_post":"欠落ポスト","hierarchy_mpbc":"バッテリー ブロック{name}","hierarchy_part_number":"部品番号","hierarchy_pod":"ポッド","hierarchy_pods_reporting":"ポッド報告","hierarchy_post":"ポスト(LCC)","hierarchy_posts":"ポスト","hierarchy_power_stage":"パワーステージ電力ステージ","hierarchy_power_stages":"パワーステージ電力ステージ","hierarchy_powerpack":"パワーパック{name}","hierarchy_qbms":"バッテリー管理ボード(QBMS)","hierarchy_qhvp":"高電圧プロセッサー(QHVP)","hierarchy_scthcs":"サーマル コントローラー","hierarchy_serial_number":"シリアル番号","hierarchy_sitemaster":"サイトマスター{name}","hierarchy_starcs":"DC-DCコンバーター","hierarchy_stitch":"コントロール パワーDC-DC(STITCH)","hierarchy_thermal_controller":"サーマル コントローラー(SCTHC)","higher_order_login_login_required":"ログインが必要です","higher_order_login_title":"それでは、始めましょう。","home_container_caution":"⚠️ 注意","home_container_caution_deenergize":"システムを安全に非通電状態にするには、すべてのPowerwallのスイッチをオフにします。","home_container_caution_energized":"ソーラー ストリングが接続されていると、システムが通電状態のままになる可能性があります。","home_container_inactive_meter":"古くなったメータデータ","home_container_inactive_meter_description":"{type}メーター接続をチェックしてください。","home_container_inactive_meter_timestamp":"最後のメーター読み取りは{timestamp}です。","home_container_login_required":"ログインが必要です","home_container_missing_meter":"メーターがありません。","home_container_positive_meter":"警告: {type}メーター構成が不正確である可能性があります。","home_container_positive_meter_description":"{type}メーターでは、陽極電力とアンペア数の両方を正確に設定する必要があります。","home_container_powerwall_error":"パワーウォールシステムエラー","home_container_powerwall_start_error":"システム始動不能: {reason}","home_container_site_controller_error":"サイト コントローラー システム エラー","home_container_sitemaster_alternative":"注記: 通常システムは、すべてのPowerwallsの有効化スイッチを切り、ブレーカーを開くことにより無効化が行われます。","home_container_sitemaster_confirm":"システムを確実に停止する場合のみ、下で「はい」をクリックしてください。","home_container_sitemaster_confirm_industrial":"システムを停止してもよろしいですか?","home_container_sitemaster_confirm_wizard":"ウィザードを実行するにはシステムを停止させる必要があります。操作を継続してシステムを停止させますか?","home_container_sitemaster_header_warning":"{warning}これによりPowerwallとシステム運用が停止されます。","home_container_sitemaster_header_warning_industrial":"{warning}このシステムはテスラが停止を推奨している状態ではありません。理由: \\"{reason}\\"","home_container_sitemaster_header_warning_wizard":"{warning}このシステムはテスラが停止を推奨している状態ではありません。理由: \\"{reason}\\"","home_container_sitemaster_logging":"システムがオフになっている間は追跡記録は停止されます。","home_container_sitemaster_reset":"システムを停止してから、システムを再開するには、ウェルカムページのスタートボタンをクリックしてください。","home_container_sitemaster_update":"進行中の更新がある場合は終了されます。","home_container_start_powerwall":"システム始動","home_container_start_system_button":"システム始動","home_container_stop_powerwall":"システム停止","home_container_stop_system_button":"システム停止","home_view_compliance":"コンプライアンス","home_view_download_all_logs":"ログをすべてダウンロード","home_view_download_logs":"ログをダウンロード","home_view_download_logs_description_one":"これにより、オペレーティングシステム、ソフトウェアとネットワークの問題を分析するための圧縮システムログセットをダウンロードします。","home_view_download_logs_description_three":"ログは署名の上暗号化され、調査のためのテスラ・エネルギー・サービスに送信されます。","home_view_download_logs_description_two":"ゲートウェイをネットワークに接続できず高度なトラブルシュートが必要な場合、これは特に有用です。","home_view_login":"ログイン","home_view_logout":"ログアウト","home_view_run_wizard":"ウィザードを実行","input_accept":"同意します","input_confirm":"すべてのシステム警告を承認します。","input_consent":"同意します","input_decline":"同意しません","input_no_consent":"同意しません","input_title_email":"有効なEメールアドレスを入力してください:name@name.domain","installation_container_relay_section_modal_title":"Gateway 低電圧リレー","installation_container_residual_current_device_modal_title":"サイトRCDの設置要件","installation_container_subtitle":"インストーラーおよびサイト情報","installation_container_sync_relay_usage_open_off_grid":"自立運転中はリレーは「開」","installation_container_title":"設置に関する情報","installation_problem_detail_site_shutdown_0":"システムを再度有効にするには:","installation_problem_detail_site_shutdown_1":"すべてのPowerwallのON/OFFスイッチをオンにします","installation_problem_detail_site_shutdown_2":"非常停止回路を閉じます","installation_problem_detail_site_shutdown_3":"急速シャットダウンジャンパーが正しく取り付けられていることを確認します","installation_problem_detail_site_shutdown_4":"シャットダウン回路配線を確認します。","installation_problem_detail_title_site_shutdown":"サイトのシャットダウン回路がトリガーしました","installation_problem_detail_title_site_shutdown_pvs_rsd_no_switch":"Powerwall+の急速シャットダウンによって、サイトのシャットダウン回路がトリガーしました","installation_problem_details_pvacs_with_no_solar_rgm":"Powerwall+アセンブリの一部ではないソーラーインバーターを測定している場合に限ってソーラーメーターが必要です。Powerwall+インバーターを測定するメーターは「変流器」ページと同様にマーキングされるべきです。","installation_problem_details_too_few_solar_rgm":"Powerwall+ソーラーインバーターを測定するCTの数はPowerwall+ソーラーインバーターの数と一致している必要があります。ウィザードを実行し、必要に応じてNeurioメーターをペアリングし、「変流器」ページでCT構成を調整します。","installation_problem_details_too_many_solar_rgm":"Powerwall+ソーラーインバーターを測定するCTの数はPowerwall+ソーラーインバーターの数と一致している必要があります。ウィザードを実行し、「変流器」ページでCT構成を調整します。","installation_problem_title_pvacs_with_no_solar_rgm":"Powerwall+インバーターを測定していないソーラーメーターこれは正しいですか?","installation_problem_title_site_shutdown":"サイトのシャットダウン回路がトリガーしました。すべてのPowerwallおよびPowerwall+ソーラーインバーターが無効になっています。","installation_problem_title_site_shutdown_pvs_rsd_no_switch":"Powerwall+の急速シャットダウンによって、サイトのシャットダウン回路がトリガーしましたすべてのPowerwallおよびPowerwall+ソーラーインバーターが無効になっています。","installation_problem_title_too_few_solar_rgm":"Powerwall+インバーターを測定するソーラーメーターが少なすぎます","installation_problem_title_too_many_solar_rgm":"Powerwall+インバーターを測定するソーラーメーターが多すぎます","installation_view_add_on_solar":"追加","installation_view_additional_connections_label":"追加コネクション","installation_view_back_wiring":"後面","installation_view_backup_configuration_label":"バックアップ設定","installation_view_basement_location":"地下室","installation_view_company_label":"会社名","installation_view_company_placeholder":"認定工事会社名","installation_view_conditioned_space_location":"管理されたスペース","installation_view_existing_solar":"既存","installation_view_floor_mounting":"床置き","installation_view_garage_location":"ガレージ","installation_view_home_label":"家の配線","installation_view_location_label":"POWERWALL設置場所","installation_view_modem_ethernet":"モバイルモデムに有線で接続していますか?","installation_view_modem_wifi":"モバイルモデムに無線で接続していますか?","installation_view_mounting_label":"Powerwallの取り付け","installation_view_na_backup_configuration":"N/A","installation_view_new_solar":"新設","installation_view_none_solar":"なし","installation_view_outdoor_location":"屋外","installation_view_pad_mounting":"架台設置","installation_view_partial_home_backup_configuration":"特定負荷バックアップ","installation_view_phone_label":"電話番号","installation_view_phone_placeholder":"施工者の電話番号","installation_view_powerline_ethernet":"電力線搬送通信はありますか?","installation_view_pv_panel":"太陽光パネル","installation_view_relay_enabled":"自立運転中はリレーは「開」","installation_view_relay_label":"Gateway 低電圧リレー","installation_view_relay_options_modal_content":"連系運転中または、他のAC電源接続時はリレーは「閉」 {lb1} 自立運転中は、リレーは「開」となります。 {lb1} 一例として、連系運転中は、エアコンの使用が可能にし、自立運転中は、Powerwallからの過電流を防ぐため、エアコンの使用を停止させる事ができます。","installation_view_relay_section_modal_content":"Gateway内蔵の解列リレーにより、運転状態からリレーの開閉を行います。 {lb1} 負荷や発電機などを制御する為に使用されます。 {lb1} Backup Gateway 1 では、AUX端子の5極(緑色 Phonex connector)の1,2 を使用します。 {lb1} Backup Gateway 2 では、AUX端子の5極(緑色 Phonex connector)の3,4 を使用します。 {lb1} リレーは、定格60V/2Aで、通常12V または24V用として使用されます。 {lb1} 詳細は、 load shedding and related application notes を参照ください。","installation_view_residual_current_device":"ゲートウェイの上流にRCDはインストールされていますか?","installation_view_residual_current_device_modal_content":"状況により、漏電遮断器の取り付け時には、TT系統接地が必要な場合があります。 {lb1}{lb2} オフグリット運転中の不要なブレーカートリップを無くすためには、Gatewayの上位にある漏電遮断器を時延形にするか、漏電遮断器をGatewayの下流に設置することをお勧めします。 {lb1}{lb2} 詳細は、RCD and Fault Protection Application Noteを参照ください。","installation_view_satellite_ethernet":"衛星通信モデムに有線で接続していますか?","installation_view_satellite_wifi":"衛星通信モデムに無線で接続していますか?","installation_view_side_wiring":"側面","installation_view_solar_label":"ソーラーの設置","installation_view_solar_panels":"Solar Panel","installation_view_solar_roof":"ソーラールーフ","installation_view_solar_type_label":"太陽光の種類","installation_view_solarglass":"Solarglass(現時点ではサポートされていません)","installation_view_stack_kit":"連結キットはありますか?","installation_view_type_commercial":"商用","installation_view_type_label":"工事担当者情報","installation_view_type_perm_off_grid":"常時オフグリッド","installation_view_type_residential":"住居","installation_view_wall_mounting":"壁","installation_view_whole_home_backup_configuration":"まるごとバックアップ","installation_view_wifi_extender":"Wi-Fi中継器はありますか?","installation_view_wiring_label":"Powerwallの配線","inverter_test_view_accuracy_magnitude":"精度マグニチュード","inverter_test_view_accuracy_time":"精度時間","inverter_test_view_complete":"完了","inverter_test_view_current_magnitude":"現在のマグニチュード","inverter_test_view_fail":"不合格","inverter_test_view_na":"N/A","inverter_test_view_not_run":"実行されていません","inverter_test_view_pass":"合格","inverter_test_view_running":"実行中","inverter_test_view_set_magnitude":"しきい値を設定","inverter_test_view_set_time":"時間を設定","inverter_test_view_test_description":"インバーター自己診断テストを実行","inverter_test_view_test_name_all":"すべてのテスト","inverter_test_view_test_name_over_freq_stage_one":"周波数上昇ステージ 1","inverter_test_view_test_name_over_freq_stage_two":"周波数上昇ステージ 2","inverter_test_view_test_name_over_volt_one":"過電圧ステージ 1","inverter_test_view_test_name_over_volt_two":"過電圧ステージ 2","inverter_test_view_test_name_under_freq_stage_one":"周波数減少ステージ 1","inverter_test_view_test_name_under_freq_stage_two":"周波数減少ステージ 2","inverter_test_view_test_name_under_volt_one":"不足電圧ステージ 1","inverter_test_view_test_name_under_volt_two":"不足電圧ステージ 2","inverter_test_view_timestamp":"タイムスタンプ","inverter_test_view_trip_magnitude":"トリップしきい値","inverter_test_view_trip_time":"トリップ時間","inverter_test_view_warning":"注記: インバーター テストは、1つのインバーター当たり最大で20~30分かかることがあります。","label_fail":"不合格","label_inconclusive":"未決定","label_pass":"合格","legal_container_customer_policy_subtitle":"必ず住宅所有者の方がご確認ください。","legal_container_customer_policy_title":"Tesla顧客個人情報保護方針と限定保証","legal_container_no_meters_warning":"メーターが構成されていません","legal_container_no_powerwalls_warning":"POWERWALLSが検出されませんでした","login_type_customer":"お客様","login_type_engineer":"技術者","login_type_installer":"設置工事者","login_view_cancel_login_auth":"キャンセル","login_view_change_forgot_password":"パスワード変更またはパスワードを忘れた場合","login_view_compliance":"コンプライアンス","login_view_customer_email_placeholder":"お客様メール","login_view_email":"Eメール","login_view_email_placeholder":"リードインストーラー電子メール","login_view_forgot_password":"パスワードをお忘れですか","login_view_forgot_password_login_type":"ログインの種類を選択してください","login_view_language_label":"言語","login_view_login_type_label":"ログインの種類","login_view_password_placeholder":"お客様のパスワードを入力してください","login_view_start_login_auth":"ログイン開始","login_view_start_login_auth_how_to_enable_line_description":"ログインするには、Powerwallの電源をOFF/ONする必要があります。Powerwallが複数台ある場合は、1台のPowerwallのスイッチをOFF/ONしてください。","login_view_username":"ユーザー名","login_view_username_placeholder":"ユーザー名","login_warning_view_expand":"ウィザードが開始しない場合、{click}をクリックします。","login_warning_view_firmware_update":"ファームアップが進行中の場合","login_warning_view_heading":"{warning} ウィザードを開始した場合バッテリー動作が停止されます。","login_warning_view_protect_system":"システムを保護するため、次の場合は、ウィザードは開始されません:","login_warning_view_stop_operation":"ウィザード強制開始","login_warning_view_supported_browsers":"{warning} 現在ウェブブラウザはChromeおよびSafariのみサポートされています。","login_warning_view_system_force_launch":"蓄電池システムを停止してウィザードを開始する場合は、ウィザード強制開始を選択してください。","login_warning_view_system_off_grid":"蓄電池システムがオフグリッドの場合","login_warning_view_warning_click":"詳細はクリックしてください","mater_item_view_bad_barcode":"無効なバーコードをスキャンしました","mater_item_view_barcode_scan_failed":"バーコードのスキャンに失敗","meter_acuvim_id":"ACUVIM {id}","meter_aggregate_type_battery":"バッテリー","meter_aggregate_type_load":"負荷","meter_aggregate_type_site":"サイト","meter_aggregate_type_solar":"ソーラー","meter_container_add_meter_error":"メーターの確認中","meter_container_add_meter_status":"メーターの追加中","meter_container_authorizing_status":"認証中","meter_container_decode":"イメージからシリアルを読み取ることができませんでした。","meter_container_detecting_status":"有線メーターの検出","meter_container_failed_status":"メーターを追加できませんでした","meter_container_reconnecting_status":"再接続中","meter_container_skip_title":"メーターの試運転が行われてません。続行しますか?","meter_container_starting_status":"充電開始中","meter_container_subtitle":"接続するエネルギーメーターの短いIDおよびシリアル番号を入力してください。試運転後、各メーターをテストしてください。","meter_container_subtitle_industrial":"接続するエネルギーメーターのIPアドレスおよび場所を入力してください。試運転後、各メーターをテストしてください。","meter_container_success_status":"メーターが追加されました","meter_container_title":"メーター","meter_container_unknown_status":"不明","meter_container_updating_status":"メーターの更新中","meter_container_verification":"メーター{id}検証","meter_container_verification_gw1":"このWiFiペアリングプロセス中に、ゲートウェイWiFiネットワークから一時的に切断されることがあります。{lb}正確なネットワークに再度接続したことを確認します。これには最大で 3 分ほどかかることがあります。","meter_container_verification_gw2":"WiFiペアリングプロセスは、最長で 3 分ほどかかることがあります。","meter_container_verify_meter_error":"メーターの確認中","meter_container_verifying_status":"メーターの確認中","meter_item_view_add_failed":"メーターを追加できませんでした","meter_item_view_add_failed_help":"ショートIDおよびシリアルナンバーを確認してください。メーターのチャイムが鳴ったら、サイクルメーターの電源を入れ、接続します。問題が解決しない場合、メーターを削除しもう一度実行してください。","meter_item_view_advanced_settings":"詳細設定(オプション)","meter_item_view_battery_ct":"蓄電池","meter_item_view_battery_location":"蓄電池","meter_item_view_check_meter":"メーター{id}接続チェック","meter_item_view_conductor_location":"導線","meter_item_view_cts":"{count} CTが検出されました","meter_item_view_doubled_solar_location":"2倍ソーラー","meter_item_view_generator_location":"発電機","meter_item_view_ip_address":"IP アドレス","meter_item_view_load_location":"負荷","meter_item_view_mac_address":"MACアドレス","meter_item_view_meter_location":"メーター位置","meter_item_view_none_location":"なし","meter_item_view_remote_ip_address_placeholder":"例、123.123.123.123","meter_item_view_remote_mac_address_placeholder":"例、12-A3-45-67-8B-90","meter_item_view_remote_serial_placeholder":"例、OBB1231231234、VAH4187AB0060","meter_item_view_remote_short_id_placeholder":"例、01.234","meter_item_view_serial":"シリアル","meter_item_view_short_id":"短いID","meter_item_view_site_ct":"サイト","meter_item_view_site_location":"サイト","meter_item_view_solar_ct":"太陽光","meter_item_view_solar_location":"太陽光","meter_item_view_solar_rgm_location":"太陽光収入のみ","meter_item_view_success":"接続に成功しました","meter_item_view_unable":"メーターを読み取れません","meter_item_view_upgrading":"メーターはアップグレード中です","meter_list_view_add":"Wi-Fiメーターを追加(現時点ではサポートされていません)","meter_list_view_add_ip":"IPメーターを追加","meter_list_view_detect":"有線メーターを検知(現時点ではサポートされていません)","meter_list_view_enable_inverter_readings":"バッテリー インバーター指示値を有効にする","meter_list_view_inverter_meter":"インバーター メーター","meter_list_view_inverter_meter_desc":"これを有効にした場合にバッテリー メーターが設定されていないと、サイト コントローラーはバッテリー インバーターの指示値をバッテリー メーターとして使用します。","meter_msa_id":"自立運転スイッチ{id}","meter_sync_id":"同期メーター{id}","meter_sync_x_id":"内部主メーターX(Gateway){id}","meter_sync_y_id":"内部補助メーターY(Gateway){id}","meter_update_modal_fetch_status_error":"エラー: メーター更新ステータスを取得できません","meter_update_modal_footer":"これには最大で 2 分ほどかかることがあります","meter_update_modal_remaining_time":"残り時間: {seconds}秒","meter_update_modal_timeout_error":"エラー: メーターの更新中にタイムアウトが発生しました","meter_update_modal_title":"メーター更新を実行中","meter_validation_container_error":"サイトコントローラー作動中はメーター確認が使用できません。","meter_validation_container_error_placeholder":"メーター確認が使用できません:{error}。","meter_validation_container_power_command":"電力コマンド","meter_validation_container_power_start":"開始","meter_validation_container_power_stop":"停止","meter_validation_container_power_unit":"kW","meter_validation_container_power_unit_kvar":"kVAr","meter_validation_container_power_unit_watts":"kW","meter_validation_container_reactive_power_command":"無効電力コマンド","meter_validation_container_real_power_command":"有効電力コマンド","meter_validation_container_show_per_phase":"各相の値を表示","meter_validation_container_title":"メーター確認","meter_validation_container_usage":"電力コマンドを送信し、メーター データを確認します。電力コマンドを継続するには、このページに留まる必要があります。マイナス値の場合、システムが充電を行います。プラス値の場合、システムが放電を行います。","meter_validation_control_subtitle":"コントロール","meter_validation_control_title":"コントロールタイトル","meter_validation_disable":"無効","meter_validation_loading":"読み込み中","meter_validation_menu":"メニュー","meter_validation_reset":"リセット","meter_validation_submit":"送信","meter_validation_submitting_control":"コントロールの提出","meter_validation_title":"メーター確認","meter_validation_view_apparent_power":"皮相電力(kVA)","meter_validation_view_battery_location":"蓄電池","meter_validation_view_conductor_location":"導線","meter_validation_view_current":"電流(A)","meter_validation_view_doubled_solar_location":"2倍ソーラー","meter_validation_view_generator_location":"発電機","meter_validation_view_inverters":"インバーター({length})","meter_validation_view_load_location":"負荷","meter_validation_view_meter":"メーター({length})","meter_validation_view_none_location":"なし","meter_validation_view_pf":"力率","meter_validation_view_phase_a":"A","meter_validation_view_phase_average":"平均値","meter_validation_view_phase_b":"B","meter_validation_view_phase_c":"C","meter_validation_view_phase_total":"合計","meter_validation_view_reactive_power":"無効電力(kVAr)","meter_validation_view_real_power":"有効電力(kW)","meter_validation_view_site_location":"サイト","meter_validation_view_solar_location":"太陽光","meter_validation_view_solar_rgm_location":"太陽光収入のみ","meter_validation_view_voltage":"電圧(V)","meter_w1_wifi_id":"メーター{id}","meter_w1_wired_id":"有線メーター{id}","meter_w2_wifi_id":"メーター{id}","meter_w2_wired_id":"有線メーター{id}","meter_wifi_id":"メーター{id}","meter_wired_id":"有線メーター{id}","metrics_aggregate":"蓄電システム","metrics_apparent_power":"皮相電力 ({unit})","metrics_battery":"バッテリー","metrics_current":"電流 ({unit})","metrics_meter":"メートル","metrics_no_metrics":"表示するメトリクスはありません。","metrics_power_factor":"力率","metrics_reactive_power":"無効電力 ({unit})","metrics_real_power":"有効電力 ({unit})","metrics_subtitle":"メトリクス","metrics_voltage_l_n":"電圧L-N ({unit})","modal_acknowledge":"同意して確認","modal_confirm":"確定","modal_exit":"閉じる","modal_no":"いいえ","modal_note":"注記","modal_ok":"OK","modal_reconfigure":"再設定","modal_yes":"はい","modbus_container_title":"Modbusインターフェース","modbus_table_register_address":"住所","modbus_table_register_name":"氏名","modbus_table_register_type":"タイプ","modbus_table_register_value":"値","modbus_table_register_value_decimal":"値(10進)","modbus_table_register_value_hex":"値(6進)","msa-off-grid":"オフ グリッド","msa-on-grid":"オン グリッド","navigation_email":"Eメール","network-switch-menu-item":"ネットワーク スイッチ","network_cellular_configured":"接続が確認できません。GWの設置位置が圏外でない事、アンテナが受信できる状態である事を確認してください。","network_connected":"接続されました","network_container_connect_ethernet":"イーサネットに接続中","network_container_connect_to_internet":"システムがインターネット接続を試行するまでお待ちください。","network_container_connect_wifi":"{ssid}に接続中","network_container_connect_wifi_description":"このプロセス中に、設置を継続するためにゲートウェイ ネットワークに再度接続する必要がある場合があります。","network_container_connman":"Network Connection Managerが、最適なネットワークにダイナミックに接続します。","network_container_connman_body":"接続を保証するために、利用可能なすべてのネットワーク設定を行ってください。:","network_container_delete_network":"設定済みネットワークを削除しますか?","network_container_ethernet_and_wifi_warning":"接続を保証するために、利用可能なイーサネットおよびWi-Fiネットワーク設定を行ってください。","network_container_ethernet_subtitle":"イーサネット","network_container_ethernet_warning":"接続を保証するために、利用可能なイーサネットWi-Fiネットワーク設定を行ってください。","network_container_network_description":"すべての利用可能なネットワーク・タイプでインターネットに接続してください。","network_container_network_subtitle":"ネットワーク","network_container_no_internet_bullet_four":"Powerwallによって技術サポートが問題を識別し、Teslaに運転データを送信することができます。","network_container_no_internet_bullet_four_industrial":"デバイスによって技術サポートが問題を識別し、Teslaに運転データを送信することができます。","network_container_no_internet_bullet_one":"Powerwallレジストレーション情報がTeslaに送信されることで、完全な10年保証が有効化されます。","network_container_no_internet_bullet_three":"テスラ・モバイルアプリを使用し、エネルギー使用をモニターし、またPowerwallをコントロールすることができます。","network_container_no_internet_bullet_two":"Powerwallでパフォーマンス向上および新しい機能が利用できるようになり、遠隔ファームアップを受信できます。","network_container_no_internet_bullet_two_industrial":"デバイスでパフォーマンス向上および新しい機能が利用できるようになり、遠隔ファームアップを受信できます。","network_container_no_internet_bullet_zero":"試運転調整前にファームウェアの更新が必要であるかを判断することができます。","network_container_no_internet_no_cell_title":"設置サイトで利用可能なインターネット接続がある場合は、このステップをスキップしないでください。イーサネット(推奨)あるいはWi-Fi経由でお客様の利用されているインタネットサービスに接続してください。","network_container_no_internet_title":"設置サイトで利用可能なインターネット接続がある場合は、このステップをスキップしないでください。イーサネット(推奨)あるいはWi-Fi経由でお客様の利用されているインタネットサービスに接続するか、あるいはモバイルネットワークリンクを確立してください。","network_container_no_internet_warning":"次の目的のため、安定したインターネットを確立することは重要です:","network_container_scan_networks":"Wi-Fiネットワークのスキャン","network_container_scan_wifi_disconnect_warning":"警告: 新しいネットワークをスキャンする場合、一時的に無線接続が切断されます。","network_container_wifi_subtitle":"Wi-Fi","network_container_wifi_warning":"接続を保証するために、利用可能なWi-Fiネットワーク設定を行ってください。","network_disabled":"無効になっています","network_disconnected":"未接続","network_ethernet_configured":"通信できていません。イーサネットケーブルが正しく挿しこまれているか確認してください。","network_switches_container_discover_failure":"最新の検出不具合: {error}","network_switches_container_discover_switches":"ネットワーク スイッチの検出","network_switches_container_discovered_label":"検出済みのネットワーク スイッチ","network_switches_container_discovering_stop_button":"検出を停止","network_switches_container_discovery_switches_running_label":"新しいネットワーク スイッチの検出を現在実行中です。以下のようにして検出を停止することができます。","network_switches_container_ip":"IP: {ip}","network_switches_container_mac":"MAC: {mac}","network_switches_container_not_supported":"ネットワーク スイッチは産業用システムだけでしかサポートしていませんでした。","network_switches_container_password_not_set":"パスワードが設定されていません","network_switches_container_password_set":"パスワードが設定されています","network_switches_container_passwords_error":"パスワード設定ステータス: {status}","network_switches_container_set_password_label":"工場デフォルト パスワードを依然として使用しているすべてのネットワーク スイッチにパスワードを設定します。\\n すべてのパスワードは同じ値に設定されます。","network_switches_container_set_passwords":"パスワードを設定","network_switches_container_set_passwords_button":"パスワードを設定","network_switches_container_setting_passwords_button":"パスワードの設定中...","network_switches_container_start_discovering_button":"検出を開始","network_switches_container_start_discovery_help":"ネットワーク スイッチの検出は自動的かつ定期的に実行されますが、「検出を開始」ボタンでトリガーすることができます。","network_switches_container_subtitle":"ネットワーク スイッチを表示する","network_switches_container_title":"ネットワーク スイッチ","network_view_check_connection":"インターネットの接続を確認してください","network_view_connection_failed":"接続されていません","network_view_connection_success":"接続に成功しました","network_view_continue_no_internet":"インターネット接続なしで続行","network_view_default_error":"接続エラー","network_view_local_network_connected":"ローカルネットワークが接続されました","network_view_local_network_disconnected":"ローカルネットワークエラー","network_view_tesla_internet_connected":"テスラ サービスおよびインターネットに接続","network_view_tesla_internet_disconnected":"Teslaサービスおよびインターネット接続エラー","network_warning":"警告","network_wifi_configured":"通信できていません。Wifiの設定を確認してください。","open_meter_validatiion_container_title":"メーター確認を開く","operation_mode_autonomous":"自動モード","operation_mode_backup":"バックアップ充電のみ","operation_mode_self_consumption":"自家消費モード","operation_mode_site_control":"サイト コントロール","overview_menu_control_title":"コントロール","overview_menu_diagnostics_title":"診断","overview_menu_modbus_title":"Modbus","overview_menu_network_connected":"接続されました","overview_menu_network_no_connection":"接続されていません","overview_menu_registration_complete":"完了","overview_menu_registration_incomplete":"未完了","overview_menu_registration_pending":"インターネット接続保留中","overview_menu_security_title":"パスワード変更あるいはリセット","overview_menu_settings_title":"設定","overview_menu_summary_title":"まとめ","overview_menu_system_title":"蓄電システム","overview_menu_update_title":"ソフトウェアアップデート","overview_menu_view_alerts_event":"事故","overview_menu_view_alerts_events":"イベント","overview_menu_view_inverter_title":"インバーターテスト","overview_menu_view_network_title":"ネットワーク","overview_menu_view_registration_title":"登録","overview_menu_view_test_title":"自己テスト","overview_meter_validation_title":"メーター確認","password_generate_error":"新しいパスワードの生成時にエラーが発生しました。接続および現在のパスワードを確認してから再試行してください。","password_generate_help_text":"既存のパスワードを入力するとランダムに新しいパスワードが生成されます。","password_generate_menu_title":"パスワードを変更する","password_generate_notice":"パスワードが変更されました。このページを離れる前に新しいパスワードを記録してください。","phase_container_detect_timeout":"フェーズ検出がタイムアウトされました。","phase_container_detection_attempt":"試行#{num}","phase_container_grid_code_validating_modal_title":"グリッド コード確認中","phase_container_grid_compliant_description":"グリッド適合 {checkmark}","phase_container_grid_modal_description":"グリッドは{time}秒で適合が完了します。","phase_container_grid_modal_title":"グリッド コンプライアンス待機中","phase_container_modal_description":"フェーズ検出は、1つのPowerwall当たり最長 2 分かかることがあります。","phase_container_modal_title":"相検出実行中","phase_container_saving_phases_modal_title":"位相の保存","phase_container_subtitle":"Powerwallがオンであるラインを表示し、ライン ステータスを更新します","phase_container_supported_error":"Powerwallは検出されませんでした。位相検出はサポートされていません。","phase_container_title":"位相","phase_container_voltage_caution_body":"{lineNumber}の上で予期しない電圧{voltage}Vが検知されました。この位相で{lineStatus}が適切な設定か再確認してください。","phase_container_warning_body":"バックアップ位相は選択されていません。したがって、グリッド接続が失われると、システムは負荷をサポートできません。","phase_container_warning_modal_header":"バックアップは無効になっていまます。","phase_line_id":"ライン - {id}","phase_line_item_view_line":"ライン","phase_line_item_view_line_status_backup":"バックアップ","phase_line_item_view_line_status_configured":"非バックアップ","phase_line_item_view_line_status_not_configured":"設定されていません","phase_line_status_backup":"バックアップ","phase_line_status_configured":"非バックアップ","phase_line_status_not_configured":"設定されていません","phase_view_detect":"位相を検出","phase_view_split_phase":"単相三線式","power_flow_view_go_off_grid":"オフ グリッドに進む","power_flow_view_go_on_grid":"オン グリッドに進む","power_flow_view_grid_button_disabled_reason":"オフ グリッドに進むにはシステムを起動する必要があります。","power_flow_view_grid_spinner_alt_label":"システム移行","power_flow_view_start_system":"システム始動","power_flow_view_stop_system":"システム停止","powerwall_container_industrial_no_additional_title":"追加のバッテリーブロックは見つかりませんでした。","powerwall_container_industrial_subtitle":"Site Controllerによって自動検知されたバッテリーブロックをすべてリストしています。バッテリーブロックがリストされていない場合は、もう一度スキャンしてください。","powerwall_container_industrial_subtitle_auto_detection":"Site Controllerによって自動検知されたバッテリーブロックをすべてリストしています。バッテリー ブロックがリストにない場合、配線を含むネットワーク機器を点検し、バス コントローラが通電していることを確認してください。","powerwall_container_industrial_title":"バッテリーブロック","powerwall_container_industrial_updating":"バッテリーブロックの確認","powerwall_container_no_additional_powerwalls_description":"配線問題の解決のヒントは、Powerwall設置マニュアルを参照してください。","powerwall_container_no_additional_powerwalls_title":"このほかにPowerwallsは見つかりませんでした。","powerwall_container_scan_again":"もう一度スキャン","powerwall_container_scanning":"スキャン中","powerwall_container_scanning_for_more":"さらにスキャン","powerwall_container_subtitle":"ゲートウェイによって自動検知されたPowerwallsをすべてリストしています。Powerwallがリストされていない場合は、もう一度スキャンしてください。","powerwall_container_subtitle_component_auto_detection":"Gatewayによって自動検知されたコンポーネントがすべてリストされています。コンポーネントがリストにない場合は、配線を確認してください。","powerwall_container_title":"Powerwall","powerwall_container_updating":"Powerwallsの確認","powerwall_container_updating_note":"注記: この操作は、1つのPowerwall当たり最長 60 秒かかることがあります。","powerwall_item_view_blank_numbers":"検証を待機中...","powerwall_item_view_numbers":"部品番号:{partNumber} シリアル:{serialNumber}","powerwall_item_view_powerwall":"POWERWALL:{id}","powerwall_pairing_cancel":"キャンセル","powerwall_pairing_connect":"接続","powerwall_pairing_done":"完了","powerwall_pairing_error_already_paired":"ペアリングに失敗: デバイスは既にペアリングされています","powerwall_pairing_error_bad_pairing_response":"ペアリングに失敗: デバイスがペアリングを拒否しました。フォロワーが停止していることを確認してください","powerwall_pairing_error_bad_qr_code":"WiFiのQRコードではありません","powerwall_pairing_error_internal":"ペアリングに失敗: 内部エラー","powerwall_pairing_error_no_qr_code":"QRコードが見つかりません","powerwall_pairing_error_no_response":"ペアリングに失敗: デバイスが応答しませんでした。","powerwall_pairing_error_not_leader":"ペアリングに失敗: フォロワー デバイスです。リーダー デバイスに再接続してください。","powerwall_pairing_error_prohibited_uncommissioned":"ペアリングに失敗: このPowerwallは試運転が終わっていません","powerwall_pairing_error_too_many_devices":"ペアリングに失敗: 既に最大数のデバイスがペアリングされています","powerwall_pairing_error_unknown":"ペアリングに失敗: 不明なエラー","powerwall_pairing_error_wifi_connection_failed":"ペアリングに失敗: WiFiに接続できませんでした。パスワードを確認してください。","powerwall_pairing_error_wifi_not_found":"ペアリングに失敗: WiFiネットワークが見つかりません","powerwall_pairing_exception":"ペアリングに失敗: 例外","powerwall_pairing_instructions_2":"ペアリングするPowerwallのWiFiのSSIDおよびパスワードを入力またはスキャンしてください。デバイスのQRコードを探してください。","powerwall_pairing_password_label":"パスワード:","powerwall_pairing_scan_qr_code":"QRコードをスキャン","powerwall_pairing_ssid_label":"SSID:","powerwall_pairing_state_complete":"ペアリング完了。新しいデバイスは1分以上(アップデート進行中はさらに長く)応答を開始しない可能性があります。「完了」をクリックすると終了します。","powerwall_pairing_state_monitoring":"新しいデバイスのペアリング中です。1分ほどかかることがあります。","powerwall_starting":"Powerwallを開始","powerwall_view_detected_backup":"バックアップ能力が検出されました","powerwall_view_detected_synchrometers":"検出されたメーター能力","powerwall_view_failed":"失敗","powerwall_view_no_backup":"バックアップ機能は検出されませんでした","powerwall_view_no_sync":"シンクロナイザーは検出されませんでした","powerwall_view_scan":"スキャン","powerwall_view_success":"成功","powerwall_view_synchrometer_detected":"同期メーターが検出されました","powerwall_view_synchronizer_detected":"シンクロナイザーが検出されました","powerwall_view_update":"POWERWALLSを確認","privacy_policy_view_accept_warranty_title":"Tesla Powerwall限定保証への同意","privacy_policy_view_contact_bullet_one":"メール {privacyEmail};","privacy_policy_view_contact_bullet_two":"郵送先 Tesla, Inc., Attn: Legal, 45500 Fremont Boulevard, Fremont, California 94538, United States.","privacy_policy_view_contact_header":"Teslaへの連絡方法について","privacy_policy_view_contact_paragraph_one":"ご意見ご質問のある方または特定のサービスのオプトアウトを希望される方は、Teslaまでご連絡ください。","privacy_policy_view_contact_paragraph_three":"お客様がEEAまたはスイスに所在されている場合、お客様の地域のTesla系列会社がお客様の個人情報の処理に責任を負う場合があります。","privacy_policy_view_contact_paragraph_two":"メールによる通信は必ずしも安全ではないため、Teslaに送信されるメールには、クレジットカード情報や機密情報を含めないようにご注意ください。","privacy_policy_view_cross_border_transfers_header":"外国へのデータ移転について","privacy_policy_view_cross_border_transfers_paragraph_one":"Teslaのサービスはアメリカから統括され運営されています。お客様あるいはTeslaの製品またはサービスのお客様の使用に基づく、あるいはお客様に関する情報は、Teslaが設備を持つあらゆる国あるいはTeslaが利用するサービス・プロバイダーの所在国や地域で保存、処理されます。これらの国では、最初に情報を提供した国と同じデータ保護法が施行されていない場合があります。お客様あるいは製品あるいはサービスのお客様の使用に基づく情報、あるいはお客様に関する情報をその他の国々に転送する場合も、Teslaはこの個人情報保護方針と同じ保護を行います。Teslaの製品、サービスを利用する場合、あるいはその他Teslaへの情報提供によって、お客様あるいは製品あるいはサービスのお客様の使用に基づく情報、あるいはお客様に関する情報を、アメリカを含め、お客様の居住国外に転送することに同意したとみなされます。","privacy_policy_view_cross_border_transfers_paragraph_two":"お客様がEEAまたはスイスに所在されている場合、Teslaは、EEAまたはスイス域外国への個人情報の移転に適切な保護を義務付けた法的必要条件に従います。Teslaは、EEAからTeslaおよびその全額出資米国子会社に移転される個人情報の処理に関して米国商務省と欧州委員会によって定めたEU-米国Privacy Shieldフレームワークの適合認証を取得しています。Tesla{privacyShield}はこちらでご確認いただけます。","privacy_policy_view_devices":"お客様またはお客様のデバイスから送信される情報、およびお客様またはお客様のデバイスに関する情報","privacy_policy_view_energy_products":"お客様のTeslaエネルギー製品からの情報および同製品に関する情報","privacy_policy_view_eu_policy_warning":"TeslaモバイルアプリでPowerwallを製品登録し、TeslaモバイルアプリでPowerwallを遠隔管理をご利用いただくには、プライバシーポリシーに同意していただく必要があります。","privacy_policy_view_eu_warranty_warning":"お客様がTesla顧客個人情報保護方針に同意いただけない場合、10年完全保証の対象外となる場合があります。 Teslaは、保証{warrantyLink}の中で述べられた除外条件と制限に従って、お客様のPowerwallが初めて設置された日付後、少なくとも4年間の保証を提供します。","privacy_policy_view_grid_services":"お客様のPowerwallは、電力会社やサードパーティーによるプログラムを通してサービスを提供することで、送配電網の信頼性を高めることができます。これらのサービスを利用した場合、適切なタイミングでPowerwallの電力の一部を放電する代わりに、お客様には金銭的なメリットが発生します。サービスをご利用いただくには、お客様のPowerwallとエネルギー利用状況に関する情報を電力会社やサードパーティーと共有する必要があります。Teslaは、これらのプログラムに加盟する前に、プログラムの詳細をお客様に説明し、参加の可否をお尋ねいたします。その際、お客様がオプトアウトされなかった場合は、プログラムにご参加いただくことになります。","privacy_policy_view_grid_services_title":"グリッド サービス","privacy_policy_view_grid_warning":"ご同意いただくことは必須ではありません。ご同意いただかなくても、今後これらのプログラムに参加する機会を提供する場合があります。","privacy_policy_view_here":"こちら","privacy_policy_view_homeowner_na":"住宅所有者は利用不可","privacy_policy_view_homeowner_required":"必ず住宅所有者の方がご確認ください","privacy_policy_view_information_collection_devices_bullet_five":"お客様のブラウザまたはデバイスを通じた収集: お客様のメディアアクセス制御 (MAC) アドレス、コンピューターの種類(WindowsまたはMacintosh)、画面の解像度、オペレーティングシステムの名称とバージョン、デバイス製造元と型番、使用言語、インターネットブラウザの種類とバージョン、お客様が利用されている本サービス(Teslaアプリ等)の名称とバージョン等の情報が、数多くのブラウザまたはお客様のデバイスを通じて自動的に収集されます。Teslaは、本サービスが適切に機能するよう、これらの情報を利用します。","privacy_policy_view_information_collection_devices_bullet_four":"オフラインTeslaは、お客様からの情報またはお客様に関する情報をで(例えば、お客様によるTesla店舗や修理工場への訪問、Teslaイベントへの参加、試乗の登録、電話での注文、当社の顧客サービス部門やセールス部門への連絡などの際に)収集することがあります。","privacy_policy_view_information_collection_devices_bullet_one":"サービスを通じた収集: Teslaは、ウェブサイト、ソフトウェアアプリケーション、ソーシャルメディアページ、メール、あるいはお客様がニュースレターに登録したり製品を購入したり、あるいはTeslaにお客様の商品を登録する際に利用する他のデジタルサービス (以下総称して「本サービス」といいます。) を通じて、お客様からの情報またはお客様に関する情報を収集することがあります。","privacy_policy_view_information_collection_devices_bullet_three":"My Tesla: Tesla車を購入するお客様には、Teslaウェブサイト上でMy Teslaアカウントが作成されます。Teslaは、お客様が同意された場合My Teslaアカウントから次の種類のデータを収集し処理する場合があります:お客様登録情報;ご注文状況、Tesla製品の (車両登録番号かその他製品シリアル番号、サービス計画情報あるいは接続パッケージなど) 関する一般的な情報、保証およびその他ドキュメンテーション;またTesla製品、保険、運転免許、融資契約および類似情報。お客様は、いつでもMy Teslaアカウントにアクセスして、アカウント内のお客様に関する情報を更新することができます。","privacy_policy_view_information_collection_devices_bullet_two":"その他のソースを通じた収集: Teslaは、さらに公共データベース、マーケティングパートナー、認定設置業者、第三者である車両修理またはサービスセンター、ソーシャルメディアプラットフォームなど、他のソースからお客様に関する情報を取得することがあります。","privacy_policy_view_information_collection_energy_products_bullet_one":"Teslaは、お客様の商品に関する情報(設置日、設置した商品の数量、製造番号等)を収集することがあります。","privacy_policy_view_information_collection_energy_products_bullet_two":"Teslaのエネルギー製品およびサービスの提供および改善のため、Teslaは、お客様の商品の設置場所、その使用設定、商品の使用・性能に関するデータ、自宅での総エネルギー消費に関するデータ、問題を診断するのに必要なその他のデータを収集することがあります。","privacy_policy_view_information_collection_header":"Teslaが収集する可能性がある情報について","privacy_policy_view_information_collection_paragraph_five":"Teslaがお客様のTeslaエネルギー製品から運転データあるいはその他どんなデータも集めることを許可しない場合は、「お問い合わせ」セクションからお問い合わせください。お客様がTeslaエネルギー製品からの運転データの収集をやめた場合、お客様のエネルギー製品に該当する問題をリアルタイムで通知できなくなる点にご注意ください。また、これは、エネルギー製品で機能縮小、深刻な損害あるいは動作不良につながるおそれがあります。また、さらに、定期的なソフトウェアおよびファームアップを含む、エネルギー製品の多くの機能をご利用いただけなくなる場合があります。","privacy_policy_view_information_collection_paragraph_four":"当社は、お客様のTeslaエネルギー製品からの情報および同製品に関するさまざまな情報を認定設置業者を通じて、または設置した製品から(直接またはインバーター等のペアリングをした機器を通じて)収集することがあります。","privacy_policy_view_information_collection_paragraph_one":"Teslaはお客様に関連する内容あるいはお客様の製品やサービスのご使用状況について、主として次の3つの種類の情報を収集します。(1)お客様から送られる情報、またはお客様やお客様のデバイスに関する情報、(2)お客様のTesla車両から送信される情報、またはお客様の車両に関する情報、(3)お客様のTeslaエネルギー製品から送信される情報、またははお客様の製品に関する情報。お客様が要求、所有、使用するTesla製品およびサービスによっては、これらの種類の情報すべてがお客様に該当するとは限りません。","privacy_policy_view_information_collection_paragraph_three":"お客様がTeslaのウェブサイトにアクセスしたり、当サービスを利用される際、Teslaは、Cookie、ピクセルタグ、解析ツール、その他本サービスの向上のための類似の技術を使用することがあり、その詳細は下記のとおりです。","privacy_policy_view_information_collection_paragraph_two":"Teslaは、お客様からの情報またはお客様に関する情報(お名前、住所、電話番号、電子メールアドレス、支払情報等)またはお客様のデバイスに関する情報を、下記のようなさまざまな方法で収集することがあります。","privacy_policy_view_information_collection_services_bullet_five":"このような情報収集及びオプトアウトに関するGoogleの取扱いに関しては、 {website}からGoogle Analytics オプトアウト ブラウザアドオンをダウンロードしてください。","privacy_policy_view_information_collection_services_bullet_four":"分析ツール: Teslaは、クッキーおよびその他同様の技術を使用する第三者によって提供されるウェブサイトとアプリケーションの分析サービスを利用し、個々のビジターを識別することなく、ウェブサイトやアプリケーション使用に関する情報を収集し、かつトレンドを報告することがあります。Teslaにこれらのサービスを提供する第三者は、さらに第三者ウェブサイトでお客様の使用に関する情報を収集している場合があります。","privacy_policy_view_information_collection_services_bullet_one":"クッキー: クッキーは使用されるコンピューター上に直接保存された小さなサイズの情報です。クッキーは、Teslaがブラウザ・タイプ、サービス利用時間、閲覧ページ、言語設定およびその他ウェブ・トラフィックデータのような情報を収集することを可能にします。Teslaのサービス・プロバイダーとTeslaは、セキュリティ、オンライン情報のナビゲーションを促進し、情報をより有効に表示し、サービス利用体験を個別化し、またその他ユーザー・アクティビティを分析する目的で使用します。Teslaは、これによってサービスのご使用を支援するためにお客様のコンピューターを認識することができます。さらに、Teslaは絶えずサービスの設計と機能性を改善するために、使用法に関する統計情報を集めて、サービスがどのように利用されるか理解し、サービスに関する課題解決を支援するためにこれらの情報を活用しています。クッキーはさらに、Teslaの広告または製品等でお客様の好みに合うものがどれか、かつお客様に訴求する可能性が最も高いか、どの製品を表示することをTeslaが選択することを可能にします。さらに、Teslaはオンライン広告でお客様がどのようにTeslaの広告に対応するか知るためにクッキーを使用することがあります。さらに、その他ウェブサイトのお客様の使用を理解するためにクッキーあるいはその他ファイルを使用する場合があります。","privacy_policy_view_information_collection_services_bullet_three":"ピクセルタグおよびその他類似の技術: ピクセルタグ(別名ウェブ・ビーコンやクリアGIF)は、特に、当サービスのユーザー(メール受信者を含みます。)による活動の追跡、当社のマーケティングキャンペーンの成果の測定、当サービスの利用状況や応答率に関する統計をとるために当サービスの一部において使用されることがあります。","privacy_policy_view_information_collection_services_bullet_two":"お客様がMy TeslaアカウントあるいはTeslaのウェブサイトでクッキーを通じた情報が収集されることを希望されない場合、ほとんどのブラウザで、シンプルな設定により、お客様が自動的にクッキーを拒否するか、特定サイトから特定クッキー(複数可)のお客様のコンピューターへの移行を禁止、許可する選択を行うことができます。さらに{website}もご確認ください。ただしこれらのクッキーを禁止する場合、一部のサービスの使用でご不便をおかけするおそれがあります。例えば、Teslaはお客様のコンピューターを認識することができず、それぞれのサービスごとに、別個のログインが必要となることがあります。","privacy_policy_view_information_rights_choices_agree_eu":"Powerwallを製品登録し、TeslaモバイルアプリでPowerwallを監視するには、プライバシーポリシーに同意していただく必要があります。","privacy_policy_view_information_rights_choices_agree_one":"Powerwallを製品登録し、TeslaモバイルアプリでPowerwallを監視するには、プライバシーポリシーに同意していただく必要があります。Powerwall情報へのアクセスでTeslaモバイルアプリを利用されない場合は、ご対応は必要ございません。","privacy_policy_view_information_rights_choices_bullet_one":"お客様は、いつでもMy Teslaアカウントにアクセスして、アカウント内のお客様に関する情報を更新することができます。","privacy_policy_view_information_rights_choices_bullet_two":"お客様が以前に提供されたお客様に関する情報の見直し、修正、更新、非公開、削除などをリクエストされる場合は、下記のアドレス宛にご連絡ください。","privacy_policy_view_information_rights_choices_header":"お客様の権利と選択肢について","privacy_policy_view_information_rights_choices_paragraph_four":"記録保存・法令遵守のため、および/または情報の変更もしくは削除の依頼提出前に開始した取引を完了するため、特定の情報を保管する必要がある場合(例えば、商品の購入またはプロモーションへの参加に際して、完了するまで先に提供した情報の変更や削除は行えません)がありますので、ご了承ください。またTeslaのデータベースその他の記録には残留情報がある場合がありますが、これらは削除されません。","privacy_policy_view_information_rights_choices_paragraph_one":"上記のセクションの中で詳述されるとおり、Teslaはお客様についての、お客様からの、あるいはお客様に関する情報あるいは製品またはサービスのお客様の使用に関する情報の収集、使用、共有について多くの選択肢を提供しています。準拠法を条件として、一部の法域管轄では、さらにTeslaがお客様に関して保持する一定の情報に関する情報にアクセスする、更新する、情報を修正する、情報のブロックまたは削除をリクエストする権利が認められている場合があります。これらの権利は地域法によって一部の状況では制限される場合があります。Teslaは、次のものを含めお客様からの、あるいはお客様に関する情報にアクセスする、情報を修正する、更新する、情報のブロックまたは削除をリクエストするさまざまな方法をご提供しています。","privacy_policy_view_information_rights_choices_paragraph_three":"Teslaでは、実行可能な限り速やかに、お客様からのこれらの権利および選択権の行使のご依頼にお応えします。","privacy_policy_view_information_rights_choices_paragraph_two":"お客様のリクエストでは、修正を依頼する情報、提供済み情報のデータベースからの削除、あるいはお客様がTeslaに提供した情報の使用の制限の種類を明記してください。お客様の情報の保護のため、Teslaは依頼を送るために使用される特定のEメールアドレスと関連する情報のみ対応を行います。また、Teslaはお客様のリクエストを実行する前にお客様の身元を確認する必要がある場合があります。","privacy_policy_view_information_share_header":"個人情報の提供方法について","privacy_policy_view_information_share_paragraph_eight":"その他の場合","privacy_policy_view_information_share_paragraph_eleven":"お客様が事前にオプトインに同意された情報について、オプトアウトを希望される場合は、下記の「Teslaへの連絡方法」に従って当社にご連絡ください。","privacy_policy_view_information_share_paragraph_five":"Teslaは、下記のような場合、お客様が承認するその他の第三者に情報を提供することがあります。","privacy_policy_view_information_share_paragraph_five_point_four":"お客様のソーシャルメディア・アカウントと私たちのサービスを接続する場合のお客様のソーシャルメディア・アカウントプロバイダーとの共有。この場合お客様はソーシャルメディア・アカウント供給者とTeslaが情報を共有することを認め、Teslaが共有する情報の使用は、各ソーシャルメディア・アカウントプロバイダーの個人情報保護方針によって管理されることに同意したとみなされます。","privacy_policy_view_information_share_paragraph_five_point_one":"お客様が要求されたエネルギー製品の提供を促進するため、Teslaの認定設置業者に情報を提供することがあります。","privacy_policy_view_information_share_paragraph_five_point_three":"お客様がコンテストやそれに類するプロモーションに参加することを選択した場合、それらのスポンサーである第三者への情報提供。","privacy_policy_view_information_share_paragraph_five_point_two":"お客様が利用される第三者サービス・センターあるいはプロバイダーとの情報共有。お客様の情報の一部はTesla製品上に保存され、お客様のテスラ製品の診断またはサービスのために利用を選択された第三者であるサービスセンターまたはプロバイダーが直接アクセスできる場合があります。","privacy_policy_view_information_share_paragraph_four":"お客様が承認するその他の第三者への提供","privacy_policy_view_information_share_paragraph_nine":"Teslaは、下記のような場合もお客様の情報を共有することがあります:","privacy_policy_view_information_share_paragraph_nine_point_one":"お客様がTesla製品を直接所有していない場合であっても、適用法令により認められる場合、お客様の雇用主、他の車両の運行者またはTesla製品の所有者に情報を提供することがあります。","privacy_policy_view_information_share_paragraph_nine_point_two":"再編、合併、売却、合弁事業、譲渡、移転その他のTeslaの事業、資産または株式の全部または一部の処分(倒産やそれに類する手続に関連するものを含む)に関する、第三者への情報提供。","privacy_policy_view_information_share_paragraph_one":"Teslaは、収集する情報を、Teslaが利用するサービスプロバイダーと取引先企業、お客様が認可するその他第三者、法律によって義務づけられているその他第三者、およびその他状況で共有することがあります。これらの対象者と、これらの状況の下でTeslaがどのように情報を共有するかの例を以下に示します。","privacy_policy_view_information_share_paragraph_seven":"Teslaは、その自由裁量に基づき、法的義務(召喚命令を含み、これらのみに限定されない)を遵守するため、当社が法律で義務付けられていると真摯に信じたとき、法令の執行条件を遵守すべく、調査中の政府機関の要請に応じるため、Teslaのポリシーと手続きを正当化もしくは執行するため、緊急事態に対応するため、Teslaが違法・非倫理的・提訴可能もしくはそれらのリスクをもたらすと認める行為を防止もしくは停止するため、または本サービス、Tesla、第三者、当サービスへのビジターおよび公の権利、財産、安心もしくは安全を保護するため、お客様を個人的に特定できる情報またはかかる特定ができない情報を含む情報を、第三者に提供または開示することがあります。","privacy_policy_view_information_share_paragraph_six":"法令が要求するその他の第三者への提供","privacy_policy_view_information_share_paragraph_ten":"Teslaは、お客様からのオプトインがない限り、お客様を個人的に特定する情報をマーケティング目的で外部の第三者に提供することはありません。","privacy_policy_view_information_share_paragraph_three":"Teslaは、下記のような場合でお客様またはTeslaのためにサービスを提供する必要がある場合には、Teslaのサービスプロバイダーおよびビジネスパートナーに情報を提供することがあります。","privacy_policy_view_information_share_paragraph_three_point_one":"Tesla系列会社と、本個人情報保護方針に記述されている目的のために。Tesla提携企業とは、Tesla, Incが所有または管理する企業およびTesla, Incが経営権の一部を有する企業のことです。","privacy_policy_view_information_share_paragraph_three_point_three":"その他第三者取引先企業と、お客様の購入あるいはお客様のTesla製品のサービスに関する範囲での共有。金融、賃貸、レジストレーションおよび権原保険会社のようなパートナーのサービスを利用される場合、私たちは、お客様から、あるいはお客様に関してサービス提供に必要な一定の情報を共有します。","privacy_policy_view_information_share_paragraph_three_point_two":"ウェブサイトホスティング、データの解析と保管、支払処理、受注管理、製品設置、テスラ製品に対する無線接続、情報技術と関連インフラ、顧客サービス、製品のメンテナンスとそれに関連するサービス、メール送信、クレジットカード決済、監査、マーケティング、ボイスコマンド処理その他の類似するサービスを提供するため、第三者であるサービスプロバイダーおよびチャンネルパートナーに情報を提供することがあります。","privacy_policy_view_information_share_paragraph_two":"Teslaのサービスプロバイダーおよびビジネスパートナーへの提供","privacy_policy_view_information_use_commuicate":"お客様とのご連絡","privacy_policy_view_information_use_header":"Teslaが収集した情報の利用方法について","privacy_policy_view_information_use_other_purposes":"その他の目的","privacy_policy_view_information_use_paragraph_five":"Teslaは、その他の目的のために当社が収集した情報を下記のとおり利用することがあります。","privacy_policy_view_information_use_paragraph_five_point_one":"Teslaの事業目的のため(例えば、データ解析、会計、不正の監視および防止、利用動向の特定、当社のプロモーションキャンペーンの有効性の決定、当社のビジネス活動の遂行および拡張のため)。","privacy_policy_view_information_use_paragraph_five_point_two":"別途記載のものを除き、Teslaは、お客様個人を特定しないような情報を、その目的の如何を問わず(事業遂行または調査目的、産業解析、当社製品・サービスの改善・変更、当社製品・サービスのお客様のニーズに合わせたよりよいカスタマイズのため、または法的に要求された場合等)利用または提供することがあります。","privacy_policy_view_information_use_paragraph_four":"Teslaは、当社の製品およびサービスの提供および改善のために当社が収集した情報を下記のとおり利用することがあります。","privacy_policy_view_information_use_paragraph_four_point_five":"Teslaの製品・サービスの安全性の解析・改善のため。","privacy_policy_view_information_use_paragraph_four_point_four":"新しい商品・サービスを開発・促進し、Teslaの現行の製品・サービスを改善または変更するため。","privacy_policy_view_information_use_paragraph_four_point_one":"お客様による購入手続を完遂するため(例えば、支払処理を行い、注文をお客様にお伝えし、お客様による購入に関するお客様との連絡を行い、関連するカスタマー・サービスをお客様に提供するため等)。","privacy_policy_view_information_use_paragraph_four_point_six":"お客様が要求されたその他のサービスを提供するため。","privacy_policy_view_information_use_paragraph_four_point_three":"お客様のTesla製品の性能をモニターし、お客様の製品に関するサービスを提供するため。","privacy_policy_view_information_use_paragraph_four_point_two":"お客様のTesla製品に対するサービスの提供のため(例えば、お客様にサービス推奨を行い、お客様の製品の無線アップデートを行うため)。","privacy_policy_view_information_use_paragraph_one":"Teslaは、製品とサービスを提供および改善、ならびにその他目的で、収集した情報をご連絡先として使用する場合があります。Teslaが収集した情報をどのように使用するかについて、いつくか例を挙げます。","privacy_policy_view_information_use_paragraph_three":"コミュニケーションに関する選択肢:","privacy_policy_view_information_use_paragraph_three_point_one":"TeslaまたはTeslaの系列会社から電子通信によるコミュニケーション: TeslaまたはTeslaの系列会社からのマーケティング関連の電子メール受信を解除される場合は、Teslaが送信した電子メール内のオプトアウト手順から、あるいは下の連絡先へのお問い合わせにより、オプトアウトを行っていただくことができます。マーケティングに関するe-mail受信を停止した後も、重要な管理および安全に関するメッセージは送信される点にご注意ください。","privacy_policy_view_information_use_paragraph_three_point_two":"マーケティング関連の電話連絡: お客様がTeslaからマーケティング関連の電話連絡を受け、今後同様のマーケティング関連の電話連絡を受けたくない場合、Teslaの「電話禁止」リストにご登録いただけます。電話マーケティングからの停止後も、重要な管理および安全・製品サービスの問題に関するお電話は行われる点にご注意ください。","privacy_policy_view_information_use_paragraph_two":"Teslaは、お客様にご連絡するため、当社が収集した情報を下記のとおり利用することがあります。","privacy_policy_view_information_use_paragraph_two_point_five":"お客様のニーズに合った製品やオファーを提示し、他のソースからの情報を用いて顧客関連リストを改善するため。","privacy_policy_view_information_use_paragraph_two_point_four":"管理情報(例えば、本サービスに関する情報および利用規約やポリシーの変更など)をお送りするため。","privacy_policy_view_information_use_paragraph_two_point_one":"ニュースレターや製品情報、注意情報、パンフレットを送付するなど、お客様からのお問い合わせやご要望にお応えするため。","privacy_policy_view_information_use_paragraph_two_point_seven":"ソーシャルシェアリングやコミュニケーションの機能を促進するため。","privacy_policy_view_information_use_paragraph_two_point_six":"お客様がコンテストやそれに類するプロモーションに参加できるようにするとともに、それらの活動を管理するため。","privacy_policy_view_information_use_paragraph_two_point_three":"安全上重要な情報についてお客様にお知らせし、お客様の車両に関連する事故が発生した場合に第一応答者に通知をするため。","privacy_policy_view_information_use_paragraph_two_point_two":"お客様によるTesla車両のテストドライブの設定、評価またはフィードバックの提供を行うため。","privacy_policy_view_information_use_provide":"Teslaの製品およびサービスの提供・改善","privacy_policy_view_links_header":"リンク","privacy_policy_view_links_paragraph_one":"この個人情報保護方針では、サービスとリンクするあらゆるサイトあるいはサービスを提供する第三者を含め、第三者のプライバシー、情報保護あるいはその他慣行を対象としていません。またTeslaはこれらの第三者による情報管理についての責任を負いません。サービスとのリンクが行われている場合も、TeslaあるいはTeslaの系列会社が、リンクされたサイトやサービスを支持することや、第三者との関係があることを示すものではありません。","privacy_policy_view_links_paragraph_two":"アプリ開発業者、アプリケーションプロバイダー、ソーシャルメディアプラットフォームプロバイダー、OSプロバイダー、ワイヤレスサービスプロバイダーなど、他の組織による情報(当社のソフトウェアアプリケーションまたはソーシャルメディアページを通じてお客様が他の組織に開示するあらゆる情報を含みます。)の収集、利用または開示に関するポリシーと運用(データセキュリティに関するものを含みます。)に関して、Teslaは責任を負わないことをご了承ください。","privacy_policy_view_minors_header":"未成年者について","privacy_policy_view_minors_paragraph":"当サービスは、16歳未満の個人を対象としていませんので、該当される方はTeslaに情報を提供しないようお願いします。","privacy_policy_view_offers_eu":"Tesla製品とサービスに関するアンケート、プロモーションおよびキャンペーン情報を含む、Teslaおよび関連企業からのメール配信を希望します。お客様はいつでもこの同意を取り消す権利を有します。詳しい情報{legalLink}。","privacy_policy_view_offers_title":"製品発表および新しいオファー","privacy_policy_view_offers_usa":"また、登録した電話番号にTesla製品の情報やプロモーションに関する連絡を受けることに同意します。また、これらの電話連絡やテキスト メッセージには、コンピューターを使用した自動ダイヤルや録音したメッセージが使われる場合があることを理解しています。これに同意することは購入条件には含まれません。","privacy_policy_view_powerwall_warranty":"Tesla Powerwall限定保証","privacy_policy_view_privacy_policy":"プライバシーについての通知","privacy_policy_view_privacy_policy_agreement_eu":"住宅所有者として、お客様向けプライバシーポリシー全文を読み、本プライバシーポリシーが定める通りにTeslaが個人情報を取り扱うことに同意します。(プライバシーポリシーに記載されている通り、お客様はいつでもこの同意を取り消す権利を有します。)","privacy_policy_view_privacy_policy_agreement_usa_australia":"住宅所有者として、お客様向けプライバシーポリシー全文を読み、本プライバシーポリシーが定める通りにTeslaが個人情報を取り扱うことに同意します。","privacy_policy_view_privacy_shield":"Privacy Shieldポリシー","privacy_policy_view_retention_period_header":"情報の保有期間について","privacy_policy_view_retention_period_paragraph":"Teslaは、お客様、Tesla製品および当サービスからの情報、またはお客様、Tesla製品および当サービスに関する情報を、本プライバシーポリシーに略述した目的を遂行するために必要な期間保有するものとします。ただし、それより長期間保有することが法令で義務付けられているかまたは認められる場合はこの限りではありません。","privacy_policy_view_security_header":"セキュリティ","privacy_policy_view_security_paragraph_one":"Teslaは、組織内の情報を保護する合理的な組織的手段、技術的手段および管理上の手段の使用に努めます。ただしデータ伝送や保存システムにおいては、100%の安全を保証することはできません。Teslaとのお客様の通信がもはや安全ではない(例えばTeslaとの任意のアカウントのセキュリティが危険にさらされたと疑われる場合)と思われる場合は、下記「お問い合わせ」セクションから問題を直ちに私たちに通知してください。","privacy_policy_view_security_paragraph_two":"お客様のTesla製品を他の方に売却・譲渡される場合、Teslaにご連絡いただければ、お客様からの情報またはお客様に関する情報を当該売却先・譲渡先への開示から守るために別途対策が必要かどうか、Teslaで判断します。","privacy_policy_view_title":"プライバシーポリシー全文を見る","privacy_policy_view_updates_header":"本ポリシーの更新について","privacy_policy_view_updates_paragraph":"Teslaはこの個人情報保護方針を適宜変更することがあります。この個人情報保護方針がの最終更新日はこのページの最下部の「最終更新日」をご確認ください。この個人情報保護方針へのどんな変更は、サービスについて、改訂された個人情報保護方針をTeslaが公開した時点で有効となります。これらの変更後に、Teslaの製品、サービスあるいはその他Teslaへの提供情報の使用を続行した場合、改訂された個人情報保護方針を受理したとみなされます。","privacy_policy_view_us_warranty_warning":"Tesla モバイルアプリでPowerwallを製品登録し、Tesla モバイルアプリでPowerwallを遠隔管理するためには、Tesla限定保証条件に同意していただく必要があります。","privacy_policy_view_warranty_information":"私は住宅所有者として、TeslaのPowerwall限定保証の条件{warrantyLink}に同意します。","prompt_factory_reset_confirmation":"本当にユニットを工場設定にリセットしますか?","pvac-state-active":"アクティブ","pvac-state-faulted":"故障","pvac-state-init":"初期化中...","pvac-state-standby":"ソーラーを待機","pvac_alert_ac_fault":"インバータAC故障","pvac_alert_check_ac_note":"AC配線および電力系統の接続を確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_check_dc_string1_note":"ストリング1 DC配線およびパネルを確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_check_dc_string2_note":"ストリング2 DC配線およびパネルを確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_check_dc_string3_note":"ストリング3 DC配線およびパネルを確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_check_dc_string4_note":"ストリング4 DC配線およびパネルを確認してください。インバータを再起動して操作を再試行してください。","pvac_alert_confirm_grid_code_note":"AC配線および電力系統の接続を確認してください。選択したグリッド コードを確認します。","pvac_alert_dc_fault_string1":"インバータDC故障 - ストリング1","pvac_alert_dc_fault_string2":"インバータDC故障 - ストリング2","pvac_alert_dc_fault_string3":"インバータDC故障 - ストリング3","pvac_alert_dc_fault_string4":"インバータDC故障 - ストリング4","pvac_alert_freq_change":"電力系統不整合 - 周波数変更","pvac_alert_internal_comms":"内部通信問題","pvac_alert_over_freq":"電力系統不整合 - 過大な周波数","pvac_alert_over_temp":"インバータ過熱","pvac_alert_over_voltage":"電力系統不整合 - 過電圧","pvac_alert_production_limited_note":"生産が制限される可能性があります。電線の終端が適正であり、十分な空気流量があり、設置環境が適正であることを確認します。","pvac_alert_reboot_note":"インバータを再起動し、システムが最新で、十分な試運転調整がなされていることを確認します。","pvac_alert_under_freq":"電力系統不整合 - 低周波数","pvac_alert_under_voltage":"電力系統不整合 - 低電圧","pvi-power-status-dc-only":"DCのみ","pvi-power-status-disabled":"無効","pvi-power-status-enabled":"有効","pvi-reset-button-label":"インバータを再起動してアラートをクリアします","pvs-self-test-1":"セルフテスト(1/6): 漏電","pvs-self-test-2":"セルフテスト(2/6): アーク不良","pvs-self-test-3":"セルフテスト(3/6): MCI","pvs-self-test-4":"セルフテスト(4/6): 絶縁","pvs-self-test-5":"セルフテスト(5/6): リレーのウェルド","pvs-self-test-6":"セルフテスト(6/6): インピーダンス","pvs_alert_check_arc_fault_note":"DC配線、接続部、パネルおよび急速遮断デバイスにアーク不良問題がないか確認します。","pvs_alert_check_dc_note":"DC配線、接続部、パネルおよび急速遮断デバイスに漏電の問題がないか確認します。","pvs_alert_check_dc_string1_note":"DC配線、接続部、パネルおよび急速遮断デバイスに、ストリング1に関する絶縁問題がないか確認します。","pvs_alert_check_dc_string2_note":"DC配線、接続部、パネルおよび急速遮断デバイスに、ストリング2に関する絶縁問題がないか確認します。","pvs_alert_check_dc_string3_note":"DC配線、接続部、パネルおよび急速遮断デバイスに、ストリング3に関する絶縁問題がないか確認します。","pvs_alert_check_dc_string4_note":"DC配線、接続部、パネルおよび急速遮断デバイスに、ストリング4に関する絶縁問題がないか確認します。","pvs_alert_check_dc_strings_note":"DC配線、接続部、パネルおよびストリングの構成を確認します。","pvs_alert_dc_arc_fault_detected":"DCアーク不良 - 検出","pvs_alert_dc_arc_fault_lockout":"DCアーク不良 - ロックアウト","pvs_alert_dc_ground_fault":"DC漏電","pvs_alert_dc_isolation_string1":"DC絶縁問題 - ストリング1","pvs_alert_dc_isolation_string2":"DC絶縁問題 - ストリング2","pvs_alert_dc_isolation_string3":"DC絶縁問題 - ストリング3","pvs_alert_dc_isolation_string4":"DC絶縁問題 - ストリング4","pvs_alert_dc_over_voltage":"DC過電圧","pvs_alert_rapid_shutdown":"急速遮断開始","pvs_alert_rapid_shutdown_note":"ACブレーカーおよび低電圧急速遮断回路を点検します。","registration_container_continue_header":"入力された顧客Eメール: {email}","registration_container_continue_modal_description":"電子メールが正しくない場合、顧客はTeslaモバイル アプリにアクセスすることができません。お客様のEメールが有効であることを確認してください。","registration_container_customer_email_required":"Teslaモバイル アプリを有効化するには、お客様の電子メールが必要です。","registration_container_customer_information_title":"現場情報","registration_container_fill_required_fields":"インストーラーまたはお客様は必要なフィールドすべてに入力する必要があります。","registration_container_loading_modal_registering":"登録中","registration_container_reset_form_modal_description":"フォームのリセットを続行するかどうか確認してください。","registration_container_reset_form_modal_header":"以前に入力された情報は削除されます。","security_container_settings_title_customer":"パスワード変更あるいはリセット(お客様)","security_container_settings_title_installer":"パスワード変更あるいはリセット(設置業者)","security_view_copied_to_clipboard":"コピーされました","security_view_not_wifi_qr_code_error":"WiFiのQRコードではありません。","security_view_scan_qr_code_not_found_error":"QRコードが見つかりません。","security_view_settings_change_password_error":"パスワードが一致しません","security_view_settings_change_password_label":"パスワードを変更","security_view_settings_completed":"完了","security_view_settings_new_password_label":"新しいパスワード","security_view_settings_old_password":"現在のパスワード","security_view_settings_password_change_info":"パスワードを変更するには、現在のパスワードおよび新しいパスワードを入力してください。","security_view_settings_password_customer":"パスワード","security_view_settings_password_customer_placeholder":"ゲートウェイ ステッカー パスワードの最後の5桁","security_view_settings_password_installer_label":"ゲートウェイ パスワード","security_view_settings_password_reset_info":"パスワードをリセットするには、Powerwallスイッチを切り替えてから、ゲートウェイ ステッカー パスワードの最後の5桁を入力してください。","security_view_settings_password_reset_info_serial":"パスワードをリセットするには、Powerwallスイッチを切り替えてから、ゲートウェイシリアル番号の最後の5桁を入力してください。","security_view_settings_password_reset_installer_info":"パスワードをリセットするには、Powerwallスイッチを切り替えてから、ゲートウェイ ステッカー パスワードを入力してください。","security_view_settings_password_reset_installer_info_serial":"パスワードをリセットするには、Powerwallスイッチを切り替えてから、ゲートウェイシリアル番号を入力してください。","security_view_settings_re_enter_password_label":"新しいパスワードを再度入力","security_view_settings_reset_password_label":"パスワードのリセット","security_view_settings_serial_customer":"シリアル番号","security_view_settings_serial_customer_placeholder":"ゲートウェイシリアル番号の最後の5桁","security_view_settings_serial_installer_label":"ゲートウェイ シリアル番号","security_view_settings_success":"パスワードが更新されました","security_view_settings_success_new_password":"新しいパスワードは次のとおりです:","security_view_settings_toggled_password":"パスワードをお忘れですか?","self_test_result_viewer_resi_only":"セルフテスト ログ ビューワは使用できません。","self_test_results_viewer_collapse_all":"すべて閉じる","self_test_results_viewer_column_name":"名称","self_test_results_viewer_column_result":"結果","self_test_results_viewer_column_spec":"仕様","self_test_results_viewer_column_test_time":"テスト時間","self_test_results_viewer_column_value":"値","self_test_results_viewer_expand_all":"すべて開く","self_test_results_viewer_failed":"失敗","self_test_results_viewer_in_progress":"進行中","self_test_results_viewer_inconclusive":"未決定","self_test_results_viewer_not_started":"開始されていません","self_test_results_viewer_passed":"合格","self_test_results_viewer_skipped":"スキップ","self_test_results_viewer_warning":"警告","settings_container_confirm_reset_operation_mode":"{operation}へのモードチェンジを確認します。","settings_container_heco_modal_description":"選択後、この設定を変更することはできません。選択を送信する前に、この顧客が現在HECOバッテリーボーナスプログラムに登録していることを確認します。","settings_container_heco_modal_title":"登録確認","settings_container_heco_view_description":"Powerwallはプログラムの要件に適合するために、確約容量で毎日放電します。有効化後にこの設定を変更することはできません。","settings_container_heco_view_scheduled_dispatch_start_time":"開始時刻","settings_container_heco_view_scheduled_dispatch_start_time_hh_mm":"HH:MM","settings_container_heco_view_scheduled_dispatch_title":"HECO予定ディスパッチ","settings_container_heco_view_title":"HECOバッテリーボーナスプログラム","settings_container_operation_modes_modal_content":"Teslaモバイル アプリの「カスタマイズ」画面で運転モードを変更することができます。","settings_container_operation_modes_modal_reset":"モードリセット","settings_container_operation_modes_modal_title":"動作モード","settings_container_operation_modes_modal_warning":"これの変更はもとに戻せません。詳細モードは、Teslaモバイル アプリでのみ再有効化できます。","settings_container_operation_modes_reset_modal_title":"動作モードをリセットしますか?","settings_container_operation_settings_subtitle":"システムの名前、動作モードおよびエクスポート制限がある場合セットします。","settings_container_operation_settings_title":"運転設定","settings_container_save_instructions":"「継続」をクリックして保存してください。","settings_container_saving_site_info_modal":"サイト設定保存中","settings_container_site_import_description":"受電点正潮流制限値はオプション設定です。インポート制限を無効化する場合はこの欄を空欄にします。有効にした場合、この設定は電力系統からサイトへインポートされる最大許容電力を指定します。","settings_container_site_limits_header":"受電点の制限値","settings_view_custom_modes_label":"設定済みモード","settings_view_energy_reserve_heco_label":"自立運転リザーブへの変更は、HECOバッテリーボーナスプログラムへの登録により制限されています。この顧客はアプリで自立運転リザーブを設定できます。","settings_view_energy_reserve_label":"バックアップリザ―ブ","settings_view_instruction_site_name":"現場名を入力","settings_view_net_meter_mode":"エクスポート モード","settings_view_operation_label":"動作モード","settings_view_operation_set_label":"セットする動作モード","settings_view_set_net_meter_mode_never_label":"恒常的にエクスポートなし","settings_view_set_net_meter_mode_solar_label":"ソーラーエクスポート","settings_view_site_name":"現場名","settings_view_site_name_placeholder":"例:マイホーム","settings_view_solar_export_limitation_slider":"ソーラーのエクスポート制限","settings_view_solar_feature":"この機能は、相互連結によりソーラーシステムがグリッドにエネルギーをエクスポートしないことが必要な場合のみアクティベートします。主にハワイ(CSS)およびオーストラリアの地域において適用されます。","settings_view_solar_limitation":"PowerwallはPowerwall+ではないソーラーシステムと共に設置されましたか?","settings_view_solar_zero_export":"POWERWALLはゼロエクスポートソーラーシステムと合わせて設置されていますか?","site_info_container_submit":"送信","solar_item_view_baudrate_label":"ボーレート","solar_item_view_brand_input_label":"メーカー","solar_item_view_brand_label":"メーカー","solar_item_view_check_inverter":"インバーター{id}接続をチェック","solar_item_view_connection_warning":"接続を確立できませんでした。","solar_item_view_inverter_brand":"インバーターメーカー","solar_item_view_inverter_communication":"インバーターとの直接通信を設定します","solar_item_view_inverter_model_label":"インバーターモデル","solar_item_view_ip_label":"IP アドレス","solar_item_view_model_label":"モデル","solar_item_view_power_rating_explanation":"これはモジュール/パネルに関するソーラーシステムの定格合計電力です。これはアレイの公称電力です。例えば、10x 300Wのソーラーパネルでは、PVインバーターが2500Wでも、3500Wでも、3000Wとしてリストされます。","solar_item_view_pv_array_dc_power_rating":"PV アレイ DC電力定格","solar_item_view_pv_array_dc_power_rating_label":"PV アレイ DC電力定格","solar_item_view_revenue_grade":"計量法に基づいた電力メーター","solar_item_view_revenue_grade_explanation":"インバーターに検定メーターが内蔵されている場合のみチェックしてください。このオプションが有効化されている場合、インバーターではなくメーターからインバーターデータが読み取られます。","solar_item_view_revenue_grade_title":"計量法に基づいた電力メーター","solar_item_view_solar":"ソーラー{id}","solar_item_view_success":"接続に成功しました","solar_item_view_unable":"インバーターを読み取れません","solar_list_view_continue_add_solar":"ソーラーを追加","solar_view_continue_add_solar":"ソーラーを追加","status_update_urgency_none":"最新","status_update_urgency_optional":"更新はオプションです","status_update_urgency_required":"更新が必要です","status_update_urgency_unknown":"不明","success_view_awesome":"ありがとうございます","success_view_copied_to_clipboard":"コピーされました","success_view_installation_complete":"設置完了","success_view_new_password_error_title":"ウィザード パスワード","success_view_new_password_title":"新しいウィザード パスワード","success_view_password_set":"パスワードは既に設定されています","success_view_record_password":"続行する前にこのパスワードを記録して保管しておいてください","success_view_retry_registration":"レジストレーション再試行","success_view_set_customer_password":"お客様パスワードを設定","success_view_syncing_configuration":"設定を同期しています","summary_container_company":"会社名","summary_container_connection_type":"接続タイプ","summary_container_email":"Eメール","summary_container_installer_information":"工事担当者情報","summary_container_ip_address":"IP アドレス","summary_container_location":"住所","summary_container_meter":"メーター#{index}","summary_container_meter_information":"メーター情報","summary_container_phone":"電話番号","summary_container_print":"印刷","summary_container_serial_number":"シリアル番号","summary_container_site_info":"現場情報","summary_container_site_name":"現場名","summary_container_subtitle":"製品と設置情報","summary_site_information":"現場情報","summary_view_autonomous":"時間帯設定","summary_view_backup":"バックアップ専用モード","summary_view_backup_capable":"バックアップ機能あり","summary_view_backup_reserve":"バックアップリザ―ブ","summary_view_backup_switch":"自立運転スイッチ","summary_view_conductor_export":"幹線の逆潮流上限値","summary_view_conductor_import":"幹線の潮流上限値","summary_view_control":"サイト コントロール","summary_view_customer_version":"顧客ファームウエアバージョン","summary_view_direct":"ダイレクト","summary_view_disabled":"無効","summary_view_ethernet":"イーサネット","summary_view_export_limit":"PVエクスポート制限","summary_view_extra_programs":"追加プログラム","summary_view_followers":"フォロワー","summary_view_gateway":"ゲートウェイ","summary_view_grid_code":"グリッドコード","summary_view_gsm":"携帯電話","summary_view_heco_battery_bonus":"HECOバッテリーボーナス","summary_view_ip_address":"IP アドレス","summary_view_leader":"リーダー","summary_view_mode":"モード","summary_view_msg_cannot_read_solar_assembly":"最初にシステムを停止して、Powerwall+ソーラーアセンブリの部品番号およびシリアルを確認してください。","summary_view_network":"ネットワーキング","summary_view_non_backup":"バックアップなし","summary_view_panel_limit":"パネル最大電流","summary_view_part_number":"部品番号","summary_view_partnum":"部品{partNumber}","summary_view_powerwall":"POWERWALL","summary_view_scheduler":"集約","summary_view_self_consumption":"自家消費","summary_view_serial":"シリアル","summary_view_serialnum":"シリアル{serialNumber}","summary_view_site_export":"売電上限値","summary_view_site_import":"買電上限値","summary_view_site_name":"現場名","summary_view_solar_assembly":"ソーラー アセンブリ","summary_view_sync":"バックアップ機能","summary_view_time":"概略コンパイル時間","summary_view_time_zone":"タイムゾーン","summary_view_wifi":"Wi-Fi","system-device-follower-not-responding":"WiFiにペアリングされたデバイスは現在応答していません","system-device-unknown-sitecontroller":"デバイスは子機を発見できていません","system_acpw_vitals_charge":"充電レベル: {charge}%","system_acpw_vitals_power":"AC電源: {power}","system_acpw_vitals_power_charging":"AC電源: {power}充電中","system_acpw_vitals_power_discharging":"AC電源: {power}放電中","system_acpw_vitals_state":"Powerwallの状態: {state}","system_acpw_vitals_voltage":"AC電圧: {voltage}","system_controller_din":"コントローラ: {din}","system_device_alert_disabled":"デバイスが無効","system_device_gateway_not_islanding":"アイランド コントローラーではありません。","system_device_name_backup_switch":"自立運転スイッチ({sn})","system_device_name_battery_assembly":"バッテリー アセンブリ({sn})","system_device_name_gateway":"ゲートウェイ ({sn})","system_device_name_powerwall":"Powerwall ({sn})","system_device_name_powerwall_plus_leader":"リーダーPowerwall+","system_device_name_powerwall_plus_solo":"Powerwall+","system_device_name_powerwall_plus_wired":"Powerwall+(有線)","system_device_name_powerwall_plus_wireless":"Powerwall+(無線)","system_device_name_remote_meter":"リモート メーター({sn})","system_device_name_solar_assembly_1":"ソーラー アセンブリ","system_device_name_sync":"Gateway開閉器/メーター コントローラ({sn})","system_firmware_update":"更新中: {percent}% ({step}/{numSteps})","system_gateway_din":"Gateway: {din}","system_islanding_vitals_backup_state":"自立運転状態: {backupState}","system_islanding_vitals_grid_line":"グリッド ライン{lineNumber}: {v} {f}","system_islanding_vitals_island_line":"アイランド ライン{lineNumber}: {v} {f}","system_overview_connected":"Teslaに接続されています","system_overview_disconnected":"Teslaに接続されていません","system_overview_follower":"フォロワーPowerwall","system_overview_login_required":"システムの作動を表示するにはログインが必要です","system_overview_scanning":"デバイスをスキャン中...","system_overview_site_controller":"サイト コントローラー","system_overview_updating":"デバイスを更新中...","system_pvi_vitals_ac_solar_power":"ACソーラー電力: {power} / {current}","system_pvi_vitals_ac_solar_power_only":"ACソーラー電力: {power}","system_pvi_vitals_lifetime_energy_kwh":"通算エネルギー量: {energy}","system_pvi_vitals_state":"都道府県:{message}","system_pvi_vitals_string":"ストリング{number}: {voltage} / {current}","system_pvi_vitals_string_not_connected":"ストリング{number}: 接続されていません","system_remote_meter_ct_line":"CT {n} ({location}): {value}","system_remote_meter_no_cts":"構成されているCTがありません","system_rescan_button_text":"デバイスを再スキャン","system_scanning_label_text":"デバイスをスキャン中...","system_vitals_missing_value":"---","test_container_configure_subtitle":"システムが想定通りに動作しているかテストします。","test_container_system_test_title":"システム テスト","test_inverter_container_error_grid_uncompliant":"グリッドが未適合のためこのテストは実行することができません。","test_inverter_container_error_not_idle":"Powerwallはテストを実行する前にスタンバイモードにあることが必要です。","test_inverter_container_results_error_plural_subtitle":"{num}テストが失敗","test_inverter_container_results_error_singular_subtitle":"{num}テストが失敗","test_inverter_container_results_success_plural_subtitle":"{num}テストに合格","test_inverter_container_results_success_singular_subtitle":"{num}テストに合格","test_inverter_container_results_success_subtitle":"テストがすべて合格しました","test_inverter_container_results_title":"インバーター自己診断テスト結果","test_inverter_container_title":"インバーター自己診断テスト","test_meter_composite_view_auxiliary_meter_setup_instructions":"各補助メーターに少なくとも1台のCTをセットする必要があります。","test_meter_composite_view_auxiliary_meters_title":"補助メーター","test_meter_composite_view_configure_meters":"メーター設定","test_meter_composite_view_current_transformer_setup_instructions":"少なくとも1つのサイトCTを使用するか、あるいは負荷CTを選択してください。両方を使用することはできません。","test_meter_composite_view_external_meter_setup_instructions":"各外部メーターに少なくとも1台のCTをセットする必要があります。","test_meter_composite_view_external_meters_title":"外部メーター","test_meter_composite_view_internal_meters_gateway_title":"内部メーター(Gateway)","test_meter_composite_view_internal_meters_title":"内部メーター","test_meter_composite_view_no_configured_meters":"設定されたメーターはありません。続行するには{configure}を行ってください。","test_meter_composite_view_note":"注記","test_meter_item_view_acuvim_label":"メーター{id}: Acuvimメーター","test_meter_item_view_backup_switch_label":"メーター{id}: 自立運転スイッチ メーター","test_meter_item_view_configure_phases_note":"このメーターでCTを有効化するには位相を設定してください","test_meter_item_view_internal_meter_x_gateway_label":"メーター{id}: 内部主メーターX(Gateway)","test_meter_item_view_internal_meter_y_gateway_label":"メーター{id}: 内部補助メーターY(Gateway)","test_meter_item_view_remote_w1_wifi_label":"メーター{id}: リモートWi-Fi","test_meter_item_view_remote_w1_wired_label":"メーター{id}: リモート有線","test_meter_item_view_remote_w2_wifi_label":"メーター{id}: リモートWi-Fi","test_meter_item_view_remote_w2_wired_label":"メーター{id}: リモート有線","test_meter_item_view_reset":"設定リセット","test_meter_item_view_site_meter_title":"内部サイト メーター","test_meter_item_view_sync_id":"同期メーター{id}","test_meter_item_view_toggle_advanced":"詳細","test_meter_item_view_toggle_power":"電力","test_meter_item_view_wifi_id":"メーター{id}","test_meter_item_view_wired_id":"有線メーター{id}","test_view_canceled_status":"テストが取り消されました","test_view_failed_status":"テストに失敗しました","test_view_idle_status":"システムテストを始める","test_view_init_status":"テストを始める準備中","test_view_inverter_test_warning_message":"0 エクスポートPVインバーターがある場合、ゲートウェイの自己試験手順はシステム確認にはご利用いただけません。自己テストが完了するまでPVインバーターをオフにしてください。","test_view_passed_status":"テストが完了しました","test_view_prep_status":"コントロールの初期化: これは数分かかる場合があります","test_view_running_status":"充電テスト実行中","test_view_skip_start_system_test_text":"確認するとシステムテストをスキップします","test_view_start_system_test_warning":"警告","test_view_system_test_completed_message":"システムテストが完了しました","time_minute":"分","time_minutes":"分","time_second":"秒","time_seconds":"秒","time_started_at":"開始時刻:{time}","timezone_container_subtitle":"私たちは、お客様の住所とIPアドレスに基づいて、設置タイムゾーンの判断をお手伝いします。","timezone_container_title":"タイムゾーン","timezone_view_label":"タイムゾーン","toast_view_standard_title":"注記","toast_view_warning_title":"警告","update_container_industrial_updating_description":"サイト コントローラーは、自動的に再起動し、更新をインストールします。{lb1}{lb2}2分間お待ちください。サイト コントローラーネットワークに接続してから {refresh}してください。","update_container_preparing_title":"最新のアップデートの準備中","update_container_refresh_browser":"お客様のブラウザをリフレッシュ","update_container_residential_updating_description":"ゲートウェイは、自動的に再起動し、更新をインストールします。{lb1}{lb2}2分間お待ちください。ゲートウェイネットワークに接続してから {refresh}してください。","update_container_skip_title":"更新をスキップしますか?","update_container_subtitle":"アップデートを確認。注記: Powerwallページでは、Powerwallsへのファームアップのプッシュが発生します。","update_container_subtitle_industrial":"アップデートを確認。注記: バッテリーページでは、バッテリーへのファームアップのプッシュが発生します。","update_container_title":"アップデート","update_container_updating_title":"アップデート更新中","update_step_item_view_resolution_title":"推奨される対応","update_view_check_again":"もう一度チェックするにはクリックしてください","update_view_check_for_update":"ゲートウェイ更新チェック","update_view_check_for_update_industrial":"サイト コントローラー更新チェック","update_view_checking_update":"アップデートの確認中","update_view_current_version":"現在のバージョン: {version}","update_view_current_version_label":"現在のバージョン:","update_view_downloading":"ダウンロード中","update_view_downloading_update":"アップデートのダウンロード","update_view_no_power_cicle":"電力サイクルを行わないでください","update_view_percent_complete":"{percent}完了","update_view_progress":"アップデートが進行中です","update_view_staged":"新バージョンのステージング済み","update_view_staged_update":"更新をインストールする準備ができています","update_view_staging":"ステージング","update_view_staging_update":"アップデートのステージング","update_view_time_remaining":"残り","update_view_up_to_date":"バージョンは最新です","update_view_update_now":"今すぐ更新","update_view_update_urgency_label":"更新状態: {status}","update_view_updated_industrial":"サイト コントローラーソフトウェアは最新です。","update_view_updated_residential":"ゲートウェイ ソフトウェアは最新です。","update_view_wait_minutes":"数分お待ちください","validation_phone":"有効な電話番号を入力","vitals_header_subtitle_firmware_update":"ファームウェアをアップデート中...","vitals_header_subtitle_firmware_update_failed":"ファームウェアアップデートに失敗しました。スイッチが有効であることおよび配線を確認します。","vitals_header_title":"蓄電システム","vitals_powerwall_state_ac_fault":"ACステージ不良","vitals_powerwall_state_dc_fault":"DCステージ不良","vitals_powerwall_state_grid_following":"電力系統追従","vitals_powerwall_state_grid_forming":"電力系統形成","vitals_powerwall_state_init":"初期化","vitals_powerwall_state_off":"オフ","vitals_powerwall_state_standby":"スタンバイ","vitals_powerwall_state_support_dc":"サポートDC","warning":"警告","warning_off_grid":"電気系統がオフグリッドの場合、バックアップ負荷は5分以内に停止します。","warning_on_grid":"電気系統がオングリッドの場合、Powerwallは充電/放電を中止します。","warning_sitemaster_container_not_running":"Sitemasterは実行されていません。","wifi_pairing_link_message":"WiFi接続Powerwallを追加","wifi_view_find_network":"SSIDでネットワークを検出","wifi_view_note":"注記: このゲートウェイは2.4GHzワイヤレス・ネットワークとのみ互換性を持ちます。","wifi_view_note_five_ghz":"注記: このゲートウェイは2.4GHzおよび5GHzの両方のワイヤレス・ネットワークと互換性を持ちます。","wifi_view_readonly":"これはフォロワーPowerwallなので、無線ネットワーク設定を編集できない可能性があります。","wifi_view_security_label":"セキュリティ","wizard_container_commissioning_wizard":"Tesla試運転ウィザード","wizard_container_login_required":"ログインが必要です","wizard_container_title":"それでは、始めましょう。","wizard_container_verifying_login_title":"ログインの確認"}' ); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }); const o = a(i(1)), s = i(3); i(645); class _ extends o.Component { constructor() { super(...arguments), (this.state = { error: null, errorInfo: null }); } componentDidCatch(e, t) { var i, n; this.setState({ error: e, errorInfo: t }), null === (n = (i = this.props).logError) || void 0 === n || n.call(i, e, t); } render() { var e; const { error: t } = this.state; return t ? o.createElement( "div", { className: "error-boundary" }, o.createElement( "h1", null, o.createElement(s.FormattedMessage, { id: "error_boundary_title", description: "Title for page that shows any unforeseen application errors", defaultMessage: "Oh no! Something went wrong." }) ), o.createElement( "h3", null, o.createElement(s.FormattedMessage, { id: "error_boundary_subtitle", description: "Subtitle for page that shows any unforeseen application errors", defaultMessage: "Well, this is embarrassing. We encountered an error in the app.", }) ), o.createElement("p", { className: "error" }, t.toString()), o.createElement("h3", null, o.createElement(s.FormattedMessage, { id: "error_boundary_label_error_details", description: "Label shown above a detailed ", defaultMessage: "Error Details:" })), o.createElement("p", { className: "stack" }, null === (e = this.state.errorInfo) || void 0 === e ? void 0 : e.componentStack) ) : this.props.children; } } t.default = _; }, , , , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.errors = t.labels = t.prompts = t.titles = t.buttons = void 0); const n = i(1051); (t.buttons = (0, n.defineMessages)({ BACK: { id: "navigation_back", description: "Label for button that returns to the previous screen.", defaultMessage: "BACK" }, CANCEL: { id: "navigation_cancel", description: "Label for button that cancels or aborts the current action.", defaultMessage: "CANCEL" }, CONTINUE: { id: "navigation_forward", description: "Label for button that advances to the next screen.", defaultMessage: "CONTINUE" }, SKIP: { id: "navigation_skip", description: "Label for button that skips the current screen and advances to the next screen.", defaultMessage: "SKIP" }, CLOSE: { id: "modal_close", description: "Label for button that closes a modal dialog (e.g. a warning).", defaultMessage: "CLOSE" }, FINISH: { id: "label_button_finish", description: "Label for button that completes the current procedure (e.g. commissioning wizard).", defaultMessage: "FINISH" }, SAVE: { id: "modal_save", description: "Label for button that saves the settings shown on the current screen.", defaultMessage: "SAVE" }, EDIT: { id: "label_button_edit", description: "Label for button that edits the setting shown on the current screen.", defaultMessage: "EDIT" }, DELETE: { id: "control_delete", description: "Label for button that deletes or removes the specified item.", defaultMessage: "DELETE" }, CONNECT: { id: "control_connect", description: "Label for button that connects to the network or devices show on the current screen.", defaultMessage: "CONNECT" }, REFRESH: { id: "modal_refresh", description: "Label for button that refreshes or reloads the current list or screen.", defaultMessage: "REFRESH" }, UPLOAD: { id: "label_button_upload", description: "Label for button that uploads a file or data to the device or service.", defaultMessage: "UPLOAD" }, SCAN_BARCODE: { id: "label_button_scan_barcode", description: "Label for button that will scan a barcode using the camera.", defaultMessage: "SCAN BARCODE" }, SCAN_QRCODE: { id: "label_button_scan_qrcode", description: "Label for button that will scan a QR code using the camera.", defaultMessage: "SCAN QR CODE" }, ENTER_MANUALLY: { id: "label_button_enter_manually", description: "Label for button that enables manual data entry rather than scanning a barcode.", defaultMessage: "ENTER MANUALLY" }, FACTORY_RESET: { id: "button_label_factory_reset", description: "Button label for a factory reset action.", defaultMessage: "RESET TO FACTORY DEFAULTS" }, CONFIRM: { id: "button_label_confirm", description: "Button label for confirming an action.", defaultMessage: "CONFIRM" }, })), (t.titles = (0, n.defineMessages)({ gridCode: { id: "grid_code_container_title", description: "Grid Code is the techncial specification of the electric grid standard. This term may appear as the title of a screen or section showing the Grid Code settings and parameters.", defaultMessage: "Grid Code", }, ethernet: { id: "network_view_ethernet_title", description: "Title for a screen or section showing the device's Ethernet connection details or configuration options.", defaultMessage: "Ethernet" }, wifi: { id: "network_view_wifi_title", description: "Title for a screen or section showing the device's Wi-Fi connection details or configuration options.", defaultMessage: "Wi-Fi" }, cellular: { id: "network_view_gsm_title", description: "Title for a screen or section showing the device's cellular connection details or configuration options.", defaultMessage: "Cellular" }, metering: { id: "title_metering", description: "Title for a screen or section showing the device's metering configuration and connection status", defaultMessage: "Metering" }, networks: { id: "title_networks", description: "Title for a screen or section showing the device's networking devices, settings, and status.", defaultMessage: "Networks" }, service: { id: "title_service", description: "Title for a screen or section showing features accessible to a service person.", defaultMessage: "Service" }, siteInfo: { id: "title_site_info", description: "Site Info is a screen for configuring different items relating to the site. e.g. Inverter is connected to Solar Roof or PV Panels.", defaultMessage: "Site Info" }, siteMeter: { id: "title_site_meter", description: "Site Meter is an electrical meter that is installed at the interconnection point where the site connects to the electric grid. This term may appear as the title of a screen or section showing a Site Meter configuration, or denote ", defaultMessage: "Site Meter", }, softwareUpdate: { id: "title_software_update", description: "Title for a screen or section showing the device's software update status.", defaultMessage: "Software Update" }, software: { id: "title_software", description: "Title for a screen or section showing the device's software version and software update status.", defaultMessage: "Software" }, alerts: { id: "alert_container_title", description: "Title for a screen or section showing the device's alerts or alert status.", defaultMessage: "Alerts" }, installation: { id: "title_installation", description: "Title for a screen or section showing the device's installation parameters and settings.", defaultMessage: "Installation" }, summary: { id: "summary_container_title", description: "Title for a screen or section showing a summary of the device's configuration.", defaultMessage: "Summary" }, })), (t.prompts = (0, n.defineMessages)({ requiredField: { id: "prompt_required_field", description: "Prompt shown next to a field that is required.", defaultMessage: "This field is required." }, select: { id: "dropdown_default_selection", description: "Prompt shown in a dropdown selector that does not have a preselected value and a user selection is desired or required.", defaultMessage: "Select" }, })), (t.labels = (0, n.defineMessages)({ factoryReset: { id: "label_factory_reset", description: "Label for a factory reset.", defaultMessage: "FACTORY RESET" }, partNumber: { id: "label_part_number", description: "Label for the device part number", defaultMessage: "Part Number" }, partNumberTPN: { id: "label_part_number_psn", description: "Label for a Tesla part number. 'TPN' is how it is identified on the device enclosure.", defaultMessage: "Part Number (TPN)" }, serialNumber: { id: "label_serial_number", description: "Label for the device serial number", defaultMessage: "Serial Number" }, serialNumberTSN: { id: "label_serial_number_tsn", description: "Label for a Tesla serial number. 'TSN' is how it is identified on the device enclosure.", defaultMessage: "Serial Number (TSN)" }, model: { id: "label_model", description: "Label for the device model", defaultMessage: "Model" }, })), (t.errors = (0, n.defineMessages)({ invalidPassword: { id: "error_messages_invalid_password", description: "indicates an error due to an invalid password.", defaultMessage: "Invalid password. Please try again." } })); }, function (e, t) {}, , function (e, t, i) { e.exports = i.p + "012955c70685614a5639d326f41890bd.png"; }, function (e, t, i) { e.exports = i.p + "230aeae00823cd3b622d093948d9c433.png"; }, function (e, t, i) { e.exports = i.p + "4e28cc8f2bdf3ba640331daa2c453341.png"; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAADCAYAAAB8mEQQAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA7SURBVHgBtY4xEQAgDMT6/aUjEmoFB0jBIVawwNyFeoBmy5ILzMxJLgAuj2RjR0RnRmfKkD80VT2oOL0stgxY/9w14gAAAABJRU5ErkJggg=="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAADCAYAAAB8mEQQAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAA4SURBVHgBrY4BEQAgCMTeT0IVmxCNJkbBJJx8BlmAbSszraoOAMM/l+RmC31IKDToLWaogBl0Gg8ymhHD+8iQzwAAAABJRU5ErkJggg=="; }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return _; }), i.d(t, "registrationSelector", function () { return c; }); var n = i(2); function r(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function a(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? r(Object(i), !0).forEach(function (t) { o(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function o(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const s = { isFetching: !1, isSaving: !1, isRegistering: !1, didInvalidate: !1, name: "", email: "", phone: "", street: "", city: "", state: "", zip: "", country: "", privacyNotice: null, limitedWarranty: null, gridServices: null, marketing: null, consent: !1, registered: !1, timedOut: !1, }; function _(e = s, t) { switch (t.type) { case n.REQUEST_CUSTOMER_INFORMATION_CONFIG: case n.REQUEST_REGISTRATION: return a(a({}, e), {}, { isFetching: !0, didInvalidate: !1 }); case n.REQUEST_SAVE_LEGAL_INFORMATION: return a(a({}, e), {}, { isSaving: !0, didInvalidate: !1 }); case n.REQUEST_REGISTER_CUSTOMER_INFORMATION: return a(a({}, e), {}, { isRegistering: !0, didInvalidate: !1 }); case n.RECEIVE_CUSTOMER_INFORMATION_CONFIG_SUCCESS: return a( a(a({}, e), {}, { isFetching: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt }, l(e, t)), {}, { registered: null != t.registered ? t.registered : e.registered, timedOut: null != t.timed_out_registration ? t.timed_out_registration : e.timedOut } ); case n.RECEIVE_REGISTRATION_SUCCESS: return a(a({}, e), {}, { isFetching: !1, didInvalidate: !1, registered: t.registered, timedOut: t.timed_out_registration }); case n.RECEIVE_SAVE_LEGAL_INFORMATION_SUCCESS: return a( a({}, e), {}, { isSaving: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt, privacyNotice: t.privacy_notice, limitedWarranty: t.limited_warranty, gridServices: t.grid_services, marketing: t.marketing, consent: t.consent, registered: null != t.registered ? t.registered : e.registered, timedOut: null != t.timed_out_registration ? t.timed_out_registration : e.timedOut, } ); case n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_SUCCESS: return a( a(a({}, e), {}, { isRegistering: !1, didInvalidate: !1, lastUpdatedAt: t.receivedAt }, l(e, t)), {}, { registered: null != t.registered ? t.registered : e.registered, timedOut: null != t.timed_out_registration ? t.timed_out_registration : e.timedOut } ); case n.RECEIVE_CUSTOMER_INFORMATION_CONFIG_ERROR: case n.RECEIVE_REGISTRATION_ERROR: return a(a({}, e), {}, { isFetching: !1, didInvalidate: !0 }); case n.RECEIVE_SAVE_LEGAL_INFORMATION_ERROR: return a(a({}, e), {}, { isSaving: !1, didInvalidate: !0 }); case n.RECEIVE_REGISTER_CUSTOMER_INFORMATION_ERROR: return a(a({}, e), {}, { isRegistering: !1, didInvalidate: !0 }, l(e, t)); case n.RESET_ALL: case n.RESET_CUSTOMER_INFORMATION: return s; default: return e; } } function l(e, t) { return { name: null != t.name ? t.name : e.name, email: null != t.email ? t.email : e.email, phone: null != t.phone ? t.phone : e.phone, street: null != (t.address || t.street) ? t.address || t.street : e.street, city: null != t.city ? t.city : e.city, state: null != t.state ? t.state : e.state, zip: null != t.zip ? t.zip : e.zip, country: null != t.country ? t.country : e.country, privacyNotice: null != t.privacy_notice ? t.privacy_notice : e.privacyNotice, limitedWarranty: null != t.limited_warranty ? t.limited_warranty : e.limitedWarranty, gridServices: null != t.grid_services ? t.grid_services : e.gridServices, marketing: null != t.marketing ? t.marketing : e.marketing, }; } const c = ({ registration: e }) => e; }, function (e, t, i) { "use strict"; i.r(t), i.d(t, "default", function () { return c; }), i.d(t, "hasNetworkConnectionSelector", function () { return d; }); var n = i(60), r = i(2), a = i(37); function o(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function s(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? o(Object(i), !0).forEach(function (t) { _(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : o(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function _(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const l = { networks: { isFetching: !1, didInvalidate: !1, items: [] }, accessPoints: { isFetching: !1, didInvalidate: !1, isScanning: !1, items: [] }, connectingNetwork: { didInvalidate: !1, networkName: "", interface: null, startedAt: null }, clientProtocols: { didInvalidate: !1, isFetching: !1, m2m: null, modbus: null, dnp3: null, service_shell: null }, }; function c(e = l, t) { switch (t.type) { case r.REQUEST_NETWORKS: return s(s({}, e), {}, { networks: s(s({}, e.networks), {}, { isFetching: !0, didInvalidate: !1 }) }); case r.RECEIVE_NETWORKS_SUCCESS: return s(s({}, e), {}, { networks: s(s({}, e.networks), {}, { items: t.networks || [], isFetching: !1, didInvalidate: !1 }) }); case r.RECEIVE_NETWORKS_ERROR: return s(s({}, e), {}, { networks: s(s({}, e.networks), {}, { isFetching: !1, didInvalidate: !0 }) }); case r.REQUEST_ACCESS_POINTS: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isFetching: !0, didInvalidate: !1 }) }); case r.RECEIVE_ACCESS_POINTS_SUCCESS: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isScanning: null == e.accessPoints.scanStartedAt && e.accessPoints.isScanning, isFetching: !1, didInvalidate: !1, items: t.accessPoints || [] }) }); case r.RECEIVE_ACCESS_POINTS_ERROR: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isFetching: !1, didInvalidate: !0 }) }); case r.REQUEST_SCAN_WIFI_NETWORKS: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isScanning: !0, didInvalidate: !1 }) }); case r.RECEIVE_SCAN_WIFI_NETWORKS_SUCCESS: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { scanStartedAt: t.receivedAt, didInvalidate: !1 }) }); case r.RECEIVE_SCAN_WIFI_NETWORKS_ERROR: return s(s({}, e), {}, { accessPoints: s(s({}, e.accessPoints), {}, { isScanning: !1, didInvalidate: !0 }) }); case r.REQUEST_CONNECT_ETHERNET: case r.REQUEST_CONNECT_WIFI: return s(s({}, e), {}, { connectingNetwork: { networkName: t.networkName, interface: t.interface, didInvalidate: !1, startedAt: t.startedAt } }); case r.RECEIVE_CONNECT_ETHERNET_SUCCESS: case r.RECEIVE_CONNECT_WIFI_SUCCESS: return s(s({}, e), {}, { connectingNetwork: s({}, l.connectingNetwork) }); case r.RECEIVE_CONNECT_ETHERNET_ERROR: case r.RECEIVE_CONNECT_WIFI_ERROR: return s(s({}, e), {}, { connectingNetwork: s(s({}, l.connectingNetwork), {}, { didInvalidate: !0 }) }); case r.CANCEL_NETWORK: return s( s({}, e), {}, { networks: s(s({}, e.networks), {}, { isFetching: !1, didInvalidate: !1 }), accessPoints: s(s({}, e.accessPoints), {}, { isFetching: !1, didInvalidate: !1, isScanning: !1 }), connectingNetwork: s({}, l.connectingNetwork), } ); case r.REQUEST_CLIENT_PROTOCOLS: return s(s({}, e), {}, { clientProtocols: s(s({}, e.clientProtocols), {}, { isFetching: !0, didInvalidate: !1 }) }); case r.RECEIVE_CLIENT_PROTOCOLS_SUCCESS: return s(s({}, e), {}, { clientProtocols: s(s({}, t.clientProtocols), {}, { didInvalidate: !1, isFetching: !1 }) }); case r.RECEIVE_CLIENT_PROTOCOLS_ERROR: return s(s({}, e), {}, { clientProtocols: s(s({}, e.clientProtocols), {}, { didInvalidate: !0, isFetching: !1 }) }); case r.RESET_ALL: case r.RESET_NETWORK_CONFIG: return l; default: return e; } } function d(e) { let t = (e.network && e.network.networks && e.network.networks.items) || [], i = Object(n.cellularDisabledSelector)(e); for (let e of t) if ((!i || e.interface !== a.d.GSM) && e.active) return !0; return !1; } }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const s = a(i(1)), _ = i(3), l = i(35), c = i(17), d = i(28), u = i(283), m = i(26), p = i(133), g = i(150), w = o(i(5)), v = a(i(4)); i(823); const f = (0, _.defineMessages)({ heading: { id: "heading_change_password", defaultMessage: "Change Password" }, currentPasswordPlaceholderText: { id: "current_password_placeholder_text", description: "Placeholder text shown in current password field", defaultMessage: "Enter your current password" }, }); t.default = (0, l.connect)(function (e) { return {}; })( (0, _.injectIntl)(function (e) { const { dispatch: t, intl: i } = e; let n, [r, a] = (0, s.useState)(""), [o, l] = (0, s.useState)(!1), [h, E] = (0, s.useState)(null), [b, y] = (0, s.useState)(null); return ( (0, s.useEffect)(() => { t((0, p.showHeader)("header-default", { title: i.formatMessage(f.heading) })); }, []), (0, s.useEffect)(() => { t((0, g.showBack)(null, "< " + i.formatMessage(d.buttons.BACK), c.browserHistory.goBack)); }, []), (n = h ? s.default.createElement("pre", { className: "form-control-static" }, h) : s.default.createElement( s.default.Fragment, null, s.default.createElement( "button", { type: "button", className: "btn btn-action", onClick: function () { l(!0), fetch(w.default.api.uri + "/password/generate", { method: "POST", credentials: w.default.credentials, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ password: r }) }) .then(v.checkStatus) .then(v.parseText) .then((e) => { const t = v.parseResponseText(e); if (!t || !t.password) throw new Error("Received invalid response"); v.checkResponseStatus(t), l(!1), E(t.password), y(null); }) .catch((e) => { console.error("Error generating password:", e), l(!1), E(null), y(e); }); }, disabled: !r || o, }, s.default.createElement(_.FormattedMessage, { id: "button_label_generate", defaultMessage: "GENERATE" }) ), o && s.default.createElement(u.LoadingSpinner, { className: "spinner password-generate-spinner" }) )), s.default.createElement( "div", { className: "password-generate-container" }, s.default.createElement( "p", { className: "password-generate-help-text" }, s.default.createElement(_.FormattedMessage, { id: "password_generate_help_text", defaultMessage: "Enter the existing password to generate a new random password." }) ), s.default.createElement( "form", { role: "form", className: "form-horizontal", onSubmit: (e) => e.preventDefault() }, s.default.createElement( "div", { className: "form-group" }, s.default.createElement("label", { htmlFor: "currentPassword", className: "col-sm-4" }, s.default.createElement(_.FormattedMessage, Object.assign({}, m.passwordFormLabels.currentPassword))), s.default.createElement( "div", { className: "col-sm-8" }, s.default.createElement("input", { type: "password", id: "currentPassword", className: "form-control", placeholder: i.formatMessage(f.currentPasswordPlaceholderText), onChange: (e) => a(e.target.value), autoComplete: "off", autoCorrect: "off", required: !0, }) ) ), s.default.createElement( "div", { className: "form-group" }, s.default.createElement("label", { className: "col-sm-4" }, s.default.createElement(_.FormattedMessage, Object.assign({}, m.passwordFormLabels.newPassword))), s.default.createElement("div", { className: "col-sm-8" }, n) ) ), !!h && s.default.createElement( "p", { className: "password-generate-notice" }, s.default.createElement(_.FormattedMessage, { id: "password_generate_notice", defaultMessage: "The password has been changed. Record the new password before leaving this page." }) ), !!b && s.default.createElement( "p", { className: "password-generate-error" }, s.default.createElement(_.FormattedMessage, { id: "password_generate_error", defaultMessage: "There was an error generating a new password. Verify connectivity and the current password and try again." }) ) ) ); }) ); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__awaiter) || function (e, t, i, n) { return new (i || (i = Promise))(function (r, a) { function o(e) { try { _(n.next(e)); } catch (e) { a(e); } } function s(e) { try { _(n.throw(e)); } catch (e) { a(e); } } function _(e) { var t; e.done ? r(e.value) : ((t = e.value), t instanceof i ? t : new i(function (e) { e(t); })).then(o, s); } _((n = n.apply(e, t || [])).next()); }); }, s = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const _ = a(i(1)), l = i(17), c = i(3), d = i(35), u = i(28), m = i(133), p = i(55), g = i(2), w = s(i(14)), v = i(455), f = i(21); i(824); function h(e) { return _.default.createElement( "div", { className: "factory-reset-modal-container" }, _.default.createElement("p", null, _.default.createElement(c.FormattedMessage, { id: "prompt_factory_reset_confirmation", defaultMessage: "Confirm you really wish to reset the unit to factory settings?" })), _.default.createElement( "div", { className: "btn-group" }, _.default.createElement("button", { className: "btn btn-secondary factory-reset-modal-button", onClick: e.onCancel, type: "button" }, _.default.createElement(c.FormattedMessage, Object.assign({}, u.buttons.CANCEL))), _.default.createElement("button", { className: "btn btn-danger factory-reset-modal-button", onClick: e.onConfirm, type: "button" }, _.default.createElement(c.FormattedMessage, Object.assign({}, u.buttons.CONTINUE))) ) ); } t.default = (0, d.connect)( function (e) { return { din: e.configuration.din, isEngineer: (0, f.isEngineer)(e.authentication) }; }, function (e) { return { destroyModal: (t) => { e((0, p.destroyModal)(t)); }, showHeader: (t) => { e((0, m.showHeader)("header-default", { title: t })); }, showModal: (t, i, n) => { e((0, p.showModal)(t, i, n)); }, setErrors: (t) => { e((0, m.updateHeader)("header-default", { errors: t })); }, clearErrors: () => { e((0, m.updateHeader)("header-default", { errors: [] })); }, }; } )( (0, c.injectIntl)(function (e) { const { intl: t, din: i, isEngineer: n } = e, [r, a] = (0, _.useState)(!1); e.showHeader(t.formatMessage(u.titles.service)); let s = (0, _.useMemo)(() => (0, v.getTEDAPI)({ din: i, isEngineer: n }), [i, n]); const d = () => o(this, void 0, void 0, function* () { console.info("Initiated factory reset"); try { a(!0), yield s.common.factoryReset({}), console.info("Factory reset succeess"), l.browserHistory.replace("/"); } catch (t) { if ((console.error("Factory reset failed", t), !(t instanceof Error))) throw t; e.setErrors([new w.default(g.FACTORY_RESET, t.message)]); } finally { a(!1); } }), m = (t) => { t && d(), e.destroyModal("FACTORY_RESET_MODAL"); }; return _.default.createElement( "div", { className: "service-container" }, _.default.createElement("h3", null, _.default.createElement(c.FormattedMessage, Object.assign({}, u.labels.factoryReset))), _.default.createElement( "p", null, _.default.createElement(c.FormattedMessage, { id: "factory_reset_message", defaultMessage: "This will cause the unit to reset to the default state as provided by Tesla. This action cannot be undone. The unit will need to be re-commissioned by a professional installer before operation is possible. You may need to reconnect to the unit's WiFi network.", }) ), _.default.createElement( "button", { className: "btn btn-primary btn-block", disabled: r, onClick: () => { e.clearErrors(), e.showModal("FACTORY_RESET_MODAL", { centered: !0, showCancel: !1, contentView: _.default.createElement(h, { onCancel: () => m(!1), onConfirm: () => m(!0) }) }, void 0); }, type: "button", }, _.default.createElement(c.FormattedMessage, Object.assign({}, u.buttons.FACTORY_RESET)) ) ); }) ); }, , , , , , , function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAAAXNSR0IArs4c6QAAAkhJREFUOBGtlT9oU1EUxvNenslSEAyIZChKKYUiOAmiIFjoIEUEqVMpCIX8GSIEYnFxdZAuGkJIWsGlgxAFkSKYvRQ6udRBsmSIU9ZiQv74+17vS5v38pSUXrg55537fd89995zb6xISEun07cYWh0Oh8vYWXqC3qY3LcuqY2uVSuUHNtAsfySVSs1BekP8NoK72D16I5lMtlutloTn6Ctg1rCHYDar1WoDf9TGRLPZ7MPBYPAB4FY8Hn9XLBY7I6TPyeVy8U6n8xzxgm3bz8rl8jcPMhKVYL/ffx+NRp8AOPAA/7Pw7sD7DG/DE3ZFzZL3mfHxNILehBJmhV9Y4V1tha0B7aGW/C/BfD5/xRPxW/HEN2cRscwpf43FYvP+PWQFlwC+hvDUTD6D/5JsdvzC2uNut/uL+CNlqrLZ9Qsa0gPsHw5tAaHr+Pfpb0lkETvWxJcOwVUHR3VYGEOYD4S+46q7jbo8IvsGnBsEjkz4rNljbMshosIeq7OzKM9H7DIHuQ4p6ThOWHVIZ1bLT6iwPfIkm8lkltjbJid8E+F7pVJpIt7oJJSpd1N+TxJUDMFjMvzIdmTCMIqbG9dWpk26rl5oo7h/UtzboYDTAek0bbKo46ycxoMegtd6vd7V4EggojehrkxrOGuqswDEBMh0CfdV2Lji4ksHt+biqLtPnO4L9+OcP+JLR3RlGuEQNpmloDus72mbeOJLR1xXlFNt6PnSazOtsPDiiS8diY6ePn0AuNj3VKJq7M3Fvvwnsie/5vU613/UX4d8Ju+yyDc7AAAAAElFTkSuQmCC"; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.unitMessages = t.phaseMessages = void 0); const n = i(3), r = i(134); (t.phaseMessages = (0, n.defineMessages)({ [r.PhaseType.SINGLE]: { id: "phase_type_single", description: "Identifies a grid or installation that has a single phase.", defaultMessage: "Single-Phase" }, [r.PhaseType.TWO]: { id: "phase_type_two", description: "Identifies a two-phase grid or installation.", defaultMessage: "Two-Phase" }, [r.PhaseType.THREE]: { id: "phase_type_three", description: "Identifies a three-phase grid or installation.", defaultMessage: "Three-Phase" }, [r.PhaseType.SPLIT]: { id: "phase_type_split", description: "Identifies a split-phase grid or installation.", defaultMessage: "Split-Phase" }, [r.PhaseType.WYE_LL]: { id: "phase_type_wye_ll", description: "Identifies an L-L (line-to-line) installation on wye 3-phase grid (also called a star connection).", defaultMessage: "Wye L-L" }, })), (t.unitMessages = (0, n.defineMessages)({ hertz: { id: "display_frequency_hertz", defaultMessage: "{frequency}Hz" }, volts: { id: "display_voltage_volts", defaultMessage: "{voltage}V" }, amps: { id: "display_current_amps", defaultMessage: "{current}A" }, watts: { id: "display_power_watts", defaultMessage: "{power}W" }, kiloWatts: { id: "display_power_kilowatts", defaultMessage: "{power}kW" }, wattHours: { id: "display_energy_watt_hours", defaultMessage: "{energy}Wh" }, kiloWattHours: { id: "display_energy_kilowatt_hours", defaultMessage: "{energy}kWh" }, ohms: { id: "display_resistance_ohms", defaultMessage: "{resistance}Ω" }, kiloOhms: { id: "display_resistance_kiloohms", defaultMessage: "{resistance}kΩ" }, })); }, function (e, t, i) {}, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }); const o = a(i(1)); i(652); class s extends o.Component { constructor() { super(...arguments), (this.state = { focused: !1 }); } render() { var e, t, i; let n = null; if (this.props.inputAddonView) { let t = null !== (e = this.props.inputAddonProps) && void 0 !== e ? e : { className: "input-group-addon" }; n = o.createElement("div", Object.assign({}, t), this.props.inputAddonView); } let r = null !== (t = this.props.className) && void 0 !== t ? t : "input-group"; this.state.focused && (r += " focus"); let a = null !== (i = this.props.inputProps) && void 0 !== i ? i : { type: "text", className: "form-control", autoCapitalize: "none", autoComplete: "off", autoCorrect: "off" }; return o.createElement("div", { className: r, onFocus: this._handleFocus.bind(this), onBlur: this._handleBlur.bind(this) }, o.createElement("input", Object.assign({}, a)), n); } _handleFocus() { this.setState({ focused: !0 }); } _handleBlur() { this.setState({ focused: !1 }); } } t.default = s; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const s = a(i(1)), _ = i(50), l = o(i(153)); i(749); class c extends s.Component { constructor(e) { super(e), (this.state = { collapsed: !!e.collapsedOnMount }); } render() { const { style: e, collapsedHeader: t } = this.props; return s.createElement( "div", { className: "collapsible-container", style: e }, s.createElement("div", { className: "collapsible-header", role: "button", "data-toggle": "collapse", onClick: this._handleCollapseToggle.bind(this) }, t, this._getCaret()), this._getContent() ); } _getCaret() { return this.props.children && this.props.isCollapsible ? s.createElement("div", { className: this.props.caretClassName }, s.createElement("img", { className: (0, _.classNames)({ "rotate-90": !this.state.collapsed }), src: l.default, alt: "indicator" })) : null; } _getContent() { const { hasWell: e, children: t, id: i } = this.props; if (this.state.collapsed) return null; let n = t; return e && n && (n = s.createElement("div", { className: "well" }, n)), s.createElement("div", { id: "collapse-" + i }, n); } _handleCollapseToggle(e) { if ((e.preventDefault(), e.stopPropagation(), !this.props.isCollapsible)) return; const t = !this.state.collapsed; this.setState({ collapsed: t }), this.props.toggleCallback && this.props.toggleCallback(t); } } t.default = c; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAcCAYAAAB2+A+pAAAAAXNSR0IArs4c6QAAArZJREFUSA2tVs1rE1EQn9lNNQfFg9QvUPygBUEsGIQgCNpupc3FgxfpTa+CXwhCQVrwpCgWIf+JJKmuIvZSKB4iglCx9eBBFBHRSmmzO868xP1IXnb3rQ4smTfv9/Fm8/btIhgG1Z0zAN5tICgrKsIigH0PJ92XJlJoAqbG2BXw6TEAWXEe+mDhVZx4Xo3X+48yG1PNKQN6C9xpQSuH0AKyT2PF5TuQHl0r1xOIZi1Av9rXVGiyIMYorF4mVs1kDPOvLgPRiRhTNxCMYDNE6q2mZ84OaHnvuaPBDHoACF+hYA/huPsjCZ/esefPZjYVJ1mgcFIisWPu9ih3+0b9fxGh9Q0Pyjdeq8rioxIUt9iRWU5loxXs49z1u/hEOEruuOXPdZsKdWn5JzRX19QleU/IRhNuQvQ1poZznjfUOR3X8ykoR/OgKAlzlUasGA60xlSb3ArkPwxhOTPWUFoautYYcP0mr/iIBm9WEg3R0kSPMT0d38e4aQ02b2m6oxnj9xiD17rPG2pbDPUvA9ESza6IGdP86Cmen+rC/I/hVEc70AqM1Rkrbx7ipzAlLAwh0bwvTTRZO3qOB8bQWLjEpqW+5MhEaWg7HNpdVJfkmUK0xaMTaunt89hf5p286+9E2q/ntZ9l2w67T+MA4hcoWMNyjrc7bvkzJqZiYDFTLqOQxsSLA8kdG4ZN/y3f5oGsIs2VXzBxp6ngjbsjMHLY4CFA2IQB65jFptdMTMWt+uQTfP6+oS7JjUIaZE+5WRUjIoMPDBYDSjQPiulJhb+fcK+8RE3i1oX9vCXaDMlzxB6k+tlV9j2Yg5yfgvCRP+Kwnl8hJ5M9LX6uHrD5Wk4Jc5p4saeFjrvCH+MX+b/+ba5iymAP9hLP4Nih2qi8f6/zRjvJJ+tOU8lEPME3bmyJMXNYefFBsH8AhWv0MUn9RD0AAAAASUVORK5CYII="; }, function (e, t, i) { "use strict"; var n; Object.defineProperty(t, "__esModule", { value: !0 }), (t.BarcodeReader = t.BarcodeError = t.DecodeStatus = t.BarcodeFormat = void 0), (function (e) { (e.None = "None"), (e.Code39 = "Code39"), (e.Code128 = "Code128"), (e.QRCode = "QRCode"); })(t.BarcodeFormat || (t.BarcodeFormat = {})), (function (e) { (e.NoError = "NoError"), (e.NotFound = "NotFound"), (e.FormatError = "FormatError"), (e.ChecksumError = "ChecksumError"), (e.InternalError = "InternalError"); })((n = t.DecodeStatus || (t.DecodeStatus = {}))); class r extends Error { constructor(e, t) { super(`${e}${t ? ": " + t : ""}`), (this.status = e), (this.error = t); } } t.BarcodeError = r; t.BarcodeReader = class { constructor(e = "") { (this._queue = []), (this._disabled = !1), (this._worker = new Worker(e + "/barcode.js")), (this._worker.onmessage = this._handleWorkerMessage.bind(this)), (this._worker.onerror = this.stop.bind(this)); } _handleWorkerMessage(e) { const t = this._queue.shift(); if (!t) return; const { result: i } = e.data; if (i.status !== n.NoError) return void t.reject(new r(i.status, i.error)); const { format: a, text: o } = i; t.resolve({ format: a, text: o }); } scanBarcode(e, t = []) { if (this._disabled) { const e = new r(n.InternalError, "BarcodeReader is unavailable."); return Promise.reject(e); } const i = { file: e, hints: { tryHarder: !0, tryRotate: !0, formats: t.join("|") } }; return this._worker.postMessage(i), new Promise((e, t) => this._queue.push({ resolve: e, reject: t })); } stop() { if (this._disabled) return; this._worker.terminate(), (this._disabled = !0); const e = this._queue; this._queue = []; const t = new r(n.InternalError, "BarcodeReader is unavailable."); e.forEach((e) => e.reject(t)); } }; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAYAAAA4qEECAAAAAXNSR0IArs4c6QAACMRJREFUeAHtm0mIHVUUhuOQwSFqoolGMxjFOKMiCk4kiAgOCxUUwQFE0ZUrQXEvuHYtigQcViJOiIKYRcCoiIkYBzTSMcEhDtEYxxj9v5f6w/Hyujs1va7qvgf+3HOHqjr3e/edulWvM2tWtkwgE8gEMoFMIBPIBDKBTCATyAQygUwgE8gEMoFMoCSBg0qOH/Vw4jtcmi/Nkw6VZkvYnkJ/qtwl/Sr9K3XSugb6MFE6QzpLOlNaJgGXOA8pyugfrDbrH/nbpU3SxkK7VXbCugAagOdIl0jnSXMl4jJAygg3+vSlH4DHA/5t6XVpg8Q3YMpsKkHP0awvla6WjpWIBUXAhka7Vza+4U4E2sdS/iA9K70okWpGbgQ9amPirN7rpKMlw3UZAeG7PgwufbHd411yTuQxO+U/Ib0g7ZVGZgQxSluqi90srZAM0CBcNySX9OMb1oH68XiOpe5zfSz/UekTaSRGAKOyi3Whu6QFEhNmh0CJAcFGG6KNMRFQ7Is+Y+I4z8vncZ+PWazxN0iklJHAdkC6XmvGJK+XrpHwMSaMeeKu05ZC8TGxfSI/9jG/eA36LHL+aon0xU2TD7U1axs027U7pPOLGRhonHycnNtpsx/BDWtjDh5jsK4zHn+iMcTGbmed1NqNkkDasoU68Z3SIsmADIJ69IGRynDYlu2UfpF+ln6S6OP8xxXiGn6gSc/jOtfET6/r2L5S333SVqlx4yJtGJO+VwIAk/Nkos+EMdqQAVAC9oNCn6lkTzyRccy50mXS5dISiTZfL/WHxcPYMekWiQ+1UWsDNAHfJp0qcX5PNvU9efdT8kTHA8ZWqY6t0sF8m66UOK+vRQyOg3YU2/DXS/dIk324GnLgRgBNGw8gPOnZCN6W+p7kFxrwlPSmRHqoa+wmOBc3uRXSSRLXMljmHevRZzw3yHVSY9Y0aG4sayQCxyj3Drx9vtvdx83naekliXTRtO3QCV+WPpdIKTzeGzalfeKyT3mB9I30kdSIxYnXPeEJOgFf12FfU64TJ4MP2LXSt9Io7BRd5DFppeRYgIpclzuos9UjddwofSjVtqZWNIHeJB1VREQ9musut6jzSamNVRyvG312K69K3DSXS8TiFIKfQmefTQp8Tqq9x24KNPtQ0oYDMlDq9uUO+r9UuVb6i4YRG6nqFelCaZnk1WwOrhMzYvfynbRJqmURQtUTzdaBd0tHSA4wljF4tk2PS79LU2nc7J6XVhZBOMZY0sU8uLFeJNWKmRPXtbN1Ap4AWb2p9qrNItBnpFoB6/gmjJ0NDye7pQg3XSD08V7kdqmW1QXNV46vIYC5eRgqdfwInrv/91JXjJ3IQxIMUkXg+PdLfHMrW13Qy3VlftMDKmbAhk6JxqRPpa4ZN8f3JBbMMMGH9qXSVVJlqwv6dF3ZcNPV7DrlW5UjbP/AR3SJdAXDJbZRv7VOKHVAz9GFT5YA6RRhuIavrsFK/hqno/a+4mJlw8KrOvoAx66VvH0dNJT5pw7oE3UhA3WKAHT096j+bpmApmgsDzJABmpkQp129tTc8K+QKlk8adkTRNDjrWi2c+xDu27sk7dJ8AAuYAFM3W20r5EqGSepajxyAxjzynYacQrZsq+7F/++pihTsBEyoFdXnUlV0BxHviJNkB5iuoh+n0DzxOiV7HRBGcUzA/XSVhX0kcWV4opOV/XfGsMbsL7YegXKIzpMECsYuU7JBmClVNo4uIqxmg2WFUyqcGmf/IzfF+Obye4ohWzgLldVmVBV0HN1MSAC28C5fqz/RkPPjFe2ThtOIzCygL2oypw4WRXjOEMd7/hd43V0uH27YuObmRpztfHyrLTVAT1eWuBTx/q4orcpblIIFuHGOq8cSltV0AQx7JOPAaSBxr6u+vyN9R+TBOeFNMmw/3dXBc2OYjKQ5PG+Ga9w0x8kUrDsTEpbk6BT8PNKRzP1B2xUCICMcFN/c5Uwq4Lm65WmjhQ0e86+2QYFvE1iZwFgS+7A+LXlncIvVVTd3pHLAMsN0aLuNkpAVz2/Dp0SY6f0sMSNnPSISCWUtD0o8XxQ2io9TuoqXPi05GoGTTPwWQ2sAALsk40p2DekhRJbORYVT40PSLxSrWTAqGprdOD84uAImSbXCXpzMWZGF3W+2jsKoGnqADJtlIulbCJQBzQ/tEbI9g0Z0OTpyr9K6NhpY1VzNADYBq0oSAAVGXKEzs6mDy//i6m0U9QBDUxel/rZn7rNwIHPI+uPUqWNvk/Y97IOaOYOUP/Skq5q6hglv7fxZmzGWl3QPLgcL5Hr4ypmNwNg2tBsiW1eF/5KSWGM3uqC9ipeoNANlzb/CMCMPIa/d+MvOv12jL4ZY3VBA4q/X1siGTRtwMUovdKpswMhX9M2o6wJ0MBklR4jRbBOG7Hkw+DmycqeUdYEaICxqgFNLsYAPp4Yw06EdwaMmRHWFGhgAdtPgjFdGLjf9tEHbB7fOcbtcqevNQmat1yIm55Bx7QBRaAaPHVg+zjq09aaBA0kVijnJDUAFNCY4cbSHwY5mx8JeCM4bVd306DFapB7gUd6iGBT3x8CJXFwDI/r3FjdJ3d6WBugIcONjq0c4LxyAT3Mdxsl8bC6eZLkIcgfjtx+W1uggcavFbwLicAMztAZh8V2fIzj+FbwBpAPjDpii4j5vPtqHf+3LdBMm3zL/yNkhQ5LI4as7v0rPfoRPu3+AOxn0JAoDDikEaCkf0ZGH7BjaV/NQ/votxiD3wtrc0VHAOxGuMkN240wzsANkdIr3jBjnbb4yM85Om2jAg0E3kfzBo+V7a99BKvm/avV7WlbrGfQ0BjHyNv8qkzpv2TyanYZV7CBu+S09jNoaExiPA0aODuKaAY5rGSc2zPoSG0CH2AAJ53wVAi4mFJU3Z+78RmP9RI0k+uSAZoV7n0zsTmlkG4MGZ/YfYOU223rGuiUFvFZ9MVVHev42TKBTCATyAQygUwgE8gEMoFMIBPIBDKBTCATyAQygelF4D841E51Be+GwQAAAABJRU5ErkJggg=="; }, function (e, t, i) { e.exports = i.p + "25be833719104362501e2268c5346d10.png"; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAOCAYAAAASVl2WAAAAAXNSR0IArs4c6QAAAJFJREFUGBlj+P//fxsQ5zDgAkBJDSB+CsRFuNQwACVVgfgxEFfgU6QIVPAAiOvwKZIDKrgLxC34FEkDFdwE4i6QIkZsKoGSkkDx/UC8nQmbAqCYCBALAPFtDHmgbkMgfgXEKdgkTYESr4E4HpukJVDiLRBHYpO0BUq8A+IQbJKOUEl/DEmQAFByBRB7Y5UECgIAfeZ8AwjCztMAAAAASUVORK5CYII="; }, function (e, t, i) { e.exports = i.p + "3b8bde11a1eab10668c1dbaf6dbd94ad.png"; }, function (e, t, i) { e.exports = i.p + "fd509b9190bcc31cd81e9e21c97fe678.png"; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.DevicesWithVitals = t.SiteControllerConnectedDeviceWithVitals = t.DeviceVital = void 0); const n = i(770), r = i(40), a = { name: "" }, o = { alerts: "" }, s = {}; function _(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } (t.DeviceVital = { encode(e, t = r.Writer.create()) { var i, n, a, o; return ( t.uint32(10).string(e.name), "intValue" === (null === (i = e.value) || void 0 === i ? void 0 : i.$case) && t.uint32(24).int64(e.value.intValue), "floatValue" === (null === (n = e.value) || void 0 === n ? void 0 : n.$case) && t.uint32(33).double(e.value.floatValue), "stringValue" === (null === (a = e.value) || void 0 === a ? void 0 : a.$case) && t.uint32(42).string(e.value.stringValue), "boolValue" === (null === (o = e.value) || void 0 === o ? void 0 : o.$case) && t.uint32(48).bool(e.value.boolValue), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, a); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.name = i.string(); break; case 3: o.value = { $case: "intValue", intValue: _(i.int64()) }; break; case 4: o.value = { $case: "floatValue", floatValue: i.double() }; break; case 5: o.value = { $case: "stringValue", stringValue: i.string() }; break; case 6: o.value = { $case: "boolValue", boolValue: i.bool() }; break; default: i.skipType(7 & e); } } return o; }, }), (t.SiteControllerConnectedDeviceWithVitals = { encode(e, i = r.Writer.create()) { void 0 !== e.device && void 0 !== e.device && n.SiteControllerConnectedDevice.encode(e.device, i.uint32(10).fork()).ldelim(); for (const n of e.vitals) t.DeviceVital.encode(n, i.uint32(18).fork()).ldelim(); for (const t of e.alerts) i.uint32(26).string(t); return i; }, decode(e, i) { const a = e instanceof Uint8Array ? new r.Reader(e) : e; let s = void 0 === i ? a.len : a.pos + i; const _ = Object.assign({}, o); for (_.vitals = [], _.alerts = []; a.pos < s; ) { const e = a.uint32(); switch (e >>> 3) { case 1: _.device = n.SiteControllerConnectedDevice.decode(a, a.uint32()); break; case 2: _.vitals.push(t.DeviceVital.decode(a, a.uint32())); break; case 3: _.alerts.push(a.string()); break; default: a.skipType(7 & e); } } return _; }, }), (t.DevicesWithVitals = { encode(e, i = r.Writer.create()) { for (const n of e.devices) t.SiteControllerConnectedDeviceWithVitals.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, s); for (o.devices = []; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.devices.push(t.SiteControllerConnectedDeviceWithVitals.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return o; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.parseWifiCode = void 0), (t.parseWifiCode = function (e) { if (!e.startsWith("WIFI:")) throw new Error("Not a WiFi code."); const t = (e = e.slice(5)).indexOf(";;"); -1 !== t && (e = e.slice(0, t)); let i = e.match(/(\\.|[^;])+/g) || []; if (((i = i.filter((e) => e.indexOf(":") > 0)), 0 == i.length)) throw new Error("Empty WiFi code"); let n = {}; return ( i.forEach((e) => { const t = e.indexOf(":"); if (-1 === t || 0 === t) return; let i = e.slice(0, t); if (n[i]) return; let r = e.slice(t + 1); r.startsWith('"') && r.endsWith('"') && (r = r.slice(1, -1)), (n[i] = r.replace(/\\\\/g, "\\").replace(/\\;/g, ";").replace(/\\:/g, ":").replace(/\\,/g, ",").replace(/\\"/g, '"')); }), n ); }); }, function (e, t, i) {}, , , , , , , , , , , , , , , , , , , , , , , , , function (e, t) {}, , , , , , function (e, t) {}, , , , , , , , , , , , , , , , , , , function (e, t, i) {}, function (e, t, i) {}, , function (e, t, i) { var n = { "./af": 299, "./af.js": 299, "./ar": 300, "./ar-dz": 301, "./ar-dz.js": 301, "./ar-kw": 302, "./ar-kw.js": 302, "./ar-ly": 303, "./ar-ly.js": 303, "./ar-ma": 304, "./ar-ma.js": 304, "./ar-sa": 305, "./ar-sa.js": 305, "./ar-tn": 306, "./ar-tn.js": 306, "./ar.js": 300, "./az": 307, "./az.js": 307, "./be": 308, "./be.js": 308, "./bg": 309, "./bg.js": 309, "./bm": 310, "./bm.js": 310, "./bn": 311, "./bn.js": 311, "./bo": 312, "./bo.js": 312, "./br": 313, "./br.js": 313, "./bs": 314, "./bs.js": 314, "./ca": 315, "./ca.js": 315, "./cs": 316, "./cs.js": 316, "./cv": 317, "./cv.js": 317, "./cy": 318, "./cy.js": 318, "./da": 319, "./da.js": 319, "./de": 320, "./de-at": 321, "./de-at.js": 321, "./de-ch": 322, "./de-ch.js": 322, "./de.js": 320, "./dv": 323, "./dv.js": 323, "./el": 324, "./el.js": 324, "./en-SG": 325, "./en-SG.js": 325, "./en-au": 326, "./en-au.js": 326, "./en-ca": 327, "./en-ca.js": 327, "./en-gb": 328, "./en-gb.js": 328, "./en-ie": 329, "./en-ie.js": 329, "./en-il": 330, "./en-il.js": 330, "./en-nz": 331, "./en-nz.js": 331, "./eo": 332, "./eo.js": 332, "./es": 333, "./es-do": 334, "./es-do.js": 334, "./es-us": 335, "./es-us.js": 335, "./es.js": 333, "./et": 336, "./et.js": 336, "./eu": 337, "./eu.js": 337, "./fa": 338, "./fa.js": 338, "./fi": 339, "./fi.js": 339, "./fo": 340, "./fo.js": 340, "./fr": 341, "./fr-ca": 342, "./fr-ca.js": 342, "./fr-ch": 343, "./fr-ch.js": 343, "./fr.js": 341, "./fy": 344, "./fy.js": 344, "./ga": 345, "./ga.js": 345, "./gd": 346, "./gd.js": 346, "./gl": 347, "./gl.js": 347, "./gom-latn": 348, "./gom-latn.js": 348, "./gu": 349, "./gu.js": 349, "./he": 350, "./he.js": 350, "./hi": 351, "./hi.js": 351, "./hr": 352, "./hr.js": 352, "./hu": 353, "./hu.js": 353, "./hy-am": 354, "./hy-am.js": 354, "./id": 355, "./id.js": 355, "./is": 356, "./is.js": 356, "./it": 357, "./it-ch": 358, "./it-ch.js": 358, "./it.js": 357, "./ja": 359, "./ja.js": 359, "./jv": 360, "./jv.js": 360, "./ka": 361, "./ka.js": 361, "./kk": 362, "./kk.js": 362, "./km": 363, "./km.js": 363, "./kn": 364, "./kn.js": 364, "./ko": 365, "./ko.js": 365, "./ku": 366, "./ku.js": 366, "./ky": 367, "./ky.js": 367, "./lb": 368, "./lb.js": 368, "./lo": 369, "./lo.js": 369, "./lt": 370, "./lt.js": 370, "./lv": 371, "./lv.js": 371, "./me": 372, "./me.js": 372, "./mi": 373, "./mi.js": 373, "./mk": 374, "./mk.js": 374, "./ml": 375, "./ml.js": 375, "./mn": 376, "./mn.js": 376, "./mr": 377, "./mr.js": 377, "./ms": 378, "./ms-my": 379, "./ms-my.js": 379, "./ms.js": 378, "./mt": 380, "./mt.js": 380, "./my": 381, "./my.js": 381, "./nb": 382, "./nb.js": 382, "./ne": 383, "./ne.js": 383, "./nl": 384, "./nl-be": 385, "./nl-be.js": 385, "./nl.js": 384, "./nn": 386, "./nn.js": 386, "./pa-in": 387, "./pa-in.js": 387, "./pl": 388, "./pl.js": 388, "./pt": 389, "./pt-br": 390, "./pt-br.js": 390, "./pt.js": 389, "./ro": 391, "./ro.js": 391, "./ru": 392, "./ru.js": 392, "./sd": 393, "./sd.js": 393, "./se": 394, "./se.js": 394, "./si": 395, "./si.js": 395, "./sk": 396, "./sk.js": 396, "./sl": 397, "./sl.js": 397, "./sq": 398, "./sq.js": 398, "./sr": 399, "./sr-cyrl": 400, "./sr-cyrl.js": 400, "./sr.js": 399, "./ss": 401, "./ss.js": 401, "./sv": 402, "./sv.js": 402, "./sw": 403, "./sw.js": 403, "./ta": 404, "./ta.js": 404, "./te": 405, "./te.js": 405, "./tet": 406, "./tet.js": 406, "./tg": 407, "./tg.js": 407, "./th": 408, "./th.js": 408, "./tl-ph": 409, "./tl-ph.js": 409, "./tlh": 410, "./tlh.js": 410, "./tr": 411, "./tr.js": 411, "./tzl": 412, "./tzl.js": 412, "./tzm": 413, "./tzm-latn": 414, "./tzm-latn.js": 414, "./tzm.js": 413, "./ug-cn": 415, "./ug-cn.js": 415, "./uk": 416, "./uk.js": 416, "./ur": 417, "./ur.js": 417, "./uz": 418, "./uz-latn": 419, "./uz-latn.js": 419, "./uz.js": 418, "./vi": 420, "./vi.js": 420, "./x-pseudo": 421, "./x-pseudo.js": 421, "./yo": 422, "./yo.js": 422, "./zh-cn": 423, "./zh-cn.js": 423, "./zh-hk": 424, "./zh-hk.js": 424, "./zh-tw": 425, "./zh-tw.js": 425, }; function r(e) { var t = a(e); return i(t); } function a(e) { if (!i.o(n, e)) { var t = new Error("Cannot find module '" + e + "'"); throw ((t.code = "MODULE_NOT_FOUND"), t); } return n[e]; } (r.keys = function () { return Object.keys(n); }), (r.resolve = a), (e.exports = r), (r.id = 643); }, , function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAABHklEQVQ4jc3UvU4CURAF4A8SQrTA2l4tsNJGaHwWhZoH0efQRCoVfAyipZIorQ12logWzIZls7hoKDjJFPfMz525d2bYdJQK9Ls4xl6cX/GI979e1MA9vvCdkQnuwqYQFVxGoGkEbeE0pBXcNGwuwicX23iILJ5R/+XiOl7Cto+trEEJ3TC4Ry2lq6IZUk3xO+iFT1fmP85DcYVyij/E0Pz9hsElKOM6dGcJeYBPvOVkNsQYnZBxcOlMaxhFjH0YxA3ZX2sG30lxneCaS2wH5VTtRT25MpKSR4pL/rBCyaz5U1hsm15Opsvaph8+N3KebK2NnaBiNk7J6PXQNh+9dnArjV4aDbMFMJG/HG5xkue4yvo6sri+nvxjfW0OfgDNJWMGCxPjVQAAAABJRU5ErkJggg=="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAABnElEQVQ4ja3Uu2tUURAG8N8md41eRAtBSGHnAwQLraKFItqlTgpT+MLCyk7srfwXrCxcMWqhG+1s7EMMiJpCAhYipItY+Ni4FmcuOdncbG6xA4dz75zvfHwzc2ZgBR0URmQd9DE/CtICV2OfDd8cevFdYhpHsIEvWML3JsTzNUrvhy9fPbzEVBPSZ3HpU/wfwgzO4Txu4BX+heIHaO9EOI5HmZJhOT0pFbOPBeyrI3sagDd40YD0ILoZrpUf3s0O2rbmdHlIWGM2X8m1ynkKv/ERezNwiR8Bfj5E6QGs4ieOwfu4dGYAOB3+JbuHfzYwi4VUMZgYAJWxP8RF6Z2O4Qr+DmB/xT4Ox0PuasivbD++xbqdKV0eUDqBD/gjpQ9cD/DjUFHZ5SCsntJ6Tfg3w3cvl9yyWdVujdIZKael7R11GLeqcHMr8TrAn6XHW2cF3traUTtaW2qnDalY3QjpAi7hjtTH/ThvPKWm4mLP9uHQxxOcUDNQWjVkuU3iNI5iD77iHdbivJA6ZVYaLHO7KW1ieZt2RkFYkXaw8h/dmHogm+upYwAAAABJRU5ErkJggg=="; }, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAAAXNSR0IArs4c6QAAAIlJREFUGBljYMANsoBS/bilscukAIVfAPF1IO7CrgRTNB4o9AqIdYFYEohvAnELEOMFkUDZ10BsiKRKGsi+C8R1SGIozBAg7y0Qm6KIQjhyQOoBEFdAuAjSH8h8B8SWCCEMliJQ5DEQF8FkvIEMkCZbmAAeWhUo9xSIc0BqVgCxI4hBJNAAqmsDAPL9E9lufkHxAAAAAElFTkSuQmCC"; }, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAAXNSR0IArs4c6QAAA1NJREFUSA21VctrE0Ec/mazibSmsaggii8QFBHBvm1R8aDiyQqCiqgXRXxWUTx48SB4ETx6EPUPaPUiehIfF59JiorUm+ALwcZam9TYZJMdv6md7ewmkaTWhWVnfvPN7/tmfo8FqnwyCRwaTmBjlfCqYVbVSGCLLbC6BnxV0FoEVOWwVpBPAK/54kg/1tbqhPuO8d1R6z6F9wmQEt8tF321iCDxcUicky4GpyKgZE86jjN0+jEoYvQ55skkZpkbMkmcyMTxOf0C6037P4/p8DSFvCJhWDtLPUbD4CNE9TzTj5VKaDqJddo2rV86nqscjiawOZ3AUwoaGn8TuJ19jYVqTWPUeKqP+NtGEmyHixtBjBB4H61Hp1iFvF77+RJtRQeXOQ9pGwRSfA/aNmY4eVwnWcxYy4sQjtmeITBgQlq84ksBM/0hK4GeILlbwC1ivRBx/I3gAxPkd7hvieHLsQT2R5vx1v4RxxGWwjJjUcbacTbzDMthY45h/0MusDvWhifank2gvVjATQr2k1votsMYdXK4S/LFGs+vY1kkb8U9ZfOVoQFCMYw6cz5x8l0l5ChDXvDI1clN8rxJrvxzvfwjBxDJZDHAGp/tkbfjqYlmCW5whe/kiIQwUNeMD8NxrOE1LzDxIYFPPPkb01ZRgAKxAjYVXSaPwB6GxSNnVaxgHphhA2OdmtmERCqJ+RGJJpOEpx5raMFD06bHFQWoEou14ht7wpxYB4b0hmwSHUU5fu0ztY33mOK425bIFoA7HC/y1oA8b2JftA33DZs3LJsDqhGx/O6rRvQ/yZWKkjJU5MLCKdfCTtECR0tVrZnh6GO2T8vJtV9fCNR/gPE+qchnteC5Bg2/xFK7gKskb9A2bvwlBY7mcvgSieAa52a2S8vGedb5A42v6svGM6XfcVXOK4B8NxDEMBydDMcFluIkTmAw2ojDYyNodFxc4YLXL3gjOZZlT2Mr3gV9VZpPOg4gJsh7AzEfZHJ2h0MYcySzXf75KY1vJTnF7q1UbgH33rR8FcTRxVwIJtxXWcS2cBi56SJXKkoEMBG7eC29bDT1nkwBRd7NZMs7hdKTu27tJ9e+S0IwEsdWqpokJ5Jdrl+1V1WKVtHfXoXEu2gHXmuHtX5/Aw4ZVLNS+Es3AAAAAElFTkSuQmCC"; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAVCAYAAAC6wOViAAAAAXNSR0IArs4c6QAAAuBJREFUSA2llTtok1EUx/OQiKAOKtiA4OJgIg6C4OSgiK5OnSymNi0+Cmor9ZHEvEi0Q4sOonRxFuujxZoWRBQR1NGhKLgIYlodCg4p5OnvSM7lNv3Sfq0XLufc//2f87/nfucmHo+LkUql3mYymcMuqK4oPlcsj8dfr9e9Lrmr0ozo6OjoJqo5tGqERRgeHt7CLRy0IFeuES2VSvsbjcYjkhx3Ewlv6+Li4rjX64264dscIxqPxz/5fL4oScbS6fQJm4R/k/lFMRHEfwy3yEH7FXdrjagEJBKJV5geEj3I5XJBTRIMBt8h9EvX2FtNwSh41cJduY7NgeDOWCw2T8KjZEkyw8wi8xkzy5RK/6xHkDiPo6hscMVHqHhcfHtQYSaZTN5VLJ/P7y2Xyw9Zb1YMOw1niMYcIscpxYmtMM9tUKDVQpbv2Domwe8p2BScYL1DMZLOwIkheA17RXFslXUPh/no5YreA5hv6/f7E7Va7Q3BPyH5raBJ/F690hUEI8QOtgqCnUFwSvJJpYN0rblmRL/RUFWu9wd7u4VEwARJ+lQQu6tSqYyB19ieFw7jA5yzYF34Xdh/OFgDf0gFhWjEZGEPRGPwBwhYImhz1uu3/aahUOj27OzsAsJjWmE2mw3xc3gfbKMlWGA/wyGvgp9UnMNWWPez91kxtcsqhSTPYSQQCNxg/FZiU1Cq3q4YiQsdHR3dc3Nz0qUDimPl7XaT66WFGdc0kCBNwSe4fp7BgrLAw1ToWpDDRIhxFJScplIRhPyUE38Ph8N9nZ2d0iQe8D0Y+ckzFbJ+TYW9xWLxAripkNga6/M0TUFi2w0jyrs6QDURBAdUsF3Q/+JGtDURh9jHIUbA7bc6ReV3mk1zzIqp8NQu89S+Wlhb11G0KficqG0aybVNcaU9NI380lyycOnSCIeZVmw1u0x0JUG+4XUSXtSkHGTNghK7RNRJEM4L/tqiToLsnaZpZiTRWsZfoX9+zsO/NisAAAAASUVORK5CYII="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAdCAYAAAC5UQwxAAAAAXNSR0IArs4c6QAAA8pJREFUSA2Vll1IVEEUx7v7obu42pqEZfVQUFkWirqbBUIipJF9vRt9SAUFGgYFBUkvvUUGQWY9REVEQW8FQeRDZO66amjCkhhpWASSS2Zo+dHv6N5lvHt39zowd87H/5z/zJmZe6+2LEEbGBhIj0QiNbidCSBJzXa7/X1xcfGQEaQZDaL39PRsnJmZaUVcS8+im+KwJ2pjOGyapp0uKSl5o4JsqiJyV1dXLWSvEQcYy2w22yHkb+Kz0iC56Xa7t4NtmZubexgKherVuNjMcSzHcZ1eBvCCz+d7qQMV3wHdZjL+guwsK3ql+4LBoI8J30b/4HQ6GwoLCyfmCUm4A5IWAtbQJ5An9SDDmGPQVXUQZZSeTo40crjoImdik20JU7GjDowaZSzHkYdcQ8fHpmnaeWQBNs0bog/sJxEPqjbkr2AbdBvyDeSP9FbJxyo9jE8cDscuBwnmIAxj+E4Zg3pQd3f34OzsrLe0tDRmE19nZ2czMTrsM4JsxTpKNlJUVDQiDjDDDJ/0fOFwOHN8fPwHtqFYpABTNRJthuytgjuH3Cw6k7vs9/vvKj5TMe6UmqKiRsj2K/5nVGVK1ynbXl1ONi6VUF4E0iL0Jkj889rCY2dvb2+2opuKlgkp5wZWtFWysNKr7O0oZcxD/oJpjG6fnJzcw5i0WSYksb66AK+sx5KVQ3EEWe7tsOhWymqZkHw6YQb39gErlgMjJ7KOyRSKTKtob293L4jmT0uEHR0d8k4tiqbYBkEVq9H6+/tXMV5SUru5HrsVPU60REiSfcZI9i/Inl3DnqH6mEzS02qJkD3Sy6nnnubzk2NiF38VdrsONI4pL35fX1/u1NRUL4EqNozuoUup4xqEhzlQ7+IcGFKukLJJOVWyZSTchM2UTEgoa9wWiF1aSkKCjeWUhKniqhfSxz8XzdzoDgQCOZzCfpUA+Sn9PlgvK13BmM2YSz+j4rBX8nLoY1zUHIs0g8LnpJpE6moCLpersaCg4K8BKvfxJ7Yril3KGkeoJlOwCyJHX31ZD2M9bkYmaA7JLYYXIktjoqbXIyEhlz2LEpVHg38z1sr7U/REzePx1OOTb6Ts8xa2ZL0Rm5CQclYBdjLTWe7cKcjkKiRt+fn54wCO0f8IkLi4VSYkZIbz5eTQNPGClr84S00mRmxjFGyNsK2tTf5BKuiP+Au7Y4lJARHzHPUe3c+vykrFZX4PvV5vJaAQM72ogpcoy89XiEnL1sSaaUmnp6cL0tLSTlCefzHkEgWJ5Ye4DkJfylC+d6tTgiwCKGkpW+TS4f8BQK1g4UJKUyEAAAAASUVORK5CYII="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAaCAYAAABCfffNAAAAAXNSR0IArs4c6QAAA1BJREFUSA2dlU9Ik3EYx7c5Nm1lJkaIdaiIckVQl5T1xwy0f1Z08FRUQhodPFQQhFPnttYuRh4yunjpUCOCoEOg1KxTeogC7VSJSacysiKn+9Pned073v22d44e+L7Pn9/z/L6//6/VokggEKiJx+P3CO9Rmopxp20227nu7u4JY7LN6Ph8vhYIosQ+geNgEhQjv0hqA4+TyeSz3t7eU8YiqzgEV6D8oBFcxX+BtgwMDDhnZ2e7MS+KbyITJSUlbV6v97O0U1uHumu1Wp/W1tYGWltbE9a+vr7tsN+nYQv4Cv4AVTYQKFWDaV8GlAJO4ACSVwnWg1Gn09luT6VSwlzNWjajNYH0OcZ1Yu/SIQux09gdup/WD8kZEpv2Y6iT+O3i028FeBSLxbbamdZ7nFds1ltpFGHKoySPGzeQ2I2lVu37mu8+sEOvo30tfpXBL8eXvGltTzAKSigUWsOI5BCUgJ8gBG4Bkd0QzCyZ+b9Zpyt/isWysLBwmDYhsDDzPtQmsUXwjyxZ5t+iSFjOlnQXYyzHA+zMHaJN9qKgLEsSDodX0cN+EAfXGLmcpEHQCeZAHcslp8lUliWZn59volqO5hsINnPkd9HpE/yVQDZX+pAcU1mWhOWQmy/iwR4CTcFgcB2+8bQV3JeCJIxYXoJGYTDI2OLiYhBfZqJLQ39/f5nuqLogCctziAJjcZKZrCZ2QumobG5u7qASy7gFSehQXyq9YArDqzuKNl0yUxJ5HOlE3dCNxOQdyyfNkUhEu0tqoykJr+8Bkl1KQaEXomJycrJeyddcUxJa1aUadLvd1Q6Ho5anvZ63TS7hTaXTo4qvufZ8QU6VxOUp0WUYw8e/IYn+nsZH9Di5snxngYjsi/Foa0GzmeyltULLsFg+oDvoTAhypLKyUjrVfwk15O1Uk8xI9KX6Zrfbz1D4Wy3U/c7Ozhj2BfAjHctZshwSOpSYJC6A811dXV/SxaaKmhnu1CUS5F1bnoQNlRe2ClyheAxdlPT09LwkMQy2+f1+OeoZyZkJv9EWRnUHgkgmq0gDotukDicSiayLmUXCDdfuAf8M9WgWRcPgUqWlpZdJdhsLsm4oSeUul2vU4/HIfvyXjIyMxBoaGqbA32g0qvXzD+edDWdswixvAAAAAElFTkSuQmCC"; }, function (e, t) { // blue house icon e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAaCAYAAABGiCfwAAABb0lEQVR42t3WsUscQRTH8c8dq3dIEhFOEYRUCeGaFJYBMZUEwSBYSPAfSOEfoGCXNAYEiwSDIoi9RSqLdCkDduIFtEobG41gwChppliW2dzduofgg4F982bnu7+3b95uZf7juR5ZH67SE9VbbDb0n9gzTGUni8Km8RWvIrFRbOBnGbA3WEUdHzCbij0IoAaOszcmXYLeYjHzsO8DeA/reIoT/CkKq2AJCznxFcyhGfyj2KJOYAneYabNumbqulUEVscaJrtMd9fKHuITxgsU0Y/YZF41NrBTEPQLtU6VjWELjwuewWF8C9AWDrAdgz3BJkZKaFfDYRzG0vgcuyWB0naThb0IUh/1oCEvYhnVBIOYwJcQfI2BkkB/cYaX+J0EZzW1YLJE2H5QlVv6lRJT2N/unFV7BUs6hF2ELp5Exq1gsTR+Dh0lawP4XnYab3r1zmLKrgvCavdWWd+dKYtV42Hke3Sas9lV+MPKs8u08w9Szzdf/9wzWwAAAABJRU5ErkJggg=="; }, function (e, t) { e.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAXCAYAAAD+4+QTAAAAAXNSR0IArs4c6QAAAjJJREFUSA2tlc1LG0EYxrPZtJseWkKwIHoohd566EUI6CVe2mOhQsE/oEUI5FgCuSRLQIQeJCAICoLSQwMKPRZaSKBHzxFb1EtPIqGlICmsSX+vZMLs7Idd9YWHmffzmXlnZjeVSijD4dCKSqnVas9brZZt+gMGM0DXKTLR6XS2isXiebvd/qH7XNctsIA3pVJpV7fLPG0aovRGozGNbwc8BSsQvlKxzJ8MBoNV9CNl08eMrkTNpYjneRv4H45ipGVuvV53WP1X5uvgPuiCgFy5E9rwjKxtoAjGRSCoonwEk2JMp9MHMpoSSwLBHG3YJOmBmajpivwil8t91+zjaSQJrXgBwRqR98bR8ZPjcrn8NywklIQzeE0r3pPwX2c2KhzaKvEF7jwEb7GXR4lJhiPLsr6wuMNMJnNQrVZ/og+lwPid4MRmvcMmJNeRPEkzQNq8wHva4y2dS6HLncgr7Xa7LvpLMd6CfKMjS6qO1Ww2nV6vJ/2fV8ZbGveo40Lm2YVCYRFlCpyACeCAm4qcxWPwiE9Qx3fwsH7AIY/vRpLNZucqlcpvVcS8wqau4hKN/X7/jp5gFvXtTA9MOL+rx5uPzSSV2M/AA3LdJV4gK50FUYtKTLLMWZ1R0CfY9jFkfcaRYtu27/KYKw+szHGci7BCcTYetm8nJompp/gKDOIKhvl48bEHHyDhpiTeCf+VZO1ipYl3Qo6vXebt+kPAL70F+Xw+dCe08ZPZe5WH71TNZfwHVU2gRMdtneUAAAAASUVORK5CYII="; }, function (e, t, i) {}, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(62), s = n(i(113)), _ = n(i(174)); t.default = function ({ device: e, overrideSerialNumber: t }) { return r.default.createElement( o.DeviceView, null, r.default.createElement( o.DeviceHeader, { device: e }, r.default.createElement(a.FormattedMessage, { id: "system_device_name_gateway", defaultMessage: "Gateway ({sn})", values: { sn: t || e.serialNumber() } }), r.default.createElement(_.default, { device: e }) ), r.default.createElement( o.DeviceBody, null, r.default.createElement(s.default, { device: e }), r.default.createElement(a.FormattedMessage, { id: "system_device_gateway_not_islanding", defaultMessage: "This is not the islanding controller." }) ) ); }; }, function (e, t, i) {}, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(138), o = i(3), s = i(62), _ = n(i(113)), l = n(i(751)), c = n(i(174)); t.default = function ({ device: e, overrideSerialNumber: t }) { const i = e.type(); return r.default.createElement( s.DeviceView, null, r.default.createElement( s.DeviceHeader, { device: e }, i === a.DeviceType.MSA ? r.default.createElement(o.FormattedMessage, { id: "system_device_name_backup_switch", defaultMessage: "Backup Switch ({sn})", values: { sn: e.serialNumber() } }) : r.default.createElement(o.FormattedMessage, { id: "system_device_name_sync", defaultMessage: "Gateway Contactor / Meter Controller ({sn})", values: { sn: t || e.serialNumber() } }), r.default.createElement(c.default, { device: e }) ), r.default.createElement(s.DeviceBody, null, r.default.createElement(_.default, { device: e }), r.default.createElement(l.default, { device: e })) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(155), s = i(138), _ = i(62); function l({ vitals: e }) { const t = e.getBoolean("ISLAND_GridConnected"); let i = _.MissingValue; switch (t) { case !0: i = r.default.createElement(a.FormattedMessage, { id: "msa-on-grid", defaultMessage: "On Grid" }); break; case !1: i = r.default.createElement(a.FormattedMessage, { id: "msa-off-grid", defaultMessage: "Off Grid" }); } return r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(a.FormattedMessage, { id: "system_islanding_vitals_backup_state", defaultMessage: "Backup state: {backupState}", values: { backupState: i } }) ); } function c(e, t, i) { const n = Number(e.getNumber(t)), a = Number(e.getNumber(i)), s = n >= 10 && a > 0 ? a : null; return { v: r.default.createElement(o.Volts, { value: r.default.createElement(_.Vital, { value: n }) }), f: r.default.createElement(o.Hertz, { value: r.default.createElement(_.Vital, { value: s }) }) }; } function d({ lineNumber: e, vitals: t }) { const i = `ISLAND_FreqL${e}_Main`, n = `ISLAND_VL${e}N_Main`; return r.default.createElement(a.FormattedMessage, { id: "system_islanding_vitals_grid_line", defaultMessage: "Grid Line {lineNumber}: {v} {f}", values: Object.assign(Object.assign({}, c(t, n, i)), { lineNumber: e }) }); } function u({ lineNumber: e, vitals: t }) { const i = `ISLAND_FreqL${e}_Load`, n = `ISLAND_VL${e}N_Load`; return r.default.createElement(a.FormattedMessage, { id: "system_islanding_vitals_island_line", defaultMessage: "Island Line {lineNumber}: {v} {f}", values: Object.assign(Object.assign({}, c(t, n, i)), { lineNumber: e }) }); } t.default = function ({ device: e }) { const t = e.vitals(), i = !1 === t.getBoolean("ISLAND_GridConnected"), n = s.DeviceType.MSA === e.type() ? [1, 2] : [1, 2, 3], a = n.map((e) => r.default.createElement("p", { className: "vitals-value", id: "gridVitalLine" + e, key: "gridVitalLine" + e }, r.default.createElement(d, { lineNumber: e, vitals: t }))), o = i && n.map((e) => r.default.createElement("p", { className: "vitals-value", id: "islandVitalLine" + e, key: "islandVitalLine" + e }, r.default.createElement(u, { lineNumber: e, vitals: t }))); return r.default.createElement(r.default.Fragment, null, r.default.createElement(l, { vitals: t }), a, o); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(155), s = i(12), _ = i(62); function l({ device: e }) { let t = e.vitals(), i = []; for (let e = 0; e < 4; e++) { let n = t.getString(`NEURIO_CT${e}_Location`); if (!n) continue; let l = r.default.createElement(a.FormattedMessage, Object.assign({}, s.CurrentTransformerConnectionLabels[n])), c = t.getNumber(`NEURIO_CT${e}_InstRealPower`), d = r.default.createElement(o.Watts, { value: r.default.createElement(_.Vital, { value: c }) }), u = r.default.createElement( "p", { className: "vitals-value", key: "CT" + e }, r.default.createElement(a.FormattedMessage, { id: "system_remote_meter_ct_line", defaultMessage: "CT {n} ({location}): {value}", values: { n: e + 1, location: l, value: d } }) ); i.push(u); } return ( 0 === i.length && i.push(r.default.createElement("p", { className: "vitals-value" }, r.default.createElement(a.FormattedMessage, { id: "system_remote_meter_no_cts", defaultMessage: "No CTs configured" }))), r.default.createElement(r.default.Fragment, null, i) ); } t.default = function ({ device: e }) { return r.default.createElement( _.DeviceView, null, r.default.createElement(_.DeviceHeader, { device: e }, r.default.createElement(a.FormattedMessage, { id: "system_device_name_remote_meter", defaultMessage: "Remote Meter ({sn})", values: { sn: e.serialNumber() } })), r.default.createElement(_.DeviceBody, null, r.default.createElement(l, { device: e })) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(62), s = n(i(113)), _ = n(i(448)), l = n(i(174)); t.default = function ({ device: e }) { return r.default.createElement( o.DeviceView, null, r.default.createElement( o.DeviceHeader, { device: e }, r.default.createElement(a.FormattedMessage, { id: "system_device_name_powerwall", defaultMessage: "Powerwall ({sn})", values: { sn: e.serialNumber() } }), r.default.createElement(l.default, { device: e }) ), r.default.createElement(o.DeviceBody, null, r.default.createElement(s.default, { device: e }), r.default.createElement(_.default, { device: e })) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(138), o = i(3), s = i(62), _ = n(i(113)), l = n(i(448)), c = n(i(755)), d = n(i(449)), u = n(i(788)), m = n(i(174)); t.default = function (e) { var t, i; const { device: n, leader: p, follower: g, index: w, sitemanagerRunning: v } = e; let f, h, E; f = w > 0 ? r.default.createElement(o.FormattedMessage, { id: "system_device_name_powerwall_plus_wired", defaultMessage: "Powerwall+ (wired)" }) : p ? r.default.createElement(o.FormattedMessage, { id: "system_device_name_powerwall_plus_leader", defaultMessage: "Leader Powerwall+" }) : g ? r.default.createElement(o.FormattedMessage, { id: "system_device_name_powerwall_plus_wireless", defaultMessage: "Powerwall+ (wireless)" }) : r.default.createElement(o.FormattedMessage, { id: "system_device_name_powerwall_plus_solo", defaultMessage: "Powerwall+" }); for (let e of n.children) switch (e.type()) { case a.DeviceType.ACPW: h = e; break; case a.DeviceType.PVI: E = e; } return r.default.createElement( s.DeviceView, { doNotCollapse: !0 }, r.default.createElement(s.DeviceHeader, { device: n, sitemanagerRunning: v }, f, r.default.createElement(m.default, { device: h })), r.default.createElement( s.DeviceBody, null, r.default.createElement(_.default, { device: n }), E && r.default.createElement( s.DeviceView, null, r.default.createElement(s.DeviceHeader, { device: E, sitemanagerRunning: v }, r.default.createElement(o.FormattedMessage, { id: "system_device_name_solar_assembly_1", defaultMessage: "Solar Assembly" })), r.default.createElement( s.DeviceBody, null, r.default.createElement(_.default, { device: E, sitemanagerRunning: v }), r.default.createElement(c.default, { device: E, powerwallId: (null === (t = n.parent) || void 0 === t ? void 0 : t.din()) || "", follower: g, sitemanagerRunning: v }), r.default.createElement(d.default, { device: E, powerwallId: (null === (i = n.parent) || void 0 === i ? void 0 : i.din()) || "", follower: g, sitemanagerRunning: v }), r.default.createElement(u.default, { device: E }) ) ), h && r.default.createElement( s.DeviceView, null, r.default.createElement( s.DeviceHeader, { device: h }, r.default.createElement(o.FormattedMessage, { id: "system_device_name_battery_assembly", defaultMessage: "Battery Assembly ({sn})", values: { sn: h.serialNumber() } }) ), r.default.createElement(s.DeviceBody, null, r.default.createElement(_.default, { device: h }), r.default.createElement(l.default, { device: h })) ) ) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = n(i(5)), s = i(113); t.default = function ({ device: e, powerwallId: t, follower: i, sitemanagerRunning: n }) { return e.hasAlerts() || e.disabledReasons().includes(s.DisabledReason.DisabledArcFaultLockout) ? (e.vitals().getString("PVS_State") || "").startsWith("PVS_SelfTest") ? null : n ? (t.startsWith("STSTSM--") && (t = t.substring(8)), r.default.createElement( "div", null, r.default.createElement( "button", { className: "inverter-reset-button", onClick: () => (function () { var n; const r = o.default.api.uri + "/solar_powerwall/reset"; let a = null === (n = e.parent) || void 0 === n ? void 0 : n.din(); (null == a ? void 0 : a.startsWith("TETHC--")) && (a = a.substring(7)); const s = { battery_din: a, follower_din: i ? t : "" }; fetch(r, { method: "POST", credentials: o.default.credentials, body: JSON.stringify(s) }); })(), }, r.default.createElement(a.FormattedMessage, { id: "pvi-reset-button-label", description: "This is the button to reset the PVI ECUs", defaultMessage: "Restart Inverter and Clear Alerts" }) ) )) : null : null; }; }, , , , , , , , , , , , , , , function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.SiteControllerConnectedDevice = t.SiteControllerConnectedDeviceStore = void 0); const n = i(771), r = i(40), a = {}, o = {}; (t.SiteControllerConnectedDeviceStore = { encode(e, i = r.Writer.create()) { for (const n of e.siteControllerConnectedDevice) t.SiteControllerConnectedDevice.encode(n, i.uint32(10).fork()).ldelim(); return i; }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === i ? n.len : n.pos + i; const s = Object.assign({}, a); for (s.siteControllerConnectedDevice = []; n.pos < o; ) { const e = n.uint32(); switch (e >>> 3) { case 1: s.siteControllerConnectedDevice.push(t.SiteControllerConnectedDevice.decode(n, n.uint32())); break; default: n.skipType(7 & e); } } return s; }, }), (t.SiteControllerConnectedDevice = { encode: (e, t = r.Writer.create()) => (void 0 !== e.device && void 0 !== e.device && n.Device.encode(e.device, t.uint32(10).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, o); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.device = n.Device.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return s; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.ChargerPostAttributes = t.PayterModuleAttributes = t.BatterySystemCapabilities = t.MeterAttributes = t.PVInverterAttributes = t.GeneratorAttributes = t.TeslaEnergyEcuAttributes = t.TeslaHardwareId = t.DeviceAttributes = t.ConnectionParameters = t.Device = t.Manifest = void 0); const n = i(772), r = i(40), a = i(453), o = { gatewayDin: "", trigger: 0 }, s = {}, _ = { serialBaud: 0, modbusId: 0 }, l = {}, c = {}, d = { ecuType: 0 }, u = { nameplateRealPowerW: 0, nameplateApparentPowerVa: 0 }, m = { nameplateRealPowerW: 0 }, p = { meterLocation: 0 }, g = { nominalEnergyWh: 0, nominalPowerW: 0 }, w = { id: "" }, v = {}; function f(e) { return { seconds: e.getTime() / 1e3, nanos: (e.getTime() % 1e3) * 1e6 }; } function h(e) { let t = 1e3 * e.seconds; return (t += e.nanos / 1e6), new Date(t); } function E(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } (t.Manifest = { encode(e, i = r.Writer.create()) { i.uint32(10).string(e.gatewayDin), i.uint32(16).int32(e.trigger), void 0 !== e.generatedTime && void 0 !== e.generatedTime && n.Timestamp.encode(f(e.generatedTime), i.uint32(26).fork()).ldelim(); for (const n of e.device) t.Device.encode(n, i.uint32(34).fork()).ldelim(); return ( void 0 !== e.batterySystemCapabilities && void 0 !== e.batterySystemCapabilities && t.BatterySystemCapabilities.encode(e.batterySystemCapabilities, i.uint32(42).fork()).ldelim(), void 0 !== e.gatewayFirmwareVersion && void 0 !== e.gatewayFirmwareVersion && a.StringValue.encode({ value: e.gatewayFirmwareVersion }, i.uint32(50).fork()).ldelim(), void 0 !== e.gatewayFirmwareGithash && void 0 !== e.gatewayFirmwareGithash && a.StringValue.encode({ value: e.gatewayFirmwareGithash }, i.uint32(58).fork()).ldelim(), i ); }, decode(e, i) { const s = e instanceof Uint8Array ? new r.Reader(e) : e; let _ = void 0 === i ? s.len : s.pos + i; const l = Object.assign({}, o); for (l.device = []; s.pos < _; ) { const e = s.uint32(); switch (e >>> 3) { case 1: l.gatewayDin = s.string(); break; case 2: l.trigger = s.int32(); break; case 3: l.generatedTime = h(n.Timestamp.decode(s, s.uint32())); break; case 4: l.device.push(t.Device.decode(s, s.uint32())); break; case 5: l.batterySystemCapabilities = t.BatterySystemCapabilities.decode(s, s.uint32()); break; case 6: l.gatewayFirmwareVersion = a.StringValue.decode(s, s.uint32()).value; break; case 7: l.gatewayFirmwareGithash = a.StringValue.decode(s, s.uint32()).value; break; default: s.skipType(7 & e); } } return l; }, }), (t.Device = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.din && void 0 !== e.din && a.StringValue.encode({ value: e.din }, i.uint32(10).fork()).ldelim(), void 0 !== e.partNumber && void 0 !== e.partNumber && a.StringValue.encode({ value: e.partNumber }, i.uint32(18).fork()).ldelim(), void 0 !== e.serialNumber && void 0 !== e.serialNumber && a.StringValue.encode({ value: e.serialNumber }, i.uint32(26).fork()).ldelim(), void 0 !== e.manufacturer && void 0 !== e.manufacturer && a.StringValue.encode({ value: e.manufacturer }, i.uint32(34).fork()).ldelim(), void 0 !== e.siteLabel && void 0 !== e.siteLabel && a.StringValue.encode({ value: e.siteLabel }, i.uint32(42).fork()).ldelim(), void 0 !== e.componentParentDin && void 0 !== e.componentParentDin && a.StringValue.encode({ value: e.componentParentDin }, i.uint32(50).fork()).ldelim(), void 0 !== e.firmwareVersion && void 0 !== e.firmwareVersion && a.StringValue.encode({ value: e.firmwareVersion }, i.uint32(58).fork()).ldelim(), void 0 !== e.firstCommunicationTime && void 0 !== e.firstCommunicationTime && n.Timestamp.encode(f(e.firstCommunicationTime), i.uint32(66).fork()).ldelim(), void 0 !== e.lastCommunicationTime && void 0 !== e.lastCommunicationTime && n.Timestamp.encode(f(e.lastCommunicationTime), i.uint32(74).fork()).ldelim(), void 0 !== e.connectionParameters && void 0 !== e.connectionParameters && t.ConnectionParameters.encode(e.connectionParameters, i.uint32(82).fork()).ldelim(), void 0 !== e.deviceAttributes && void 0 !== e.deviceAttributes && t.DeviceAttributes.encode(e.deviceAttributes, i.uint32(90).fork()).ldelim(), void 0 !== e.firmwareGithash && void 0 !== e.firmwareGithash && a.StringValue.encode({ value: e.firmwareGithash }, i.uint32(98).fork()).ldelim(), i ), decode(e, i) { const o = e instanceof Uint8Array ? new r.Reader(e) : e; let _ = void 0 === i ? o.len : o.pos + i; const l = Object.assign({}, s); for (; o.pos < _; ) { const e = o.uint32(); switch (e >>> 3) { case 1: l.din = a.StringValue.decode(o, o.uint32()).value; break; case 2: l.partNumber = a.StringValue.decode(o, o.uint32()).value; break; case 3: l.serialNumber = a.StringValue.decode(o, o.uint32()).value; break; case 4: l.manufacturer = a.StringValue.decode(o, o.uint32()).value; break; case 5: l.siteLabel = a.StringValue.decode(o, o.uint32()).value; break; case 6: l.componentParentDin = a.StringValue.decode(o, o.uint32()).value; break; case 7: l.firmwareVersion = a.StringValue.decode(o, o.uint32()).value; break; case 8: l.firstCommunicationTime = h(n.Timestamp.decode(o, o.uint32())); break; case 9: l.lastCommunicationTime = h(n.Timestamp.decode(o, o.uint32())); break; case 10: l.connectionParameters = t.ConnectionParameters.decode(o, o.uint32()); break; case 11: l.deviceAttributes = t.DeviceAttributes.decode(o, o.uint32()); break; case 12: l.firmwareGithash = a.StringValue.decode(o, o.uint32()).value; break; default: o.skipType(7 & e); } } return l; }, }), (t.ConnectionParameters = { encode: (e, t = r.Writer.create()) => ( void 0 !== e.ipAddress && void 0 !== e.ipAddress && a.StringValue.encode({ value: e.ipAddress }, t.uint32(10).fork()).ldelim(), void 0 !== e.serialPort && void 0 !== e.serialPort && a.StringValue.encode({ value: e.serialPort }, t.uint32(18).fork()).ldelim(), t.uint32(24).int64(e.serialBaud), t.uint32(32).uint32(e.modbusId), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, _); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.ipAddress = a.StringValue.decode(i, i.uint32()).value; break; case 2: o.serialPort = a.StringValue.decode(i, i.uint32()).value; break; case 3: o.serialBaud = E(i.int64()); break; case 4: o.modbusId = i.uint32(); break; default: i.skipType(7 & e); } } return o; }, }), (t.DeviceAttributes = { encode(e, i = r.Writer.create()) { var n, a, o, s; return ( "teslaEnergyEcuAttributes" === (null === (n = e.deviceAttributes) || void 0 === n ? void 0 : n.$case) && t.TeslaEnergyEcuAttributes.encode(e.deviceAttributes.teslaEnergyEcuAttributes, i.uint32(10).fork()).ldelim(), "generatorAttributes" === (null === (a = e.deviceAttributes) || void 0 === a ? void 0 : a.$case) && t.GeneratorAttributes.encode(e.deviceAttributes.generatorAttributes, i.uint32(18).fork()).ldelim(), "pvInverterAttributes" === (null === (o = e.deviceAttributes) || void 0 === o ? void 0 : o.$case) && t.PVInverterAttributes.encode(e.deviceAttributes.pvInverterAttributes, i.uint32(26).fork()).ldelim(), "meterAttributes" === (null === (s = e.deviceAttributes) || void 0 === s ? void 0 : s.$case) && t.MeterAttributes.encode(e.deviceAttributes.meterAttributes, i.uint32(34).fork()).ldelim(), i ); }, decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, l); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.deviceAttributes = { $case: "teslaEnergyEcuAttributes", teslaEnergyEcuAttributes: t.TeslaEnergyEcuAttributes.decode(n, n.uint32()) }; break; case 2: o.deviceAttributes = { $case: "generatorAttributes", generatorAttributes: t.GeneratorAttributes.decode(n, n.uint32()) }; break; case 3: o.deviceAttributes = { $case: "pvInverterAttributes", pvInverterAttributes: t.PVInverterAttributes.decode(n, n.uint32()) }; break; case 4: o.deviceAttributes = { $case: "meterAttributes", meterAttributes: t.MeterAttributes.decode(n, n.uint32()) }; break; default: n.skipType(7 & e); } } return o; }, }), (t.TeslaHardwareId = { encode: (e, t = r.Writer.create()) => ( void 0 !== e.pcbaId && void 0 !== e.pcbaId && a.UInt32Value.encode({ value: e.pcbaId }, t.uint32(10).fork()).ldelim(), void 0 !== e.assemblyId && void 0 !== e.assemblyId && a.UInt32Value.encode({ value: e.assemblyId }, t.uint32(18).fork()).ldelim(), void 0 !== e.usageId && void 0 !== e.usageId && a.UInt32Value.encode({ value: e.usageId }, t.uint32(26).fork()).ldelim(), t ), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, c); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.pcbaId = a.UInt32Value.decode(i, i.uint32()).value; break; case 2: o.assemblyId = a.UInt32Value.decode(i, i.uint32()).value; break; case 3: o.usageId = a.UInt32Value.decode(i, i.uint32()).value; break; default: i.skipType(7 & e); } } return o; }, }), (t.TeslaEnergyEcuAttributes = { encode: (e, i = r.Writer.create()) => ( i.uint32(8).int32(e.ecuType), void 0 !== e.hardwareId && void 0 !== e.hardwareId && t.TeslaHardwareId.encode(e.hardwareId, i.uint32(18).fork()).ldelim(), void 0 !== e.pvInverterAttributes && void 0 !== e.pvInverterAttributes && t.PVInverterAttributes.encode(e.pvInverterAttributes, i.uint32(26).fork()).ldelim(), void 0 !== e.meterAttributes && void 0 !== e.meterAttributes && t.MeterAttributes.encode(e.meterAttributes, i.uint32(34).fork()).ldelim(), void 0 !== e.chargerPostAttributes && void 0 !== e.chargerPostAttributes && t.ChargerPostAttributes.encode(e.chargerPostAttributes, i.uint32(42).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === i ? n.len : n.pos + i; const o = Object.assign({}, d); for (; n.pos < a; ) { const e = n.uint32(); switch (e >>> 3) { case 1: o.ecuType = n.int32(); break; case 2: o.hardwareId = t.TeslaHardwareId.decode(n, n.uint32()); break; case 3: o.pvInverterAttributes = t.PVInverterAttributes.decode(n, n.uint32()); break; case 4: o.meterAttributes = t.MeterAttributes.decode(n, n.uint32()); break; case 5: o.chargerPostAttributes = t.ChargerPostAttributes.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return o; }, }), (t.GeneratorAttributes = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.nameplateRealPowerW), t.uint32(16).uint64(e.nameplateApparentPowerVa), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, u); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.nameplateRealPowerW = E(i.uint64()); break; case 2: a.nameplateApparentPowerVa = E(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.PVInverterAttributes = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.nameplateRealPowerW), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, m); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.nameplateRealPowerW = E(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.MeterAttributes = { encode(e, t = r.Writer.create()) { t.uint32(10).fork(); for (const i of e.meterLocation) t.int32(i); return t.ldelim(), t; }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, p); for (a.meterLocation = []; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: if (2 == (7 & e)) { const e = i.uint32() + i.pos; for (; i.pos < e; ) a.meterLocation.push(i.int32()); } else a.meterLocation.push(i.int32()); break; default: i.skipType(7 & e); } } return a; }, }), (t.BatterySystemCapabilities = { encode: (e, t = r.Writer.create()) => (t.uint32(8).uint64(e.nominalEnergyWh), t.uint32(16).uint64(e.nominalPowerW), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, g); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.nominalEnergyWh = E(i.uint64()); break; case 2: a.nominalPowerW = E(i.uint64()); break; default: i.skipType(7 & e); } } return a; }, }), (t.PayterModuleAttributes = { encode: (e, t = r.Writer.create()) => (t.uint32(10).string(e.id), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, w); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.id = i.string(); break; default: i.skipType(7 & e); } } return a; }, }), (t.ChargerPostAttributes = { encode: (e, i = r.Writer.create()) => ( void 0 !== e.label && void 0 !== e.label && a.StringValue.encode({ value: e.label }, i.uint32(10).fork()).ldelim(), void 0 !== e.payterModuleAttributes && void 0 !== e.payterModuleAttributes && t.PayterModuleAttributes.encode(e.payterModuleAttributes, i.uint32(18).fork()).ldelim(), i ), decode(e, i) { const n = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === i ? n.len : n.pos + i; const s = Object.assign({}, v); for (; n.pos < o; ) { const e = n.uint32(); switch (e >>> 3) { case 1: s.label = a.StringValue.decode(n, n.uint32()).value; break; case 2: s.payterModuleAttributes = t.PayterModuleAttributes.decode(n, n.uint32()); break; default: n.skipType(7 & e); } } return s; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Timestamp = void 0); const n = i(40), r = { seconds: 0, nanos: 0 }; function a(e) { if (e.gt(Number.MAX_SAFE_INTEGER)) throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); return e.toNumber(); } t.Timestamp = { encode: (e, t = n.Writer.create()) => (t.uint32(8).int64(e.seconds), t.uint32(16).int32(e.nanos), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, r); for (; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.seconds = a(i.int64()); break; case 2: s.nanos = i.int32(); break; default: i.skipType(7 & e); } } return s; }, }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3); t.default = function (e) { return e.updateFailed ? r.default.createElement( "span", { className: "system-warning-subtitle" }, r.default.createElement(a.FormattedMessage, { id: "vitals_header_subtitle_firmware_update_failed", defaultMessage: "Firmware update failed. Check enable switches and wiring." }) ) : e.updating ? r.default.createElement("span", { className: "system-warning-subtitle" }, r.default.createElement(a.FormattedMessage, { id: "vitals_header_subtitle_firmware_update", defaultMessage: "Firmware update in progress..." })) : null; }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__awaiter) || function (e, t, i, n) { return new (i || (i = Promise))(function (r, a) { function o(e) { try { _(n.next(e)); } catch (e) { a(e); } } function s(e) { try { _(n.throw(e)); } catch (e) { a(e); } } function _(e) { var t; e.done ? r(e.value) : ((t = e.value), t instanceof i ? t : new i(function (e) { e(t); })).then(o, s); } _((n = n.apply(e, t || [])).next()); }); }; Object.defineProperty(t, "__esModule", { value: !0 }); const s = a(i(1)), _ = i(3), l = i(582), c = i(589), d = i(175), u = i(454); var m, p; !(function (e) { (e[(e.HIDDEN = 0)] = "HIDDEN"), (e[(e.VISIBLE = 1)] = "VISIBLE"), (e[(e.PAIRING = 2)] = "PAIRING"), (e[(e.MONITORING = 3)] = "MONITORING"), (e[(e.CONFIGURING = 4)] = "CONFIGURING"), (e[(e.COMPLETE = 5)] = "COMPLETE"); })(m || (m = {})), (function (e) { (e[(e.NONE = 0)] = "NONE"), (e[(e.NO_QR_CODE = 1)] = "NO_QR_CODE"), (e[(e.BAD_QR_CODE = 2)] = "BAD_QR_CODE"), (e[(e.PAIRING_EXCEPTION = 3)] = "PAIRING_EXCEPTION"), (e[(e.UNKNOWN_PAIRING_ERROR = 4)] = "UNKNOWN_PAIRING_ERROR"), (e[(e.WIFI_NOT_FOUND = 5)] = "WIFI_NOT_FOUND"), (e[(e.WIFI_CONNECTION_FAILED = 6)] = "WIFI_CONNECTION_FAILED"), (e[(e.NO_RESPONSE = 7)] = "NO_RESPONSE"), (e[(e.BAD_RESPONSE = 8)] = "BAD_RESPONSE"), (e[(e.INTERNAL_ERROR = 9)] = "INTERNAL_ERROR"), (e[(e.CHANGES_PROHIBITED = 10)] = "CHANGES_PROHIBITED"), (e[(e.TOO_MANY_DEVICES = 11)] = "TOO_MANY_DEVICES"), (e[(e.NOT_LEADER = 12)] = "NOT_LEADER"), (e[(e.ALREADY_PAIRED = 13)] = "ALREADY_PAIRED"); })(p || (p = {})); const g = { [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_FOUND]: p.WIFI_NOT_FOUND, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CANNOT_JOIN]: p.WIFI_CONNECTION_FAILED, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NO_RESPONSE]: p.NO_RESPONSE, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_BAD_RESPONSE]: p.BAD_RESPONSE, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_INTERNAL_ERROR]: p.INTERNAL_ERROR, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_CHANGES_PROHIBITED]: p.CHANGES_PROHIBITED, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_MAX_DEVICES]: p.TOO_MANY_DEVICES, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_NOT_LEADER]: p.NOT_LEADER, [u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_FAILED_EXISTS]: p.ALREADY_PAIRED, }, w = (0, _.defineMessages)({ [p.NO_QR_CODE]: { id: "powerwall_pairing_error_no_qr_code", defaultMessage: "No QR code found", description: "An error message indicating that the QR code scan failed because no QR code was seen" }, [p.BAD_QR_CODE]: { id: "powerwall_pairing_error_bad_qr_code", defaultMessage: "Not a WiFi QR code", description: "An error message indicating that the QR scan failed because the QR code was not the right type" }, [p.PAIRING_EXCEPTION]: { id: "powerwall_pairing_exception", defaultMessage: "Pairing Failed: Exception", description: "An error message indicating that device pairing failed because an exception was thrown" }, [p.UNKNOWN_PAIRING_ERROR]: { id: "powerwall_pairing_error_unknown", defaultMessage: "Pairing Failed: Unknown Error", description: "An error message indicating that device pairing failed for unknown reasons" }, [p.WIFI_NOT_FOUND]: { id: "powerwall_pairing_error_wifi_not_found", defaultMessage: "Pairing Failed: WiFi network not found", description: "An error message indicating that device pairing failed because the specified wifi network was not found", }, [p.WIFI_CONNECTION_FAILED]: { id: "powerwall_pairing_error_wifi_connection_failed", defaultMessage: "Pairing Failed: Could not connect to WiFi. Check the password.", description: "An error message indicating that device pairing failed because we could not connect to the WiFi network", }, [p.NO_RESPONSE]: { id: "powerwall_pairing_error_no_response", defaultMessage: "Pairing Failed: device did not respond.", description: "An error message indicating that device pairing failed because the device did not respond", }, [p.BAD_RESPONSE]: { id: "powerwall_pairing_error_bad_pairing_response", defaultMessage: "Pairing Failed: device refused to pair. Ensure the follower has been stopped", description: "An error message indicating that device pairing failed because of a bad response", }, [p.INTERNAL_ERROR]: { id: "powerwall_pairing_error_internal", defaultMessage: "Pairing Failed: internal error", description: "An error message indicating that device pairing failed because of an internal error" }, [p.CHANGES_PROHIBITED]: { id: "powerwall_pairing_error_prohibited_uncommissioned", defaultMessage: "Pairing Failed: this Powerwall is not commissioned yet", description: "An error message indicating that device pairing failed because changes are currently prohibited", }, [p.TOO_MANY_DEVICES]: { id: "powerwall_pairing_error_too_many_devices", defaultMessage: "Pairing Failed: the maximum number of devices are already paired", description: "An error message indicating that device pairing failed because we have already reached the limit for paired devices", }, [p.NOT_LEADER]: { id: "powerwall_pairing_error_not_leader", defaultMessage: "Pairing Failed: this is a follower device. Reconnect to the leader device.", description: "An error message indicating that device pairing failed because we are connected to a follower device", }, [p.ALREADY_PAIRED]: { id: "powerwall_pairing_error_already_paired", defaultMessage: "Pairing Failed: the device is already paired", description: "An error message indicating that device pairing failed because the device is already connected", }, }); t.default = function ({ tedapi: e, followers: t }) { const i = (null == t ? void 0 : t.length) || 0, [n, r] = (0, s.useState)(m.HIDDEN), [a, v] = (0, s.useState)(-1), [f, h] = (0, s.useState)(""), [E, b] = (0, s.useState)(""), [y, S] = (0, s.useState)(p.NONE), R = (0, s.useRef)(null), T = (0, s.useRef)(null); function A() { R.current && R.current.scrollIntoView({ behavior: "smooth", block: "start" }); } function C() { return T.current || (T.current = new l.BarcodeReader()), T.current; } function I() { T.current && (T.current.stop(), (T.current = null)); } function O() { var t, i; return o(this, void 0, void 0, function* () { try { let n = yield e.energysitenet.getConfig({}); N(null === (i = null === (t = null == n ? void 0 : n.config) || void 0 === t ? void 0 : t.recentlyAdded) || void 0 === i ? void 0 : i.status); } catch (e) { console.error("Exception while checking pairing status:", e), S(p.PAIRING_EXCEPTION), r(m.VISIBLE), v(-1); } }); } function N(e) { switch (e) { case u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_IN_PROGRESS: case void 0: n !== m.MONITORING && r(m.MONITORING); break; case u.EnergySiteNetAdditionStatus.ENERGY_SITE_NET_ADDITION_STATUS_ADDED: r(m.CONFIGURING); break; default: r(m.VISIBLE), v(-1); let t = g[e]; t || (t = p.UNKNOWN_PAIRING_ERROR), S(t); } } (0, s.useEffect)(() => { switch (n) { case m.VISIBLE: return void A(); case m.HIDDEN: return I(), h(""), b(""), void S(p.NONE); case m.MONITORING: A(); let e = setInterval(O, 1e3); return () => clearInterval(e); case m.CONFIGURING: A(), i === a && (r(m.COMPLETE), v(-1)); } }, [n, i]), (0, s.useEffect)(() => { S(p.NONE); }, [f, E]), (0, s.useEffect)(A, [y]), (0, s.useEffect)(() => I, []); let k = n !== m.VISIBLE && n !== m.COMPLETE, P = n === m.COMPLETE, D = k ? { disabled: !0 } : {}; return s.default.createElement( "div", { className: "powerwall-pairing-container" }, n === m.HIDDEN && s.default.createElement( "a", { className: "powerwall-pairing-link", onClick: () => r(m.VISIBLE) }, s.default.createElement(_.FormattedMessage, { id: "wifi_pairing_link_message", defaultMessage: "Add a WiFi-connected Powerwall" }) ), n !== m.HIDDEN && s.default.createElement( s.default.Fragment, null, s.default.createElement("hr", null), s.default.createElement( "p", { ref: R }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_instructions_2", defaultMessage: "Enter or scan the WiFi SSID and password for the Powerwall to be paired. Look for a QR code on the device.", }) ), s.default.createElement( "div", { className: "powerwall-pairing-column" }, s.default.createElement( "label", null, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_ssid_label", defaultMessage: "SSID:" }), s.default.createElement("input", { type: "text", className: "form-control", value: f, onChange: (e) => h(e.target.value), autoCapitalize: "characters", autoComplete: "off", autoCorrect: "off", disabled: k }) ), s.default.createElement( "label", null, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_password_label", defaultMessage: "Password:" }), s.default.createElement("input", { type: "text", className: "form-control", value: E, onChange: (e) => b(e.target.value), autoCapitalize: "characters", autoComplete: "off", autoCorrect: "off", disabled: k }) ), (n === m.MONITORING || n === m.CONFIGURING) && s.default.createElement( "p", { className: "powerwall-pairing-message" }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_state_monitoring", defaultMessage: "Pairing new device. This may take up to a minute." }) ), n === m.COMPLETE && s.default.createElement( "p", { className: "powerwall-pairing-success" }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_state_complete", defaultMessage: "Pairing complete. The new device may not start responding for a minute or more (longer if there is an update in progress). Click Done to dismiss.", }) ), y !== p.NONE && s.default.createElement("p", { className: "powerwall-pairing-error" }, s.default.createElement(_.FormattedMessage, Object.assign({}, w[y]))), k && s.default.createElement("div", { className: "progress" }, s.default.createElement("div", { className: "progress-bar progress-bar-striped active", role: "progressbar" })), P ? s.default.createElement( "div", { className: "powerwall-pairing-row" }, s.default.createElement( "button", { onClick: () => { r(m.HIDDEN); }, className: "btn btn-primary", disabled: k, }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_done", defaultMessage: "Done" }) ) ) : s.default.createElement( "div", { className: "powerwall-pairing-row" }, s.default.createElement( "button", { onClick: () => { r(m.HIDDEN), v(-1); }, className: "btn btn-primary", disabled: k, }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_cancel", defaultMessage: "Cancel" }) ), s.default.createElement( "label", Object.assign({ className: "btn btn-primary", onClick: () => !k && C() }, D), s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_scan_qr_code", defaultMessage: "Scan QR Code" }), s.default.createElement("input", { type: "file", accept: "image/*", capture: "camera", onChange: (e) => { let t = e && e.target && e.target.files && e.target.files[0]; t && (function (e) { o(this, void 0, void 0, function* () { let t = C(); try { let i = yield t.scanBarcode(e, [l.BarcodeFormat.QRCode]); try { let e = (0, c.parseWifiCode)(i.text); e.S && h(e.S), e.P && b(e.P); } catch (e) { S(p.BAD_QR_CODE); } } catch (e) { S(p.NO_QR_CODE); } }); })(t); }, disabled: k, }) ), s.default.createElement( "button", { className: "btn btn-primary", onClick: () => (function () { var t; return o(this, void 0, void 0, function* () { r(m.PAIRING), S(p.NONE), v(i + 1); try { let i = yield e.energysitenet.addDevice({ device: { wifiApConfig: { ssid: f, password: { value: E }, securityType: d.WifiNetworkSecurityType.WIFI_NETWORK_SECURITY_TYPE_INVALID } }, }); N(null === (t = i.recentlyAdded) || void 0 === t ? void 0 : t.status); } catch (e) { console.error("Exception while adding device:", e), S(p.PAIRING_EXCEPTION), r(m.VISIBLE), v(-1); } }); })(), disabled: k || !f || !E, }, s.default.createElement(_.FormattedMessage, { id: "powerwall_pairing_connect", defaultMessage: "Connect" }) ) ) ) ) ); }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Status = void 0); const n = i(776), r = i(40), a = { code: 0, message: "" }; t.Status = { encode(e, t = r.Writer.create()) { t.uint32(8).int32(e.code), t.uint32(18).string(e.message); for (const i of e.details) n.Any.encode(i, t.uint32(26).fork()).ldelim(); return t; }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, a); for (s.details = []; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.code = i.int32(); break; case 2: s.message = i.string(); break; case 3: s.details.push(n.Any.decode(i, i.uint32())); break; default: i.skipType(7 & e); } } return s; }, }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.Any = void 0); const n = i(40), r = { typeUrl: "" }; t.Any = { encode: (e, t = n.Writer.create()) => (t.uint32(10).string(e.typeUrl), t.uint32(18).bytes(e.value), t), decode(e, t) { const i = e instanceof Uint8Array ? new n.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, r); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.typeUrl = i.string(); break; case 2: o.value = i.bytes(); break; default: i.skipType(7 & e); } } return o; }, }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__exportStar) || function (e, t) { for (var i in e) "default" === i || Object.prototype.hasOwnProperty.call(t, i) || n(t, e, i); }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.createEnergyDeviceAPIClient = void 0); const s = a(i(778)), _ = a(i(779)); o(i(780), t), (t.createEnergyDeviceAPIClient = function (e) { return { common: s.createCommonAPIClient(e), energysitenet: _.createEnergySiteNetAPIClient(e) }; }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.createCommonAPIClient = void 0); const n = i(140); t.createCommonAPIClient = function (e) { const t = "CommonAPI"; return { getSystemInfo(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "getSystemInfoRequest", getSystemInfoRequest: i } } } }; return e.rpc(t, "GetSystemInfo", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "getSystemInfoResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.getSystemInfoResponse; throw e.error(t, "GetSystemInfo", r, i, "response message did not contain expected payload"); }); }, setLocalSiteConfig(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "setLocalSiteConfigRequest", setLocalSiteConfigRequest: i } } } }; return e.rpc(t, "SetLocalSiteConfig", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "setLocalSiteConfigResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.setLocalSiteConfigResponse; throw e.error(t, "SetLocalSiteConfig", r, i, "response message did not contain expected payload"); }); }, performUpdate(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "performUpdateRequest", performUpdateRequest: i } } } }; return e.rpc(t, "PerformUpdate", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "performUpdateResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.performUpdateResponse; throw e.error(t, "PerformUpdate", r, i, "response message did not contain expected payload"); }); }, factoryReset(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "factoryResetRequest", factoryResetRequest: i } } } }; return e.rpc(t, "FactoryReset", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "factoryResetResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.factoryResetResponse; throw e.error(t, "FactoryReset", r, i, "response message did not contain expected payload"); }); }, wifiScan(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "wifiScanRequest", wifiScanRequest: i } } } }; return e.rpc(t, "WifiScan", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "wifiScanResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.wifiScanResponse; throw e.error(t, "WifiScan", r, i, "response message did not contain expected payload"); }); }, configureWifi(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "configureWifiRequest", configureWifiRequest: i } } } }; return e.rpc(t, "ConfigureWifi", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "configureWifiResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.configureWifiResponse; throw e.error(t, "ConfigureWifi", r, i, "response message did not contain expected payload"); }); }, checkForUpdate(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "checkForUpdateRequest", checkForUpdateRequest: i } } } }; return e.rpc(t, "CheckForUpdate", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "checkForUpdateResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.checkForUpdateResponse; throw e.error(t, "CheckForUpdate", r, i, "response message did not contain expected payload"); }); }, clearUpdate(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "clearUpdateRequest", clearUpdateRequest: i } } } }; return e.rpc(t, "ClearUpdate", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "clearUpdateResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.clearUpdateResponse; throw e.error(t, "ClearUpdate", r, i, "response message did not contain expected payload"); }); }, deviceCert(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "deviceCertRequest", deviceCertRequest: i } } } }; return e.rpc(t, "DeviceCert", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "deviceCertResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.deviceCertResponse; throw e.error(t, "DeviceCert", r, i, "response message did not contain expected payload"); }); }, configureWifiWithEncryptedPassword(i) { let r = "ConfigureWifiWithEncryptedPassword", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "configureWifiWithEncryptedPasswordRequest", configureWifiWithEncryptedPasswordRequest: i } } }, }; return e.rpc(t, r, a).then((i) => { var n, o; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "configureWifiWithEncryptedPasswordResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case)) return i.payload.common.message.configureWifiWithEncryptedPasswordResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, getNetworkingStatus(i) { let r = "GetNetworkingStatus", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "getNetworkingStatusRequest", getNetworkingStatusRequest: i } } } }; return e.rpc(t, r, a).then((i) => { var n, o; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "getNetworkingStatusResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case)) return i.payload.common.message.getNetworkingStatusResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, getCellularInfo(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "getCellularInfoRequest", getCellularInfoRequest: i } } } }; return e.rpc(t, "GetCellularInfo", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "getCellularInfoResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.getCellularInfoResponse; throw e.error(t, "GetCellularInfo", r, i, "response message did not contain expected payload"); }); }, configureEthernet(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "configureEthernetRequest", configureEthernetRequest: i } } } }; return e.rpc(t, "ConfigureEthernet", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "configureEthernetResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.configureEthernetResponse; throw e.error(t, "ConfigureEthernet", r, i, "response message did not contain expected payload"); }); }, forgetWifiNetwork(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "forgetWifiNetworkRequest", forgetWifiNetworkRequest: i } } } }; return e.rpc(t, "ForgetWifiNetwork", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "forgetWifiNetworkResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.forgetWifiNetworkResponse; throw e.error(t, "ForgetWifiNetwork", r, i, "response message did not contain expected payload"); }); }, checkInternet(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "checkInternetRequest", checkInternetRequest: i } } } }; return e.rpc(t, "CheckInternet", r).then((i) => { var n, a; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "checkInternetResponse" === (null === (a = i.payload.common.message) || void 0 === a ? void 0 : a.$case)) return i.payload.common.message.checkInternetResponse; throw e.error(t, "CheckInternet", r, i, "response message did not contain expected payload"); }); }, checkForUpdateUrgency(i) { let r = "CheckForUpdateUrgency", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "checkForUpdateUrgencyRequest", checkForUpdateUrgencyRequest: i } } } }; return e.rpc(t, r, a).then((i) => { var n, o; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "checkForUpdateUrgencyResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case)) return i.payload.common.message.checkForUpdateUrgencyResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, negotiateUpdateWithLocallyAvailablePackages(i) { let r = "NegotiateUpdateWithLocallyAvailablePackages", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "negotiateUpdateWithLocallyAvailablePackagesRequest", negotiateUpdateWithLocallyAvailablePackagesRequest: i } } }, }; return e.rpc(t, r, a).then((i) => { var n, o; if ( "common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "negotiateUpdateWithLocallyAvailablePackagesResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case) ) return i.payload.common.message.negotiateUpdateWithLocallyAvailablePackagesResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, prepareRegistrationPayload(i) { let r = "PrepareRegistrationPayload", a = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "common", common: { message: { $case: "prepareRegistrationPayloadRequest", prepareRegistrationPayloadRequest: i } } } }; return e.rpc(t, r, a).then((i) => { var n, o; if ("common" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "prepareRegistrationPayloadResponse" === (null === (o = i.payload.common.message) || void 0 === o ? void 0 : o.$case)) return i.payload.common.message.prepareRegistrationPayloadResponse; throw e.error(t, r, a, i, "response message did not contain expected payload"); }); }, }; }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.createEnergySiteNetAPIClient = void 0); const n = i(140); t.createEnergySiteNetAPIClient = function (e) { const t = "EnergySiteNetAPI"; return { addDevice(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "energysitenet", energysitenet: { message: { $case: "addDeviceRequest", addDeviceRequest: i } } } }; return e.rpc(t, "AddDevice", r).then((i) => { var n, a; if ("energysitenet" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "addDeviceResponse" === (null === (a = i.payload.energysitenet.message) || void 0 === a ? void 0 : a.$case)) return i.payload.energysitenet.message.addDeviceResponse; throw e.error(t, "AddDevice", r, i, "response message did not contain expected payload"); }); }, removeDevice(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "energysitenet", energysitenet: { message: { $case: "removeDeviceRequest", removeDeviceRequest: i } } } }; return e.rpc(t, "RemoveDevice", r).then((i) => { var n, a; if ("energysitenet" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "removeDeviceResponse" === (null === (a = i.payload.energysitenet.message) || void 0 === a ? void 0 : a.$case)) return i.payload.energysitenet.message.removeDeviceResponse; throw e.error(t, "RemoveDevice", r, i, "response message did not contain expected payload"); }); }, getConfig(i) { let r = { deliveryChannel: n.DeliveryChannel.DELIVERY_CHANNEL_INVALID, payload: { $case: "energysitenet", energysitenet: { message: { $case: "getConfigRequest", getConfigRequest: i } } } }; return e.rpc(t, "GetConfig", r).then((i) => { var n, a; if ("energysitenet" === (null === (n = i.payload) || void 0 === n ? void 0 : n.$case) && "getConfigResponse" === (null === (a = i.payload.energysitenet.message) || void 0 === a ? void 0 : a.$case)) return i.payload.energysitenet.message.getConfigResponse; throw e.error(t, "GetConfig", r, i, "response message did not contain expected payload"); }); }, }; }; }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }, o = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.createHermesClient = t.createLocalClient = t.createRPCClient = t.HTTPClientTransport = t.RPCClient = t.serviceParticipant = t.localParticipant = t.deviceParticipant = t.RPCError = void 0); const s = o(i(450)), _ = a(i(40)), l = i(781); Object.defineProperty(t, "deviceParticipant", { enumerable: !0, get: function () { return l.deviceParticipant; }, }), Object.defineProperty(t, "localParticipant", { enumerable: !0, get: function () { return l.localParticipant; }, }), Object.defineProperty(t, "serviceParticipant", { enumerable: !0, get: function () { return l.serviceParticipant; }, }); const c = a(i(140)), d = a(i(785)), u = i(786); Object.defineProperty(t, "RPCError", { enumerable: !0, get: function () { return u.RPCError; }, }), (_.util.Long = s.default), _.configure(); class m { constructor(e, t) { (this.messageOpts = e), (this.clientOpts = t); } rpc(e, t, i) { let n = { api: e, method: t, request: i, requestedAt: Date.now() }, r = (0, l.encode)(i, this.messageOpts); return this.clientOpts.transport .request(n, r) .catch((e) => { throw (e instanceof Error && !(e instanceof u.RPCError) && ((n.transportError = e), (e = new u.RPCError(n, "Transport error: " + e.message))), e); }) .then((e) => { var t, i, r, a, o; let s; try { s = (0, l.decode)(e, this.messageOpts); } catch (e) { if (!(e instanceof Error)) throw new u.RPCError(n, "Caught unexpected non-error type: " + String(e)); throw (e instanceof l.DecodeError && ((n.responseAuthEnvelope = e.authEnvelope), (n.response = null !== (t = e.messageEnvelope) && void 0 !== t ? t : void 0)), new u.RPCError(n, "Decode error: " + e.message)); } if ("common" === (null === (i = s.payload) || void 0 === i ? void 0 : i.$case) && "errorResponse" === (null === (r = s.payload.common.message) || void 0 === r ? void 0 : r.$case)) { let { errorResponse: e } = s.payload.common.message; n.errorResponse = e; let { status: t } = e; const i = t ? `${t.code}: ${t.message}` : "???"; throw new u.RPCError(n, i); } return null === (o = (a = this.clientOpts).successHandler) || void 0 === o || o.call(a, n), s; }) .catch((e) => { var t, i; throw (null === (i = (t = this.clientOpts).errorHandler) || void 0 === i || i.call(t, e), e); }); } error(e, t, i, n, r) { let a = { api: e, method: t, request: i, response: n, requestedAt: Date.now() }; return new u.RPCError(a, r); } } t.RPCClient = m; class p { constructor(e) { this.opts = e; } request(e, t) { var i; const { endpoint: n } = this.opts; e.endpoint = n; const r = new XMLHttpRequest(); return ( (r.timeout = null !== (i = this.opts.timeout) && void 0 !== i ? i : 12e3), (r.responseType = "arraybuffer"), (r.withCredentials = "include" === this.opts.credentials), r.open("POST", n, !0), r.setRequestHeader("Content-Type", "application/octet-stream"), r.send(t), new Promise((t, i) => { (r.onload = () => { r.readyState === XMLHttpRequest.DONE && (r.status >= 200 && r.status < 300 ? t(new Uint8Array(r.response)) : ((e.httpResponse = new Response(r.response, { status: r.status, statusText: r.statusText })), i(new u.RPCError(e, `POST ${n}: ${r.status} ${r.statusText}`)))); }), (r.onerror = () => { i(new TypeError(`POST ${n}: Network error`)); }), (r.ontimeout = () => { i(new TypeError(`POST ${n}: Timeout`)); }); }) ); } } function g(e, t) { let i = new p({ endpoint: t.host.replace(/\/$/, "") + "/tedapi/v1", credentials: t.credentials, timeout: t.timeout }); return new m(e, { transport: i, successHandler: t.successHandler, errorHandler: t.errorHandler }); } (t.HTTPClientTransport = p), (t.createRPCClient = g), (t.createLocalClient = function (e) { return g( { externalAuthType: c.ExternalAuthType.EXTERNAL_AUTH_TYPE_PRESENCE, deliveryChannel: c.DeliveryChannel.DELIVERY_CHANNEL_LOCAL_HTTPS, ourParticipant: (0, l.localParticipant)(d.LocalParticipant.LOCAL_PARTICIPANT_INSTALLER), theirParticipant: (0, l.deviceParticipant)(e.din), }, e ); }), (t.createHermesClient = function (e) { return g( { externalAuthType: c.ExternalAuthType.EXTERNAL_AUTH_TYPE_HERMES_COMMAND, deliveryChannel: c.DeliveryChannel.DELIVERY_CHANNEL_HERMES_COMMAND, ourParticipant: (0, l.serviceParticipant)(c.TeslaService.TESLA_SERVICE_COMMAND), theirParticipant: (0, l.deviceParticipant)(e.din), }, e ); }); }, function (e, t, i) { "use strict"; var n = (this && this.__createBinding) || (Object.create ? function (e, t, i, n) { void 0 === n && (n = i), Object.defineProperty(e, n, { enumerable: !0, get: function () { return t[i]; }, }); } : function (e, t, i, n) { void 0 === n && (n = i), (e[n] = t[i]); }), r = (this && this.__setModuleDefault) || (Object.create ? function (e, t) { Object.defineProperty(e, "default", { enumerable: !0, value: t }); } : function (e, t) { e.default = t; }), a = (this && this.__importStar) || function (e) { if (e && e.__esModule) return e; var t = {}; if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); return r(t, e), t; }; Object.defineProperty(t, "__esModule", { value: !0 }), (t.decode = t.encode = t.serviceParticipant = t.localParticipant = t.deviceParticipant = t.DecodeError = void 0); const o = i(782), s = a(i(140)); class _ extends Error { constructor(e, t, i) { super(i), (this.authEnvelope = e), (this.messageEnvelope = t); } } function l(e, t) { var i, n, r, a; switch (null === (i = t.id) || void 0 === i ? void 0 : i.$case) { case "din": return "din" === (null === (n = e.id) || void 0 === n ? void 0 : n.$case) && t.id.din === e.id.din; case "teslaService": return "teslaService" === (null === (r = e.id) || void 0 === r ? void 0 : r.$case) && t.id.teslaService === e.id.teslaService; case "local": return "local" === (null === (a = e.id) || void 0 === a ? void 0 : a.$case) && t.id.local === e.id.local; } return !1; } (t.DecodeError = _), (t.deviceParticipant = function (e) { return { id: { $case: "din", din: e } }; }), (t.localParticipant = function (e) { return { id: { $case: "local", local: e } }; }), (t.serviceParticipant = function (e) { return { id: { $case: "teslaService", teslaService: e } }; }), (t.encode = function (e, t) { return ( (e.deliveryChannel = t.deliveryChannel), (e.sender = t.ourParticipant), (e.recipient = t.theirParticipant), s.AuthEnvelope.encode({ payload: o.MessageEnvelope.encode(e).finish(), auth: null !== t.externalAuthType ? { $case: "externalAuth", externalAuth: { type: t.externalAuthType } } : void 0 }).finish() ); }), (t.decode = function (e, t) { var i; let n = s.AuthEnvelope.decode(e); if (!n.payload) throw new _(n, null, "missing AuthEnvelope.payload"); switch (null === (i = n.auth) || void 0 === i ? void 0 : i.$case) { case "externalAuth": { const { externalAuth: e } = n.auth; if (e.type <= s.ExternalAuthType.EXTERNAL_AUTH_TYPE_INVALID) throw new _(n, null, "missing/invalid AuthEnvelope.externalAuth.type"); if (null !== t.externalAuthType && e.type !== t.externalAuthType) throw new _(n, null, "unexpected AuthEnvelope.externalAuth.type"); break; } default: throw new _(n, null, "missing AuthEnvelope.auth"); } let r = o.MessageEnvelope.decode(n.payload); const { deliveryChannel: a, sender: c, recipient: d } = r; if (a !== t.deliveryChannel) throw new _(n, r, "unexpected MessageEnvelope.deliveryChannel"); if (!c) throw new _(n, r, "missing MessageEnvelope.sender"); if (!l(c, t.theirParticipant)) throw new _(n, r, "unexpected MessageEnvelope.sender"); if (!d) throw new _(n, r, "missing MessageEnvelope.recipient"); if (!l(d, t.ourParticipant)) throw new _(n, r, "unexpected MessageEnvelope.recipient"); return r; }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.MessageEnvelope = void 0); const n = i(140), r = i(783), a = i(784), o = i(40), s = { deliveryChannel: 0 }; t.MessageEnvelope = { encode(e, t = o.Writer.create()) { var i, s; return ( t.uint32(8).int32(e.deliveryChannel), void 0 !== e.sender && void 0 !== e.sender && n.Participant.encode(e.sender, t.uint32(18).fork()).ldelim(), void 0 !== e.recipient && void 0 !== e.recipient && n.Participant.encode(e.recipient, t.uint32(26).fork()).ldelim(), "common" === (null === (i = e.payload) || void 0 === i ? void 0 : i.$case) && r.CommonMessages.encode(e.payload.common, t.uint32(34).fork()).ldelim(), "energysitenet" === (null === (s = e.payload) || void 0 === s ? void 0 : s.$case) && a.EnergySiteNetMessages.encode(e.payload.energysitenet, t.uint32(82).fork()).ldelim(), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new o.Reader(e) : e; let _ = void 0 === t ? i.len : i.pos + t; const l = Object.assign({}, s); for (; i.pos < _; ) { const e = i.uint32(); switch (e >>> 3) { case 1: l.deliveryChannel = i.int32(); break; case 2: l.sender = n.Participant.decode(i, i.uint32()); break; case 3: l.recipient = n.Participant.decode(i, i.uint32()); break; case 4: l.payload = { $case: "common", common: r.CommonMessages.decode(i, i.uint32()) }; break; case 10: l.payload = { $case: "energysitenet", energysitenet: a.EnergySiteNetMessages.decode(i, i.uint32()) }; break; default: i.skipType(7 & e); } } return l; }, }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.CommonMessages = void 0); const n = i(175), r = i(40), a = {}; t.CommonMessages = { encode(e, t = r.Writer.create()) { var i, a, o, s, _, l, c, d, u, m, p, g, w, v, f, h, E, b, y, S, R, T, A, C, I, O, N, k, P, D, L, M, z, U, V, G, j; return ( "errorResponse" === (null === (i = e.message) || void 0 === i ? void 0 : i.$case) && n.ErrorResponse.encode(e.message.errorResponse, t.uint32(10).fork()).ldelim(), "getSystemInfoRequest" === (null === (a = e.message) || void 0 === a ? void 0 : a.$case) && n.CommonAPIGetSystemInfoRequest.encode(e.message.getSystemInfoRequest, t.uint32(18).fork()).ldelim(), "getSystemInfoResponse" === (null === (o = e.message) || void 0 === o ? void 0 : o.$case) && n.CommonAPIGetSystemInfoResponse.encode(e.message.getSystemInfoResponse, t.uint32(26).fork()).ldelim(), "setLocalSiteConfigRequest" === (null === (s = e.message) || void 0 === s ? void 0 : s.$case) && n.CommonAPISetLocalSiteConfigRequest.encode(e.message.setLocalSiteConfigRequest, t.uint32(34).fork()).ldelim(), "setLocalSiteConfigResponse" === (null === (_ = e.message) || void 0 === _ ? void 0 : _.$case) && n.CommonAPISetLocalSiteConfigResponse.encode(e.message.setLocalSiteConfigResponse, t.uint32(42).fork()).ldelim(), "performUpdateRequest" === (null === (l = e.message) || void 0 === l ? void 0 : l.$case) && n.CommonAPIPerformUpdateRequest.encode(e.message.performUpdateRequest, t.uint32(50).fork()).ldelim(), "performUpdateResponse" === (null === (c = e.message) || void 0 === c ? void 0 : c.$case) && n.CommonAPIPerformUpdateResponse.encode(e.message.performUpdateResponse, t.uint32(58).fork()).ldelim(), "factoryResetRequest" === (null === (d = e.message) || void 0 === d ? void 0 : d.$case) && n.CommonAPIFactoryResetRequest.encode(e.message.factoryResetRequest, t.uint32(66).fork()).ldelim(), "factoryResetResponse" === (null === (u = e.message) || void 0 === u ? void 0 : u.$case) && n.CommonAPIFactoryResetResponse.encode(e.message.factoryResetResponse, t.uint32(74).fork()).ldelim(), "wifiScanRequest" === (null === (m = e.message) || void 0 === m ? void 0 : m.$case) && n.CommonAPIWifiScanRequest.encode(e.message.wifiScanRequest, t.uint32(82).fork()).ldelim(), "wifiScanResponse" === (null === (p = e.message) || void 0 === p ? void 0 : p.$case) && n.CommonAPIWifiScanResponse.encode(e.message.wifiScanResponse, t.uint32(90).fork()).ldelim(), "configureWifiRequest" === (null === (g = e.message) || void 0 === g ? void 0 : g.$case) && n.CommonAPIConfigureWifiRequest.encode(e.message.configureWifiRequest, t.uint32(98).fork()).ldelim(), "configureWifiResponse" === (null === (w = e.message) || void 0 === w ? void 0 : w.$case) && n.CommonAPIConfigureWifiResponse.encode(e.message.configureWifiResponse, t.uint32(106).fork()).ldelim(), "checkForUpdateRequest" === (null === (v = e.message) || void 0 === v ? void 0 : v.$case) && n.CommonAPICheckForUpdateRequest.encode(e.message.checkForUpdateRequest, t.uint32(114).fork()).ldelim(), "checkForUpdateResponse" === (null === (f = e.message) || void 0 === f ? void 0 : f.$case) && n.CommonAPICheckForUpdateResponse.encode(e.message.checkForUpdateResponse, t.uint32(122).fork()).ldelim(), "clearUpdateRequest" === (null === (h = e.message) || void 0 === h ? void 0 : h.$case) && n.CommonAPIClearUpdateRequest.encode(e.message.clearUpdateRequest, t.uint32(130).fork()).ldelim(), "clearUpdateResponse" === (null === (E = e.message) || void 0 === E ? void 0 : E.$case) && n.CommonAPIClearUpdateResponse.encode(e.message.clearUpdateResponse, t.uint32(138).fork()).ldelim(), "deviceCertRequest" === (null === (b = e.message) || void 0 === b ? void 0 : b.$case) && n.CommonAPIDeviceCertRequest.encode(e.message.deviceCertRequest, t.uint32(146).fork()).ldelim(), "deviceCertResponse" === (null === (y = e.message) || void 0 === y ? void 0 : y.$case) && n.CommonAPIDeviceCertResponse.encode(e.message.deviceCertResponse, t.uint32(154).fork()).ldelim(), "configureWifiWithEncryptedPasswordRequest" === (null === (S = e.message) || void 0 === S ? void 0 : S.$case) && n.CommonAPIConfigureWifiWithEncryptedPasswordRequest.encode(e.message.configureWifiWithEncryptedPasswordRequest, t.uint32(162).fork()).ldelim(), "configureWifiWithEncryptedPasswordResponse" === (null === (R = e.message) || void 0 === R ? void 0 : R.$case) && n.CommonAPIConfigureWifiWithEncryptedPasswordResponse.encode(e.message.configureWifiWithEncryptedPasswordResponse, t.uint32(170).fork()).ldelim(), "getNetworkingStatusRequest" === (null === (T = e.message) || void 0 === T ? void 0 : T.$case) && n.CommonAPIGetNetworkingStatusRequest.encode(e.message.getNetworkingStatusRequest, t.uint32(178).fork()).ldelim(), "getNetworkingStatusResponse" === (null === (A = e.message) || void 0 === A ? void 0 : A.$case) && n.CommonAPIGetNetworkingStatusResponse.encode(e.message.getNetworkingStatusResponse, t.uint32(186).fork()).ldelim(), "getCellularInfoRequest" === (null === (C = e.message) || void 0 === C ? void 0 : C.$case) && n.CommonAPIGetCellularInfoRequest.encode(e.message.getCellularInfoRequest, t.uint32(194).fork()).ldelim(), "getCellularInfoResponse" === (null === (I = e.message) || void 0 === I ? void 0 : I.$case) && n.CommonAPIGetCellularInfoResponse.encode(e.message.getCellularInfoResponse, t.uint32(202).fork()).ldelim(), "configureEthernetRequest" === (null === (O = e.message) || void 0 === O ? void 0 : O.$case) && n.CommonAPIConfigureEthernetRequest.encode(e.message.configureEthernetRequest, t.uint32(210).fork()).ldelim(), "configureEthernetResponse" === (null === (N = e.message) || void 0 === N ? void 0 : N.$case) && n.CommonAPIConfigureEthernetResponse.encode(e.message.configureEthernetResponse, t.uint32(218).fork()).ldelim(), "forgetWifiNetworkRequest" === (null === (k = e.message) || void 0 === k ? void 0 : k.$case) && n.CommonAPIForgetWifiNetworkRequest.encode(e.message.forgetWifiNetworkRequest, t.uint32(226).fork()).ldelim(), "forgetWifiNetworkResponse" === (null === (P = e.message) || void 0 === P ? void 0 : P.$case) && n.CommonAPIForgetWifiNetworkResponse.encode(e.message.forgetWifiNetworkResponse, t.uint32(234).fork()).ldelim(), "checkInternetRequest" === (null === (D = e.message) || void 0 === D ? void 0 : D.$case) && n.CommonAPICheckInternetRequest.encode(e.message.checkInternetRequest, t.uint32(242).fork()).ldelim(), "checkInternetResponse" === (null === (L = e.message) || void 0 === L ? void 0 : L.$case) && n.CommonAPICheckInternetResponse.encode(e.message.checkInternetResponse, t.uint32(250).fork()).ldelim(), "checkForUpdateUrgencyRequest" === (null === (M = e.message) || void 0 === M ? void 0 : M.$case) && n.CommonAPICheckForUpdateUrgencyRequest.encode(e.message.checkForUpdateUrgencyRequest, t.uint32(258).fork()).ldelim(), "checkForUpdateUrgencyResponse" === (null === (z = e.message) || void 0 === z ? void 0 : z.$case) && n.CommonAPICheckForUpdateUrgencyResponse.encode(e.message.checkForUpdateUrgencyResponse, t.uint32(266).fork()).ldelim(), "negotiateUpdateWithLocallyAvailablePackagesRequest" === (null === (U = e.message) || void 0 === U ? void 0 : U.$case) && n.CommonAPINegotiateUpdateWithLocallyAvailablePackagesRequest.encode(e.message.negotiateUpdateWithLocallyAvailablePackagesRequest, t.uint32(274).fork()).ldelim(), "negotiateUpdateWithLocallyAvailablePackagesResponse" === (null === (V = e.message) || void 0 === V ? void 0 : V.$case) && n.CommonAPINegotiateUpdateWithLocallyAvailablePackagesResponse.encode(e.message.negotiateUpdateWithLocallyAvailablePackagesResponse, t.uint32(282).fork()).ldelim(), "prepareRegistrationPayloadRequest" === (null === (G = e.message) || void 0 === G ? void 0 : G.$case) && n.CommonAPIPrepareRegistrationPayloadRequest.encode(e.message.prepareRegistrationPayloadRequest, t.uint32(290).fork()).ldelim(), "prepareRegistrationPayloadResponse" === (null === (j = e.message) || void 0 === j ? void 0 : j.$case) && n.CommonAPIPrepareRegistrationPayloadResponse.encode(e.message.prepareRegistrationPayloadResponse, t.uint32(298).fork()).ldelim(), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, a); for (; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.message = { $case: "errorResponse", errorResponse: n.ErrorResponse.decode(i, i.uint32()) }; break; case 2: s.message = { $case: "getSystemInfoRequest", getSystemInfoRequest: n.CommonAPIGetSystemInfoRequest.decode(i, i.uint32()) }; break; case 3: s.message = { $case: "getSystemInfoResponse", getSystemInfoResponse: n.CommonAPIGetSystemInfoResponse.decode(i, i.uint32()) }; break; case 4: s.message = { $case: "setLocalSiteConfigRequest", setLocalSiteConfigRequest: n.CommonAPISetLocalSiteConfigRequest.decode(i, i.uint32()) }; break; case 5: s.message = { $case: "setLocalSiteConfigResponse", setLocalSiteConfigResponse: n.CommonAPISetLocalSiteConfigResponse.decode(i, i.uint32()) }; break; case 6: s.message = { $case: "performUpdateRequest", performUpdateRequest: n.CommonAPIPerformUpdateRequest.decode(i, i.uint32()) }; break; case 7: s.message = { $case: "performUpdateResponse", performUpdateResponse: n.CommonAPIPerformUpdateResponse.decode(i, i.uint32()) }; break; case 8: s.message = { $case: "factoryResetRequest", factoryResetRequest: n.CommonAPIFactoryResetRequest.decode(i, i.uint32()) }; break; case 9: s.message = { $case: "factoryResetResponse", factoryResetResponse: n.CommonAPIFactoryResetResponse.decode(i, i.uint32()) }; break; case 10: s.message = { $case: "wifiScanRequest", wifiScanRequest: n.CommonAPIWifiScanRequest.decode(i, i.uint32()) }; break; case 11: s.message = { $case: "wifiScanResponse", wifiScanResponse: n.CommonAPIWifiScanResponse.decode(i, i.uint32()) }; break; case 12: s.message = { $case: "configureWifiRequest", configureWifiRequest: n.CommonAPIConfigureWifiRequest.decode(i, i.uint32()) }; break; case 13: s.message = { $case: "configureWifiResponse", configureWifiResponse: n.CommonAPIConfigureWifiResponse.decode(i, i.uint32()) }; break; case 14: s.message = { $case: "checkForUpdateRequest", checkForUpdateRequest: n.CommonAPICheckForUpdateRequest.decode(i, i.uint32()) }; break; case 15: s.message = { $case: "checkForUpdateResponse", checkForUpdateResponse: n.CommonAPICheckForUpdateResponse.decode(i, i.uint32()) }; break; case 16: s.message = { $case: "clearUpdateRequest", clearUpdateRequest: n.CommonAPIClearUpdateRequest.decode(i, i.uint32()) }; break; case 17: s.message = { $case: "clearUpdateResponse", clearUpdateResponse: n.CommonAPIClearUpdateResponse.decode(i, i.uint32()) }; break; case 18: s.message = { $case: "deviceCertRequest", deviceCertRequest: n.CommonAPIDeviceCertRequest.decode(i, i.uint32()) }; break; case 19: s.message = { $case: "deviceCertResponse", deviceCertResponse: n.CommonAPIDeviceCertResponse.decode(i, i.uint32()) }; break; case 20: s.message = { $case: "configureWifiWithEncryptedPasswordRequest", configureWifiWithEncryptedPasswordRequest: n.CommonAPIConfigureWifiWithEncryptedPasswordRequest.decode(i, i.uint32()) }; break; case 21: s.message = { $case: "configureWifiWithEncryptedPasswordResponse", configureWifiWithEncryptedPasswordResponse: n.CommonAPIConfigureWifiWithEncryptedPasswordResponse.decode(i, i.uint32()) }; break; case 22: s.message = { $case: "getNetworkingStatusRequest", getNetworkingStatusRequest: n.CommonAPIGetNetworkingStatusRequest.decode(i, i.uint32()) }; break; case 23: s.message = { $case: "getNetworkingStatusResponse", getNetworkingStatusResponse: n.CommonAPIGetNetworkingStatusResponse.decode(i, i.uint32()) }; break; case 24: s.message = { $case: "getCellularInfoRequest", getCellularInfoRequest: n.CommonAPIGetCellularInfoRequest.decode(i, i.uint32()) }; break; case 25: s.message = { $case: "getCellularInfoResponse", getCellularInfoResponse: n.CommonAPIGetCellularInfoResponse.decode(i, i.uint32()) }; break; case 26: s.message = { $case: "configureEthernetRequest", configureEthernetRequest: n.CommonAPIConfigureEthernetRequest.decode(i, i.uint32()) }; break; case 27: s.message = { $case: "configureEthernetResponse", configureEthernetResponse: n.CommonAPIConfigureEthernetResponse.decode(i, i.uint32()) }; break; case 28: s.message = { $case: "forgetWifiNetworkRequest", forgetWifiNetworkRequest: n.CommonAPIForgetWifiNetworkRequest.decode(i, i.uint32()) }; break; case 29: s.message = { $case: "forgetWifiNetworkResponse", forgetWifiNetworkResponse: n.CommonAPIForgetWifiNetworkResponse.decode(i, i.uint32()) }; break; case 30: s.message = { $case: "checkInternetRequest", checkInternetRequest: n.CommonAPICheckInternetRequest.decode(i, i.uint32()) }; break; case 31: s.message = { $case: "checkInternetResponse", checkInternetResponse: n.CommonAPICheckInternetResponse.decode(i, i.uint32()) }; break; case 32: s.message = { $case: "checkForUpdateUrgencyRequest", checkForUpdateUrgencyRequest: n.CommonAPICheckForUpdateUrgencyRequest.decode(i, i.uint32()) }; break; case 33: s.message = { $case: "checkForUpdateUrgencyResponse", checkForUpdateUrgencyResponse: n.CommonAPICheckForUpdateUrgencyResponse.decode(i, i.uint32()) }; break; case 34: s.message = { $case: "negotiateUpdateWithLocallyAvailablePackagesRequest", negotiateUpdateWithLocallyAvailablePackagesRequest: n.CommonAPINegotiateUpdateWithLocallyAvailablePackagesRequest.decode(i, i.uint32()), }; break; case 35: s.message = { $case: "negotiateUpdateWithLocallyAvailablePackagesResponse", negotiateUpdateWithLocallyAvailablePackagesResponse: n.CommonAPINegotiateUpdateWithLocallyAvailablePackagesResponse.decode(i, i.uint32()), }; break; case 36: s.message = { $case: "prepareRegistrationPayloadRequest", prepareRegistrationPayloadRequest: n.CommonAPIPrepareRegistrationPayloadRequest.decode(i, i.uint32()) }; break; case 37: s.message = { $case: "prepareRegistrationPayloadResponse", prepareRegistrationPayloadResponse: n.CommonAPIPrepareRegistrationPayloadResponse.decode(i, i.uint32()) }; break; default: i.skipType(7 & e); } } return s; }, }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.EnergySiteNetMessages = void 0); const n = i(454), r = i(40), a = {}; t.EnergySiteNetMessages = { encode(e, t = r.Writer.create()) { var i, a, o, s, _, l; return ( "addDeviceRequest" === (null === (i = e.message) || void 0 === i ? void 0 : i.$case) && n.EnergySiteNetAPIAddDeviceRequest.encode(e.message.addDeviceRequest, t.uint32(10).fork()).ldelim(), "addDeviceResponse" === (null === (a = e.message) || void 0 === a ? void 0 : a.$case) && n.EnergySiteNetAPIAddDeviceResponse.encode(e.message.addDeviceResponse, t.uint32(18).fork()).ldelim(), "removeDeviceRequest" === (null === (o = e.message) || void 0 === o ? void 0 : o.$case) && n.EnergySiteNetAPIRemoveDeviceRequest.encode(e.message.removeDeviceRequest, t.uint32(26).fork()).ldelim(), "removeDeviceResponse" === (null === (s = e.message) || void 0 === s ? void 0 : s.$case) && n.EnergySiteNetAPIRemoveDeviceResponse.encode(e.message.removeDeviceResponse, t.uint32(34).fork()).ldelim(), "getConfigRequest" === (null === (_ = e.message) || void 0 === _ ? void 0 : _.$case) && n.EnergySiteNetAPIGetConfigRequest.encode(e.message.getConfigRequest, t.uint32(42).fork()).ldelim(), "getConfigResponse" === (null === (l = e.message) || void 0 === l ? void 0 : l.$case) && n.EnergySiteNetAPIGetConfigResponse.encode(e.message.getConfigResponse, t.uint32(50).fork()).ldelim(), t ); }, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let o = void 0 === t ? i.len : i.pos + t; const s = Object.assign({}, a); for (; i.pos < o; ) { const e = i.uint32(); switch (e >>> 3) { case 1: s.message = { $case: "addDeviceRequest", addDeviceRequest: n.EnergySiteNetAPIAddDeviceRequest.decode(i, i.uint32()) }; break; case 2: s.message = { $case: "addDeviceResponse", addDeviceResponse: n.EnergySiteNetAPIAddDeviceResponse.decode(i, i.uint32()) }; break; case 3: s.message = { $case: "removeDeviceRequest", removeDeviceRequest: n.EnergySiteNetAPIRemoveDeviceRequest.decode(i, i.uint32()) }; break; case 4: s.message = { $case: "removeDeviceResponse", removeDeviceResponse: n.EnergySiteNetAPIRemoveDeviceResponse.decode(i, i.uint32()) }; break; case 5: s.message = { $case: "getConfigRequest", getConfigRequest: n.EnergySiteNetAPIGetConfigRequest.decode(i, i.uint32()) }; break; case 6: s.message = { $case: "getConfigResponse", getConfigResponse: n.EnergySiteNetAPIGetConfigResponse.decode(i, i.uint32()) }; break; default: i.skipType(7 & e); } } return s; }, }; }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.LocalAuthAPICheckAuthStatusResponse = t.LocalAuthAPICheckAuthStatusRequest = t.LocalAuthAPILogoutResponse = t.LocalAuthAPILogoutRequest = t.LocalAuthAPILoginResponse = t.LocalAuthAPILoginRequest = t.LocalAuthAPIRequiredFactorsResponse = t.LocalAuthAPIRequiredFactorsRequest = t.LocalAuthResult = t.LocalParticipant = void 0); const n = i(175), r = i(40), a = {}, o = { password: !1, presence: !1 }, s = { participant: 0, email: "" }, _ = { result: 0 }, l = {}, c = {}, d = {}, u = { result: 0 }; !(function (e) { (e[(e.LOCAL_PARTICIPANT_INVALID = 0)] = "LOCAL_PARTICIPANT_INVALID"), (e[(e.LOCAL_PARTICIPANT_INSTALLER = 1)] = "LOCAL_PARTICIPANT_INSTALLER"), (e[(e.LOCAL_PARTICIPANT_CUSTOMER = 2)] = "LOCAL_PARTICIPANT_CUSTOMER"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.LocalParticipant || (t.LocalParticipant = {})), (function (e) { (e[(e.LOCAL_AUTH_RESULT_INVALID = 0)] = "LOCAL_AUTH_RESULT_INVALID"), (e[(e.LOCAL_AUTH_RESULT_SUCCESS = 1)] = "LOCAL_AUTH_RESULT_SUCCESS"), (e[(e.LOCAL_AUTH_RESULT_INVALID_PARAMETERS = 2)] = "LOCAL_AUTH_RESULT_INVALID_PARAMETERS"), (e[(e.LOCAL_AUTH_RESULT_INVALID_PASSWORD = 3)] = "LOCAL_AUTH_RESULT_INVALID_PASSWORD"), (e[(e.LOCAL_AUTH_RESULT_PRESENCE_PROOF_REQUIRED = 4)] = "LOCAL_AUTH_RESULT_PRESENCE_PROOF_REQUIRED"), (e[(e.LOCAL_AUTH_RESULT_PRESENCE_PROOF_TIMED_OUT = 5)] = "LOCAL_AUTH_RESULT_PRESENCE_PROOF_TIMED_OUT"), (e[(e.UNRECOGNIZED = -1)] = "UNRECOGNIZED"); })(t.LocalAuthResult || (t.LocalAuthResult = {})), (t.LocalAuthAPIRequiredFactorsRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, a); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return o; }, }), (t.LocalAuthAPIRequiredFactorsResponse = { encode: (e, t = r.Writer.create()) => (t.uint32(8).bool(e.password), t.uint32(16).bool(e.presence), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, o); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.password = i.bool(); break; case 2: a.presence = i.bool(); break; default: i.skipType(7 & e); } } return a; }, }), (t.LocalAuthAPILoginRequest = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.participant), t.uint32(18).string(e.email), void 0 !== e.password && void 0 !== e.password && n.WifiPassword.encode(e.password, t.uint32(26).fork()).ldelim(), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let a = void 0 === t ? i.len : i.pos + t; const o = Object.assign({}, s); for (; i.pos < a; ) { const e = i.uint32(); switch (e >>> 3) { case 1: o.participant = i.int32(); break; case 2: o.email = i.string(); break; case 3: o.password = n.WifiPassword.decode(i, i.uint32()); break; default: i.skipType(7 & e); } } return o; }, }), (t.LocalAuthAPILoginResponse = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.result), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, _); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.result = i.int32(); break; default: i.skipType(7 & e); } } return a; }, }), (t.LocalAuthAPILogoutRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, l); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.LocalAuthAPILogoutResponse = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, c); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.LocalAuthAPICheckAuthStatusRequest = { encode: (e, t = r.Writer.create()) => t, decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, d); for (; i.pos < n; ) { const e = i.uint32(); i.skipType(7 & e); } return a; }, }), (t.LocalAuthAPICheckAuthStatusResponse = { encode: (e, t = r.Writer.create()) => (t.uint32(8).int32(e.result), t), decode(e, t) { const i = e instanceof Uint8Array ? new r.Reader(e) : e; let n = void 0 === t ? i.len : i.pos + t; const a = Object.assign({}, u); for (; i.pos < n; ) { const e = i.uint32(); switch (e >>> 3) { case 1: a.result = i.int32(); break; default: i.skipType(7 & e); } } return a; }, }); }, function (e, t, i) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), (t.RPCError = void 0); class n extends Error { constructor(e, t) { super(`${e.api}.${e.method}: ${t}`), Object.assign(this, e), (this.api = e.api), (this.method = e.method), (this.request = e.request), (this.requestedAt = e.requestedAt); } } t.RPCError = n; }, function (e, t, i) {}, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(155), s = i(50), _ = i(62), l = n(i(789)); t.default = function ({ device: e }) { const t = e.vitals(); let i = t.getNumber("PVAC_Pout"), n = (t.getNumber("PVAC_Iout"), t.getNumber("PVAC_LifetimeEnergyPV_Total")); n && (n /= 1e3); let c = [ { number: 1, connected: t.getBoolean("PVS_StringA_Connected"), voltage: t.getNumber("PVAC_PVMeasuredVoltage_A"), current: t.getNumber("PVAC_PVCurrent_A") }, { number: 2, connected: t.getBoolean("PVS_StringB_Connected"), voltage: t.getNumber("PVAC_PVMeasuredVoltage_B"), current: t.getNumber("PVAC_PVCurrent_B") }, { number: 3, connected: t.getBoolean("PVS_StringC_Connected"), voltage: t.getNumber("PVAC_PVMeasuredVoltage_C"), current: t.getNumber("PVAC_PVCurrent_C") }, { number: 4, connected: t.getBoolean("PVS_StringD_Connected"), voltage: t.getNumber("PVAC_PVMeasuredVoltage_D"), current: t.getNumber("PVAC_PVCurrent_D") }, ], d = t.getString("PVS_State"), u = !!d && d.startsWith("PVS_SelfTest"); return r.default.createElement( r.default.Fragment, null, r.default.createElement(l.default, { device: e }), r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_ac_solar_power_only", defaultMessage: "AC Solar Power: {power}", values: { power: r.default.createElement(o.Watts, { value: r.default.createElement(_.Vital, { value: i }) }) }, }) ), r.default.createElement( "p", { className: "vitals-value" }, r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_lifetime_energy_kwh", defaultMessage: "Lifetime Energy: {energy}", values: { energy: r.default.createElement(o.KiloWattHours, { value: r.default.createElement(_.Vital, { value: n }) }) }, }) ), c.map((e) => r.default.createElement( "p", { key: e.number, className: (0, s.classNames)("vitals-value", { "vitals-value-muted": u }) }, e.connected || u ? r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_string", description: "Displays the DC voltage and current for the specified string of PV panels", defaultMessage: "String {number}: {voltage} / {current}", values: { number: e.number, voltage: r.default.createElement(o.Volts, { value: r.default.createElement(_.Vital, { value: e.voltage }) }), current: r.default.createElement(o.Amps, { value: r.default.createElement(_.Vital, { value: e.current }) }), }, }) : r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_string_not_connected", description: "Indicates that no PV panels are connected to the specified string", defaultMessage: "String {number}: Not connected", values: { number: e.number }, }) ) ) ); }; }, function (e, t, i) { "use strict"; var n = (this && this.__importDefault) || function (e) { return e && e.__esModule ? e : { default: e }; }; Object.defineProperty(t, "__esModule", { value: !0 }); const r = n(i(1)), a = i(3), o = i(50), s = i(62), _ = i(449); var l, c; !(function (e) { (e.PVS_State_SNA = "PVS_State_SNA"), (e.PVS_GridSupporting = "PVS_GridSupporting"), (e.PVS_Fault = "PVS_Fault"), (e.PVS_ActiveToIdleNotice = "PVS_ActiveToIdleNotice"), (e.PVS_Active = "PVS_Active"), (e.PVS_SelfTestRelayWeld = "PVS_SelfTestRelayWeld"), (e.PVS_SelfTestMci = "PVS_SelfTestMci"), (e.PVS_SelfTestArcFault = "PVS_SelfTestArcFault"), (e.PVS_SelfTestIsolation = "PVS_SelfTestIsolation"), (e.PVS_SelfTestPeImpedance = "PVS_SelfTestPeImpedance"), (e.PVS_SelfTestGroundFault = "PVS_SelfTestGroundFault"), (e.PVS_Standby = "PVS_Standby"), (e.PVS_Idle = "PVS_Idle"), (e.PVS_Init = "PVS_Init"), (e.PVS_Off = "PVS_Off"); })(l || (l = {})), (function (e) { (e.PVAC_State_SNA = "PVAC_State_SNA"), (e.PVAC_Active = "PVAC_Active"), (e.PVAC_Standby = "PVAC_Standby"), (e.PVAC_Faulted = "PVAC_Faulted"), (e.PVAC_Init = "PVAC_Init"); })(c || (c = {})); const d = (0, a.defineMessages)({ [l.PVS_SelfTestGroundFault]: { id: "pvs-self-test-1", defaultMessage: "Self-test (1/6): Ground Fault" }, [l.PVS_SelfTestArcFault]: { id: "pvs-self-test-2", defaultMessage: "Self-test (2/6): Arc Fault" }, [l.PVS_SelfTestMci]: { id: "pvs-self-test-3", defaultMessage: "Self-test (3/6): MCI" }, [l.PVS_SelfTestIsolation]: { id: "pvs-self-test-4", defaultMessage: "Self-test (4/6): Isolation" }, [l.PVS_SelfTestRelayWeld]: { id: "pvs-self-test-5", defaultMessage: "Self-test (5/6): Relay Weld" }, [l.PVS_SelfTestPeImpedance]: { id: "pvs-self-test-6", defaultMessage: "Self-test (6/6): Impedance" }, }), u = (0, a.defineMessages)({ [c.PVAC_Init]: { id: "pvac-state-init", description: "Indicates the inverter is initializing.", defaultMessage: "Initializing..." }, [c.PVAC_Faulted]: { id: "pvac-state-faulted", description: "Indicates the inverter is in a faulted state.", defaultMessage: "Faulted" }, [c.PVAC_Standby]: { id: "pvac-state-standby", description: "Indicates the inverter is on stand-by.", defaultMessage: "Wait for Solar" }, [c.PVAC_Active]: { id: "pvac-state-active", description: "Indicates the inverter is active.", defaultMessage: "Active" }, }); t.default = function ({ device: e }) { const t = e.vitals(); let i, n = t.getString("PVS_State"), l = t.getString("PVAC_State"), c = t.getString("PVI-PowerStatusSetpoint") || _.PowerStatus.UNSET, m = !1; return ( n && n in d ? ((i = r.default.createElement(a.FormattedMessage, Object.assign({}, d[n]))), (m = !0)) : (i = c === _.PowerStatus.OFF || c === _.PowerStatus.DC_ONLY ? r.default.createElement(a.FormattedMessage, Object.assign({}, _.powerStatusMessages[c])) : l && l in u ? r.default.createElement(a.FormattedMessage, Object.assign({}, u[l])) : s.MissingValue), r.default.createElement( "p", { className: (0, o.classNames)("vitals-value", { "vitals-value-selftest": m }) }, r.default.createElement(a.FormattedMessage, { id: "system_pvi_vitals_state", defaultMessage: "State: {message}", values: { message: i } }) ) ); }; }, function (e, t, i) { e.exports = i.p + "c8fcb53fcd20652d2178b6f0b250133d.svg"; }, function (e, t, i) { e.exports = i.p + "b8edeecd65dc2e9ab81897c5ee2db33e.svg"; }, function (e, t, i) { e.exports = i.p + "a850d2157007ce3dcec027b4e229da17.png"; }, function (e, t, i) { e.exports = i.p + "f3e32873e5f25c0515bc4c3485ebf289.png"; }, function (e, t, i) { e.exports = i.p + "5101b9205648ce60c79f155a9f738027.png"; }, function (e, t, i) {}, function (e, t, i) { e.exports = i.p + "43b51e1b10d9be72e3f138207d0dcb50.png"; }, function (e, t, i) { fetch('/stats') .then(response => response.json()) .then(data => { const isPW3 = data.pw3; if (isPW3 == true) { e.exports = i.p + "2cd211ee063a3608ab501624f326d61e.png"; } else { e.exports = i.p + "cb0da8a8999c06735455bf5056a5cd78.png"; } }) .catch(error => { console.error('Error fetching /stats:', error); e.exports = i.p + "cb0da8a8999c06735455bf5056a5cd78.png"; }); }, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, function (e, t, i) {}, , , , , , , , function (e, t) {}, , , , , , function (e, t) {}, , , , , function (e, t, i) {}, function (e, t, i) {}, , function (e, t, i) {}, function (e, t, i) {}, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (e, t, i) { "use strict"; i.r(t); var n = {}; i.r(n), i.d(n, "showBanner", function () { return j; }), i.d(n, "destroyBanner", function () { return W; }), i.d(n, "destroyBanners", function () { return F; }); var r = i(18), a = i.n(r), o = i(292), s = i.n(o), _ = i(0), l = i.n(_), c = i(1), d = i.n(c), u = i(3), m = i(35), p = i(17), g = i(49), w = i(55), v = i(66), f = i.n(v), h = i(14), E = i(29), b = i(154), y = i(10), S = i(2); i(640); function R(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const T = Object(u.defineMessages)({ tryLoggingInAgain: { id: "error_item_view_try_logging_in_again", defaultMessage: "Try logging in again." }, refreshBrowser: { id: "error_item_view_refresh_browser", defaultMessage: "Refresh browser." }, disconnected: { id: "error_item_view_disconnected", defaultMessage: "Disconnected from Gateway. Check network connection and {refresh}" }, checkNetwork: { id: "error_item_view_check_network", defaultMessage: "Check network connection." }, }); class A extends c.Component { constructor(...e) { super(...e), R(this, "_handleClick", this._handleClick.bind(this)), R(this, "_navigateToSecurity", this._navigateToSecurity.bind(this)); } render() { const { error: e, intl: t } = this.props; let n = null, r = null, a = e.message, o = "", s = null != a && !(a.lastIndexOf(".") === a.length - 1), _ = !1; return ( e instanceof h.default && (e.isDetailed() && (n = c.createElement("img", { "data-testid": "8610cc7e-2d95-433c-b4f2-d8f221997d2c", className: "error-info", alt: "Detailed Error", src: i(298), onClick: this._handleClick })), (_ = e.isUnauthorized()), (o = e.toErrorString())), Object(E.p)(a) || _ ? (r = e.name && e.name === S.RECEIVE_LOGIN_ERROR ? c.createElement("u", { onClick: this._navigateToSecurity }, c.createElement(u.FormattedMessage, { id: "error_item_view_forgot_password", defaultMessage: "Click to reset password." })) : c.createElement("a", { "data-testid": "81f30817-fd59-4219-81a1-f9770578976c", className: "refresh", onClick: b.b }, t.formatMessage(T.tryLoggingInAgain))) : Object(E.j)(a) ? ((o = t.formatMessage(T.disconnected, { refresh: "" })), (s = !1), (r = c.createElement("a", { "data-testid": "391bbcd8-77e4-46fb-aeed-93b5655d4c29", className: "refresh text-lowercase", onClick: b.b }, t.formatMessage(T.refreshBrowser)))) : Object(E.q)(a) ? (r = c.createElement("a", { "data-testid": "2a56dd50-21f9-46da-a789-86662115ed52", className: "refresh", onClick: b.b }, t.formatMessage(T.refreshBrowser))) : Object(E.k)(a) && ((s = !1), (r = c.createElement("a", { "data-testid": "28a36a86-b956-4612-8756-cbf01fd6d1a7", className: "error-link", href: "/network" }, t.formatMessage(T.checkNetwork)))), c.createElement("p", { "data-testid": "9d67a30d-6c1d-4d2a-861a-74593cd27470", className: "error-item" }, o || a, s ? "." : "", r ? " " : "", r, n) ); } _navigateToSecurity() { let e = "/password"; this.props.selectedLoginType !== y.c.CUSTOMER && (e += "?mode=" + y.c.INSTALLER), p.browserHistory.push(e); } _handleClick(e) { this.props.handleClick && this.props.handleClick(e); } } R(A, "propTypes", { intl: u.intlShape.isRequired, error: l.a.instanceOf(h.default).isRequired, handleClick: l.a.func, selectedLoginType: l.a.oneOf(Object.values(y.c)) }); var C, I, O; i(641); function N(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function k(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class P extends c.Component { constructor(e) { super(e), (this.ui = {}), (this._handleHidden = this._handleHidden.bind(this)); } componentDidMount() { (this.ui.modal = f()(this.refs.modal)), this.ui.modal.modal( (function (e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? N(Object(i), !0).forEach(function (t) { k(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : N(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; })({}, this.props.bootstrapProps) ), this.ui.modal.on("hidden.bs.modal", this._handleHidden), this.props.fadeIn && (this.ui.fade = f()(".modal.fade.in")), this.props.onMount && this.props.onMount(); } componentWillUnmount() { this.ui.modal.off("hidden.bs.modal", this._handleHidden), this.ui.modal.modal("hide"), this.ui.fade && this.ui.fade.length && this.ui.fade.remove(), this.props.onUnmount && this.props.onUnmount(); } render() { const { size: e, centered: t, fullscreen: i, fadeIn: n, showCancel: r, showBorders: a, showErrors: o, modalClass: s, errors: _, selectedLoginType: l, bannerView: d, headerView: u, contentView: m, footerView: p, } = this.props; return c.createElement( "div", { "data-testid": "6c45a17b-1a5a-4dec-8351-665862b60642", className: this._getModalClassName(t, i, n, a, s, o, _), tabIndex: "-1", role: "dialog", ref: "modal" }, c.createElement( "div", { "data-testid": "0e8ca6c4-0912-426e-9fb4-9600c6cfd314", className: "modal-dialog modal-" + e, role: "document" }, c.createElement( "div", { "data-testid": "85b231c4-419d-4b0b-a37b-69f4cafd4aae", className: "modal-content" }, d && this._getModalBanner(d), u && this._getModalHeader(u, r, o, _, l), m && this._getModalContent(m), p && this._getModalFooter(p) ) ) ); } _getModalClassName(e, t, i, n, r, a, o) { let s = ["modal"]; return e && s.push("modal-center"), t && s.push("modal-fullscreen"), i && s.push("fade"), n || s.push("modal-no-borders"), r && s.push(r), a && o.length && (s.push("modal-error"), i && s.push("in")), s.join(" "); } _getModalBanner(e) { return c.createElement("div", null, e); } _getModalHeader(e, t, i, n, r) { let a = []; return ( i && n.length && (a = n.map((e, t) => c.createElement(A, { intl: this.props.intl, key: t, error: e, selectedLoginType: r }))), c.createElement("div", { "data-testid": "53249177-ed6d-400d-aff2-e3e77db701f4", className: "modal-header" }, this._getCancel(t), e, a) ); } _getCancel(e) { return e ? c.createElement( "button", { "data-testid": "33954d8f-f1b2-47c5-85ed-2bbd210cdbe5", type: "button", className: "close", "data-dismiss": "modal", "aria-label": "Close" }, c.createElement("span", { "data-testid": "df78842b-6663-4a34-b983-e698658d2f47", "aria-hidden": "true" }, "×") ) : null; } _getModalContent(e) { return c.createElement("div", { "data-testid": "26d958a5-5f8d-4b2d-867b-9e0b942de3f7", className: "modal-body" }, e); } _getModalFooter(e) { return c.createElement("div", { "data-testid": "3722b54d-83dd-4180-b93d-c82a43b68239", className: "modal-footer" }, e); } _handleHidden() { this.props.hideModal && this.props.hideModal(); } } function D() { return (D = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } k(P, "propTypes", { intl: u.intlShape.isRequired, size: l.a.string.isRequired, centered: l.a.bool.isRequired, fullscreen: l.a.bool.isRequired, fadeIn: l.a.bool.isRequired, showCancel: l.a.bool.isRequired, showBorders: l.a.bool.isRequired, showErrors: l.a.bool.isRequired, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, modalClass: l.a.string, bannerView: l.a.element, headerView: l.a.element, contentView: l.a.element, footerView: l.a.element, hideModal: l.a.func, onMount: l.a.func, onUnmount: l.a.func, bootstrapProps: l.a.object, }), k(P, "defaultProps", { size: "md", centered: !1, fullscreen: !1, fadeIn: !0, showCancel: !0, showBorders: !1, showErrors: !0, errors: [] }); class L extends c.Component { render() { const { modalType: e, modalProps: t, bootstrapProps: i, hideModal: n, errors: r, selectedLoginType: a, intl: o } = this.props; return e ? c.createElement(P, D({}, t, { intl: o, bootstrapProps: i, hideModal: n, selectedLoginType: a, errors: r.filter((t) => !(e === y.b && Object(E.l)(t.message))) })) : null; } } (C = L), (I = "propTypes"), (O = { intl: u.intlShape.isRequired, modalType: l.a.string, modalProps: l.a.object, bootstrapProps: l.a.object, hideModal: l.a.func, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, }), I in C ? Object.defineProperty(C, I, { value: O, enumerable: !0, configurable: !0, writable: !0 }) : (C[I] = O); var M = Object(m.connect)( (e, t) => { const { authentication: i, modal: n, error: r } = e; return { modalType: n.modalType, modalProps: n.modalProps, bootstrapProps: n.bootstrapProps, errors: r.items, selectedLoginType: i.selectedLoginType }; }, (e) => ({ hideModal: () => { e(Object(w.hideModal)()); }, }) )(Object(u.injectIntl)(L)), z = i(150), U = i(133), V = i(7), G = i(6); const j = Object(G.b)(S.SHOW_BANNER, "bannerProps"), W = Object(G.b)(S.DESTROY_BANNER, "name"), F = Object(G.b)(S.DESTROY_ALL_BANNERS); var q = i(74), x = i(135), B = i(39), H = i(109), K = i(5), Y = i.n(K), Q = i(4); function Z() { return function (e) { fetch(Y.a.api.uri + "/troubleshooting/problems", { credentials: Y.a.credentials }) .then(Q.checkStatus) .then((e) => e.json()) .then((t) => { var i; t && Array.isArray(t.problems) && e(((i = t.problems), { type: S.RECEIVE_INSTALLATION_PROBLEMS, problems: i })); }) .catch((e) => {}); }; } var J = i(20), X = i.n(J), $ = i(554), ee = i.n($), te = i(28), ie = i(68), ne = i(48); i(646); function re(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class ae extends c.Component { render() { const { headerClass: e, title: t, subtitle: i, subtitleView: n, additionalView: r, email: a, errors: o, progress: s, handleClick: _, kioskMode: l, selectedLoginType: d, intl: m, installationProblems: g } = this.props; let w = null, v = [], f = []; return ( o.length && (v = o.map((e, t) => c.createElement(A, { intl: m, key: t, error: e, handleClick: _, selectedLoginType: d }))), (w = i ? c.createElement("p", { "data-testid": "092c8885-9b44-4193-b471-90781f43b19c", className: "subtitle" }, i) : n), Array.isArray(g) && g.length > 0 && (f = g.map((e) => { const t = ne.installationProblemTitles[e]; if (!t) return null; switch (e) { case ne.InstallationProblems.PVACsWithNoSolarRGM: case ne.InstallationProblems.TooManySolarRGM: case ne.InstallationProblems.TooFewSolarRGM: return c.createElement( "div", { key: e }, c.createElement(p.Link, { onClick: () => this._showSolarRGMProblemModal(e) }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, t)) ); default: return c.createElement("div", { key: e }, c.createElement(p.Link, { to: "/system" }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, t))); } })), c.createElement( "div", { "data-testid": "ce33805a-86b7-4f6d-807e-c4e305cb3205", className: this._getClassName(e, o) }, c.createElement( "div", { "data-testid": "8300b4f1-fdc2-458d-94b8-3f69f84f436f", className: "container" }, this._getProgressIndication(a, s, l), c.createElement("h2", { "data-testid": "361ccdc2-ce7c-4772-a631-f833bd8c2193", className: "title" }, t), w, r, v, f ) ) ); } _showSolarRGMProblemModal(e) { this.props.showModal("PROBLEMS_MODAL", { modalClass: "modal-caution", size: "md", centered: !1, showCancel: !0, showErrors: !0, headerView: c.createElement("h2", { className: "modal-title" }, c.createElement(u.FormattedMessage, ne.installationProblemTitles[e])), contentView: c.createElement("div", null, c.createElement(u.FormattedMessage, ne.installationProblemDetails[e])), footerView: c.createElement( "div", { className: "center-block" }, c.createElement("button", { type: "button", className: "btn btn-primary", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE)) ), }); } _getClassName(e, t) { let i = ["header", e]; return t.length && i.push("error"), i.join(" "); } _getProgressIndication(e, t, i) { if (i || (!t && !e)) return null; let n = ""; return e && (n += e), t && (n += ` ${t}/${this.props.isResi ? 13 : 9}`), c.createElement("p", { "data-testid": "0438bf7f-2a09-4985-8749-4f5c28b91dc4", className: "wizard-progress" }, n); } } re(ae, "propTypes", { intl: u.intlShape.isRequired, headerClass: l.a.string.isRequired, title: l.a.string.isRequired, subtitle: l.a.string, subtitleView: l.a.element, additionalView: l.a.element, email: l.a.string, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, progress: l.a.number.isRequired, handleClick: l.a.func.isRequired, kioskMode: l.a.bool.isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, isResi: l.a.bool.isRequired, installationProblems: l.a.array.isRequired, showModal: l.a.func.isRequired, }), re(ae, "defaultProps", { title: "", subtitle: "", subtitleView: null, additionalView: null, errors: [], progress: 0, installationProblems: [] }); var oe = i(26), se = i(60), _e = i(126); function le() { return (le = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } class ce extends c.Component { constructor(e) { super(e), (this._handleDetailedClick = this._handleDetailedClick.bind(this)); } render() { const { headerType: e, headerProps: t, errors: i, email: n, kioskMode: r, selectedLoginType: a, intl: o, isResi: s, installationProblems: _, showModal: l } = this.props; return t.title ? c.createElement(ae, le({ isResi: s, intl: o, errors: i, email: n, headerClass: e, handleClick: this._handleDetailedClick, kioskMode: r, selectedLoginType: a, installationProblems: _, showModal: l }, t)) : null; } _handleDetailedClick(e) { this.props.showModal("DETAILED_ERROR_MODAL", { modalClass: "modal-error", size: "lg", centered: !0, showCancel: !1, showErrors: !1, headerView: c.createElement("h2", { "data-testid": "229cc453-2a7f-4b73-b53f-1be26ffdcbdc", className: "modal-title" }, this.props.intl.formatMessage(oe.errorMessages.details)), contentView: c.createElement( "div", { "data-testid": "d757513a-9115-4fbc-993e-2b3404a8f4c5" }, c.createElement( "ul", { "data-testid": "a4d93b83-2d09-4111-a8d9-79931254aef0", className: "detailed-errors" }, Object(E.b)(this.props.errors).map((e, t) => c.createElement( "li", { "data-testid": "6f7e814c-9bae-40b7-a93a-749dc41528ba", key: t }, c.createElement("div", { "data-testid": "992d8ad6-e14a-4245-84b8-82152941eabd", className: "line-breaks" }, e.toDetailedString()) ) ) ) ), footerView: c.createElement( "button", { "data-testid": "19625f9d-50ec-4956-a59a-5f4f434fc47d", type: "button", className: "btn btn-link center-block", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE) ), }); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(ce, "propTypes", { intl: u.intlShape.isRequired, headerType: l.a.string, headerProps: l.a.shape({ title: l.a.string }).isRequired, email: l.a.string, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, kioskMode: l.a.bool.isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, isResi: l.a.bool.isRequired, installationProblems: l.a.array.isRequired, }); var de = Object(m.connect)( (e, t) => { const { header: i, authentication: n, error: r } = e; return { headerType: i.headerType, headerProps: i.headerProps, email: n.email, selectedLoginType: n.selectedLoginType, errors: r.items, kioskMode: t.location.query.mode === y.c.KIOSK, isResi: Object(se.isResiGatewaySelector)(e), installationProblems: Object(_e.b)(e), }; }, (e) => ({ showModal: (t, i, n) => { e(Object(w.showModal)(t, i, n)); }, }) )(Object(u.injectIntl)(ce)), ue = i(50); i(647); function me(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class pe extends c.Component { _renderDefaultView() { const { title: e, message: t } = this.props; return c.createElement( "div", { "data-testid": "7c9c24f1-3171-4b44-b739-d40696a3e6ae", className: "container text-break" }, null != e ? c.createElement("p", { "data-testid": "0de58fa5-e1b6-4084-9d80-148ad4bf6324", className: "text-extra-large mt-1" }, e) : null, c.createElement("p", { "data-testid": "462f9c99-d750-4a98-8142-c755e0f7e39a", className: "text-medium " + (null != e ? "no-margin" : "mt-1") }, t) ); } render() { return c.createElement( "div", { "data-testid": "23935f4a-3964-46da-a559-9b3828970a14", className: Object(ue.classNames)("absolute flex py-5 banner-container", this.props.containerClasses) }, this.props.contentView || this._renderDefaultView(), c.createElement("div", { "data-testid": "1a33ddfd-a96a-48fb-8c63-379befbc0285", className: "text-larger absolute px-2 banner-close", onClick: this.props.onClose }, "×") ); } } me(pe, "zIndex", 10), me(pe, "propTypes", { contentView: l.a.element, title: l.a.string, message: l.a.string, containerClasses: l.a.string, onClose: l.a.func.isRequired }), me(pe, "defaultProps", { containerClasses: "" }); var ge = i(15); class we extends c.Component { constructor(e) { super(e), (this.state = { closing: !1 }); } _getCloseHandler(e, t) { const { destroyBanner: i } = this.props; return async () => { this.state.closing || this.setState({ closing: !0 }, async () => { await Object(ge.d)(200), i(e), t && t(), this.setState({ closing: !1 }); }); }; } render() { if (this.props.banners.length < 1) return null; const e = this.props.banners[0], { name: t, closeCallback: i, containerClasses: n, contentView: r, title: a, message: o } = e; return c.createElement( "div", { "data-testid": "fbf0f7cc-6e47-4e1d-be38-17f916d8076f", className: "banners-container" }, c.createElement(pe, { key: t, contentView: r, title: a, message: o, containerClasses: Object(ue.classNames)({ "slide-out-top": this.state.closing, "slide-in-top": !this.state.closing }, n || ""), onClose: this._getCloseHandler(t, i), }) ); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(we, "propTypes", { banners: l.a.arrayOf(l.a.object).isRequired, destroyBanner: l.a.func.isRequired }); var ve = Object(m.connect)( (e) => ({ banners: e.banner.items }), (e) => ({ destroyBanner(t) { e(W(t)); }, }) )(Object(u.injectIntl)(we)), fe = i(58); i(426); function he() { return (he = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function Ee(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function be(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? Ee(Object(i), !0).forEach(function (t) { ye(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : Ee(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function ye(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const Se = { route: l.a.string, text: l.a.string, onClick: l.a.func, buttonClass: l.a.string, additionalProps: l.a.object }; class Re extends c.Component { constructor(e) { super(e), (this.ui = {}), (this._handleClick = this._handleClick.bind(this)); } render() { const { footerClass: e, back: t, cancel: i, forward: n } = this.props; return c.createElement( "div", { "data-testid": "134d20db-2e72-4492-a144-db29e5937d75", className: this._getClassName(e) }, c.createElement( "div", { "data-testid": "3131d07c-cbb5-4233-991c-b56fc24f1501", className: "container" }, c.createElement( "div", { "data-testid": "503c0c08-0e04-467f-9778-28a8bff38b6c", className: "row" }, c.createElement("div", { "data-testid": "e5e7071f-68a3-4e72-9b80-95825520f022", className: "col-xs-4 back-section" }, this._getLink(fe.a.BACK, t)), c.createElement("div", { "data-testid": "4e41cfcb-2350-45a5-9b4a-08479fa9e71b", className: "col-xs-4 no-padding cancel-section" }, this._getLink(fe.a.CANCEL, i)), c.createElement("div", { "data-testid": "beaf52e5-59fa-4eed-b3e7-2fefced724d5", className: "col-xs-4 forward-section" }, this._getLink(fe.a.FORWARD, n)) ) ) ); } componentDidMount() { (this.ui.tooltip = f()('[data-toggle="tooltip"]')), this.ui.tooltip && this.ui.tooltip.length && this.ui.tooltip.tooltip(); } _getClassName(e) { return ["footer", e].join(" "); } _getLink(e, t) { const { route: i, text: n, onClick: r, buttonClass: a, additionalProps: o } = t; if (i || r) { let t = be({ to: i, type: e, onClick: this._handleClick, className: this._getLinkClassName(e, a) }, o), r = n.indexOf("< ") > -1 ? c.createElement( "svg", { width: "8px", height: "10px", viewBox: "0 0 8 10" }, c.createElement( "g", { id: "left-chevron", fill: "none", fillRule: "evenodd", strokeWidth: "2", stroke: "inherit", transform: "translate(-18.000000, -1120.000000) translate(20.000000, 1116.000000)" }, c.createElement("polyline", { transform: "translate(2.531860, 8.995758) rotate(-180.000000) translate(-2.531860, -8.995758) ", points: "-7.10542736e-15 12.9915161 5.0637207 8.95031738 0.0109863281 5", }) ) ) : null, s = n.indexOf(" >") > -1 ? c.createElement( "svg", { width: "8px", height: "10px", viewBox: "0 0 8 10" }, c.createElement( "g", { id: "right-chevron", fill: "none", fillRule: "evenodd", strokeWidth: "2", stroke: "inherit", transform: "translate(-332.000000, -1121.000000)" }, c.createElement("polyline", { points: "333 1129.99152 338.063721 1125.95032 333.010986 1122" }) ) ) : null; return "/" === i ? c.createElement(p.IndexLink, t, r, this._getText(n), s) : c.createElement(p.Link, he({ "data-testid": "eaaace92-28e7-4758-b87e-4335215a72dd" }, t), r, this._getText(n), s); } if (n) { let e = be({ className: a || "btn-text" }, o); return c.createElement("a", he({ "data-testid": "d0e40650-58fc-449a-a81f-5de2daee5799" }, e), n); } return null; } _getLinkClassName(e, t) { let i = e.toLowerCase() + "-link"; return t && (i += " " + t), i; } _getText(e) { return e.indexOf("< ") > -1 ? e.replace("< ", "") : e.indexOf(" >") > -1 ? e.replace(" >", "") : e; } _handleClick(e) { let t = e.target, i = t.getAttribute("type"); t.getAttribute("href") || e.preventDefault(), i && this.props[i.toLowerCase()].onClick && this.props[i.toLowerCase()].onClick(e); } } ye(Re, "propTypes", { footerClass: l.a.string.isRequired, back: l.a.shape(Se).isRequired, cancel: l.a.shape(Se).isRequired, forward: l.a.shape(Se).isRequired }), ye(Re, "defaultProps", { back: {}, cancel: {}, forward: {} }); class Te extends c.Component { render() { const { navigationType: e, back: t, cancel: i, forward: n } = this.props; return t.route || n.route || i.route || i.onClick || t.onClick || n.onClick ? c.createElement(Re, { footerClass: e, back: t, cancel: i, forward: n }) : null; } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(Te, "propTypes", { navigationType: l.a.string, back: l.a.object.isRequired, cancel: l.a.object.isRequired, forward: l.a.object.isRequired }); var Ae = Object(m.connect)((e, t) => { const { navigation: i } = e; return { navigationType: i.navigationType, back: i.back, cancel: i.cancel, forward: i.forward }; })(Te), Ce = i(555), Ie = i(136), Oe = i(108); i(648); class Ne extends c.Component { constructor(e) { super(e), (this.state = { offset: 0, startTimestamp: 0, closing: !1 }), (this._handleStart = this._handleStart.bind(this)), (this._handleStop = this._handleStop.bind(this)), (this._handleDrag = this._handleDrag.bind(this)); } _renderHeader() { const { type: e, header: t } = this.props, i = c.createElement("button", { "data-testid": "3eb9001c-000f-4631-afce-231723abd0e5", type: "button", ref: (e) => (this.closeButton = e), className: "close toast-close px-2 py-1" }, "×"); switch (e) { case Ie.WARNING_TOAST: return c.createElement( "div", { "data-testid": "cdf90d0c-deff-4515-81ef-cf8fe1428eef", className: "toast-header toast-warning-header py-1 pl-2" }, c.createElement("strong", { className: "toast-title" }, t || c.createElement(u.FormattedMessage, { id: "toast_view_warning_title", defaultMessage: "Warning" })), i ); case Ie.STANDARD_TOAST: default: return c.createElement( "div", { "data-testid": "186dadde-46f4-4889-89d0-bcf85f3dd46d", className: "toast-header toast-standard-header py-1 pl-2" }, c.createElement("strong", { className: "toast-title" }, t || c.createElement(u.FormattedMessage, { id: "toast_view_standard_title", defaultMessage: "Note" })), i ); } } render() { const e = { transform: `translateX(${this.state.offset}px)` }, t = this.props.link ? c.createElement( "p", { "data-testid": "798ac791-9579-4610-8cdc-2e0f2cf5dd88", className: "toast-link px-2 py-3 hand" }, c.createElement("span", { "data-testid": "d5262048-88c3-429b-96c9-95e139ca7901" }, this.props.message), c.createElement("img", { "data-testid": "a4d2c88e-2f52-4751-9d87-130be5876ec4", className: "caret-right toast-link-indicator ml-1", src: i(153) }) ) : c.createElement("span", { "data-testid": "c78e8e56-e68d-449c-ab72-ef733abb74de", className: "px-2 py-3" }, this.props.message); return c.createElement( Ce.DraggableCore, { axis: "x", handle: ".handle", onStart: this._handleStart, onStop: this._handleStop, onDrag: this._handleDrag, grid: [5] }, c.createElement( "div", { "data-testid": "d1b2275c-f235-4032-9954-32d780124b2f", className: "toast handle " + (this.state.closing ? "fade-out" : "fade-in"), role: "alert", style: e }, this._renderHeader(), c.createElement("div", { "data-testid": "024c5b58-a596-424a-bec3-131ba89f54e6", className: "toast-body" }, t) ) ); } _navigateToLink() { this.props.link && p.browserHistory.push(this.props.link); } _handleStart(e, t) { this.setState({ startTimestamp: Date.now() }); } _handleStop(e, t) { e.preventDefault(); const i = Math.abs(this.state.offset); i > 125 || e.target.isSameNode(this.closeButton) ? this.setState({ closing: !0 }, async () => { await Object(ge.d)(300), this.props.onClose(); }) : i < 5 && Date.now() - this.state.startTimestamp < Oe.b ? this._navigateToLink() : this.setState({ offset: 0, startTimestamp: 0 }); } _handleDrag(e, t) { t && this.setState((e) => ({ offset: e.offset + t.deltaX })); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(Ne, "propTypes", { intl: u.intlShape.isRequired, type: l.a.string.isRequired, link: l.a.string, header: l.a.string, message: l.a.string.isRequired, onClose: l.a.func.isRequired }); i(649); function ke() { return (ke = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } class Pe extends c.Component { _createCloseHandler(e) { return () => { this.props.clearToast(e); }; } render() { return c.createElement( "div", { "data-testid": "3af20fbe-4447-43a9-84fe-8ad6c315ac8d", className: "toast-list" }, this.props.items.map(({ name: e, toastProps: t }) => c.createElement(Ne, ke({}, t, { intl: this.props.intl, key: e, onClose: this._createCloseHandler(e) }))) ); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(Pe, "propTypes", { intl: u.intlShape.isRequired, items: l.a.arrayOf(l.a.shape({ name: l.a.string.isRequired, toastProps: l.a.shape({ type: l.a.string.isRequired, link: l.a.string, header: l.a.string, message: l.a.string.isRequired }).isRequired })).isRequired, clearToast: l.a.func.isRequired, }); class De extends c.Component { render() { return c.createElement(Pe, { intl: this.props.intl, items: this.props.items, clearToast: this.props.clearToast }); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(De, "propTypes", { intl: u.intlShape.isRequired, clearToast: l.a.func.isRequired, items: l.a.arrayOf(l.a.shape({ name: l.a.string.isRequired, toastProps: l.a.shape({ type: l.a.string.isRequired, link: l.a.string, header: l.a.string, message: l.a.string.isRequired }).isRequired })).isRequired, }); var Le = Object(m.connect)( (e, t) => ({ items: e.toast.items }), (e) => ({ clearToast: (t) => { e(Object(q.a)(t)); }, }) )(Object(u.injectIntl)(De)); i(650), i(651); class Me extends c.Component { componentDidUpdate(e) { if (this.props.location !== e.location) { const e = X.a.findDOMNode(this); e instanceof Element && (e.scrollTop = 0); } } render() { const { location: e, contentClass: t } = this.props; return c.createElement( "div", { "data-testid": "cf45a2bf-efcd-40b6-9d74-0ea00f0ddab8", className: "app" }, c.createElement(de, { location: e }), c.createElement(ve, null), c.createElement( "div", { "data-testid": "affb039c-7bd1-4af7-ab29-894c542cfe7e", className: t }, c.createElement("div", { "data-testid": "1fefe302-3d07-4899-8ea3-db115acb38f5", className: "container" }, c.createElement(ee.a, { logError: h.default.logFatal }, this.props.children)) ), c.createElement(Le, null), c.createElement(Ae, null), c.createElement(M, null) ); } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(Me, "propTypes", { children: l.a.element.isRequired, location: l.a.object.isRequired, contentClass: l.a.string.isRequired }); var ze = i(190), Ue = i(129), Ve = i(21), Ge = i(45), je = i(46), We = i(521), Fe = i(201), qe = i(56); function xe(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function Be(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? xe(Object(i), !0).forEach(function (t) { He(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : xe(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function He(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const Ke = Object(u.defineMessages)({ firmwareUpdateTitle: { id: "app_container_firmware_update_banner_title", defaultMessage: "Firmware Update In Progress" }, firmwareUpdateMessage: { id: "app_container_firmware_update_banner_message", defaultMessage: "Leave installation and wiring undisturbed and remain on this page until update is complete." }, engineeringModeTitle: { id: "app_container_engineering_mode_title", defaultMessage: "Tesla Service Mode" }, engineeringModeMessage: { id: "app_container_engineering_mode_banner_message", defaultMessage: "Tesla Service Mode requires no authentication. Please 'Stop System' if you are making operational changes. Before closing the browser, leave the System in an acceptable state. Please close the browser when completed since this mode requires no authentication.", }, sitemasterRunningTitle: { id: "app_container_sitemaster_running_banner_title", defaultMessage: "System Running" }, sitemasterMessage: { id: "app_container_sitemaster_message_title", defaultMessage: "The system is currently running. In order to view the status of the battery blocks, the system must be shut down. You can stop the system from the home page.", }, sitemasterPowerSupplyModeTitle: { id: "app_container_sitemaster_power_supply_mode_banner_title", defaultMessage: "Grid Forming Mode" }, sitemasterPowerSupplyModeMessage: { id: "app_container_sitemaster_power_supply_mode_banner_message", defaultMessage: "Battery producing AC voltage to power devices for pairing and configuration. Button to stop system on landing page.", }, }); class Ye extends c.Component { constructor(e) { super(e), He(this, "_handleLogin", this._handleLogin.bind(this)), He(this, "_startToggleAuth", this._startToggleAuth.bind(this)), (this.state = { canShowEngineeringMode: !0 }); } componentWillMount() { this.props.initializeConfig(), this.props.fetchSupportsToggleAuth(), this.props.isResi && (this.fetchSupportsToggleAuthInterval = window.setInterval(this.props.fetchSupportsToggleAuth, 1e4)); } componentDidMount() { this._checkAuthentication(), this._checkFirmwareUpdate(), this.props.fetchSitemasterSettings(), this.props.fetchInstallationProblems(), this.props.requestSitemasterStatusThunk(), (this.requestSitemasterStatusThunk = setInterval(this.props.requestSitemasterStatusThunk, 1e4)), (this.fetchInstallationProblemsInterval = setInterval(this.props.fetchInstallationProblems, 5e3)), this._checkSitemasterStatus(); } componentDidUpdate(e, t) { e.hash && e.hash !== this.props.hash && window.location.reload(); const { isResi: i, bootstrapped: n } = this.props; i && e && e.isResi && n && clearInterval(this.requestSitemasterStatusThunk), this._checkSitemasterStatus(e), this._checkAuthentication(e), this._checkFirmwareUpdate(e), this._showEngineeringBanner(), this.props.currentlyDisplayedModalType === y.b && Object(Ve.isAuthenticated)(this.props.authentication, this.props.error.items) && (this.props.clearErrors(), this.props.destroyModal(y.b)); } componentWillUnmount() { const { isResi: e } = this.props; e || clearInterval(this.requestSitemasterStatusThunk), window.clearInterval(this.fetchSupportsToggleAuthInterval), window.clearInterval(this.fetchInstallationProblemsInterval); } render() { return this.props.persisted && this.props.bootstrapped ? Object(Ve.isAuthenticated)(this.props.authentication, this.props.error.items) || y.i.includes(this.props.location.pathname) ? c.createElement(Me, { location: this.props.location, contentClass: this._getClassName(this.props.location.pathname) }, this.props.children) : a()(this.props, (e) => e.children.props.route.path) && "*" === this.props.children.props.route.path ? c.createElement( "div", { "data-testid": "9de6fd35-133d-4513-9f1a-364c2b331ece", className: "app" }, c.createElement("div", { "data-testid": "66e6becb-36d0-4f96-ba5a-e61318e964d9", className: "container" }, this.props.children) ) : c.createElement(M, null) : null; } componentWillReceiveProps(e) { const { resetNavigation: t, resetHeader: i, clearErrors: n, hideModal: r, location: a, authentication: o, clearToasts: s } = e; if ( (this.props.location.pathname !== a.pathname && this.props.fetchSitemasterSettings(), this.props.authentication.lastLoginAt !== o.lastLoginAt && null !== o.lastLoginAt && p.browserHistory.push(a), this.props.location.pathname !== a.pathname) ) { if (this.props.location.pathname.indexOf("network") > -1 && a.pathname.indexOf("network") > -1) return void n(); n(), t(), i(), s(), r(); } } _checkAuthentication(e, t) { const { showModal: i, authentication: n, location: r, intl: a, changeUsername: o, error: s, persisted: _, bootstrapped: l, getLoginHeaderView: d, handleChangeLoginModal: u, isResi: m, cancelPendingToggleAuth: g, deviceType: w, tegType: v, } = this.props, { selectedLoginType: f } = n; _ && l && (!Object(Ve.isCustomer)(n, s.items) || y.g.includes(r.pathname) ? Object(Ve.isAuthenticated)(n, s.items) || y.i.includes(r.pathname) || (y.h.includes(r.pathname) && e && e.authentication.lastLoginAt !== n.lastLoginAt && null === n.lastLoginAt) || ("pvinverter" !== v ? (Object(Ve.hasExpiredSession)(s.items) && (Object(Ge.a)("AuthCookie"), this.props.resetAuthentication()), i( y.b, { modalClass: "modal-login", centered: !0, showCancel: !1, fadeIn: !1, bannerView: w !== qe.DEVICE_TYPE.GW1 && c.createElement(Fe.UpgradeBannerView, null), headerView: d(f), onUnmount: this.props.cancelPendingToggleAuth, contentView: c.createElement(ze.a, { intl: a, username: n.username, selectedLoginType: n.selectedLoginType, toggleAuthSupported: n.toggleAuthSupported, changeUsername: o, changeLogin: u, handleSubmit: this._handleLogin, loginType: n.loginType, isFetching: n.isFetching, startToggleAuth: this._startToggleAuth, cancelPendingToggleAuth: g, waitForToggle: n.waitForToggle, showSubmit: !0, useShowPasswordIcon: !0, isResi: m, }), }, { backdrop: "static", keyboard: !1 } )) : p.browserHistory.push("/upgrade")) : this._replaceRoute("/")); } async _startToggleAuth() { try { await this.props.startToggleAuth(), this.props.handleCheckForToggle(); } catch (e) {} } _checkFirmwareUpdate(e) { const { persisted: t, bootstrapped: i, destroyBanner: n, location: r, system: o, authentication: s, error: _, isResi: l } = this.props; t && i && Object(Ve.isInstaller)(s, _.items) && (!a()(e, (e) => e.persisted) && t && o.isFirmwareUpdating ? this._showFirmwareUpdateBanner() : e && (!e.system.isFirmwareUpdating && o.isFirmwareUpdating ? this._showFirmwareUpdateBanner() : e.system.isFirmwareUpdating && !o.isFirmwareUpdating && n("FIRMWARE_UPDATE_BANNER")), !o.isFirmwareUpdating || -1 !== r.pathname.indexOf("batteries") || (y.i.includes(r.pathname) && l) || this._replaceRoute("/batteries")); } _checkSitemasterStatus(e) { const { destroyBanner: t, sitemasterStatus: i, isResi: n, powerSupplyMode: r } = this.props, a = s()(window.location.pathname, "/batteries"); n || (i && a ? this._showSitemasterRunningBanner() : e && e.sitemasterStatus && !i && t("SITEMASTER_RUNNING_BANNER")), r && e && !e.powerSupplyMode ? this._showSitemasterRunningInPowerSupplyModeBanner() : !r && e && e.powerSupplyMode && t("SITEMASTER_POWER_SUPPLY_MODE_BANNER"); } _replaceRoute(e) { p.browserHistory.replace(e); } _getClassName(e) { let t = "core-layout__viewport"; return e.indexOf("wizard") > -1 ? (t += " wizard-container no-padding") : e.indexOf("success") > -1 && (t += " success-container no-padding"), t; } _showFirmwareUpdateBanner() { this.props.showBanner({ name: "FIRMWARE_UPDATE_BANNER", priority: 0, title: this.props.intl.formatMessage(Ke.firmwareUpdateTitle), message: this.props.intl.formatMessage(Ke.firmwareUpdateMessage) }); } _showEngineeringBanner() { Object(Ve.isEngineer)(this.props.authentication) && this.state.canShowEngineeringMode && (this.props.showBanner({ name: "ENGINEERING_MODE_BANNER", priority: 0, title: this.props.intl.formatMessage(Ke.engineeringModeTitle), message: this.props.intl.formatMessage(Ke.engineeringModeMessage) }), this.setState({ canShowEngineeringMode: !1 })); } _showSitemasterRunningInPowerSupplyModeBanner() { this.props.showBanner({ name: "SITEMASTER_POWER_SUPPLY_MODE_BANNER", priority: 0, title: this.props.intl.formatMessage(Ke.sitemasterPowerSupplyModeTitle), message: this.props.intl.formatMessage(Ke.sitemasterPowerSupplyModeMessage), }); } _showSitemasterRunningBanner() { this.props.showBanner({ name: "SITEMASTER_RUNNING_BANNER", priority: 0, title: this.props.intl.formatMessage(Ke.sitemasterRunningTitle), message: this.props.intl.formatMessage(Ke.sitemasterMessage) }); } async _handleLogin(e, t, i) { try { await this.props.login(e, t, i, this.props.isResi), this.props.clearErrors(), this.props.destroyModal(y.b); } catch (e) {} } } He( Ye, "propTypes", Be( Be({}, Ue.a), {}, { getLoginHeaderView: l.a.func.isRequired, handleChangeLoginModal: l.a.func.isRequired, authentication: l.a.shape({ lastLoginAt: l.a.number, loginType: l.a.oneOf(Object.values(y.c)).isRequired, username: l.a.string.isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, toggleAuthSupported: l.a.bool.isRequired, waitForToggle: l.a.bool, }).isRequired, system: l.a.shape({ isFirmwareUpdating: l.a.bool.isRequired }).isRequired, location: l.a.shape({ pathname: l.a.string.isRequired }).isRequired, persisted: l.a.bool.isRequired, bootstrapped: l.a.bool.isRequired, resetNavigation: l.a.func.isRequired, resetHeader: l.a.func.isRequired, clearErrors: l.a.func.isRequired, clearToasts: l.a.func.isRequired, showModal: l.a.func.isRequired, hideModal: l.a.func.isRequired, updateModal: l.a.func.isRequired, destroyModal: l.a.func.isRequired, showBanner: l.a.func.isRequired, destroyBanner: l.a.func.isRequired, destroyBanners: l.a.func.isRequired, changeUsername: l.a.func.isRequired, login: l.a.func.isRequired, toggleAuthLogin: l.a.func.isRequired, fetchSupportsToggleAuth: l.a.func.isRequired, fetchInstallationProblems: l.a.func.isRequired, resetAuthentication: l.a.func.isRequired, error: l.a.shape({ items: l.a.array.isRequired }).isRequired, children: l.a.shape({ props: l.a.shape({ route: l.a.shape({ path: l.a.string }).isRequired }).isRequired }).isRequired, initializeConfig: l.a.func.isRequired, isResi: l.a.bool.isRequired, powerSupplyMode: l.a.bool, deviceType: l.a.oneOf(Object.values(qe.DEVICE_TYPE)), tegType: l.a.string, } ) ); var Qe = Object(m.connect)( (e, t) => { const { authentication: i, configuration: n, system: r, error: a, meterValidation: o, sitemaster: s } = e, { location: _ } = t, { deviceType: l, tegType: c } = n; return { location: _, authentication: i, system: r, hash: n.hash, persisted: n.persisted, bootstrapped: n.bootstrapped, isResi: Object(je.isResiGateway)(l), sitemasterStatus: o.running, powerSupplyMode: s.powerSupplyMode, error: a, errors: a.items, currentlyDisplayedModalType: e.modal && e.modal.modalType, deviceType: l, tegType: c, }; }, (e) => Be( Be( { initializeConfig: () => { e(Object(x.initializeConfig)()); }, resetNavigation: () => { e(Object(z.resetNavigation)()); }, resetHeader: () => { e(Object(U.resetHeader)()); }, clearErrors: () => { e(Object(V.clearErrors)()); }, clearToasts: () => { e(Object(q.b)()); }, changeUsername: (t) => { e(Object(B.e)(t)); }, changeSelectedLoginType: (t) => { e(Object(B.d)(t)); }, login: (t, i, n, r) => e(Object(B.h)(t, i, n, r)), startToggleAuth: () => e(Object(B.l)()), cancelPendingToggleAuth: () => { e(Object(B.a)()); }, toggleAuthLogin: (t, i) => e(Object(B.m)(t, i)), fetchSupportsToggleAuth: () => e(Object(B.f)()), resetAuthentication: () => e(Object(B.j)()), fetchSitemasterSettings: () => e(Object(H.a)()), fetchInstallationProblems: () => e(Z()), requestSitemasterStatusThunk: () => Object(We.requestSitemasterStatusThunk)()(e), }, Object(g.b)(w, e) ), Object(g.b)(n, e) ) )(Object(u.injectIntl)(Object(Ue.b)(Ye))), Ze = i(88), Je = i(27), Xe = i.n(Je), $e = i(77), et = i(8); i(740); function tt() { return (tt = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function it(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function nt(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? it(Object(i), !0).forEach(function (t) { rt(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : it(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function rt(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class at extends c.Component { render() { const { type: e, iconSize: t, borderWidth: i, iconLabelView: n, innerIconView: r, active: a } = this.props; let o = { width: t + "px", height: t + "px" }, s = "icon-container", _ = nt({ borderRadius: t / 2 + "px", borderWidth: i + "px" }, this._getIconContainerStyle()); return ( a || (s += " default-icon-container"), c.createElement( "div", { "data-testid": "1e9f3f58-18a4-4933-a2e6-e26582c1109b", className: "energy-icon" }, this._getIconLabel(e, n), c.createElement( "div", { "data-testid": "5fd94db1-03cb-418d-8ef0-91e16704bac8", className: s, style: _ }, c.createElement("div", { "data-testid": "f87a63ec-a496-4056-aaaa-c4c37486423f", className: "centered", style: o }, this._getIconImage(e, a), r) ) ) ); } _getIconImage(e, t) { if (!this.props.showIconImage) return null; let n = { src: null, style: this.props.iconStyle }; switch (e) { case et.h.SOLAR: n.src = i(t ? 741 : 742); break; case et.h.GRID: n.src = i(t ? 743 : 744); break; case et.h.USAGE: n.src = i(t ? 745 : 746); } return null == n.src ? null : c.createElement("img", tt({ "data-testid": "e21bc9b3-167e-4c14-b7ac-c833260bcc6b" }, n)); } _getIconLabel(e, t) { let i = null; return this.props.showIconLabel && (i = t || c.createElement("p", { "data-testid": "0ba3f4bb-f54f-45a3-8419-41d74f7f53cd", className: "icon-text" }, e)), i; } _getIconContainerStyle() { let e = this.props.iconContainerStyle || {}; return this.props.active || (e = nt(nt({}, e), {}, { borderColor: this.props.inactiveColor })), e; } } rt(at, "propTypes", { type: l.a.oneOf(Object.values(et.h)).isRequired, iconSize: l.a.number.isRequired, borderWidth: l.a.number.isRequired, innerIconView: l.a.element, iconLabelView: l.a.element, active: l.a.bool.isRequired, inactiveColor: l.a.string.isRequired, showIconImage: l.a.bool.isRequired, showIconLabel: l.a.bool.isRequired, iconStyle: l.a.object, iconContainerStyle: l.a.object, }), rt(at, "defaultProps", { iconSize: 50, borderWidth: 1, innerIconView: null, iconLabelView: null, active: !1, inactiveColor: "gray", showIconImage: !0, showIconLabel: !1 }); i(747); class ot extends c.Component { render() { return this.props.active && this.props.gridServicesActive ? c.createElement( "div", { "data-testid": "918f2708-5178-458c-b545-f7e5048b9c40", className: "grid-services" }, c.createElement("span", { "data-testid": "a3a492e5-2c43-48bd-bd7e-0e3d6efa4c56", className: "circle" }), c.createElement( "span", { "data-testid": "2b90b745-997b-4c72-b0bb-66a025cee7b1", className: "grid-services-text" }, c.createElement(u.FormattedMessage, { id: "grid_services_view_grid_services", defaultMessage: "Grid Services" }) ) ) : null; } } !(function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(ot, "propTypes", { active: l.a.bool.isRequired, gridServicesActive: l.a.bool }); var st = i(151), _t = i(59), lt = i(12), ct = i(13), dt = i(269), ut = i.n(dt), mt = i(263), pt = i.n(mt); i(795); function gt() { return (gt = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function wt(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function vt(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? wt(Object(i), !0).forEach(function (t) { ft(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : wt(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function ft(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const ht = [et.h.SOLAR, et.h.BATTERY, et.h.GRID, et.h.USAGE], Et = Object(u.defineMessages)({ gridButtonSpinnerAltLabel: { id: "power_flow_view_grid_spinner_alt_label", defaultMessage: "System Transitioning" } }); class bt extends c.Component { static getActiveIcons(e) { const { activeTypes: t, loadPower: i, gridPower: n, solarPower: r, batteryPower: a, gridStatus: o, units: s, precision: _, showNegative: l, correctNegative: c, correctLoadPower: d } = e; if (0 === t.length) return []; const u = bt.getDisplayPowers(i, r, a, n, o, s, _, l, c, d), m = t.filter((e) => { switch (e) { case et.h.SOLAR: return u[et.h.SOLAR] > 0 && u.adjusted > 0; case et.h.BATTERY: return 0 !== u[et.h.BATTERY]; case et.h.GRID: return o !== ct.e.ISLANDED && 0 !== u[et.h.GRID]; default: return !1; } }); return t.includes(et.h.USAGE) && null != i && ((d && 0 !== Number(Object(_t.a)(u[et.h.USAGE], _)) && u[et.h.USAGE] > 0) || (!d && u[et.h.USAGE] > 0)) && m.push(et.h.USAGE), 1 === m.length ? [] : m; } static getDisplayPowers(e, t, i, n, r, a, o, s, _, l) { const c = { USAGE: 0, SOLAR: 0, BATTERY: 0, GRID: 0, adjusted: 0 }; return ( null != t && (c.adjusted = t), null != e && e < 0 && _ && (c.adjusted += Math.abs(e)), (c[et.h.SOLAR] = bt.getDisplayValue(c.adjusted, a, o, _, s)), (c[et.h.BATTERY] = bt.getDisplayValue(i, a, o, !1, s)), r !== ct.e.ISLANDED && (c[et.h.GRID] = bt.getDisplayValue(n, a, o, !1, s)), l ? ((c[et.h.USAGE] += c[et.h.SOLAR] * (c.adjusted < 0 && !s ? -1 : 1)), (c[et.h.USAGE] += c[et.h.BATTERY] * (null != i && i < 0 && !s ? -1 : 1)), r !== ct.e.ISLANDED && (c[et.h.USAGE] += c[et.h.GRID] * (null != n && n < 0 && !s ? -1 : 1)), (c[et.h.USAGE] = c[et.h.USAGE] < 0 && !s ? 0 : Number(Object(_t.a)(c[et.h.USAGE], o)))) : (c[et.h.USAGE] = bt.getDisplayValue(e, a, o, _, s)), c ); } static getDisplayValue(e, t, i, n = !1, r = !1) { if (null == e || (n && e < 0)) return 0; const a = Math.abs(e); return a > lt.METER_POWER_NOISE ? Number(Object(st.c)(r ? e : a, t, i).split(" ")[0]) : 0; } constructor(e) { super(e), ft(this, "_handleSitemanagerStartStopClick", this._handleSitemanagerStartStopClick.bind(this)), ft(this, "_handleIslandingClick", this._handleIslandingClick.bind(this)), (this.state = { activeIcons: [], colors: { batteryToHome: et.c, batteryToGrid: et.c, gridToHome: et.d, gridToBattery: et.d, solarToBattery: et.f, solarToGrid: et.f, solarToHome: et.f } }); } componentWillMount() { this.setState({ activeIcons: bt.getActiveIcons(this.props) }); } componentWillReceiveProps(e) { this.setState({ activeIcons: bt.getActiveIcons(e) }); } render() { const { gridWidth: e, gridHeight: t, activeTypes: i, activeGlowRadius: n, indicatorRadius: r, indicatorGlowRadius: a, indicatorAnimationTimer: o, energyIconDiameter: s, energyIconBorderWidth: _, showPowerwall: l, showCompletePowerwall: d, sitemasterRunning: u, authenticated: m, lineSpacing: p, lineRadius: g, lineWidth: w, labelMargin: v, labelHeight: f, labelWidth: h, customLabels: E, iconStyle: b, iconContainerStyle: y, showLabels: S, handleInactiveLabelClick: R, handleNegativeLabelClick: T, showNegative: A, correctNegative: C, correctLoadPower: I, showZero: O, showIcons: N, inactiveColor: k, customIcons: P, availableTypes: D, units: L, precision: M, containerStyle: z, style: U, isResi: V, compact: G, criticalInstallationProblems: j, } = this.props, { batteryPower: W, solarPower: F, loadPower: q, gridPower: x, gridStatus: B, gridServicesActive: H, soe: K } = this.props, { activeIcons: Y, colors: Q } = this.state, Z = 0 === i.length, J = e / 2, X = t / 2, $ = D.includes(et.h.SOLAR), ee = D.includes(et.h.USAGE), te = D.includes(et.h.GRID), ie = bt.getDisplayPowers(q, F, W, x, B, L, M, A, C, I), ne = Y.includes(et.h.BATTERY), re = Y.includes(et.h.USAGE), ae = Y.includes(et.h.SOLAR), oe = Y.includes(et.h.GRID), se = te && ne && W > 0 && x < 0 && 1e3 * (ie[et.h.BATTERY] - ie[et.h.USAGE]) >= bt.DISCHARGE_THRESHOLD ? c.createElement("use", { id: "battery-to-grid", xlinkHref: "#curvedArrow", stroke: "url(#greenGrayGradient)", fill: Q.batteryToGrid, transform: `translate(${-1 * p + e} ${X / 2 + p}) scale(-1 1)` }) : null, _e = ee && ne && re && W > 0 ? c.createElement("use", { id: "battery-to-home", xlinkHref: "#curvedArrow", stroke: "url(#greenBlueGradient)", fill: Q.batteryToHome, x: p, y: X / 2 + p }) : null, le = te && oe && ne && x > 0 && W < 0 && ie[et.h.GRID] > ie[et.h.USAGE] ? c.createElement("use", { id: "grid-to-battery", xlinkHref: "#curvedArrowMirror", stroke: "url(#grayGreenGradient)", fill: Q.gridToBattery, x: -1 * p, y: p }) : null, ce = $ && te && ae && oe && x < 0 ? c.createElement("use", { id: "solar-to-grid", xlinkHref: "#curvedArrow", stroke: "url(#yellowGrayGradient)", fill: Q.solarToGrid, transform: `rotate(180 ${J} ${X})`, x: 1 * p, y: X / 2 + p }) : null, de = $ && ee && ae && re && ie.adjusted > 0 && !((ie[et.h.SOLAR] === ie[et.h.BATTERY] * (A ? -1 : 1) && ie[et.h.USAGE] === ie[et.h.GRID]) || (ie[et.h.SOLAR] === ie[et.h.GRID] * (A ? -1 : 1) && ie[et.h.BATTERY] === ie[et.h.USAGE])) ? c.createElement("use", { id: "solar-to-home", xlinkHref: "#curvedArrow", stroke: "url(#blueYellowGradient)", fill: Q.solarToHome, transform: `translate(${p} ${0.75 * t + -1 * p}) scale(1 -1)` }) : null; let ue = null, me = null, pe = null; Z ? ((ue = c.createElement("use", { id: "grid-to-home-inactive", xlinkHref: "#horizontalArrow", stroke: "gray", strokeDasharray: "2,4" })), (me = c.createElement("use", { id: "solar-to-battery-inactive", xlinkHref: "#verticalArrow", stroke: "gray", strokeDasharray: "2,4" }))) : ((ue = te && ee && oe && re && x > 0 ? c.createElement("use", { id: "grid-to-home", xlinkHref: "#horizontalArrow", stroke: "url(#grayBlueGradient)", fill: Q.gridToHome }) : null), (me = $ && ae && ne && ie.adjusted > 0 && W < 0 ? c.createElement("use", { id: "solar-to-battery", xlinkHref: "#verticalArrow", stroke: "url(#yellowGreenGradient)", fill: Q.solarToBattery }) : null)); const ge = Z ? 0 : r, we = Z ? 0 : a, ve = c.createElement("div", { "data-testid": "7edf03b3-a222-4ebe-b757-5a4af34484bc", style: { width: s + 2 * _, height: s + 2 * _ } }), fe = N ? c.createElement(at, { type: et.h.SOLAR, active: ae, iconSize: s, borderWidth: _, showIconImage: P && null == P[et.h.SOLAR], innerIconView: null != P ? P[et.h.SOLAR] : null, inactiveColor: k, iconStyle: b, iconContainerStyle: vt(vt({}, y), {}, { borderColor: et.f }), }) : ve, he = N ? c.createElement(at, { type: et.h.GRID, active: oe, iconSize: s, borderWidth: _, showIconImage: P && null == P[et.h.GRID], innerIconView: null != P ? P[et.h.GRID] : null, inactiveColor: k, iconStyle: b, iconContainerStyle: vt(vt({}, y), {}, { borderColor: et.d }), }) : ve, Ee = N ? c.createElement(at, { type: et.h.USAGE, active: re, iconSize: s, borderWidth: _, showIconImage: P && null == P[et.h.USAGE], innerIconView: null != P ? P[et.h.USAGE] : null, inactiveColor: k, iconStyle: b, iconContainerStyle: vt(vt({}, y), {}, { borderColor: et.g }), }) : ve, be = { cx: 0, cy: 0, r: ge, strokeOpacity: 0 }, ye = { cx: 0, cy: 0, r: we, fillOpacity: 0.2, strokeOpacity: 0 }, Se = 0 === Y.length && ($ || (te && ee)) ? c.createElement("g", { stroke: et.e, strokeWidth: w, fill: "none" }, c.createElement("use", { xlinkHref: $ ? "#verticalPath" : "#halfVerticalPath" })) : null, Re = 0 === Y.length && te && ee ? c.createElement("g", { stroke: et.e, strokeWidth: w, fill: "none" }, c.createElement("use", { xlinkHref: "#horizontalPath" })) : null; let Te = { className: this._getPowerFlowGridClassName(d, u, m, H) }; null != z && (Te.style = z), N || Z || null == W || 0 === W || (pe = c.createElement("use", { xlinkHref: "#halfVerticalArrow", stroke: et.c, fill: et.c })); const Ae = l ? this._getPowerwall(d, s, _, b, K, u, Z, V) : c.createElement( "div", { "data-testid": "c52444f1-a739-4789-998a-87f84a3625ad", className: "center-align" }, c.createElement(at, { type: et.h.BATTERY, active: ne, iconSize: s, borderWidth: _, showIconImage: P && null == P[et.h.BATTERY], innerIconView: null != P ? P[et.h.BATTERY] : null, inactiveColor: k, iconStyle: b, iconContainerStyle: vt(vt({}, y), {}, { borderColor: et.c }), }) ); return c.createElement( "div", gt({ "data-testid": "a9f4d12a-b2bc-4fb1-98d1-ba2246341d1a" }, Te), c.createElement( "div", { "data-testid": "7b3807df-ad55-4238-87d9-afc5737194aa", className: "power-flow", style: U }, this._getActiveGlowIcons(Y, e, t, s, _, n, v, f, l, A), this._getPowerLabels(i, D, S, O, e, t, s, _, n, v, f, h, E, l, d, ie[et.h.USAGE], ie[et.h.GRID], ie[et.h.SOLAR], ie[et.h.BATTERY], A, L, R, T), c.createElement( "div", { "data-testid": "05dafaf8-fbb8-4519-8bc2-6578daea3b19", className: "inner-container", style: { marginTop: n + f + v } }, c.createElement("div", { "data-testid": "1202100e-7a76-4479-a383-6b49dfec3fe9", className: "center-align" }, fe), c.createElement( "div", { "data-testid": "060d9163-49c8-4cdf-a925-bf845b874ef2", className: "grid-row-container" }, he, c.createElement( "svg", { width: e, height: t, viewBox: `0 0 ${e} ${t}` }, c.createElement( "defs", null, et.k, et.l, et.i, et.j, et.a, et.p, et.o, c.createElement( "g", { id: "curvedArrow", strokeWidth: w }, c.createElement("path", { id: "curvedPath", d: `M ${J} ${0.75 * t}\n l 0 -${X - g}\n a ${g},${g} 0 0 1 ${g},-${g}\n L ${e} ${0.25 * t}`, fill: "none", }), c.createElement( "circle", gt({ "data-testid": "903be15b-24d0-4bc0-8231-33ba2a61fb5d" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#curvedPath" })) ), c.createElement( "circle", gt({ "data-testid": "3aa17112-9f15-48d0-8ba5-7c8371e54eab" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#curvedPath" })) ) ), c.createElement( "g", { id: "curvedArrowMirror", strokeWidth: w }, c.createElement("path", { id: "curvedPathMirror", d: `M 0 ${X}\n l ${J - g} 0\n a -${g},-${g} 0 0 1 ${g},${g}\n L ${J} ${t}`, fill: "none", }), c.createElement( "circle", gt({ "data-testid": "c488bfac-1dfc-49ae-b3c8-fa1933114c23" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#curvedPathMirror" })) ), c.createElement( "circle", gt({ "data-testid": "ba7fb58a-0b65-4f1c-ac4b-ba2e8fb7e571" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#curvedPathMirror" })) ) ), c.createElement( "g", { id: "horizontalArrow", strokeWidth: w }, c.createElement("path", { id: "horizontalPath", d: `M 0 ${X}\n L ${e} ${X}`, fill: "none" }), c.createElement( "circle", gt({ "data-testid": "9ebc49f0-40e3-43f4-9f52-a0e5adcfe894" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#horizontalPath" })) ), c.createElement( "circle", gt({ "data-testid": "3300d987-ec99-4ea1-ada6-bde6ec36dfa7" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#horizontalPath" })) ) ), c.createElement( "g", { id: "verticalArrow", strokeWidth: w }, c.createElement("path", { id: "verticalPath", d: `M ${J} 0\n l 0 ${t}`, fill: "none" }), c.createElement( "circle", gt({ "data-testid": "c4ec1b16-3575-4b16-b872-60500079629b" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#verticalPath" })) ), c.createElement( "circle", gt({ "data-testid": "c4a076c4-5485-4fc2-86b3-ad8ee26be9c6" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#verticalPath" })) ) ), c.createElement( "g", { id: "halfVerticalArrow", strokeWidth: w }, c.createElement("path", { id: "halfVerticalPath", d: `M ${J} ${X}\n l 0 ${t}`, fill: "none" }), c.createElement( "circle", gt({ "data-testid": "0ccc289b-a06d-4325-8b3e-6efb792b404b" }, ye), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#halfVerticalPath" })) ), c.createElement( "circle", gt({ "data-testid": "e337a015-54b6-4cd4-87dd-83c3c8c30314" }, be), c.createElement("animateMotion", { dur: o + "ms", repeatCount: "indefinite" }, c.createElement("mpath", { xlinkHref: "#halfVerticalPath" })) ) ) ), _e, se, ue, le, me, ce, de, Se, Re, pe ), Ee ), Ae, !G && c.createElement(ot, { intl: this.props.intl, active: u, gridServicesActive: H }), this._getSitemasterControl() ), this._getIslanded(B, e, t, w, s, _, n, v, f) ) ); } _getPowerFlowGridClassName(e, t, i, n) { let r = "power-flow-grid"; return e && (r += " complete"), this.props.compact && (r += " compact"), i && (r += " sitemaster"), t && ((r += " active"), n && !this.props.compact && (r += " services")), r; } _getActiveGlowIcons(e, t, i, n, r, a, o, s, _, l) { let d = [], u = n / 2, m = i / 2, p = o + s; return ( e .filter((e) => { switch (e) { case et.h.USAGE: return !1; case et.h.SOLAR: return !l || this.props.solarPower > 0; case et.h.BATTERY: return !l || this.props.batteryPower > 0; case et.h.GRID: return !l || this.props.gridPower > 0; default: return !1; } }) .forEach((e, o) => { let s = {}, l = { width: n + 2 * r, height: n + 2 * r, borderRadius: u + a, borderWidth: a }; switch (e) { case et.h.SOLAR: (s.top = p), (s.borderColor = et.f), (s.left = 0), (s.right = 0); break; case et.h.GRID: (s.top = u + m + r + p), (s.right = t + 2 * u + 2 * r), (s.borderColor = et.d), (s.left = 0); break; case et.h.BATTERY: (s.top = n + i + 2 * r + p), (s.borderColor = et.c), (s.left = 0), (s.right = 0); } (_ && ![et.h.SOLAR, et.h.GRID].includes(e)) || d.push(c.createElement("div", { "data-testid": "ff98e7cc-920d-4090-9053-b554d054b987", key: o, className: "glow-container", style: vt(vt({}, l), s) })); }), d ); } _getPowerLabels(e, t, n, r, a, o, s, _, l, d, u, m, p, g, w, v, f, h, E, b, y, S, R) { if (!n) return []; const T = d + u; return ht.map((n, u) => { let b = null, A = null, C = p && p[n] ? p[n] : null, I = { width: m }; switch (n) { case et.h.SOLAR: (b = this.props.solarPower && h), (I.top = 0), (I.left = 0), (I.right = 0), (I.color = et.f); break; case et.h.GRID: (b = this.props.gridPower && f), (I.top = g ? 0.5 * s + 0.5 * o + 2 * _ : 1.5 * s + 0.5 * o + 3 * _ + T + l + d), (I.left = 0), (I.right = a + s + 2 * _), (I.color = et.d); break; case et.h.BATTERY: (b = this.props.batteryPower && E), g ? (I.top = o + T + s + 2 * _ + (w ? 108.5 : 19.5)) : ((I.top = o + T + 2 * s + 4 * _ + d + l), (I.color = et.c)), (I.left = 0), (I.right = 0); break; case et.h.USAGE: (b = this.props.loadPower && v), (I.top = g ? 0.5 * s + 0.5 * o + 2 * _ : 1.5 * s + 0.5 * o + 3 * _ + T + l + d), (I.left = a + s + 2 * _), (I.right = 0), (I.color = et.g); } const O = !t.includes(n), N = !e.includes(n); let k = null; O ? (k = c.createElement( "span", { "data-testid": "dd3afd47-058d-409f-a862-ca980813739a", id: "missing-meter-label", className: "delete-icon", onClick: () => { S && S(et.n[n], !0); }, }, "×" )) : N && (k = c.createElement("img", { "data-testid": "ef571495-5054-451e-909f-0eb988f9552e", id: "inactive-image-label", className: "info sm hand label-image", src: n === et.h.BATTERY ? i(576) : i(298), onClick: () => { S && S(et.n[n]); }, alt: "Label Inactive", })); const P = n === et.h.SOLAR, D = P && y === lt.PowerUnits.WATTS ? -20 : 0, L = (P || n === et.h.USAGE) && null != b && b < D ? c.createElement("img", { "data-testid": "9f44e874-0b91-4867-920c-5b3fce1648f3", id: "negative-image-label", className: "caution sm hand label-image", src: i(581), onClick: () => { R && R(et.n[n]); }, alt: "Label Negative", }) : null; return ( null != b && (r || (!r && 0 !== b)) && (A = c.createElement("p", { "data-testid": "4c6aadb3-7661-4d7f-b1ff-d5a0571fac60" }, L, k, `${null == k ? b + " " : ""}${O ? "" : y}`)), c.createElement("div", { "data-testid": "ec7d6a6d-b6d2-411c-a535-c052c00baf62", key: u, className: "label-container " + (N && !O ? "label-inactive" : ""), style: I }, C, A) ); }); } _getPowerwall(e, t, n, r, a, o, s, _) { let l = null, d = null, u = null; if (null != a && (0 !== a || !s)) { const i = 22, n = 2, r = e ? 191 : 172, s = e ? 267 : 94, _ = e ? 212 : 94, l = e ? 172 : 157; (d = c.createElement( "svg", { className: "powerwall-soe", width: r, height: s, viewBox: `0 0 ${r} ${s}` }, c.createElement("rect", { x: l, y: n, width: "5", height: _, style: { strokeWidth: "1px", stroke: "gray", fill: "none" } }), c.createElement("rect", { x: l, y: n + (_ * (100 - a)) / 100, width: "5", height: (_ * a) / 100, style: { fill: et.c } }) )), (u = c.createElement( "div", { "data-testid": "234320a0-eab5-4528-bc42-aab6c7282f13", className: "label-container soe-label", style: { top: Math.max(0, n + (_ * (100 - a)) / 100 - i / 2), left: e ? 0.5 * this.props.gridWidth - t + 191 : r + (0.5 * this.props.gridWidth - t) + 12, color: o ? "white" : "black" }, }, Object(_t.a)(a, 0), "%" )); } return ( (l = e ? c.createElement("img", { "data-testid": "edc861a1-c692-487b-970c-16ca01bb74db", src: i(_ ? 584 : 796), style: { height: "267px", width: "191px" } }) : c.createElement("img", { "data-testid": "b3372156-8a9e-4d17-9721-fcc5891d1074", src: i(797), style: { height: "94px", width: "172px" } })), c.createElement("div", { "data-testid": "03852a2e-1a99-4ed3-98e7-a98e292646eb", className: "center-align position-relative" }, u, d, l) ); } _getIslanded(e, t, i, n, r, a, o, s, _) { if (e !== ct.e.ISLANDED && e !== ct.e.TRANSITION_TO_GRID) return null; const l = r + 2 * a; return c.createElement( "div", { "data-testid": "4ad39542-2910-4a3b-b987-2c25190ea97e", className: "islanded-container", style: { top: 0.5 * r + 0.5 * i + a + o + s + _, left: 0, right: t + r + 2 * a, width: l, height: l } }, c.createElement( "svg", { width: l, height: l }, c.createElement("g", null, c.createElement("line", { x1: "0", y1: "0", x2: l, y2: l, stroke: et.b, strokeWidth: n }), c.createElement("line", { x1: l, y1: "0", x2: "0", y2: l, stroke: et.b, strokeWidth: n })) ) ); } _getSitemasterControl() { const { isResi: e, gridStatus: t, sitemasterRunning: i, authenticated: n, compact: r } = this.props; if (!n) return null; let a, o = !i || !t, s = null, _ = !1; if (e) switch (t) { case ct.e.CONNECTED: case null: case void 0: (_ = !0), (s = c.createElement(u.FormattedMessage, { id: "power_flow_view_go_off_grid", defaultMessage: "GO OFF GRID" })); break; case ct.e.ISLANDED: (_ = !1), (s = c.createElement(u.FormattedMessage, { id: "power_flow_view_go_on_grid", defaultMessage: "GO ON GRID" })); break; case ct.e.TRANSITION_TO_GRID: case ct.e.ISLAND_READY: default: s = c.createElement("img", { className: "spinner", src: ut.a, height: 20, alt: Et.gridButtonSpinnerAltLabel }); } return ( (a = i ? c.createElement( "button", { type: "button", className: "btn btn-action btn-sitemaster center-block btn-stop", onClick: this._handleSitemanagerStartStopClick }, c.createElement(u.FormattedMessage, { id: "power_flow_view_stop_system", defaultMessage: "STOP SYSTEM" }) ) : c.createElement( "button", { type: "button", className: "btn btn-action btn-sitemaster center-block btn-start", onClick: this._handleSitemanagerStartStopClick }, c.createElement(u.FormattedMessage, { id: "power_flow_view_start_system", defaultMessage: "START SYSTEM" }) )), this.props.criticalInstallationProblems.length > 0 ? c.createElement( "div", null, this.props.criticalInstallationProblems.map((e) => c.createElement(pt.a, { problem: e })), i && a ) : c.createElement( "div", { className: r ? "compact-btn-row" : "" }, a, e && c.createElement( "div", null, c.createElement("button", { type: "button", className: "btn btn-action btn-sitemaster center-block " + (_ ? "btn-stop" : "btn-start"), onClick: this._handleIslandingClick, disabled: o }, s), o && !i && !r && c.createElement( "small", { className: "text-muted disabled-explanation" }, c.createElement(u.FormattedMessage, { id: "power_flow_view_grid_button_disabled_reason", defaultMessage: "System must be started in order to go off grid." }) ) ) ) ); } _handleSitemanagerStartStopClick(e) { e.preventDefault(), this.props.handleStartStopSitemanager && this.props.handleStartStopSitemanager(); } _handleIslandingClick(e) { e.preventDefault(); const { gridStatus: t } = this.props; t === ct.e.CONNECTED ? this.props.handleGoOffGrid && this.props.handleGoOffGrid() : t === ct.e.ISLANDED && this.props.handleReconnectToGrid && this.props.handleReconnectToGrid(); } } ft(bt, "updatablePropTypes", { activeTypes: l.a.arrayOf(l.a.oneOf(ht)).isRequired, availableTypes: l.a.arrayOf(l.a.oneOf(ht)).isRequired, loadPower: l.a.number, solarPower: l.a.number.isRequired, batteryPower: l.a.number.isRequired, gridPower: l.a.number.isRequired, gridStatus: l.a.string, gridServicesActive: l.a.bool.isRequired, soe: l.a.number, }), ft( bt, "propTypes", vt( vt({}, bt.updatablePropTypes), {}, { intl: u.intlShape, gridWidth: l.a.number.isRequired, gridHeight: l.a.number.isRequired, activeGlowRadius: l.a.number.isRequired, lineSpacing: l.a.number.isRequired, lineRadius: l.a.number.isRequired, lineWidth: l.a.number.isRequired, indicatorAnimationTimer: l.a.number.isRequired, indicatorRadius: l.a.number.isRequired, indicatorGlowRadius: l.a.number.isRequired, showPowerwall: l.a.bool.isRequired, showCompletePowerwall: l.a.bool.isRequired, sitemasterRunning: l.a.bool.isRequired, authenticated: l.a.bool.isRequired, handleStartStopSitemanager: l.a.func, handleGoOffGrid: l.a.func, handleReconnectToGrid: l.a.func, handleInactiveLabelClick: l.a.func, handleNegativeLabelClick: l.a.func, energyIconDiameter: l.a.number.isRequired, energyIconBorderWidth: l.a.number.isRequired, showLabels: l.a.bool.isRequired, showNegative: l.a.bool.isRequired, correctNegative: l.a.bool.isRequired, correctLoadPower: l.a.bool.isRequired, showZero: l.a.bool.isRequired, showIcons: l.a.bool.isRequired, inactiveColor: l.a.string, units: l.a.oneOf(Object.values(lt.PowerUnits)).isRequired, precision: l.a.number.isRequired, labelMargin: l.a.number.isRequired, labelHeight: l.a.number.isRequired, labelWidth: l.a.number.isRequired, customLabels: l.a.shape({ [et.h.SOLAR]: l.a.element, [et.h.GRID]: l.a.element, [et.h.BATTERY]: l.a.element, [et.h.USAGE]: l.a.element }), customIcons: l.a.shape({ [et.h.SOLAR]: l.a.element, [et.h.GRID]: l.a.element, [et.h.BATTERY]: l.a.element, [et.h.USAGE]: l.a.element }), iconStyle: l.a.object, iconContainerStyle: l.a.object.isRequired, containerStyle: l.a.object, style: l.a.object, criticalInstallationProblems: l.a.array, } ) ), ft(bt, "defaultProps", { activeTypes: ht, availableTypes: ht, gridWidth: Math.min(screen.width / 2, 250), gridHeight: 100, activeGlowRadius: 5, lineSpacing: 3, lineRadius: 5, lineWidth: 1, indicatorAnimationTimer: 1e3, indicatorRadius: 1.5, indicatorGlowRadius: 7, showPowerwall: !0, showCompletePowerwall: !1, energyIconDiameter: 50, energyIconBorderWidth: 1, showLabels: !0, showNegative: !0, correctNegative: !1, correctLoadPower: !0, showZero: !0, showIcons: !0, units: lt.PowerUnits.KILOWATTS, precision: 1, labelMargin: 15, labelHeight: 15, labelWidth: 80, iconContainerStyle: { borderStyle: "dotted" }, }), ft(bt, "DISCHARGE_THRESHOLD", 200); i(798); function yt(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function St(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? yt(Object(i), !0).forEach(function (t) { Rt(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : yt(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function Rt(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } function Tt(e) {} function At() { fetch(Y.a.api.uri + "/autoconfig/cancel", { method: "POST", credentials: Y.a.credentials, body: "" }) .then(Q.checkStatus) .catch(Tt); } const Ct = "not_applicable", It = "starting", Ot = "no_powerwall", Nt = "no_islanding_controller", kt = "pending", Pt = "no_internet", Dt = "automatic_retry", Lt = "mandatory_update", Mt = "missing_installation_info", zt = "incomplete", Ut = "complete", Vt = "cancelled", Gt = "determining_on_grid", jt = "timeout", Wt = "disabled"; const Ft = "", qt = "available", xt = { status: It, running: !1, retry_possible: !1, have_registered: !1, have_gridcode: !1, have_timezone: !1, grid_availability: Ft }; function Bt(e) { let [t, i] = Object(c.useState)(xt); Object(c.useEffect)(() => { let e, n = !0; if ( !(function (e) { switch (e) { case Ct: case Ut: case Vt: return !0; default: return !1; } })(t.status) ) return ( (function r() { fetch(Y.a.api.uri + "/autoconfig/status", { method: "GET", credentials: Y.a.credentials }) .then(Q.checkStatus) .then((e) => e.json()) .then((a) => { t.status === Lt && a.status !== Lt && window.location.reload(), i(a), n && (e = setTimeout(r, 1e3)); }) .catch((i) => { t.status === Lt && i && i.response && 403 === i.response.status && window.location.reload(), n && (e = setTimeout(r, 2e3)); }); })(), () => { clearTimeout(e), (n = !1); } ); }, [t.status]); let n = t.status; if (Wt === n) return null; let r = d.a.createElement("button", { onClick: () => e.handleRunWizard() }, d.a.createElement(u.FormattedMessage, { id: "auto_config_run_wizard_button_text", defaultMessage: "Run the Wizard" })), a = d.a.createElement( "button", { onClick: () => { fetch(Y.a.api.uri + "/autoconfig/retry", { method: "POST", credentials: Y.a.credentials, body: "" }) .then(Q.checkStatus) .catch(Tt); }, }, d.a.createElement(u.FormattedMessage, { id: "auto_config_retry_button_label", defaultMessage: "Retry" }) ); const o = () => { e.sitemasterRunning ? e.showModal("SITEMASTER_MODAL", { modalClass: "modal-error modal-sitemaster", size: "lg", centered: !0, showCancel: !1, showErrors: !1, fadeIn: !1, headerView: d.a.createElement( "h2", { "data-testid": "3cb8e199-a3c5-47fe-a3cd-5b7f8a6d4d87", className: "modal-title" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_stop_system_modal_title", defaultMessage: "Cannot start automatic setup" }) ), contentView: d.a.createElement(u.FormattedMessage, { id: "auto_config_stop_system_modal_message", defaultMessage: "Automatic setup process cannot run while the system is running. Stop the system and try again." }), footerView: d.a.createElement( "button", { "data-testid": "0d17fb7b-9813-4837-8d29-5fcc9849f5fc", className: "btn btn-link btn-close center-block", "data-dismiss": "modal" }, d.a.createElement(u.FormattedMessage, te.buttons.CLOSE) ), }) : fetch(Y.a.api.uri + "/autoconfig/run", { method: "POST", credentials: Y.a.credentials, body: "" }) .then(Q.checkStatus) .catch(Tt) .then(() => { i(St(St({}, t), {}, { status: It })); }); }; let s = d.a.createElement("button", { onClick: () => o() }, d.a.createElement(u.FormattedMessage, { id: "auto_config_run_button_label", defaultMessage: "Set Up Powerwall Automatically" })); function _() { i(St(St({}, t), {}, { status: Ct })), At(); } return d.a.createElement( "div", { className: "auto-config" }, d.a.createElement("div", { className: "auto-config-title" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_section_title", defaultMessage: "Automatic Powerwall Setup" })), d.a.createElement( "div", { className: "auto-config-state" }, (function (e) { switch (e) { case It: case kt: return d.a.createElement(Ht, null); case Ut: return d.a.createElement(Kt, { dismiss: _ }); case Pt: return d.a.createElement(Yt, { wizardButton: r, retryButton: a }); case Dt: return d.a.createElement(Qt, { wizardButton: r }); case Lt: return d.a.createElement(Zt, null); case Mt: return d.a.createElement(Jt, { wizardButton: r, retryButton: a }); case zt: return t.have_registered && t.have_gridcode && t.have_timezone ? t.grid_availability === Ft ? d.a.createElement(ii, null) : d.a.createElement(ti, null) : d.a.createElement(Xt, { progress: t, wizardButton: r }); case Ot: return d.a.createElement(ni, null); case Nt: return d.a.createElement($t, null); case Gt: return d.a.createElement(ei, null); case jt: return d.a.createElement(ai, { runButton: s }); case Vt: return d.a.createElement(oi, { runButton: s }); case Ct: return d.a.createElement(si, { runButton: s }); default: return null; } })(n) ) ); } function Ht() { return d.a.createElement( "div", { className: "auto-config-pending" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_in_progress", defaultMessage: "In progress" }), d.a.createElement("span", { className: "auto-config-throbber" }, ".....") ); } function Kt({ dismiss: e }) { return d.a.createElement( "div", { className: "auto-config-complete" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_complete", defaultMessage: "Successfully completed" }), d.a.createElement("div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_check_system_and_summary", defaultMessage: "Check the System and Summary pages." })), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement("button", { onClick: () => e(), className: "auto-config-done-button" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_done_button_text", defaultMessage: "Done" })) ) ); } function Yt(e) { const t = d.a.createElement(p.Link, { to: "network" }, d.a.createElement("button", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_network_button_text", defaultMessage: "Setup the Network" }))); return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_no_network", defaultMessage: "Not Connected to Tesla" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_no_network_retry", defaultMessage: "{networkLink} to enable automatic Powerwall setup and then {retryButton}", values: { networkLink: t, retryButton: e.retryButton }, }) ), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_no_network_wizard", defaultMessage: "Or {wizardButton} for manual Powerwall setup.", values: { wizardButton: e.wizardButton } }) ) ); } function Qt(e) { const t = d.a.createElement(p.Link, { to: "network" }, d.a.createElement("button", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_check_network_button", defaultMessage: "Check the network and enable wifi" }))); return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_retrying", defaultMessage: "Retrying failed network request" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_retry", defaultMessage: "{networkLink} if the problem persists", values: { networkLink: t } }) ), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_retry_wizard", defaultMessage: "Or {wizardButton} for manual Powerwall setup.", values: { wizardButton: e.wizardButton } }) ) ); } function Zt() { return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_updating", defaultMessage: "Software update required" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_updating", defaultMessage: "A software update is required before automatic Powerwall setup can begin. The update will be downloaded and applied automatically. You may need to re-connect to Powerwall's WiFi network afterward.", }) ) ); } function Jt(e) { return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_lookup_failed", defaultMessage: "Serial Number Lookup Failed" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_lookup_failed_retry", defaultMessage: "Scan the serial number sticker into Bolt to enable automatic Powerwall setup, and then {retryButton}", values: { retryButton: e.retryButton }, }) ), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_lookup_failed_wizard", defaultMessage: "Or {wizardButton} for manual Powerwall setup.", values: { wizardButton: e.wizardButton } }) ) ); } function Xt(e) { let { progress: t, wizardButton: i } = e, n = d.a.createElement( p.Link, { to: "legal" }, d.a.createElement("button", { onClick: () => At() }, d.a.createElement(u.FormattedMessage, { id: "auto_config_registration_button_text", defaultMessage: "Enter Customer Information" })) ); return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_missing_information", defaultMessage: "Missing Information" }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_missing_info_1", defaultMessage: "Automatic Powerwall setup failed because the following information was missing:" }), d.a.createElement( "ol", null, !t.have_registered && d.a.createElement("li", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_missing_registration", defaultMessage: "Customer information for product registration" })), !t.have_gridcode && d.a.createElement("li", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_missing_gridcode", defaultMessage: "Grid code for the customer site" })), !t.have_timezone && d.a.createElement("li", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_missing_timezone", defaultMessage: "Timezone at the customer site" })), t.grid_availability !== qt && d.a.createElement("li", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_missing_grid", defaultMessage: "Grid for the customer site" })) ) ), d.a.createElement( "div", { className: "auto-config-action" }, t.have_gridcode && t.have_timezone ? d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_missing_info_3", defaultMessage: "{registrationButton} manually.", values: { registrationButton: n } }) : d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_missing_info_2", defaultMessage: "{wizardButton} to enter it manually.", values: { wizardButton: e.wizardButton } }) ) ); } function $t() { return d.a.createElement( "div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_finding_contactor_controller", defaultMessage: "Finding Contactor Controller..." }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_finding_contactor_controller", defaultMessage: "If this message persists for more than 3 minutes, check the wiring to the Backup Switch or Gateway.", }) ) ); } function ei() { return d.a.createElement( "div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_determining_on_grid", defaultMessage: "Determining grid connection..." }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_determining_on_grid", defaultMessage: "If this message persists for more than 3 minutes, check the wiring to the Backup Switch or Gateway." }) ) ); } function ti() { return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_no_grid_detected", defaultMessage: "No grid detected." }), d.a.createElement("div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_no_grid_detected", defaultMessage: "Check wiring and breakers before starting system." })) ); } function ii() { return d.a.createElement( "div", { className: "auto-config-error-state" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_cannot_determine_grid_connection", defaultMessage: "Could not determine grid connection." }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_cannot_determine_grid_connection", defaultMessage: "Check wiring to the Backup Switch or Gateway before starting system." }) ) ); } function ni() { return d.a.createElement( "div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_finding_powerwalls", defaultMessage: "Finding Powerwalls..." }), d.a.createElement( "div", { className: "auto-config-action" }, d.a.createElement(u.FormattedMessage, { id: "auto_config_instructions_finding_powerwalls", defaultMessage: "If this message persists for more than 3 minutes, verify Powerwall wiring." }) ) ); } function ri({ runButton: e }) { return d.a.createElement("div", { className: "auto-config-action" }, e); } function ai({ runButton: e }) { return d.a.createElement("div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_timeout", defaultMessage: "Automatic setup has timed out. You can try again:" }), d.a.createElement(ri, { runButton: e })); } function oi({ runButton: e }) { return d.a.createElement("div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_cancelled", defaultMessage: "Automatic setup was cancelled. You can try again:" }), d.a.createElement(ri, { runButton: e })); } function si({ runButton: e }) { return d.a.createElement( "div", null, d.a.createElement(u.FormattedMessage, { id: "auto_config_status_not_applicable", defaultMessage: "Automatic setup is not needed or has already been run. You can run it again:" }), d.a.createElement(ri, { runButton: e }) ); } function _i({ leader: e }) { return d.a.createElement( "div", { className: "auto-config" }, d.a.createElement("div", { className: "auto-config-title" }, d.a.createElement(u.FormattedMessage, { id: "follower_powerwall_title", defaultMessage: "Follower Powerwall" })), d.a.createElement("div", { className: "auto-config-state" }, d.a.createElement(u.FormattedMessage, { id: "follower_powerwall_message", defaultMessage: "This Powerwall is controlled by {leader}", values: { leader: e } })) ); } var li = i(42), ci = i(44), di = i(212), ui = i(192), mi = i(67); i(800); function pi() { return (pi = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function gi(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function wi(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const vi = [ { title: "networkTitle", id: "network-menu-item", link: "/network" }, { title: "modbusTitle", id: "modbus-menu-item", link: "/modbus", resi: !1 }, { title: "registrationTitle", id: "registration-menu-item", link: "/legal", resi: !0 }, { title: "summaryTitle", id: "summary-menu-item", link: "/summary", resi: !0 }, { title: "meterValidationTitle", id: "meter-validation-menu-item", link: "/open-loop-meter-validation", resi: !1 }, { title: "updateTitle", id: "update-menu-item", link: "/update", onlyVisibleTo: y.d }, { title: "clientProtocolsTitle", id: "client_protocols_menu_title", link: "/client-protocols", resi: !1 }, { title: "networkSwitchTitle", id: "network-switch-menu-item", link: "/network-switch", resi: !1 }, { title: "passwordGenerateTitle", id: "password-generate-menu-item", link: "/password-generate", resi: !1 }, { title: "componentsTitle", id: "component-menu-item", link: "/components", resi: !1 }, ], fi = { KIOSK: { mode: y.c.KIOSK }, INSTALLER: { mode: y.c.INSTALLER } }; function hi() { let e = window.location; e.assign(`${e.protocol}//${e.hostname}/monitor`); } const Ei = Object(u.defineMessages)({ complete: { id: "overview_menu_registration_complete", defaultMessage: "Complete" }, connected: { id: "overview_menu_network_connected", defaultMessage: "Connected" }, controlTitle: { id: "overview_menu_control_title", defaultMessage: "Control" }, diagnosticsTitle: { id: "overview_menu_diagnostics_title", defaultMessage: "Diagnostics" }, event: { id: "overview_menu_view_alerts_event", defaultMessage: "Event" }, events: { id: "overview_menu_view_alerts_events", defaultMessage: "Events" }, incomplete: { id: "overview_menu_registration_incomplete", defaultMessage: "Incomplete" }, inverterTitle: { id: "overview_menu_view_inverter_title", defaultMessage: "Inverter test" }, networkTitle: { id: "overview_menu_view_network_title", defaultMessage: "Network" }, noConnection: { id: "overview_menu_network_no_connection", defaultMessage: "No Connection" }, pending: { id: "overview_menu_registration_pending", defaultMessage: "Pending internet connection" }, registrationTitle: { id: "overview_menu_view_registration_title", defaultMessage: "Registration" }, securityTitle: { id: "overview_menu_security_title", defaultMessage: "Change or reset password" }, settingsTitle: { id: "overview_menu_settings_title", defaultMessage: "Settings" }, summaryTitle: { id: "overview_menu_summary_title", defaultMessage: "Summary" }, systemTitle: { id: "overview_menu_system_title", defaultMessage: "System" }, testTitle: { id: "overview_menu_view_test_title", defaultMessage: "Self test" }, meterValidationTitle: { id: "overview_meter_validation_title", defaultMessage: "Meter Validation" }, modbusTitle: { id: "overview_menu_modbus_title", defaultMessage: "Modbus" }, updateTitle: { id: "overview_menu_update_title", defaultMessage: "Software Update" }, clientProtocolsTitle: { id: "client_protocols_menu_title", defaultMessage: "Client Protocols" }, networkSwitchTitle: { id: "network-switch-menu-item", defaultMessage: "Network Switches" }, passwordGenerateTitle: { id: "password_generate_menu_title", defaultMessage: "Change Password" }, componentsTitle: { id: "component-menu-title", defaultMessage: "Components" }, }); class bi extends c.Component { _isInstaller() { const { authentication: e, errors: t } = this.props; return Object(Ve.isInstaller)(e, t) || Object(Ve.isEngineer)(e); } _isAuthenticated() { const { authentication: e, errors: t } = this.props; return Object(Ve.isAuthenticated)(e, t); } render() { return c.createElement("ul", { className: "overview-menu menu-items" }, this._renderSystemMenuItem(), this._renderKioskMenuItems(), this._renderInstallerMenuItems(), this._renderCustomerMenuItems()); } _renderSystemMenuItem() { let { installationProblems: e, isResi: t, canReboot: i } = this.props; if (!t || !this._isInstaller()) return null; const n = c.createElement(u.FormattedMessage, Ei.systemTitle, (e) => c.createElement("h4", { className: "title" }, e)); let r = null, a = []; return ( Array.isArray(e) && (a = e .map((e) => ne.installationProblemTitles[e]) .filter((e) => !!e) .map((e) => c.createElement("div", { key: e.id }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, e)))), i === li.a.blockUpdate && a.push(c.createElement("div", { key: i }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, Ti.updating))), a.length > 0 && (r = c.createElement("p", { className: "subtitle" }, a)), c.createElement(mi.a, { title: n, subtitle: r, clickElementProps: this._getMenuItemLinkProps("/system") }) ); } _getMenuItemLinkProps(e, t = {}, i = {}) { return (function (e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? gi(Object(i), !0).forEach(function (t) { wi(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : gi(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; })({ to: { pathname: e, query: t } }, i); } _getSubtitle(e) { const { intl: t, network: i, registration: n, isUpdateRequired: r, hasNetworkConnection: a } = this.props; switch (e) { case "networkTitle": return this._isAuthenticated() ? a ? c.createElement(u.FormattedMessage, Ei.connected) : c.createElement("span", null, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, Ei.noConnection)) : null; case "registrationTitle": return this._getRegistrationConfiguration(n); case "updateTitle": return r ? t.formatMessage(ci.c[ci.b.REQUIRED]) : null; default: return null; } } _renderKioskMenuItems() { const { kioskMode: e, menuItems: t } = this.props; return t ? c.createElement( c.Fragment, null, t.map(({ title: t, id: i, link: n }) => { const r = this._getSubtitle(t); return c.createElement(mi.a, { key: i, title: c.createElement("h4", { "data-testid": "546b4fb6-9436-4a32-a226-ee9648b3b6b3", className: "title" }, this.props.intl.formatMessage(Ei[t])), subtitle: c.createElement("p", { "data-testid": "9b617380-260c-40b7-9b0d-b98d77cba834", className: "subtitle" }, r), clickElementProps: this._getMenuItemLinkProps(n, e ? fi.KIOSK : void 0, { id: i }), }); }) ) : null; } _renderCustomerMenuItems() { if (!this._isAuthenticated() || !this.props.isResi) return null; const { kioskMode: e } = this.props; let t = {}; return ( (t = e ? (e && this._isInstaller() ? fi.INSTALLER : fi.KIOSK) : void 0), c.createElement( c.Fragment, null, c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "1e573050-9a78-43cc-bbe0-8a0bf847244e", className: "title" }, this.props.intl.formatMessage(Ei.securityTitle)), clickElementProps: this._getMenuItemLinkProps("/password", t, { id: "password-menu-item" }), }) ) ); } _renderInstallerMenuItems() { if (!this._isInstaller()) return null; const { alerts: e, grid: t, kioskMode: i, isResi: n } = this.props; return c.createElement( c.Fragment, null, this._getAlerts(e, t, i), this._getInverterSelfTest(t, i), !n && c.createElement(mi.a, { title: c.createElement("h4", { className: "title" }, c.createElement(u.FormattedMessage, pi({ tagName: "div" }, Ei.settingsTitle))), clickElementProps: this._getMenuItemLinkProps("/settings", i ? fi.KIOSK : void 0, { id: "settings-menu-item" }), }), !n && c.createElement(mi.a, { id: "control-menu-item", title: c.createElement("h4", { "data-testid": "9ad0ff83-1794-45ed-b1ab-820cf8dfd0f3", className: "title" }, this.props.intl.formatMessage(Ei.controlTitle)), onClick: hi, }), c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "53c5d702-1b35-4825-83c2-83915a33a8e3", className: "title" }, this.props.intl.formatMessage(Ei.diagnosticsTitle)), clickElementProps: this._getMenuItemLinkProps("/diagnostics", i ? fi.KIOSK : void 0, { id: "diagnostics-menu-item" }), }) ); } _getInverterSelfTest(e, t) { return Object(di.c)(e.config.country, e.config.grid_code) ? c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "f9bcd285-cc16-420c-88a9-4f23886fea95", className: "title" }, this.props.intl.formatMessage(Ei.inverterTitle)), clickElementProps: this._getMenuItemLinkProps("/test/inverter", t ? fi.KIOSK : void 0, { id: "inverter-self-test-menu-item" }), }) : null; } _getAlerts(e, t, i) { if (!Object(di.b)(t.config.country, t.config.grid_code)) return null; let n = this.props.intl.formatMessage(1 === e.length ? Ei.event : Ei.events); return c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "b88f5980-3a17-4b07-8f32-94492079a6b4", className: "title" }, c.createElement(u.FormattedMessage, te.titles.alerts)), subtitle: c.createElement("p", { "data-testid": "5d72bdb5-4515-4038-beb5-fed6ec51d901", className: "subtitle" }, `${e.length} ${n}`), clickElementProps: this._getMenuItemLinkProps("/alert", i ? fi.KIOSK : void 0, { id: "alerts-menu-item" }), }); } _getRegistration(e, t) { return Object(ui.a)(e) ? null : c.createElement(mi.a, { title: c.createElement("h4", { "data-testid": "343ca1b8-377e-4c1f-b807-7c2c5f409999", className: "title" }, this.props.intl.formatMessage(Ei.registrationTitle)), subtitle: c.createElement("p", { "data-testid": "097d8494-86b7-4764-8819-08d97a9dd064", className: "subtitle" }, this._getRegistrationConfiguration(e)), clickElementProps: this._getMenuItemLinkProps("/legal", t ? fi.KIOSK : void 0, { id: "registration-menu-item" }), }); } _getRegistrationConfiguration(e) { return e.timedOut ? this.props.intl.formatMessage(Ei.pending) : this.props.intl.formatMessage(Ei.incomplete); } } wi(bi, "propTypes", { alerts: l.a.arrayOf(l.a.object).isRequired, authentication: l.a.object.isRequired, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, grid: l.a.object.isRequired, intl: u.intlShape.isRequired, isResi: l.a.bool.isRequired, kioskMode: l.a.bool.isRequired, menuItems: l.a.arrayOf(l.a.object).isRequired, network: l.a.object.isRequired, registration: l.a.shape({ timedOut: l.a.bool.isRequired, registered: l.a.bool.isRequired }).isRequired, sitemasterRunning: l.a.bool.isRequired, isUpdateRequired: l.a.bool.isRequired, hasNetworkConnection: l.a.bool.isRequired, installationProblems: l.a.array.isRequired, canReboot: l.a.string.isRequired, }), wi(bi, "defaultProps", { kioskMode: !1 }); i(590); function yi(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const Si = new Date(0).getTime(), Ri = l.a.shape({ instant_power: l.a.number.isRequired, last_communication_time: l.a.string }).isRequired, Ti = Object(u.defineMessages)({ connected: { id: "system_overview_connected", defaultMessage: "Connected To Tesla" }, disconnected: { id: "system_overview_disconnected", defaultMessage: "Not Connected To Tesla" }, scanning: { id: "system_overview_scanning", defaultMessage: "Scanning for devices..." }, updating: { id: "system_overview_updating", defaultMessage: "Updating devices..." }, siteController: { id: "system_overview_site_controller", defaultMessage: "Site Controller" }, followerPowerwall: { id: "system_overview_follower", defaultMessage: "Follower Powerwall" }, }); class Ai extends c.Component { constructor(...e) { super(...e), yi(this, "_handleInactiveLabelClick", this._handleInactiveLabelClick.bind(this)); } render() { const { siteName: e, gridStatus: t, gridServicesActive: i, soe: n, handleStartStopSitemanager: r, handleGoOffGrid: o, handleReconnectToGrid: s, handleNegativeLabelClick: _, sitemasterRunning: l, authenticated: d, meter: m, showCompletePowerwall: p, connectedToTesla: g, canReboot: w, isResi: v, isTeslaUser: f, leader: h, criticalInstallationProblems: E, } = this.props; let b = "power-flow-header"; l || (b += " inactive"); const y = []; return ( Xe.a.each(m.aggregates, (e, t) => { null != e.last_communication_time && y.push(et.m[t]); }), c.createElement( "div", { className: "system" }, c.createElement( "div", { className: b }, d ? c.createElement("span", null, this._getSiteName(e), c.createElement(Ci, { isResi: v, connectedToTesla: g, canReboot: w })) : c.createElement("p", { className: "name" }, c.createElement(u.FormattedMessage, { id: "system_overview_login_required", defaultMessage: "Login Required To View System Operation" })) ), c.createElement(bt, { intl: this.props.intl, activeTypes: l ? this._getActiveMeterTypes(m) : [], availableTypes: l ? y : void 0, showCompletePowerwall: p, sitemasterRunning: l, authenticated: d, handleStartStopSitemanager: r, handleGoOffGrid: o, handleReconnectToGrid: s, handleInactiveLabelClick: this._handleInactiveLabelClick, handleNegativeLabelClick: _, showLabels: l, labelHeight: 14, labelWidth: 120, loadPower: a()(m, (e) => e.aggregates.load.instant_power) || 0, solarPower: a()(m, (e) => e.aggregates.solar.instant_power) || 0, batteryPower: a()(m, (e) => e.aggregates.battery.instant_power) || 0, gridPower: a()(m, (e) => e.aggregates.site.instant_power) || 0, correctLoadPower: !1, gridStatus: t, gridServicesActive: i, soe: n, isResi: v, compact: v, criticalInstallationProblems: E, }), !v && this.props.additionalView, v && !h && f && 0 === E.length && c.createElement(Bt, { showModal: this.props.showModal, handleRunWizard: this.props.handleRunWizard, sitemasterRunning: l }), v && h && c.createElement(_i, { leader: h }), c.createElement(bi, this.props), v && this.props.additionalView ) ); } _getSiteName(e) { if (null == e) return null; let t; return (t = this.props.isResi ? (this.props.leader ? this.props.intl.formatMessage(Ti.followerPowerwall) : e) : this.props.intl.formatMessage(Ti.siteController)), c.createElement("p", { className: "name" }, t); } _getActiveMeterTypes(e) { const t = []; return ( null != e.lastUpdatedAt && null != e.lastMeterReadingAt && e.lastMeterReadingAt > Si && Date.now() - e.lastUpdatedAt < 6e4 && Xe.a.each(e.aggregates, (i, n) => { e.lastMeterReadingAt - (null != i.last_communication_time ? Date.parse(i.last_communication_time) : 0) >= 6e4 || t.push(et.m[n]); }), t ); } _handleInactiveLabelClick(e, t = !1) { if (!this.props.handleInactiveLabelClick) return; let i = null; const n = a()(this.props, (t) => t.meter.aggregates[e].last_communication_time); null != n && Date.parse(n) > Si && (i = new Date(n)), this.props.handleInactiveLabelClick(e, null != i ? i.toLocaleTimeString() + ", " + i.toLocaleDateString() : "", t); } } function Ci(e) { const { isResi: t, connectedToTesla: i, canReboot: n } = e; return t ? n === li.a.blockUpdate || n === li.a.updating ? c.createElement("p", { className: "name updating" }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, Ti.updating)) : n === li.a.enumeration ? c.createElement("p", { className: "name scanning" }, c.createElement(ie.StatusWarningIcon, { inline: !0 }), c.createElement(u.FormattedMessage, Ti.scanning)) : i ? c.createElement("p", { className: "name connected" }, c.createElement(u.FormattedMessage, Ti.connected)) : c.createElement("p", { className: "name not-connected" }, c.createElement(u.FormattedMessage, Ti.disconnected)) : null; } yi(Ai, "propTypes", { intl: u.intlShape.isRequired, siteName: l.a.string, gridStatus: l.a.string, gridServicesActive: l.a.bool.isRequired, soe: l.a.number, sitemasterRunning: l.a.bool.isRequired, authenticated: l.a.bool.isRequired, connectedToTesla: l.a.bool, meter: l.a.shape({ isFetching: l.a.bool.isRequired, lastUpdatedAt: l.a.number, lastMeterReadingAt: l.a.number, aggregates: l.a.shape({ site: Ri, solar: Ri, battery: Ri, load: Ri }).isRequired }).isRequired, handleStartStopSitemanager: l.a.func, handleGoOffGrid: l.a.func, handleReconnectToGrid: l.a.func, handleInactiveLabelClick: l.a.func, handleNegativeLabelClick: l.a.func, handleRunWizard: l.a.func, showModal: l.a.func, showCompletePowerwall: l.a.bool.isRequired, additionalView: l.a.element, isResi: l.a.bool.isRequired, isTeslaUser: l.a.bool.isRequired, leader: l.a.string, isUpdateRequired: l.a.bool.isRequired, criticalInstallationProblems: l.a.array.isRequired, }), yi(Ai, "defaultProps", { sitemasterRunning: !0, showCompletePowerwall: !1, connectedToTesla: !1, authenticated: !1 }); i(801); var Ii = i(456), Oi = i.n(Ii); function Ni() { return (Ni = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function ki(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function Pi(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? ki(Object(i), !0).forEach(function (t) { Di(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : ki(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function Di(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const Li = Object(u.defineMessages)({ wizard: { id: "home_view_run_wizard", defaultMessage: "RUN WIZARD" }, login: { id: "home_view_login", defaultMessage: "LOGIN" }, logout: { id: "home_view_logout", defaultMessage: "LOGOUT" }, downloadLogs: { id: "home_view_download_logs", defaultMessage: "DOWNLOAD LOGS" }, }); class Mi extends c.Component { constructor(...e) { super(...e), Di(this, "_handleClick", this._handleClick.bind(this)), Di(this, "_handleLogin", this._handleLogin.bind(this)), Di(this, "_handleLogout", this._handleLogout.bind(this)); } render() { const { sitemaster: e, settings: t, grid: i, powerwall: n, authentication: r, errors: a, version: o, showInactiveMeterModal: s, showNegativeMeterModal: _, handleStartStopSitemanager: l, handleGoOffGrid: d, handleReconnectToGrid: m, handleRunWizard: g, isResi: w, } = this.props, v = Object(Ve.isAuthenticated)(r, a), f = Pi( Pi({}, this.props), {}, { showCompletePowerwall: !w, kioskMode: !0, siteName: t.siteName, gridStatus: i.status, gridServicesActive: i.servicesActive, soe: n.soe, connectedToTesla: e.connectedToTesla, canReboot: e.canReboot, additionalView: this._getKioskLinkView(r, a), sitemasterRunning: !!e.running || !!e.powerSupplyMode, authenticated: v, isResi: w, isTeslaUser: Object(Ve.isTeslaUser)(r), } ); return c.createElement( "div", { "data-testid": "10bb1320-6523-4802-8d64-c2150467d3fe", className: "home" }, c.createElement(Ai, Ni({ handleStartStopSitemanager: l, handleGoOffGrid: d, handleReconnectToGrid: m, handleInactiveLabelClick: s, handleNegativeLabelClick: _, handleRunWizard: g }, f)), c.createElement( "div", { className: "row compliance-row" }, c.createElement(p.Link, { id: "compliance", to: "/compliance", className: "btn btn-link col-xs-6" }, c.createElement(u.FormattedMessage, { id: "home_view_compliance", defaultMessage: "COMPLIANCE" })) ), w && v && Object(Ve.isInstaller)(r, a) && c.createElement( "button", { "data-testid": "6bddfb5b-37e0-475a-8662-14b95e5417c6", type: "button", className: "btn-link download-logo-button", onClick: this.props.handleDownloadLogs }, c.createElement("img", { "data-testid": "57bbe4d7-c7f4-44c6-9873-47c74ff50792", className: "align-image-right", src: Oi.a, alt: "Download Button" }), this.props.intl.formatMessage(Li.downloadLogs) ), c.createElement(Re, { cancel: { buttonClass: "btn-text text-center", text: o } }) ); } _getKioskLinkView(e, t) { return Object(Ve.isInstaller)(e, t) || Object(Ve.isEngineer)(e) ? c.createElement( "div", { className: "row navigation-row" }, 0 === this.props.criticalInstallationProblems.length && c.createElement("a", { id: "run-wizard", className: "btn btn-link col-xs-6", onClick: this._handleClick, title: "Run Wizard" }, this.props.intl.formatMessage(Li.wizard)), !Object(Ve.isEngineer)(e) && c.createElement("a", { id: "logout", className: "btn btn-link col-xs-6", onClick: this._handleLogout, title: "Logout" }, this.props.intl.formatMessage(Li.logout)) ) : Object(Ve.isCustomer)(e, t) ? c.createElement( "a", { "data-testid": "c8439a4e-a6e2-4e1f-b8ba-b3149bc3474e", id: "logout", className: "btn btn-link center-block", onClick: this._handleLogout, title: "Logout" }, this.props.intl.formatMessage(Li.logout) ) : c.createElement("a", { "data-testid": "5ef23ffb-009d-47f0-ae67-2b7b232b7826", id: "login", className: "btn btn-link center-block", onClick: this._handleLogin, title: "Login" }, this.props.intl.formatMessage(Li.login)); } _handleClick(e) { e.preventDefault(), e.stopPropagation(), this.props.handleRunWizard && this.props.handleRunWizard(e); } _handleLogin(e) { e.preventDefault(), e.stopPropagation(), this.props.handleLogin && this.props.handleLogin(e); } _handleLogout(e) { e.preventDefault(), e.stopPropagation(), this.props.handleLogout && this.props.handleLogout(e); } } Di(Mi, "propTypes", { intl: u.intlShape.isRequired, handleRunWizard: l.a.func, handleLogin: l.a.func, handleLogout: l.a.func, handleSitemaster: l.a.func, handleGoOffGrid: l.a.func, handleReconnectToGrid: l.a.func, handleDownloadLogs: l.a.func.isRequired, showInactiveMeterModal: l.a.func, showNegativeMeterModal: l.a.func, authentication: l.a.object.isRequired, errors: l.a.arrayOf(l.a.instanceOf(h.default)).isRequired, settings: l.a.shape({ siteName: l.a.string }).isRequired, sitemaster: l.a.shape({ running: l.a.bool, connectedToTesla: l.a.bool, powerSupplyMode: l.a.bool }).isRequired, grid: l.a.shape({ codes: l.a.object.isRequired, status: l.a.string, servicesActive: l.a.bool.isRequired }).isRequired, powerwall: l.a.shape({ soe: l.a.number }).isRequired, version: l.a.string.isRequired, isResi: l.a.bool.isRequired, isUpdateRequired: l.a.bool.isRequired, criticalInstallationProblems: l.a.array.isRequired, }); var zi = i(558), Ui = i(561), Vi = i.n(Ui), Gi = i(562), ji = i.n(Gi), Wi = i(563), Fi = i.n(Wi), qi = i(564), xi = i.n(qi), Bi = i(565), Hi = i.n(Bi); i(820); var Ki = () => { const [e, t] = c.useState(0); return c.createElement( "div", { className: "soft-blocker-container" }, c.createElement( "div", { className: "carousel-display-container" }, c.createElement("div", { className: "carousel-toggle-left", onClick: () => { t(e > 0 ? e - 1 : 2); }, }), c.createElement("div", { className: "carousel-toggle-right", onClick: () => { t(e < 2 ? e + 1 : 0); }, }), c.createElement("img", { src: Vi.a, hidden: 0 !== e }), c.createElement("img", { src: ji.a, hidden: 1 !== e }), c.createElement("img", { src: Fi.a, hidden: 2 !== e }) ), c.createElement( "div", { className: "carousel-menu-container" }, c.createElement( "div", { className: "menu-carousel-tabs" }, [0, 1, 2].map((i) => c.createElement("img", { src: e === i ? xi.a : Hi.a, onClick: () => t(i) })) ), c.createElement(u.FormattedMessage, { tagName: "h3", id: "menu-switch-to-tesla-pros-title", defaultMessage: "Switch to Tesla Pros for a better commissioning experience" }), c.createElement(u.FormattedMessage, { tagName: "p", id: "menu-switch-tesla-pros-reason", defaultMessage: "The current experience is no longer supported" }), c.createElement("button", { className: "button-continue", onClick: () => p.browserHistory.push("/upgrade") }, c.createElement(u.FormattedMessage, zi.buttons.CONTINUE)) ) ); }, Yi = i(458), Qi = i(272), Zi = i(276), Ji = i(208), Xi = i(152), $i = i(284), en = i(279), tn = i(277), nn = i(285), rn = i(522); i(821); class an extends c.Component { constructor(...e) { super(...e), (function (e, t, i) { t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i); })(this, "state", { isChecked: !1 }); } render() { const { isSystemRunning: e, requiresConfirmation: t, onClick: i } = this.props; let n = !0; return ( e && t && !this.state.isChecked && (n = !1), c.createElement( "div", null, t && e && c.createElement( "div", { className: "row" }, c.createElement( "div", { className: "col-xs-12 confirm-checkbox" }, c.createElement( "label", { className: "checkbox-inline" }, c.createElement("input", { className: "confirm-checkbox-input", type: "checkbox", checked: this.state.isChecked, onChange: (e) => { this.setState({ isChecked: e.target.checked }); }, }), c.createElement(u.FormattedMessage, oe.inputMessages.confirm) ) ) ), c.createElement( "div", { className: "row" }, c.createElement("div", { className: "col-xs-6" }, c.createElement("button", { className: "btn btn-link btn-close", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CANCEL))), c.createElement( "div", { className: "col-xs-6" }, c.createElement( "button", { disabled: !n, className: "btn btn-link btn-error", onClick: () => i() }, e ? c.createElement(u.FormattedMessage, En.stopSystemButton) : c.createElement(u.FormattedMessage, En.startSystemButton) ) ) ) ) ); } } var on = i(207), sn = i(274), _n = i.n(sn), ln = i(278), cn = i(199), dn = i(566); const un = Object(on.a)(ln.isResiSelector, dn.registrationSelector, cn.loginTypeSelector, (e, t, i) => _n()(vi, (n, r) => ((Object(ui.a)(t) && "registrationTitle" === r.title) || (Array.isArray(r.onlyVisibleTo) && !r.onlyVisibleTo.includes(i)) || (void 0 !== r.resi && e !== r.resi) || n.push(r), n), []) ); var mn = Object(on.b)({ menuItems: un }), pn = i(210), gn = i(567); function wn(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function vn(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? wn(Object(i), !0).forEach(function (t) { hn(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : wn(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function fn() { return (fn = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i = arguments[t]; for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]); } return e; }).apply(this, arguments); } function hn(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } const En = Object(u.defineMessages)({ startPowerwall: { id: "home_container_start_powerwall", defaultMessage: "Start System" }, stopPowerwall: { id: "home_container_stop_powerwall", defaultMessage: "Stop System" }, stopSystemButton: { id: "home_container_stop_system_button", defaultMessage: "STOP SYSTEM" }, startSystemButton: { id: "home_container_start_system_button", defaultMessage: "START SYSTEM" }, errorPowerwall: { id: "home_container_powerwall_error", defaultMessage: "Powerwall System Error" }, siteControllerError: { id: "home_container_site_controller_error", defaultMessage: "Site Controller System Error" }, login: { id: "home_container_login_required", defaultMessage: "Login Required" }, inactiveMeter: { id: "home_container_inactive_meter", defaultMessage: "Stale Meter Data" }, positivePowerMeter: { id: "home_container_positive_meter", defaultMessage: "Warning: {type} meter may be configured incorrectly" }, missingMeter: { id: "home_container_missing_meter", defaultMessage: "Meter is Missing" }, downloadAllLogs: { id: "home_view_download_all_logs", defaultMessage: "Download All Logs" }, caution: { id: "home_container_caution", defaultMessage: "⚠️ Caution" }, }); class bn extends c.Component { constructor(...e) { super(...e), hn(this, "state", { togglingSitemaster: !1, showSoftBlocker: this.props.isResi && this.props.deviceType !== qe.DEVICE_TYPE.GW1 && !this.props.skipSoftBlocker && "unblocked" !== p.browserHistory.getCurrentLocation().state, }), hn(this, "_loginViewJsx", null), hn(this, "_handleReset", this._handleReset.bind(this)), hn(this, "_handleRunWizard", this._handleRunWizard.bind(this)), hn(this, "_handleLogin", this._handleLogin.bind(this)), hn(this, "_handleChangeUsername", this._handleChangeUsername.bind(this)), hn(this, "_handleLogout", this._handleLogout.bind(this)), hn(this, "_showLoginModal", this._showLoginModal.bind(this)), hn(this, "_showInactiveMeterModal", this._showInactiveMeterModal.bind(this)), hn(this, "_showNegativeMeterModal", this._showNegativeMeterModal.bind(this)), hn(this, "_handleStartStopSitemanager", this._handleStartStopSitemanager.bind(this)), hn(this, "_handleGoOffGrid", this._handleGoOffGrid.bind(this)), hn(this, "_handleReconnectToGrid", this._handleReconnectToGrid.bind(this)), hn(this, "_handleStartOrStopSitemaster", this._handleStartOrStopSitemaster.bind(this)), hn(this, "_handleDownloadLogs", this._handleDownloadLogs.bind(this)), hn(this, "_handleTriggerDownloadLogs", this._handleTriggerDownloadLogs.bind(this)), hn(this, "_startToggleAuth", this._startToggleAuth.bind(this)), hn(this, "_queryTimeoutId", null); } startQuerying() { const e = () => { try { this.props.fetchSitemasterSettings && this.props.fetchSitemasterSettings(), this.props.getMeterAggregates && this.props.getMeterAggregates(), this.props.getSOE && this.props.getSOE(), this.props.getGridStatus && this.props.getGridStatus(), this.props.fetchPowerwalls && this.props.fetchPowerwalls(!0); } catch (e) {} this._queryTimeoutId = setTimeout(e, 2500); }; (() => { try { this.props.testAndCheckFirmwareUpdateUrgency && this.props.testAndCheckFirmwareUpdateUrgency(), this.props.getSiteName && this.props.getSiteName(), this.props.getRegistration && this.props.getRegistration(), this.props.fetchAlerts && this.props.fetchAlerts(), this.props.fetchNetworks && this.props.fetchNetworks(), !this.props.fetchSiteInfo || (this.props.grid && this.props.grid.config && this.props.grid.config.grid_code) || this.props.fetchSiteInfo(); } catch (e) {} })(), (this._queryTimeoutId = setTimeout(e, 0)); } stopQuerying() { this.isQuerying() && (clearTimeout(this._queryTimeoutId), (this._queryTimeoutId = null)); } isQuerying() { return null !== this._queryTimeoutId; } componentWillMount() { this.props.initializeConfig(); } componentDidMount() { Object(Ve.isAuthenticated)(this.props.authentication, this.props.errors) ? (this.startQuerying(), this.state.showSoftBlocker && this.setState({ showSoftBlocker: !1 })) : this._showLoginModal(); } componentDidUpdate(e) { Object(Ve.isAuthenticated)(this.props.authentication, this.props.errors) ? (this.isQuerying() || this.startQuerying(), this.state.showSoftBlocker && this.setState({ showSoftBlocker: !1 })) : (this.stopQuerying(), this._showLoginModal()); } componentWillReceiveProps(e) { let t = {}; this.props.sitemaster.running !== e.sitemaster.running ? (e.destroyModal("SITEMASTER_MODAL"), (t.togglingSitemaster = !1)) : this.state.togglingSitemaster && !this.props.sitemaster.didInvalidate && e.sitemaster.didInvalidate && (this._showError(e), (t.togglingSitemaster = !1)), this.props.configuration.isFetching && !e.configuration.isFetching && (e.configuration.isNew ? Object(Ge.c)("Wizard", "0") : Object(Ge.a)("Wizard")), !this._loginViewJsx || (this.props.authentication.selectedLoginType === e.authentication.selectedLoginType && this.props.authentication.waitForToggle === e.authentication.waitForToggle) || this.props.updateModal(y.b, { contentView: c.cloneElement(this._loginViewJsx, { selectedLoginType: e.authentication.selectedLoginType, waitForToggle: e.authentication.waitForToggle }) }), !0 !== e.configuration.isNew || e.isResi || e.isTeslaUser ? Object(Je.isEmpty)(t) || this.setState(t) : this.props.replaceLocation(this._getNextRoute()); } render() { return this.state.showSoftBlocker ? c.createElement(Ki, null) : c.createElement( Mi, fn( { handleRunWizard: this._handleRunWizard, handleLogin: this._showLoginModal, handleLogout: this._handleLogout, handleStartStopSitemanager: this._handleStartStopSitemanager, handleGoOffGrid: this._handleGoOffGrid, handleReconnectToGrid: this._handleReconnectToGrid, handleDownloadLogs: this._handleDownloadLogs, showInactiveMeterModal: this._showInactiveMeterModal, showNegativeMeterModal: this._showNegativeMeterModal, version: this.props.configuration.version, criticalInstallationProblems: this.props.installationProblems.filter(ne.isCriticalProblem), }, this.props ) ); } componentWillUnmount() { this.stopQuerying(), (this._loginViewJsx = null); } async _startToggleAuth() { try { await this.props.startToggleAuth(), this.props.handleCheckForToggle(); } catch (e) {} } _getNextRoute(e = !1) { return e && (Object(Ve.isInstaller)(this.props.authentication, this.props.errors) || Object(Ve.isEngineer)(this.props.authentication)) ? "/network" : "/wizard"; } _handleReset() { this.props.resetAll(); } _handleRunWizard(e) { if (!this.props.sitemaster.running) return Object(Ge.c)("Wizard", "true"), At(), void this.props.changeLocation(this._getNextRoute(!0)); let t = this.props.sitemaster && this.props.sitemaster.canReboot !== li.a.yes; this.props.showModal("SITEMASTER_MODAL", { modalClass: "modal-error", size: this.props.isResi ? "lg" : "md", centered: !0, showCancel: !1, showErrors: !1, headerView: c.createElement( "div", { "data-testid": "ee013d3c-5f64-4a08-9ee1-8cfef8d373c8", className: "sitemaster-modal-title" }, c.createElement("h2", { "data-testid": "65ffbbc0-6fc0-4d77-aab5-3247ee8c870f", className: "modal-title" }, this.props.intl.formatMessage(En.stopPowerwall)), c.createElement( "div", { "data-testid": "85e994c6-8a69-401a-b0b6-7a7bd451f6ad", className: "login-warning" }, this.props.hasSolarPowerwall && c.createElement(Sn, null), t && c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_sitemaster_header_warning_wizard", defaultMessage: '{warning} This system is in a state where Tesla does not recommend stopping it. Reason: "{reason}"', values: { warning: c.createElement("span", { "data-testid": "8312d88c-6f91-44ce-9ad9-4ec7f8265f70", className: "bold" }, this.props.intl.formatMessage(oe.warnings.caution), ":"), reason: c.createElement(pn.a, { messages: oe.canRebootMessages, id: this.props.sitemaster.canReboot }), }, }), c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_sitemaster_confirm_wizard", defaultMessage: "Run Wizard requires the system to be stopped. Proceed and stop the system?" }) ) ), footerView: c.createElement(an, { isSystemRunning: this.props.sitemaster && this.props.sitemaster.running, requiresConfirmation: t, onClick: (e) => { this.props.sitemaster.running && this._handleStartOrStopSitemaster(e), Object(Ge.c)("Wizard", "true"), At(), this.props.changeLocation(this._getNextRoute(!0)); }, }), }); } _showLoginModal() { const { showModal: e, authentication: t, intl: i, getLoginHeaderView: n, isResi: r, deviceType: a, tegType: o } = this.props, { selectedLoginType: s } = t; "pvinverter" !== o ? ((this._loginViewJsx = c.createElement(ze.a, { intl: i, loginType: t.loginType, selectedLoginType: t.selectedLoginType, toggleAuthSupported: t.toggleAuthSupported, username: t.username, changeUsername: this._handleChangeUsername, changeLogin: this.props.handleChangeLoginModal, handleSubmit: this._handleLogin, isFetching: t.isFetching, showSubmit: !0, useShowPasswordIcon: !0, isResi: r, startToggleAuth: this._startToggleAuth, cancelPendingToggleAuth: this.props.cancelPendingToggleAuth, waitForToggle: t.waitForToggle, })), e(y.b, { modalClass: "modal-login", centered: !0, showCancel: !1, fadeIn: !1, bannerView: a !== qe.DEVICE_TYPE.GW1 && c.createElement(Fe.UpgradeBannerView, null), headerView: n(s), contentView: this._loginViewJsx, onUnmount: this.props.cancelPendingToggleAuth, })) : p.browserHistory.push("/upgrade"); } _showInactiveMeterModal(e, t, i) { this.props.showModal("INACTIVE_METER_MODAL", { modalClass: i ? "modal-error" : "modal-info", size: "lg", centered: !0, showCancel: !0, showErrors: !1, headerView: c.createElement("h2", { "data-testid": "5ecb34ba-a8e1-4b44-be93-3e4bee5f1f4e", className: "modal-title" }, this.props.intl.formatMessage(i ? En.missingMeter : En.inactiveMeter)), contentView: c.createElement( c.Fragment, null, c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_inactive_meter_description", defaultMessage: "Check {type} meter connection.", values: { type: Object($e.localizeWithFallback)(oe.meterAggregateTypeMessages[e], this.props.intl, e) }, }), "" !== t ? c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_inactive_meter_timestamp", defaultMessage: "Last meter reading at {timestamp}", values: { timestamp: t } }) : null ), footerView: c.createElement( "button", { "data-testid": "4a908f7c-be8b-4d6e-8cd1-b69423886cec", className: "btn btn-link btn-close center-block", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE) ), }); } _showNegativeMeterModal(e) { const t = c.createElement( "button", { "data-testid": "926975e4-cf3c-4ad8-8067-e01733981bb6", className: "btn btn-link btn-close center-block", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE) ); this.props.showModal("NEGATIVE_METER_MODAL", { modalClass: "modal-error", size: "lg", centered: !0, showCancel: !0, showErrors: !1, headerView: c.createElement( "h2", { "data-testid": "e25e5e87-b826-42da-abfb-69c31013937b", className: "modal-title" }, this.props.intl.formatMessage(En.positivePowerMeter, { type: Object($e.localizeWithFallback)(oe.meterAggregateTypeMessages[e], this.props.intl, e) }) ), contentView: c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_positive_meter_description", defaultMessage: "{type} meter requires both positive power and amperage to be configured correctly.", values: { type: Object($e.localizeWithFallback)(oe.meterAggregateTypeMessages[e], this.props.intl, e) }, }), footerView: Object(Ve.isInstaller)(this.props.authentication, this.props.errors) || Object(Ve.isEngineer)(this.props.authentication) ? c.createElement( "div", { "data-testid": "aa38075c-0229-4c75-a594-3d861c4647ae", className: "row" }, c.createElement("div", { "data-testid": "98becf9a-50b2-4a2f-b310-0deabfc03860", className: "col-xs-6" }, t), c.createElement( "div", { "data-testid": "73d97d52-ea03-4305-b580-3bae76a3ee13", className: "col-xs-6" }, c.createElement( "button", { "data-testid": "60616b44-f120-42bd-b974-96999b29010f", className: "btn btn-link btn-error center-block", onClick: () => { this.props.changeLocation("/cts"); }, }, this.props.intl.formatMessage(oe.modalMessages.reconfigure) ) ) ) : t, }); } _handleChangeUsername(e) { this.props.changeUsername(e), null != this._loginViewJsx && this.props.updateModal(y.b, { contentView: c.cloneElement(this._loginViewJsx, { username: e }) }); } async _handleLogin(e, t, i) { try { null != this._loginViewJsx && this.props.updateModal(y.b, { contentView: c.cloneElement(this._loginViewJsx, { username: e, isFetching: !0 }) }), await this.props.login(e, t, i, this.props.isResi), this.props.clearErrors(), this.props.destroyModal(y.b), this.props.fetchNetworks(), (this._loginViewJsx = null); } catch (t) { null != this._loginViewJsx && this.props.updateModal(y.b, { contentView: c.cloneElement(this._loginViewJsx, { username: e, isFetching: !1 }) }); } } _handleLogout() { this.props.logout(); } _showError(e) { const { intl: t, showModal: i, isResi: n, sitemaster: r } = e; let a = null; r.smStartError && (a = c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_powerwall_start_error", defaultMessage: "Unable to start system: {reason}", values: { reason: r.smStartError } })), i("SITEMASTER_MODAL", { modalClass: "modal-error modal-sitemaster", size: "lg", centered: !0, showCancel: !1, showErrors: !1, fadeIn: !1, headerView: c.createElement("h2", { "data-testid": "3cb8e199-a3c5-47fe-a3cd-5b7f8a6d4d87", className: "modal-title" }, t.formatMessage(n ? En.errorPowerwall : En.siteControllerError)), contentView: a, footerView: c.createElement( "button", { "data-testid": "0d17fb7b-9813-4837-8d29-5fcc9849f5fc", className: "btn btn-link btn-close center-block", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CLOSE) ), }); } _updateModalFooter(e) { this.props.updateModal(e, { footerView: c.createElement( "div", { "data-testid": "c8f5e267-65f1-4cab-8cad-6a60216c7bad", className: "row" }, c.createElement( "div", { "data-testid": "419df8a0-0a3b-45b6-a76d-c17587204911", className: "col-xs-6" }, c.createElement("button", { "data-testid": "2ceb55e2-f410-44e7-b2db-695d3b2185a6", className: "btn btn-link btn-close", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CANCEL)) ), c.createElement( "div", { "data-testid": "497a8bdf-e2ad-461f-b00f-36cd266f9f4a", className: "col-xs-6" }, c.createElement("img", { "data-testid": "c5e770bd-5d07-4e23-8a46-f66d9dfcfd6b", className: "spinner", src: i(271), alt: "Loading" }) ) ), }); } _handleStartStopSitemanager() { const e = this.props.sitemaster.running || this.props.sitemaster.powerSupplyMode; let t = this.props.intl.formatMessage(e ? En.stopPowerwall : En.startPowerwall) + "?", i = null, n = this.props.sitemaster && this.props.sitemaster.canReboot !== li.a.yes; e && (i = c.createElement( "div", { className: "login-warning" }, this.props.sitemaster.running && this.props.hasSolarPowerwall && c.createElement(yn, null), n && c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_sitemaster_header_warning_industrial", defaultMessage: '{warning} This system is in a state where Tesla does not recommend stopping it. Reason: "{reason}"', values: { warning: c.createElement("span", { className: "bold" }, this.props.intl.formatMessage(oe.warnings.caution), ":"), reason: c.createElement(pn.a, { messages: oe.canRebootMessages, id: this.props.sitemaster.canReboot }), }, }), c.createElement(u.FormattedMessage, { tagName: "p", id: "home_container_sitemaster_confirm_industrial", defaultMessage: "Are you sure you want to stop the system?" }) )), this.props.showModal("SITEMASTER_MODAL", { modalClass: "modal-error", size: this.props.isResi ? "lg" : "md", centered: !0, showCancel: !1, showErrors: !1, headerView: c.createElement("div", { className: "sitemaster-modal-title" }, c.createElement("h2", { className: "modal-title" }, t), i), footerView: c.createElement(an, { isSystemRunning: this.props.sitemaster && this.props.sitemaster.running, requiresConfirmation: n, onClick: this._handleStartOrStopSitemaster }), }); } _handleDownloadLogs() { let e = this.props.intl.formatMessage(En.downloadAllLogs) + "?"; this.props.showModal("DOWNLOAD_LOGS_MODAL", { modalClass: "modal-error", size: "md", centered: !0, showCancel: !1, showErrors: !1, headerView: c.createElement( "div", { "data-testid": "0a225d17-9dc8-4e45-9526-0fc41ddd3eab", className: "sitemaster-modal-title" }, c.createElement("h2", { "data-testid": "bf6e19d0-6ca5-481d-a938-dea0dae8538e", className: "modal-title" }, e), c.createElement( "ul", { "data-testid": "8c65331b-9e1b-40aa-8204-3f19bde8a4ae", className: "bullet-point" }, c.createElement( "li", { "data-testid": "9f3f748a-bf4a-420f-899c-fb7973b7df99", className: "pb-1" }, c.createElement(u.FormattedMessage, { id: "home_view_download_logs_description_one", defaultMessage: "This downloads a compressed set of system logs that can be helpful to diagnose operating system, software, and networking issues.", }) ), c.createElement( "li", { "data-testid": "1bc6bbdb-f1be-4cf6-8418-2c9a74c21b19", className: "pb-1" }, c.createElement(u.FormattedMessage, { id: "home_view_download_logs_description_two", defaultMessage: "This is especially useful when the Gateway cannot be connected to the network, and advanced troubleshooting is needed.", }) ), c.createElement( "li", { "data-testid": "28d0e870-5eae-48f2-aebc-f6252d952e4a", className: "pb-1" }, c.createElement(u.FormattedMessage, { id: "home_view_download_logs_description_three", defaultMessage: "Logs are signed and encrypted and should be sent to Tesla Energy Service for investigation." }) ) ) ), footerView: c.createElement( "div", { "data-testid": "7cd324b9-1299-4609-8dd1-80e3bf04f141", className: "row" }, c.createElement( "div", { "data-testid": "bfcec1a7-1b17-4bfb-bffc-7a886bd095a8", className: "col-xs-6" }, c.createElement("button", { "data-testid": "de30eaba-fd87-480f-b791-e9f29e0560c9", className: "btn btn-link btn-close", "data-dismiss": "modal" }, c.createElement(u.FormattedMessage, te.buttons.CANCEL)) ), c.createElement( "div", { "data-testid": "9282c7ef-ced0-4b65-8b1f-cc112dc94e95", className: "col-xs-6" }, c.createElement( "button", { "data-testid": "89dddf55-3c14-475b-8837-dbb414c217d8", className: "btn btn-link btn-error", onClick: this._handleTriggerDownloadLogs }, this.props.intl.formatMessage(oe.modalMessages.yes) ) ) ), }); } _handleTriggerDownloadLogs() { const e = document.createElement("a"); (e.href = "/api/getlogs"), e.setAttribute("download", "tesla_config_logs.tgz"), e.click(), this.props.destroyModal("DOWNLOAD_LOGS_MODAL"); } _handleStartOrStopSitemaster() { (null == this.props.sitemaster.running && !this.props.sitemaster.powerSupplyMode) || this.state.togglingSitemaster ? this.props.destroyModal("SITEMASTER_MODAL") : (this._updateModalFooter("SITEMASTER_MODAL"), this.setState({ togglingSitemaster: !0 }, () => { this.props.sitemaster.running || this.props.sitemaster.powerSupplyMode ? this.props.stopSitemaster(!this.props.isResi) : this.props.startSitemaster(); })); } _handleGoOffGrid() { fetch(Y.a.api.uri + "/v2/islanding/mode", { credentials: Y.a.credentials, method: "POST", body: JSON.stringify({ island_mode: "intentional_reconnect_failsafe" }) }); } _handleReconnectToGrid() { fetch(Y.a.api.uri + "/v2/islanding/mode", { credentials: Y.a.credentials, method: "POST", body: JSON.stringify({ island_mode: "backup" }) }); } } function yn() { return c.createElement( "div", { style: { padding: 8 } }, c.createElement("h3", null, c.createElement(u.FormattedMessage, En.caution)), c.createElement("p", null, c.createElement(u.FormattedMessage, { id: "home_container_caution_deenergize", defaultMessage: "To safely de-energize the system turn all Powerwall switches OFF." })) ); } function Sn() { return c.createElement( "div", { style: { padding: 8 } }, c.createElement("h3", null, c.createElement(u.FormattedMessage, En.caution)), c.createElement("p", null, c.createElement(u.FormattedMessage, { id: "home_container_caution_energized", defaultMessage: "System may remain energized if solar strings are connected." })) ); } hn( bn, "propTypes", vn( vn({}, Ue.a), {}, { getLoginHeaderView: l.a.func.isRequired, handleChangeLoginModal: l.a.func.isRequired, replaceLocation: l.a.func.isRequired, changeLocation: l.a.func.isRequired, initializeConfig: l.a.func.isRequired, getSiteName: l.a.func.isRequired, showModal: l.a.func.isRequired, destroyModal: l.a.func.isRequired, clearErrors: l.a.func.isRequired, fetchAlerts: l.a.func.isRequired, fetchNetworks: l.a.func.isRequired, fetchPowerwalls: l.a.func.isRequired, fetchSiteInfo: l.a.func.isRequired, startToggleAuth: l.a.func.isRequired, cancelPendingToggleAuth: l.a.func.isRequired, fetchSitemasterSettings: l.a.func.isRequired, startSitemaster: l.a.func.isRequired, stopSitemaster: l.a.func.isRequired, getMeterAggregates: l.a.func.isRequired, getRegistration: l.a.func.isRequired, getSOE: l.a.func.isRequired, getGridStatus: l.a.func.isRequired, resetAll: l.a.func.isRequired, login: l.a.func.isRequired, logout: l.a.func.isRequired, changeUsername: l.a.func.isRequired, testAndCheckFirmwareUpdateUrgency: l.a.func.isRequired, authentication: l.a.shape({ loginType: l.a.oneOf(Object.values(y.c)).isRequired, username: l.a.string.isRequired, selectedLoginType: l.a.oneOf(Object.values(y.c)).isRequired, toggleAuthSupported: l.a.bool.isRequired, waitForToggle: l.a.bool, }).isRequired, errors: l.a.array.isRequired, configuration: l.a.shape({ isFetching: l.a.bool.isRequired, isNew: l.a.bool, version: l.a.string.isRequired, hash: l.a.string.isRequired }).isRequired, sitemaster: l.a.shape({ isFetching: l.a.bool.isRequired, didInvalidate: l.a.bool.isRequired, running: l.a.bool, powerSupplyMode: l.a.bool, smStartError: l.a.string }).isRequired, network: l.a.object.isRequired, meter: l.a.object.isRequired, grid: l.a.shape({ config: l.a.object.isRequired }).isRequired, powerwall: l.a.object.isRequired, settings: l.a.object.isRequired, registration: l.a.object.isRequired, alerts: l.a.array.isRequired, isResi: l.a.bool.isRequired, hasSolarPowerwall: l.a.bool.isRequired, isUpdateRequired: l.a.bool.isRequired, cellularDisabled: l.a.bool.isRequired, hasNetworkConnection: l.a.bool.isRequired, installationProblems: l.a.array.isRequired, deviceType: l.a.oneOf(Object.values(qe.DEVICE_TYPE)), tegType: l.a.string, } ) ); var Rn = { component: Object(m.connect)( (e) => { const { authentication: t, error: i, configuration: n, network: r, meter: a, grid: o, powerwall: s, settings: _, sitemaster: l, test: c, registration: d, update: u } = e, { deviceType: m, tegType: p } = n, g = Object(je.isResiGateway)(m), w = Object(se.leaderSelector)(e), v = Object(se.followersSelector)(e), f = Object(nn.hasSolarPowerwallSelector)(e), h = !!u && u.updateUrgency === ci.b.REQUIRED, E = Object(se.cellularDisabledSelector)(e), b = Object(gn.hasNetworkConnectionSelector)(e), y = Object(_e.b)(e); return vn( { authentication: t, errors: i.items, configuration: n, network: r, meter: a, grid: o, powerwall: s, settings: _, sitemaster: l, registration: d, alerts: c.alerts, isResi: g, isUpdateRequired: h, leader: w, followers: v, hasSolarPowerwall: f, cellularDisabled: E, hasNetworkConnection: b, installationProblems: y, deviceType: m, tegType: p, }, mn(e) ); }, (e) => vn( vn({}, Object(g.b)({ testAndCheckFirmwareUpdateUrgency: rn.b }, e)), {}, { replaceLocation: (t) => { e(Object(Ze.replace)(t)); }, changeLocation: (t) => { e(Object(Ze.push)(t)); }, initializeConfig: () => { e(Object(x.initializeConfig)()); }, showModal: (t, i, n) => { e(Object(w.showModal)(t, i, n)); }, updateModal: (t, i, n) => { e(Object(w.updateModal)(t, i, n)); }, destroyModal: (t) => { e(Object(w.destroyModal)(t)); }, getSiteName: () => { e(Object(Ji.getSiteName)()); }, clearErrors: () => { e(Object(V.clearErrors)()); }, changeUsername: (t) => { e(Object(B.e)(t)); }, login: (t, i, n, r) => e(Object(B.h)(t, i, n, r)), startToggleAuth: () => e(Object(B.l)()), toggleAuthLogin: (t, i) => e(Object(B.m)(t, i)), cancelPendingToggleAuth: () => { e(Object(B.a)()); }, logout: () => { e(Object(B.i)()); }, fetchSiteInfo: () => { e(Object(Ji.fetchSiteInfo)()); }, fetchSitemasterSettings: () => e(Object(H.a)()), changeSelectedLoginType: (t) => { e(Object(B.d)(t)); }, startSitemaster: () => { e(Object(H.c)()); }, stopSitemaster: (t) => { e(Object(H.d)({ forceStop: t })); }, fetchAlerts: () => { e(Object($i.fetchAlerts)()); }, getMeterAggregates: () => e(Object(Qi.getMeterAggregates)()), getRegistration: () => { e(Object(en.getRegistration)()); }, fetchNetworks: () => { e(Object(tn.fetchNetworks)()); }, fetchPowerwalls: (t) => { e(Object(Xi.fetchPowerwalls)(t)); }, getSOE: () => e(Object(Xi.getSOE)()), getGridStatus: () => e(Object(Zi.getGridStatus)()), resetAll: () => { e(Object(Yi.resetAll)()); }, } ) )(Object(u.injectIntl)(Object(Ue.b)(bn))), }, Tn = i(11), An = (e) => ({ path: "network", getComponent(t, n) { Promise.all([i.e(0), i.e(24)]) .then( ((t) => { const r = i(1256).default, a = i(567).default; Object(Tn.b)(e, { key: "network", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Cn = (e) => ({ path: "network/ethernet", getComponent(t, n) { Promise.all([i.e(0), i.e(24)]) .then( ((t) => { const r = i(1256).default, a = i(567).default; Object(Tn.b)(e, { key: "network", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), In = (e) => ({ path: "network/wifi", getComponent(t, n) { Promise.all([i.e(0), i.e(24)]) .then( ((t) => { const r = i(1256).default, a = i(567).default; Object(Tn.b)(e, { key: "network", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), On = (e) => ({ path: "meter", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(21)]) .then( ((t) => { const r = i(1261).default, a = i(1154).default, o = i(1089).default, s = i(1090).default, _ = i(533).default; Object(Tn.c)(e, [ { key: "meter", reducer: a }, { key: "grid", reducer: o }, { key: "battery", reducer: s }, { key: "sitemaster", reducer: _ }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Nn = function (e) { return { path: "components", getComponent(t, n) { i.e(12) .then( ((t) => { const r = i(1242).default, a = i(1099).default, o = i(1096).default; Object(Tn.c)(e, [ { key: "siteInfo", reducer: a }, { key: "settings", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }; }, kn = (e) => ({ path: "cts", getComponent(t, n) { Promise.all([i.e(1), i.e(14)]) .then( ((t) => { const r = i(1259).default, a = i(1119).default, o = i(1154).default, s = i(1096).default, _ = i(1089).default, l = i(1116).default, c = i(1148).default, d = i(533).default, u = i(285).default, m = i(60).default; Object(Tn.c)(e, [ { key: "test", reducer: a }, { key: "meter", reducer: o }, { key: "settings", reducer: s }, { key: "grid", reducer: _ }, { key: "solar", reducer: l }, { key: "generator", reducer: c }, { key: "sitemaster", reducer: d }, { key: "powerwall", reducer: u }, { key: "configuration", reducer: m }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Pn = (e) => ({ path: "timezone", getComponent(t, n) { i.e(35) .then( ((t) => { const r = i(1269).default, a = i(1096).default; Object(Tn.b)(e, { key: "settings", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Dn = (e) => ({ path: "grid", getComponent(t, n) { Promise.all([i.e(1), i.e(17)]) .then( ((t) => { const r = i(1243).default, a = i(1089).default, o = i(1154).default, s = i(285).default; Object(Tn.c)(e, [ { key: "grid", reducer: a }, { key: "meter", reducer: o }, { key: "powerwall", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Ln = (e) => ({ path: "batteries", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(3), i.e(5), i.e(28)]) .then( ((t) => { const r = i(1262).default, a = i(1090).default, o = i(1154).default, s = i(285).default, _ = i(1197).default; Object(Tn.c)(e, [ { key: "battery", reducer: a }, { key: "meter", reducer: o }, { key: "powerwall", reducer: s }, { key: "components", reducer: _ }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Mn = (e) => ({ path: "batteries", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(3), i.e(5)]) .then( ((t) => { const r = i(1262).default, a = i(1090).default, o = i(1154).default, s = i(285).default; Object(Tn.c)(e, [ { key: "battery", reducer: a }, { key: "meter", reducer: o }, { key: "powerwall", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), zn = (e) => ({ path: "generation", getComponent(t, n) { i.e(16) .then( ((t) => { const r = i(1257).default, a = i(1116).default, o = i(1148).default; Object(Tn.c)(e, [ { key: "solar", reducer: a }, { key: "generator", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Un = (e) => ({ path: "settings", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(2), i.e(4), i.e(32)]) .then( ((t) => { const r = i(1265).default, a = i(1096).default, o = i(1154).default, s = i(285).default, _ = i(1089).default, l = i(1116).default, c = i(1099).default, d = i(1090).default; Object(Tn.c)(e, [ { key: "settings", reducer: a }, { key: "meter", reducer: o }, { key: "powerwall", reducer: s }, { key: "grid", reducer: _ }, { key: "solar", reducer: l }, { key: "siteInfo", reducer: c }, { key: "battery", reducer: d }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Vn = (e) => ({ path: "test/inverter", getComponent(t, n) { i.e(19) .then( ((t) => { const r = i(1263).default, a = i(1119).default; Object(Tn.c)(e, [{ key: "test", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Gn = (e) => ({ path: "installation", getComponent(t, n) { i.e(18) .then( ((t) => { const r = i(1270).default, a = i(1132).default, o = i(1089).default, s = i(285).default; Object(Tn.c)(e, [ { key: "installation", reducer: a }, { key: "grid", reducer: o }, { key: "powerwall", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), jn = (e) => ({ path: "legal", getComponent(t, n) { Promise.all([i.e(1), i.e(6), i.e(20)]) .then( ((t) => { const r = i(1271).default, a = i(566).default, o = i(1154).default, s = i(1089).default, _ = i(285).default; Object(Tn.c)(e, [ { key: "registration", reducer: a }, { key: "meter", reducer: o }, { key: "grid", reducer: s }, { key: "powerwall", reducer: _ }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Wn = i(568), Fn = i.n(Wn), qn = (e) => ({ path: "registration", getComponent(t, n) { Promise.all([i.e(6), i.e(29)]) .then( ((t) => { const r = i(1244).default, a = i(566).default, o = i(1089).default; Object(Tn.c)(e, [ { key: "registration", reducer: a }, { key: "grid", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), xn = i(569), Bn = i.n(xn), Hn = (e) => ({ path: "password", getComponent(t, n) { Promise.all([i.e(0), i.e(30)]) .then( ((t) => { const r = i(1266).default, a = i(285).default; Object(Tn.c)(e, [{ key: "powerwall", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Kn = (e) => ({ path: "summary", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(3), i.e(34)]) .then( ((t) => { const r = i(1254).default, a = i(567).default, o = i(285).default, s = i(1096).default, _ = i(1089).default, l = i(60).default, c = i(1132).default, d = i(1099).default, u = i(1154).default, m = i(1197).default, p = i(1090).default; Object(Tn.c)(e, [ { key: "powerwall", reducer: o }, { key: "settings", reducer: s }, { key: "grid", reducer: _ }, { key: "network", reducer: a }, { key: "configuration", reducer: l }, { key: "installation", reducer: c }, { key: "siteInfo", reducer: d }, { key: "meter", reducer: u }, { key: "installation", reducer: c }, { key: "components", reducer: m }, { key: "battery", reducer: p }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Yn = i(264), Qn = i.n(Yn), Zn = (e) => ({ path: "success", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(33)]) .then( ((t) => { const r = i(1272).default, a = i(566).default, o = i(1116).default, s = i(1148).default, _ = i(1154).default, l = i(285).default, c = i(1096).default, d = i(1132).default; Object(Tn.c)(e, [ { key: "registration", reducer: a }, { key: "solar", reducer: o }, { key: "generator", reducer: s }, { key: "meter", reducer: _ }, { key: "powerwall", reducer: l }, { key: "settings", reducer: c }, { key: "installation", reducer: d }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Jn = (e) => ({ path: "alert", getComponent(t, n) { i.e(8) .then( ((t) => { const r = i(1245).default, a = i(1119).default; Object(Tn.c)(e, [{ key: "test", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), Xn = (e) => ({ path: "diagnostics", getComponent(t, n) { Promise.all([i.e(0), i.e(15)]) .then( ((t) => { const r = i(1258).default, a = i(1246).default, o = i(566).default; Object(Tn.c)(e, [ { key: "diagnostic", reducer: a }, { key: "registration", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), $n = (e) => ({ path: "phase", getComponent(t, n) { Promise.all([i.e(0), i.e(1), i.e(27)]) .then( ((t) => { const r = i(1264).default, a = i(285).default, o = i(1089).default, s = i(1154).default; Object(Tn.c)(e, [ { key: "powerwall", reducer: a }, { key: "grid", reducer: o }, { key: "meter", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), er = (e) => ({ path: "control", getComponent(t, n) { Promise.all([i.e(0), i.e(2), i.e(13)]) .then( ((t) => { const r = i(1273).default, a = i(1104).default; Object(Tn.b)(e, { key: "control", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), tr = (e) => ({ path: "advanced-settings", getComponent(t, n) { Promise.all([i.e(0), i.e(2), i.e(4), i.e(7)]) .then( ((t) => { const r = i(1267).default, a = i(1099).default, o = i(1096).default; Object(Tn.c)(e, [ { key: "siteInfo", reducer: a }, { key: "settings", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), ir = (e) => ({ path: "meter-validation", getComponent(t, n) { Promise.all([i.e(0), i.e(2), i.e(22)]) .then( ((t) => { const r = i(1253).default, a = i(1104).default, o = i(1229).default, s = i(280).default; Object(Tn.c)(e, [ { key: "control", reducer: a }, { key: "metrics", reducer: o }, { key: "meterValidation", reducer: s }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), nr = (e) => ({ path: "modbus", getComponent(t, n) { Promise.all([i.e(0), i.e(23)]) .then( ((t) => { const r = i(1255).default, a = i(278).default; Object(Tn.b)(e, { key: "modbus", reducer: a }), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), rr = (e) => ({ path: "client-protocols", getComponent(t, n) { i.e(10) .then( ((t) => { const r = i(1274).default, a = i(567).default, o = i(60).default; Object(Tn.c)(e, [ { key: "network", reducer: a }, { key: "configuration", reducer: o }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), ar = (e) => ({ path: "open-loop-meter-validation", getComponent(t, n) { Promise.all([i.e(1), i.e(26)]) .then( ((t) => { const r = i(1248).default, a = i(1154).default, o = i(60).default, s = i(199).default, _ = i(291).default; Object(Tn.c)(e, [ { key: "meter", reducer: a }, { key: "configuration", reducer: o }, { key: "authentication", reducer: s }, { key: "error", reducer: _ }, ]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), or = (e) => ({ path: "self-test-log-viewer", getComponent(t, n) { i.e(31) .then( ((t) => { const r = i(1249).default, a = i(60).default; Object(Tn.c)(e, [{ key: "configuration", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), sr = (e) => ({ path: "network-switch", getComponent(t, n) { Promise.all([i.e(0), i.e(25)]) .then( ((t) => { const r = i(1250).default, a = i(60).default; Object(Tn.c)(e, [{ key: "configuration", reducer: a }]), n(null, r); }).bind(null, i) ) .catch(i.oe); }, }), _r = i(286), lr = i.n(_r); i.d(t, "createRoutes", function () { return cr; }); const cr = (e) => ({ path: "/", component: Qe, getIndexRoute(t, n) { Promise.all([i.e(1), i.e(39)]) .then( ((t) => { const r = i(567).default, a = i(1154).default, o = i(1089).default, s = i(285).default, _ = i(1116).default, l = i(1096).default, c = i(533).default, d = i(1119).default, u = i(566).default; Object(Tn.c)(e, [ { key: "network", reducer: r }, { key: "meter", reducer: a }, { key: "grid", reducer: o }, { key: "powerwall", reducer: s }, { key: "solar", reducer: _ }, { key: "settings", reducer: l }, { key: "sitemaster", reducer: c }, { key: "test", reducer: d }, { key: "registration", reducer: u }, ]), n(null, Rn); }).bind(null, i) ) .catch(i.oe); }, getChildRoutes(t, n) { Promise.resolve() .then( ((t) => { n(null, [ { path: "wizard", getComponent(e, t) { i.e(38) .then( ((e) => { const n = i(1268).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, An(e), Cn(e), In(e), { path: "update", getComponent(e, t) { i.e(36) .then( ((e) => { const n = i(1260).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, On(e), Nn(e), kn(e), Pn(e), Dn(e), { path: "password-generate", getComponent(e, t) { t(null, Fn.a); }, }, $n(e), Ln(e), { path: "powerwall", getComponent(e, t) { Promise.all([i.e(0), i.e(1), i.e(3), i.e(5), i.e(28)]) .then( ((e) => { const n = i(1247).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, Mn(e), zn(e), Un(e), Vn(e), Xn(e), Gn(e), jn(e), qn(e), Hn(e), Kn(e), { path: "system", getComponent(e, t) { t(null, Qn.a); }, }, { path: "service", getComponent(e, t) { t(null, Bn.a); }, }, Zn(e), Jn(e), er(e), tr(e), ir(e), nr(e), rr(e), ar(e), or(e), sr(e), { path: "compliance", getComponent(e, t) { i.e(11) .then( ((e) => { const n = i(1251).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, { path: "upgrade", getComponent(e, t) { i.e(37) .then( ((e) => { const n = i(1252).default; t(null, n); }).bind(null, i) ) .catch(i.oe); }, }, { path: "*", component: lr.a }, ]); }).bind(null, i) ) .catch(i.oe); }, }); t.default = cr; }, function (e, t, i) { "use strict"; i.r(t); i(592), i(593); var n = i(1), r = i(20), a = i.n(r), o = i(17), s = i(35), _ = i(3), l = i(529), c = i(88), d = i(49), u = i(268), m = i(531), p = i.n(m), g = i(2); const w = ({ dispatch: e }) => (t) => e( (function (e = "/") { return { type: g.LOCATION_CHANGE, payload: e }; })(t) ); var v = i(532), f = i.n(v); function h(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } class E { static GlobalInstance() { return E._sharedInstance || new E(); } constructor(e) { return null === E._sharedInstance && ((E._sharedInstance = this), (this.persist = e)), E.GlobalInstance(); } purge(e) { this.persist && this.persist.purge(e); } rehydrate(e, t) { this.persist && this.persist.rehydrate(e, t); } } h(E, "_sharedInstance", null), h(E, "config", { whitelist: ["authentication"], storage: f.a }); var b = i(11), y = (i(14), i(45)), S = i(534), R = i.n(S), T = i(535), A = i.n(T), C = i(536), I = i.n(C), O = i(537), N = i.n(O), k = i(538), P = i.n(k), D = i(539), L = i.n(D), M = i(540), z = i.n(M), U = i(541), V = i(542), G = i(543), j = i(544), W = i(545), F = i(546), q = i(547), x = i(548), B = i(549), H = i(550), K = i(551), Y = i(552), Q = i(553); function Z(e, t) { var i = Object.keys(e); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); t && (n = n.filter(function (t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), i.push.apply(i, n); } return i; } function J(e) { for (var t = 1; t < arguments.length; t++) { var i = null != arguments[t] ? arguments[t] : {}; t % 2 ? Z(Object(i), !0).forEach(function (t) { X(e, t, i[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(i)) : Z(Object(i)).forEach(function (t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(i, t)); }); } return e; } function X(e, t, i) { return t in e ? Object.defineProperty(e, t, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = i), e; } Object(_.addLocaleData)([...R.a, ...A.a, ...I.a, ...N.a, ...P.a, ...L.a, ...z.a]); const $ = { en: q, de: J(J({}, U), x), it: J(J({}, V), B), es: J(J({}, G), H), nl: J(J({}, j), K), fr: J(J({}, W), Y), ja: J(J({}, F), Q) }; const ee = window.__INITIAL_STATE__ || {}; delete window.__INITIAL_STATE__; const te = ((e = {}) => { const t = [p.a, Object(c.routerMiddleware)(o.browserHistory)]; let i = d.d; const n = Object(d.e)(Object(b.a)(), e, i(Object(d.a)(...t), Object(u.a)())); return (n.asyncReducers = {}), (n.unsubscribeHistory = o.browserHistory.listen(w(n))), new E(Object(u.b)(n, E.config)), n; })(ee); const ie = document.getElementById("root"); var ne; (ne = () => { const e = i(1049).default(te), t = n.createElement(s.Provider, { store: te }, n.createElement(l.TranslationsProvider, { translations: $, override: Object(y.b)("Locale") }, n.createElement(o.Router, { history: o.browserHistory, children: e }))); a.a.render(t, ie); }), window.intl ? ne() : Promise.all([i.e(0), i.e(40)]) .then( ((e) => { i(1075), i(1076), i(1077), i(1078), i(1079), i(1080), i(1081), i(1082), ne(); }).bind(null, i) ) .catch(i.oe); }, ]); ================================================ FILE: tools/server/app/static/viz-static/black.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Black customization"); triggerOnMutation(formatPowerwallForBlack); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForBlack() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "black", }); $('.power-flow-grid.active').css({ "background-color": "#000", }); } ================================================ FILE: tools/server/app/static/viz-static/clear.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "/static/viz-static/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Clear customization"); triggerOnMutation(formatPowerwallForClear); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForClear() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "transparent", }); $('.power-flow-grid.active').css({ "background-color": "transparent", }); } ================================================ FILE: tools/server/app/static/viz-static/dakboard.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Dakboard customization"); triggerOnMutation(formatPowerwallForDakboard); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForDakboard() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "black", }); $('.power-flow-grid.active').css({ "background-color": "#000", }); } ================================================ FILE: tools/server/app/static/viz-static/grafana-dark.js ================================================ 'use strict' // Grafana Dark Theme // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Grafana customization"); triggerOnMutation(formatPowerwallForGrafana); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForGrafana() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "#111217", }); $('.power-flow-grid.active').css({ "background-color": "#111217", }); } ================================================ FILE: tools/server/app/static/viz-static/grafana.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying Grafana customization"); triggerOnMutation(formatPowerwallForGrafana); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForGrafana() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn').hide(); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "#161719", }); $('.power-flow-grid.active').css({ "background-color": "#161719", }); } ================================================ FILE: tools/server/app/static/viz-static/solar.js ================================================ 'use strict' // Clear IndexedDB to prevent auth hangup in the proxied Powerwall web app. try { window.indexedDB.databases().then((dbs) => { dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) }); }); } catch (error) { document.write("Browser blocking indexedDB - Turn off incognito mode."); } function injectScriptAndUse() { return new Promise((resolve, reject) => { var body = document.getElementsByTagName("body")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function () { resolve(); }; body.appendChild(script); }); } injectScriptAndUse().then(() => { console.log("Applying SolarOnly customization"); triggerOnMutation(formatPowerwallForSolar); }); function triggerOnMutation(cb) { // Create an observer instance var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { var newNodes = mutation.addedNodes; // DOM NodeList if (newNodes !== null) { // If there are new nodes added if (cb) cb(); } }); }); // Configuration of the observer: var config = { attributes: true, childList: true, subtree: true, }; var target = $("#root")[0]; // Pass in the target node, as well as the observer options observer.observe(target, config); } function formatPowerwallForSolar() { // Hide elements. $('.overview-menu, #logout, .footer, .compact-btn-row, .toast-list, .power-flow-header, .btn, .powerwall-soe, .soe-label').hide(); // Hide Powerwall image var imgElement = document.querySelector('[data-testid="b3372156-8a9e-4d17-9721-fcc5891d1074"]'); if (imgElement) { imgElement.style.display = 'none'; } // Hide the Powerwall text const divs = document.querySelectorAll('[data-testid="ec7d6a6d-b6d2-411c-a535-c052c00baf62"]'); divs.forEach(div => { if (div.style.width === '120px' && div.style.top === '200.5px' && div.style.left === '0px' && div.style.right === '0px') { const paragraph = div.querySelector('p[data-testid="4c6aadb3-7661-4d7f-b1ff-d5a0571fac60"]'); if (paragraph) { paragraph.style.display = 'none'; } } }); // Set alignment $('.core-layout__viewport').css({ padding: 0, margin: 0, }); $('.power-flow-header').css({ "padding-top": 0, }); $('.power-flow-grid').css({ width: "100%", left: 0, right: 0, margin: 0, "padding-top": 0, "position": "fixed", }); $('.app').css({ "overflow-y": "hidden", }); // Set colors $('body').css({ "background-color": "transparent", }); $('.power-flow-grid.active').css({ "background-color": "transparent", }); } ================================================ FILE: tools/server/app/static/viz-static/vendor.js ================================================ /*! For license information please see vendor.17c71172308436a079d1.js.LICENSE */ (window.webpackJsonp = window.webpackJsonp || []).push([ [0], [ function (e, t, n) { e.exports = n(601)(); }, function (e, t, n) { "use strict"; e.exports = n(594); }, , function (e, t, n) { "use strict"; n.r(t); var r = n(528), o = n.n(r), a = n(89), i = n.n(a), s = n(131), u = n.n(s), c = n(0), l = n.n(c), d = n(1), f = n.n(d), p = n(196), h = n.n(p), m = n(19), M = n.n(m); function y(e) { return JSON.stringify( e.map(function (e) { return e && "object" == typeof e ? ((t = e), Object.keys(t) .sort() .map(function (e) { var n; return ((n = {})[e] = t[e]), n; })) : e; var t; }) ); } var v = function (e, t) { return ( void 0 === t && (t = {}), function () { for (var n, r = [], o = 0; o < arguments.length; o++) r[o] = arguments[o]; var a = y(r), i = a && t[a]; return i || ((i = new ((n = e).bind.apply(n, [void 0].concat(r)))()), a && (t[a] = i)), i; } ); }; n.d(t, "addLocaleData", function () { return g; }), n.d(t, "intlShape", function () { return X; }), n.d(t, "injectIntl", function () { return se; }), n.d(t, "defineMessages", function () { return ue; }), n.d(t, "IntlProvider", function () { return we; }), n.d(t, "FormattedDate", function () { return Te; }), n.d(t, "FormattedTime", function () { return ke; }), n.d(t, "FormattedRelative", function () { return Oe; }), n.d(t, "FormattedNumber", function () { return Se; }), n.d(t, "FormattedPlural", function () { return ze; }), n.d(t, "FormattedMessage", function () { return xe; }), n.d(t, "FormattedHTMLMessage", function () { return De; }); var b = { locale: "en", pluralRuleFunction: function (e, t) { var n = String(e).split("."), r = !n[1], o = Number(n[0]) == e, a = o && n[0].slice(-1), i = o && n[0].slice(-2); return t ? (1 == a && 11 != i ? "one" : 2 == a && 12 != i ? "two" : 3 == a && 13 != i ? "few" : "other") : 1 == e && r ? "one" : "other"; }, fields: { year: { displayName: "year", relative: { 0: "this year", 1: "next year", "-1": "last year" }, relativeTime: { future: { one: "in {0} year", other: "in {0} years" }, past: { one: "{0} year ago", other: "{0} years ago" } }, }, month: { displayName: "month", relative: { 0: "this month", 1: "next month", "-1": "last month" }, relativeTime: { future: { one: "in {0} month", other: "in {0} months" }, past: { one: "{0} month ago", other: "{0} months ago" } }, }, day: { displayName: "day", relative: { 0: "today", 1: "tomorrow", "-1": "yesterday" }, relativeTime: { future: { one: "in {0} day", other: "in {0} days" }, past: { one: "{0} day ago", other: "{0} days ago" } } }, hour: { displayName: "hour", relative: { 0: "this hour" }, relativeTime: { future: { one: "in {0} hour", other: "in {0} hours" }, past: { one: "{0} hour ago", other: "{0} hours ago" } } }, minute: { displayName: "minute", relative: { 0: "this minute" }, relativeTime: { future: { one: "in {0} minute", other: "in {0} minutes" }, past: { one: "{0} minute ago", other: "{0} minutes ago" } } }, second: { displayName: "second", relative: { 0: "now" }, relativeTime: { future: { one: "in {0} second", other: "in {0} seconds" }, past: { one: "{0} second ago", other: "{0} seconds ago" } } }, }, }; function g() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], t = Array.isArray(e) ? e : [e]; t.forEach(function (e) { e && e.locale && (i.a.__addLocaleData(e), u.a.__addLocaleData(e)); }); } function _(e) { var t = e && e.toLowerCase(); return !(!i.a.__localeData__[t] || !u.a.__localeData__[t]); } var A = "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; }, L = ((function () { function e(e) { this.value = e; } function t(t) { var n, r; function o(n, r) { try { var i = t[n](r), s = i.value; s instanceof e ? Promise.resolve(s.value).then( function (e) { o("next", e); }, function (e) { o("throw", e); } ) : a(i.done ? "return" : "normal", i.value); } catch (e) { a("throw", e); } } function a(e, t) { switch (e) { case "return": n.resolve({ value: t, done: !0 }); break; case "throw": n.reject(t); break; default: n.resolve({ value: t, done: !1 }); } (n = n.next) ? o(n.key, n.arg) : (r = null); } (this._invoke = function (e, t) { return new Promise(function (a, i) { var s = { key: e, arg: t, resolve: a, reject: i, next: null }; r ? (r = r.next = s) : ((n = r = s), o(e, t)); }); }), "function" != typeof t.return && (this.return = void 0); } "function" == typeof Symbol && Symbol.asyncIterator && (t.prototype[Symbol.asyncIterator] = function () { return this; }), (t.prototype.next = function (e) { return this._invoke("next", e); }), (t.prototype.throw = function (e) { return this._invoke("throw", e); }), (t.prototype.return = function (e) { return this._invoke("return", e); }); })(), function (e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); }), w = (function () { function e(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; (r.enumerable = r.enumerable || !1), (r.configurable = !0), "value" in r && (r.writable = !0), Object.defineProperty(e, r.key, r); } } return function (t, n, r) { return n && e(t.prototype, n), r && e(t, r), t; }; })(), T = function (e, t, n) { return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = n), e; }, k = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, O = function (e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); (e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } })), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : (e.__proto__ = t)); }, S = function (e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || ("object" != typeof t && "function" != typeof t) ? e : t; }, z = function (e) { if (Array.isArray(e)) { for (var t = 0, n = Array(e.length); t < e.length; t++) n[t] = e[t]; return n; } return Array.from(e); }, E = l.a.bool, x = l.a.number, D = l.a.string, N = l.a.func, j = l.a.object, C = l.a.oneOf, P = l.a.shape, Y = l.a.any, W = l.a.oneOfType, q = C(["best fit", "lookup"]), B = C(["narrow", "short", "long"]), R = C(["numeric", "2-digit"]), F = N.isRequired, H = { locale: D, timeZone: D, formats: j, messages: j, textComponent: Y, defaultLocale: D, defaultFormats: j, onError: N }, I = { formatDate: F, formatTime: F, formatRelative: F, formatNumber: F, formatPlural: F, formatMessage: F, formatHTMLMessage: F }, X = P(k({}, H, I, { formatters: j, now: F })), K = (D.isRequired, W([D, j]), { localeMatcher: q, formatMatcher: C(["basic", "best fit"]), timeZone: D, hour12: E, weekday: B, era: B, year: R, month: C(["numeric", "2-digit", "narrow", "short", "long"]), day: R, hour: R, minute: R, second: R, timeZoneName: C(["short", "long"]), }), U = { localeMatcher: q, style: C(["decimal", "currency", "percent"]), currency: D, currencyDisplay: C(["symbol", "code", "name"]), useGrouping: E, minimumIntegerDigits: x, minimumFractionDigits: x, maximumFractionDigits: x, minimumSignificantDigits: x, maximumSignificantDigits: x, }, J = { style: C(["best fit", "numeric"]), units: C(["second", "minute", "hour", "day", "month", "year", "second-short", "minute-short", "hour-short", "day-short", "month-short", "year-short"]) }, V = { style: C(["cardinal", "ordinal"]) }, G = Object.keys(H), $ = { "&": "&", ">": ">", "<": "<", '"': """, "'": "'" }, Q = /[&><"']/g; function Z(e) { return ("" + e).replace(Q, function (e) { return $[e]; }); } function ee(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}; return t.reduce(function (t, r) { return e.hasOwnProperty(r) ? (t[r] = e[r]) : n.hasOwnProperty(r) && (t[r] = n[r]), t; }, {}); } function te() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = e.intl; M()(t, "[React Intl] Could not find required `intl` object. needs to exist in the component ancestry."); } function ne(e, t) { if (e === t) return !0; if ("object" !== (void 0 === e ? "undefined" : A(e)) || null === e || "object" !== (void 0 === t ? "undefined" : A(t)) || null === t) return !1; var n = Object.keys(e), r = Object.keys(t); if (n.length !== r.length) return !1; for (var o = Object.prototype.hasOwnProperty.bind(t), a = 0; a < n.length; a++) if (!o(n[a]) || e[n[a]] !== t[n[a]]) return !1; return !0; } function re(e, t, n) { var r = e.props, o = e.state, a = e.context, i = void 0 === a ? {} : a, s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, u = i.intl, c = void 0 === u ? {} : u, l = s.intl, d = void 0 === l ? {} : l; return !ne(t, r) || !ne(n, o) || !(d === c || ne(ee(d, G), ee(c, G))); } function oe(e, t) { return "[React Intl] " + e + (t ? "\n" + t : ""); } function ae(e) { 0; } function ie(e) { return e.displayName || e.name || "Component"; } function se(e) { var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n = t.intlPropName, r = void 0 === n ? "intl" : n, o = t.withRef, a = void 0 !== o && o, i = (function (t) { function n(e, t) { L(this, n); var r = S(this, (n.__proto__ || Object.getPrototypeOf(n)).call(this, e, t)); return te(t), r; } return ( O(n, t), w(n, [ { key: "getWrappedInstance", value: function () { return M()(a, "[React Intl] To access the wrapped instance, the `{withRef: true}` option must be set when calling: `injectIntl()`"), this._wrappedInstance; }, }, { key: "render", value: function () { var t = this; return f.a.createElement( e, k({}, this.props, T({}, r, this.context.intl), { ref: a ? function (e) { return (t._wrappedInstance = e); } : null, }) ); }, }, ]), n ); })(d.Component); return (i.displayName = "InjectIntl(" + ie(e) + ")"), (i.contextTypes = { intl: X }), (i.WrappedComponent = e), h()(i, e); } function ue(e) { return e; } function ce(e) { return i.a.prototype._resolveLocale(e); } function le(e) { return i.a.prototype._findPluralRuleFunction(e); } var de = function e(t) { var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; L(this, e); var r = "ordinal" === n.style, o = le(ce(t)); this.format = function (e) { return o(e, r); }; }, fe = Object.keys(K), pe = Object.keys(U), he = Object.keys(J), me = Object.keys(V), Me = { second: 60, minute: 60, hour: 24, day: 30, month: 12 }; function ye(e) { var t = u.a.thresholds; (t.second = e.second), (t.minute = e.minute), (t.hour = e.hour), (t.day = e.day), (t.month = e.month), (t["second-short"] = e["second-short"]), (t["minute-short"] = e["minute-short"]), (t["hour-short"] = e["hour-short"]), (t["day-short"] = e["day-short"]), (t["month-short"] = e["month-short"]); } function ve(e, t, n, r) { var o = e && e[t] && e[t][n]; if (o) return o; r(oe("No " + t + " format named: " + n)); } function be(e, t) { var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = e.messages, s = e.defaultLocale, u = e.defaultFormats, c = n.id, l = n.defaultMessage; M()(c, "[React Intl] An `id` must be provided to format a message."); var d = i && i[c], f = Object.keys(r).length > 0; if (!f) return d || l || c; var p = void 0, h = e.onError || ae; if (d) try { var m = t.getMessageFormat(d, o, a); p = m.format(r); } catch (e) { h(oe('Error formatting message: "' + c + '" for locale: "' + o + '"' + (l ? ", using default message as fallback." : ""), e)); } else (!l || (o && o.toLowerCase() !== s.toLowerCase())) && h(oe('Missing message: "' + c + '" for locale: "' + o + '"' + (l ? ", using default message as fallback." : ""))); if (!p && l) try { var y = t.getMessageFormat(l, s, u); p = y.format(r); } catch (e) { h(oe('Error formatting the default message for: "' + c + '"', e)); } return p || h(oe('Cannot format message: "' + c + '", using message ' + (d || l ? "source" : "id") + " as fallback.")), p || d || l || c; } var ge = Object.freeze({ formatDate: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = e.timeZone, s = r.format, u = e.onError || ae, c = new Date(n), l = k({}, i && { timeZone: i }, s && ve(a, "date", s, u)), d = ee(r, fe, l); try { return t.getDateTimeFormat(o, d).format(c); } catch (e) { u(oe("Error formatting date.", e)); } return String(c); }, formatTime: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = e.timeZone, s = r.format, u = e.onError || ae, c = new Date(n), l = k({}, i && { timeZone: i }, s && ve(a, "time", s, u)), d = ee(r, fe, l); d.hour || d.minute || d.second || (d = k({}, d, { hour: "numeric", minute: "numeric" })); try { return t.getDateTimeFormat(o, d).format(c); } catch (e) { u(oe("Error formatting time.", e)); } return String(c); }, formatRelative: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = r.format, s = e.onError || ae, c = new Date(n), l = new Date(r.now), d = i && ve(a, "relative", i, s), f = ee(r, he, d), p = k({}, u.a.thresholds); ye(Me); try { return t.getRelativeFormat(o, f).format(c, { now: isFinite(l) ? l : t.now() }); } catch (e) { s(oe("Error formatting relative time.", e)); } finally { ye(p); } return String(c); }, formatNumber: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = e.formats, i = r.format, s = e.onError || ae, u = i && ve(a, "number", i, s), c = ee(r, pe, u); try { return t.getNumberFormat(o, c).format(n); } catch (e) { s(oe("Error formatting number.", e)); } return String(n); }, formatPlural: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = e.locale, a = ee(r, me), i = e.onError || ae; try { return t.getPluralFormat(o, a).format(n); } catch (e) { i(oe("Error formatting plural.", e)); } return "other"; }, formatMessage: be, formatHTMLMessage: function (e, t, n) { var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = Object.keys(r).reduce(function (e, t) { var n = r[t]; return (e[t] = "string" == typeof n ? Z(n) : n), e; }, {}); return be(e, t, n, o); }, }), _e = Object.keys(H), Ae = Object.keys(I), Le = { formats: {}, messages: {}, timeZone: null, textComponent: "span", defaultLocale: "en", defaultFormats: {}, onError: ae }, we = (function (e) { function t(e) { var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); M()( "undefined" != typeof Intl, "[React Intl] The `Intl` APIs must be available in the runtime, and do not appear to be built-in. An `Intl` polyfill should be loaded.\nSee: http://formatjs.io/guides/runtime-environments/" ); var o = n.intl, a = void 0; a = isFinite(e.initialNow) ? Number(e.initialNow) : o ? o.now() : Date.now(); var s = o || {}, c = s.formatters, l = void 0 === c ? { getDateTimeFormat: v(Intl.DateTimeFormat), getNumberFormat: v(Intl.NumberFormat), getMessageFormat: v(i.a), getRelativeFormat: v(u.a), getPluralFormat: v(de) } : c; return ( (r.state = k({}, l, { now: function () { return r._didDisplay ? Date.now() : a; }, })), r ); } return ( O(t, e), w(t, [ { key: "getConfig", value: function () { var e = this.context.intl, t = ee(this.props, _e, e); for (var n in Le) void 0 === t[n] && (t[n] = Le[n]); if ( !(function (e) { for (var t = (e || "").split("-"); t.length > 0; ) { if (_(t.join("-"))) return !0; t.pop(); } return !1; })(t.locale) ) { var r = t, o = r.locale, a = r.defaultLocale, i = r.defaultFormats; (0, r.onError)(oe('Missing locale data for locale: "' + o + '". Using default locale: "' + a + '" as fallback.')), (t = k({}, t, { locale: a, formats: i, messages: Le.messages })); } return t; }, }, { key: "getBoundFormatFns", value: function (e, t) { return Ae.reduce(function (n, r) { return (n[r] = ge[r].bind(null, e, t)), n; }, {}); }, }, { key: "getChildContext", value: function () { var e = this.getConfig(), t = this.getBoundFormatFns(e, this.state), n = this.state, r = n.now, o = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(n, ["now"]); return { intl: k({}, e, t, { formatters: o, now: r }) }; }, }, { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "componentDidMount", value: function () { this._didDisplay = !0; }, }, { key: "render", value: function () { return d.Children.only(this.props.children); }, }, ]), t ); })(d.Component); (we.displayName = "IntlProvider"), (we.contextTypes = { intl: X }), (we.childContextTypes = { intl: X.isRequired }); var Te = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatDate, n = e.textComponent, r = this.props, o = r.value, a = r.children, i = t(o, this.props); return "function" == typeof a ? a(i) : f.a.createElement(n, null, i); }, }, ]), t ); })(d.Component); (Te.displayName = "FormattedDate"), (Te.contextTypes = { intl: X }); var ke = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatTime, n = e.textComponent, r = this.props, o = r.value, a = r.children, i = t(o, this.props); return "function" == typeof a ? a(i) : f.a.createElement(n, null, i); }, }, ]), t ); })(d.Component); (ke.displayName = "FormattedTime"), (ke.contextTypes = { intl: X }); var Oe = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); te(n); var o = isFinite(e.initialNow) ? Number(e.initialNow) : n.intl.now(); return (r.state = { now: o }), r; } return ( O(t, e), w(t, [ { key: "scheduleNextUpdate", value: function (e, t) { var n = this; clearTimeout(this._timer); var r = e.value, o = e.units, a = e.updateInterval, i = new Date(r).getTime(); if (a && isFinite(i)) { var s = i - t.now, u = (function (e) { switch (e) { case "second": return 1e3; case "minute": return 6e4; case "hour": return 36e5; case "day": return 864e5; default: return 2147483647; } })( o || (function (e) { var t = Math.abs(e); return t < 6e4 ? "second" : t < 36e5 ? "minute" : t < 864e5 ? "hour" : "day"; })(s) ), c = Math.abs(s % u), l = s < 0 ? Math.max(a, u - c) : Math.max(a, c); this._timer = setTimeout(function () { n.setState({ now: n.context.intl.now() }); }, l); } }, }, { key: "componentDidMount", value: function () { this.scheduleNextUpdate(this.props, this.state); }, }, { key: "componentWillReceiveProps", value: function (e) { (function (e, t) { if (e === t) return !0; var n = new Date(e).getTime(), r = new Date(t).getTime(); return isFinite(n) && isFinite(r) && n === r; })(e.value, this.props.value) || this.setState({ now: this.context.intl.now() }); }, }, { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "componentWillUpdate", value: function (e, t) { this.scheduleNextUpdate(e, t); }, }, { key: "componentWillUnmount", value: function () { clearTimeout(this._timer); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatRelative, n = e.textComponent, r = this.props, o = r.value, a = r.children, i = t(o, k({}, this.props, this.state)); return "function" == typeof a ? a(i) : f.a.createElement(n, null, i); }, }, ]), t ); })(d.Component); (Oe.displayName = "FormattedRelative"), (Oe.contextTypes = { intl: X }), (Oe.defaultProps = { updateInterval: 1e4 }); var Se = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatNumber, n = e.textComponent, r = this.props, o = r.value, a = r.children, i = t(o, this.props); return "function" == typeof a ? a(i) : f.a.createElement(n, null, i); }, }, ]), t ); })(d.Component); (Se.displayName = "FormattedNumber"), (Se.contextTypes = { intl: X }); var ze = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return re.apply(void 0, [this].concat(t)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatPlural, n = e.textComponent, r = this.props, o = r.value, a = r.other, i = r.children, s = t(o, this.props), u = this.props[s] || a; return "function" == typeof i ? i(u) : f.a.createElement(n, null, u); }, }, ]), t ); })(d.Component); (ze.displayName = "FormattedPlural"), (ze.contextTypes = { intl: X }), (ze.defaultProps = { style: "cardinal" }); var Ee = function (e, t) { return be({}, { getMessageFormat: v(i.a) }, e, t); }, xe = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return e.defaultMessage || te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function (e) { var t = this.props.values, n = e.values; if (!ne(n, t)) return !0; for (var r = k({}, e, { values: t }), o = arguments.length, a = Array(o > 1 ? o - 1 : 0), i = 1; i < o; i++) a[i - 1] = arguments[i]; return re.apply(void 0, [this, r].concat(a)); }, }, { key: "render", value: function () { var e, t = this.context.intl || {}, n = t.formatMessage, r = void 0 === n ? Ee : n, o = t.textComponent, a = void 0 === o ? "span" : o, i = this.props, s = i.id, u = i.description, c = i.defaultMessage, l = i.values, f = i.tagName, p = void 0 === f ? a : f, h = i.children, m = void 0, M = void 0, y = void 0; if (l && Object.keys(l).length > 0) { var v = Math.floor(1099511627776 * Math.random()).toString(16), b = ((e = 0), function () { return "ELEMENT-" + v + "-" + (e += 1); }); (m = "@__" + v + "__@"), (M = {}), (y = {}), Object.keys(l).forEach(function (e) { var t = l[e]; if (Object(d.isValidElement)(t)) { var n = b(); (M[e] = m + n + m), (y[n] = t); } else M[e] = t; }); } var g = r({ id: s, description: u, defaultMessage: c }, M || l), _ = void 0; return ( (_ = y && Object.keys(y).length > 0 ? g .split(m) .filter(function (e) { return !!e; }) .map(function (e) { return y[e] || e; }) : [g]), "function" == typeof h ? h.apply(void 0, z(_)) : d.createElement.apply(void 0, [p, null].concat(z(_))) ); }, }, ]), t ); })(d.Component); (xe.displayName = "FormattedMessage"), (xe.contextTypes = { intl: X }), (xe.defaultProps = { values: {} }); var De = (function (e) { function t(e, n) { L(this, t); var r = S(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, n)); return te(n), r; } return ( O(t, e), w(t, [ { key: "shouldComponentUpdate", value: function (e) { var t = this.props.values, n = e.values; if (!ne(n, t)) return !0; for (var r = k({}, e, { values: t }), o = arguments.length, a = Array(o > 1 ? o - 1 : 0), i = 1; i < o; i++) a[i - 1] = arguments[i]; return re.apply(void 0, [this, r].concat(a)); }, }, { key: "render", value: function () { var e = this.context.intl, t = e.formatHTMLMessage, n = e.textComponent, r = this.props, o = r.id, a = r.description, i = r.defaultMessage, s = r.values, u = r.tagName, c = void 0 === u ? n : u, l = r.children, d = t({ id: o, description: a, defaultMessage: i }, s); if ("function" == typeof l) return l(d); var p = { __html: d }; return f.a.createElement(c, { dangerouslySetInnerHTML: p }); }, }, ]), t ); })(d.Component); (De.displayName = "FormattedHTMLMessage"), (De.contextTypes = { intl: X }), (De.defaultProps = { values: {} }), g(b), g(o.a); }, , , , , , function (e, t, n) { (function (e) { e.exports = (function () { "use strict"; var t, r; function o() { return t.apply(null, arguments); } function a(e) { return e instanceof Array || "[object Array]" === Object.prototype.toString.call(e); } function i(e) { return null != e && "[object Object]" === Object.prototype.toString.call(e); } function s(e) { return void 0 === e; } function u(e) { return "number" == typeof e || "[object Number]" === Object.prototype.toString.call(e); } function c(e) { return e instanceof Date || "[object Date]" === Object.prototype.toString.call(e); } function l(e, t) { var n, r = []; for (n = 0; n < e.length; ++n) r.push(t(e[n], n)); return r; } function d(e, t) { return Object.prototype.hasOwnProperty.call(e, t); } function f(e, t) { for (var n in t) d(t, n) && (e[n] = t[n]); return d(t, "toString") && (e.toString = t.toString), d(t, "valueOf") && (e.valueOf = t.valueOf), e; } function p(e, t, n, r) { return wt(e, t, n, r, !0).utc(); } function h(e) { return ( null == e._pf && (e._pf = { empty: !1, unusedTokens: [], unusedInput: [], overflow: -2, charsLeftOver: 0, nullInput: !1, invalidMonth: null, invalidFormat: !1, userInvalidated: !1, iso: !1, parsedDateParts: [], meridiem: null, rfc2822: !1, weekdayMismatch: !1, }), e._pf ); } function m(e) { if (null == e._isValid) { var t = h(e), n = r.call(t.parsedDateParts, function (e) { return null != e; }), o = !isNaN(e._d.getTime()) && t.overflow < 0 && !t.empty && !t.invalidMonth && !t.invalidWeekday && !t.weekdayMismatch && !t.nullInput && !t.invalidFormat && !t.userInvalidated && (!t.meridiem || (t.meridiem && n)); if ((e._strict && (o = o && 0 === t.charsLeftOver && 0 === t.unusedTokens.length && void 0 === t.bigHour), null != Object.isFrozen && Object.isFrozen(e))) return o; e._isValid = o; } return e._isValid; } function M(e) { var t = p(NaN); return null != e ? f(h(t), e) : (h(t).userInvalidated = !0), t; } r = Array.prototype.some ? Array.prototype.some : function (e) { for (var t = Object(this), n = t.length >>> 0, r = 0; r < n; r++) if (r in t && e.call(this, t[r], r, t)) return !0; return !1; }; var y = (o.momentProperties = []); function v(e, t) { var n, r, o; if ( (s(t._isAMomentObject) || (e._isAMomentObject = t._isAMomentObject), s(t._i) || (e._i = t._i), s(t._f) || (e._f = t._f), s(t._l) || (e._l = t._l), s(t._strict) || (e._strict = t._strict), s(t._tzm) || (e._tzm = t._tzm), s(t._isUTC) || (e._isUTC = t._isUTC), s(t._offset) || (e._offset = t._offset), s(t._pf) || (e._pf = h(t)), s(t._locale) || (e._locale = t._locale), y.length > 0) ) for (n = 0; n < y.length; n++) s((o = t[(r = y[n])])) || (e[r] = o); return e; } var b = !1; function g(e) { v(this, e), (this._d = new Date(null != e._d ? e._d.getTime() : NaN)), this.isValid() || (this._d = new Date(NaN)), !1 === b && ((b = !0), o.updateOffset(this), (b = !1)); } function _(e) { return e instanceof g || (null != e && null != e._isAMomentObject); } function A(e) { return e < 0 ? Math.ceil(e) || 0 : Math.floor(e); } function L(e) { var t = +e, n = 0; return 0 !== t && isFinite(t) && (n = A(t)), n; } function w(e, t, n) { var r, o = Math.min(e.length, t.length), a = Math.abs(e.length - t.length), i = 0; for (r = 0; r < o; r++) ((n && e[r] !== t[r]) || (!n && L(e[r]) !== L(t[r]))) && i++; return i + a; } function T(e) { !1 === o.suppressDeprecationWarnings && "undefined" != typeof console && console.warn && console.warn("Deprecation warning: " + e); } function k(e, t) { var n = !0; return f(function () { if ((null != o.deprecationHandler && o.deprecationHandler(null, e), n)) { for (var r, a = [], i = 0; i < arguments.length; i++) { if (((r = ""), "object" == typeof arguments[i])) { for (var s in ((r += "\n[" + i + "] "), arguments[0])) r += s + ": " + arguments[0][s] + ", "; r = r.slice(0, -2); } else r = arguments[i]; a.push(r); } T(e + "\nArguments: " + Array.prototype.slice.call(a).join("") + "\n" + new Error().stack), (n = !1); } return t.apply(this, arguments); }, t); } var O, S = {}; function z(e, t) { null != o.deprecationHandler && o.deprecationHandler(e, t), S[e] || (T(t), (S[e] = !0)); } function E(e) { return e instanceof Function || "[object Function]" === Object.prototype.toString.call(e); } function x(e, t) { var n, r = f({}, e); for (n in t) d(t, n) && (i(e[n]) && i(t[n]) ? ((r[n] = {}), f(r[n], e[n]), f(r[n], t[n])) : null != t[n] ? (r[n] = t[n]) : delete r[n]); for (n in e) d(e, n) && !d(t, n) && i(e[n]) && (r[n] = f({}, r[n])); return r; } function D(e) { null != e && this.set(e); } (o.suppressDeprecationWarnings = !1), (o.deprecationHandler = null), (O = Object.keys ? Object.keys : function (e) { var t, n = []; for (t in e) d(e, t) && n.push(t); return n; }); var N = {}; function j(e, t) { var n = e.toLowerCase(); N[n] = N[n + "s"] = N[t] = e; } function C(e) { return "string" == typeof e ? N[e] || N[e.toLowerCase()] : void 0; } function P(e) { var t, n, r = {}; for (n in e) d(e, n) && (t = C(n)) && (r[t] = e[n]); return r; } var Y = {}; function W(e, t) { Y[e] = t; } function q(e, t, n) { var r = "" + Math.abs(e), o = t - r.length; return (e >= 0 ? (n ? "+" : "") : "-") + Math.pow(10, Math.max(0, o)).toString().substr(1) + r; } var B = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, R = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, F = {}, H = {}; function I(e, t, n, r) { var o = r; "string" == typeof r && (o = function () { return this[r](); }), e && (H[e] = o), t && (H[t[0]] = function () { return q(o.apply(this, arguments), t[1], t[2]); }), n && (H[n] = function () { return this.localeData().ordinal(o.apply(this, arguments), e); }); } function X(e, t) { return e.isValid() ? ((t = K(t, e.localeData())), (F[t] = F[t] || (function (e) { var t, n, r, o = e.match(B); for (t = 0, n = o.length; t < n; t++) H[o[t]] ? (o[t] = H[o[t]]) : (o[t] = (r = o[t]).match(/\[[\s\S]/) ? r.replace(/^\[|\]$/g, "") : r.replace(/\\/g, "")); return function (t) { var r, a = ""; for (r = 0; r < n; r++) a += E(o[r]) ? o[r].call(t, e) : o[r]; return a; }; })(t)), F[t](e)) : e.localeData().invalidDate(); } function K(e, t) { var n = 5; function r(e) { return t.longDateFormat(e) || e; } for (R.lastIndex = 0; n >= 0 && R.test(e); ) (e = e.replace(R, r)), (R.lastIndex = 0), (n -= 1); return e; } var U = /\d/, J = /\d\d/, V = /\d{3}/, G = /\d{4}/, $ = /[+-]?\d{6}/, Q = /\d\d?/, Z = /\d\d\d\d?/, ee = /\d\d\d\d\d\d?/, te = /\d{1,3}/, ne = /\d{1,4}/, re = /[+-]?\d{1,6}/, oe = /\d+/, ae = /[+-]?\d+/, ie = /Z|[+-]\d\d:?\d\d/gi, se = /Z|[+-]\d\d(?::?\d\d)?/gi, ue = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, ce = {}; function le(e, t, n) { ce[e] = E(t) ? t : function (e, r) { return e && n ? n : t; }; } function de(e, t) { return d(ce, e) ? ce[e](t._strict, t._locale) : new RegExp( fe( e.replace("\\", "").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (e, t, n, r, o) { return t || n || r || o; }) ) ); } function fe(e) { return e.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); } var pe = {}; function he(e, t) { var n, r = t; for ( "string" == typeof e && (e = [e]), u(t) && (r = function (e, n) { n[t] = L(e); }), n = 0; n < e.length; n++ ) pe[e[n]] = r; } function me(e, t) { he(e, function (e, n, r, o) { (r._w = r._w || {}), t(e, r._w, r, o); }); } function Me(e, t, n) { null != t && d(pe, e) && pe[e](t, n._a, n, e); } function ye(e) { return ve(e) ? 366 : 365; } function ve(e) { return (e % 4 == 0 && e % 100 != 0) || e % 400 == 0; } I("Y", 0, 0, function () { var e = this.year(); return e <= 9999 ? "" + e : "+" + e; }), I(0, ["YY", 2], 0, function () { return this.year() % 100; }), I(0, ["YYYY", 4], 0, "year"), I(0, ["YYYYY", 5], 0, "year"), I(0, ["YYYYYY", 6, !0], 0, "year"), j("year", "y"), W("year", 1), le("Y", ae), le("YY", Q, J), le("YYYY", ne, G), le("YYYYY", re, $), le("YYYYYY", re, $), he(["YYYYY", "YYYYYY"], 0), he("YYYY", function (e, t) { t[0] = 2 === e.length ? o.parseTwoDigitYear(e) : L(e); }), he("YY", function (e, t) { t[0] = o.parseTwoDigitYear(e); }), he("Y", function (e, t) { t[0] = parseInt(e, 10); }), (o.parseTwoDigitYear = function (e) { return L(e) + (L(e) > 68 ? 1900 : 2e3); }); var be, ge = _e("FullYear", !0); function _e(e, t) { return function (n) { return null != n ? (Le(this, e, n), o.updateOffset(this, t), this) : Ae(this, e); }; } function Ae(e, t) { return e.isValid() ? e._d["get" + (e._isUTC ? "UTC" : "") + t]() : NaN; } function Le(e, t, n) { e.isValid() && !isNaN(n) && ("FullYear" === t && ve(e.year()) && 1 === e.month() && 29 === e.date() ? e._d["set" + (e._isUTC ? "UTC" : "") + t](n, e.month(), we(n, e.month())) : e._d["set" + (e._isUTC ? "UTC" : "") + t](n)); } function we(e, t) { if (isNaN(e) || isNaN(t)) return NaN; var n, r = ((t % (n = 12)) + n) % n; return (e += (t - r) / 12), 1 === r ? (ve(e) ? 29 : 28) : 31 - ((r % 7) % 2); } (be = Array.prototype.indexOf ? Array.prototype.indexOf : function (e) { var t; for (t = 0; t < this.length; ++t) if (this[t] === e) return t; return -1; }), I("M", ["MM", 2], "Mo", function () { return this.month() + 1; }), I("MMM", 0, 0, function (e) { return this.localeData().monthsShort(this, e); }), I("MMMM", 0, 0, function (e) { return this.localeData().months(this, e); }), j("month", "M"), W("month", 8), le("M", Q), le("MM", Q, J), le("MMM", function (e, t) { return t.monthsShortRegex(e); }), le("MMMM", function (e, t) { return t.monthsRegex(e); }), he(["M", "MM"], function (e, t) { t[1] = L(e) - 1; }), he(["MMM", "MMMM"], function (e, t, n, r) { var o = n._locale.monthsParse(e, r, n._strict); null != o ? (t[1] = o) : (h(n).invalidMonth = e); }); var Te = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, ke = "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), Oe = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"); function Se(e, t, n) { var r, o, a, i = e.toLocaleLowerCase(); if (!this._monthsParse) for (this._monthsParse = [], this._longMonthsParse = [], this._shortMonthsParse = [], r = 0; r < 12; ++r) (a = p([2e3, r])), (this._shortMonthsParse[r] = this.monthsShort(a, "").toLocaleLowerCase()), (this._longMonthsParse[r] = this.months(a, "").toLocaleLowerCase()); return n ? "MMM" === t ? -1 !== (o = be.call(this._shortMonthsParse, i)) ? o : null : -1 !== (o = be.call(this._longMonthsParse, i)) ? o : null : "MMM" === t ? -1 !== (o = be.call(this._shortMonthsParse, i)) || -1 !== (o = be.call(this._longMonthsParse, i)) ? o : null : -1 !== (o = be.call(this._longMonthsParse, i)) || -1 !== (o = be.call(this._shortMonthsParse, i)) ? o : null; } function ze(e, t) { var n; if (!e.isValid()) return e; if ("string" == typeof t) if (/^\d+$/.test(t)) t = L(t); else if (!u((t = e.localeData().monthsParse(t)))) return e; return (n = Math.min(e.date(), we(e.year(), t))), e._d["set" + (e._isUTC ? "UTC" : "") + "Month"](t, n), e; } function Ee(e) { return null != e ? (ze(this, e), o.updateOffset(this, !0), this) : Ae(this, "Month"); } var xe = ue, De = ue; function Ne() { function e(e, t) { return t.length - e.length; } var t, n, r = [], o = [], a = []; for (t = 0; t < 12; t++) (n = p([2e3, t])), r.push(this.monthsShort(n, "")), o.push(this.months(n, "")), a.push(this.months(n, "")), a.push(this.monthsShort(n, "")); for (r.sort(e), o.sort(e), a.sort(e), t = 0; t < 12; t++) (r[t] = fe(r[t])), (o[t] = fe(o[t])); for (t = 0; t < 24; t++) a[t] = fe(a[t]); (this._monthsRegex = new RegExp("^(" + a.join("|") + ")", "i")), (this._monthsShortRegex = this._monthsRegex), (this._monthsStrictRegex = new RegExp("^(" + o.join("|") + ")", "i")), (this._monthsShortStrictRegex = new RegExp("^(" + r.join("|") + ")", "i")); } function je(e, t, n, r, o, a, i) { var s; return e < 100 && e >= 0 ? ((s = new Date(e + 400, t, n, r, o, a, i)), isFinite(s.getFullYear()) && s.setFullYear(e)) : (s = new Date(e, t, n, r, o, a, i)), s; } function Ce(e) { var t; if (e < 100 && e >= 0) { var n = Array.prototype.slice.call(arguments); (n[0] = e + 400), (t = new Date(Date.UTC.apply(null, n))), isFinite(t.getUTCFullYear()) && t.setUTCFullYear(e); } else t = new Date(Date.UTC.apply(null, arguments)); return t; } function Pe(e, t, n) { var r = 7 + t - n; return (-(7 + Ce(e, 0, r).getUTCDay() - t) % 7) + r - 1; } function Ye(e, t, n, r, o) { var a, i, s = 1 + 7 * (t - 1) + ((7 + n - r) % 7) + Pe(e, r, o); return s <= 0 ? (i = ye((a = e - 1)) + s) : s > ye(e) ? ((a = e + 1), (i = s - ye(e))) : ((a = e), (i = s)), { year: a, dayOfYear: i }; } function We(e, t, n) { var r, o, a = Pe(e.year(), t, n), i = Math.floor((e.dayOfYear() - a - 1) / 7) + 1; return i < 1 ? (r = i + qe((o = e.year() - 1), t, n)) : i > qe(e.year(), t, n) ? ((r = i - qe(e.year(), t, n)), (o = e.year() + 1)) : ((o = e.year()), (r = i)), { week: r, year: o }; } function qe(e, t, n) { var r = Pe(e, t, n), o = Pe(e + 1, t, n); return (ye(e) - r + o) / 7; } function Be(e, t) { return e.slice(t, 7).concat(e.slice(0, t)); } I("w", ["ww", 2], "wo", "week"), I("W", ["WW", 2], "Wo", "isoWeek"), j("week", "w"), j("isoWeek", "W"), W("week", 5), W("isoWeek", 5), le("w", Q), le("ww", Q, J), le("W", Q), le("WW", Q, J), me(["w", "ww", "W", "WW"], function (e, t, n, r) { t[r.substr(0, 1)] = L(e); }), I("d", 0, "do", "day"), I("dd", 0, 0, function (e) { return this.localeData().weekdaysMin(this, e); }), I("ddd", 0, 0, function (e) { return this.localeData().weekdaysShort(this, e); }), I("dddd", 0, 0, function (e) { return this.localeData().weekdays(this, e); }), I("e", 0, 0, "weekday"), I("E", 0, 0, "isoWeekday"), j("day", "d"), j("weekday", "e"), j("isoWeekday", "E"), W("day", 11), W("weekday", 11), W("isoWeekday", 11), le("d", Q), le("e", Q), le("E", Q), le("dd", function (e, t) { return t.weekdaysMinRegex(e); }), le("ddd", function (e, t) { return t.weekdaysShortRegex(e); }), le("dddd", function (e, t) { return t.weekdaysRegex(e); }), me(["dd", "ddd", "dddd"], function (e, t, n, r) { var o = n._locale.weekdaysParse(e, r, n._strict); null != o ? (t.d = o) : (h(n).invalidWeekday = e); }), me(["d", "e", "E"], function (e, t, n, r) { t[r] = L(e); }); var Re = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), Fe = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), He = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"); function Ie(e, t, n) { var r, o, a, i = e.toLocaleLowerCase(); if (!this._weekdaysParse) for (this._weekdaysParse = [], this._shortWeekdaysParse = [], this._minWeekdaysParse = [], r = 0; r < 7; ++r) (a = p([2e3, 1]).day(r)), (this._minWeekdaysParse[r] = this.weekdaysMin(a, "").toLocaleLowerCase()), (this._shortWeekdaysParse[r] = this.weekdaysShort(a, "").toLocaleLowerCase()), (this._weekdaysParse[r] = this.weekdays(a, "").toLocaleLowerCase()); return n ? "dddd" === t ? -1 !== (o = be.call(this._weekdaysParse, i)) ? o : null : "ddd" === t ? -1 !== (o = be.call(this._shortWeekdaysParse, i)) ? o : null : -1 !== (o = be.call(this._minWeekdaysParse, i)) ? o : null : "dddd" === t ? -1 !== (o = be.call(this._weekdaysParse, i)) || -1 !== (o = be.call(this._shortWeekdaysParse, i)) || -1 !== (o = be.call(this._minWeekdaysParse, i)) ? o : null : "ddd" === t ? -1 !== (o = be.call(this._shortWeekdaysParse, i)) || -1 !== (o = be.call(this._weekdaysParse, i)) || -1 !== (o = be.call(this._minWeekdaysParse, i)) ? o : null : -1 !== (o = be.call(this._minWeekdaysParse, i)) || -1 !== (o = be.call(this._weekdaysParse, i)) || -1 !== (o = be.call(this._shortWeekdaysParse, i)) ? o : null; } var Xe = ue, Ke = ue, Ue = ue; function Je() { function e(e, t) { return t.length - e.length; } var t, n, r, o, a, i = [], s = [], u = [], c = []; for (t = 0; t < 7; t++) (n = p([2e3, 1]).day(t)), (r = this.weekdaysMin(n, "")), (o = this.weekdaysShort(n, "")), (a = this.weekdays(n, "")), i.push(r), s.push(o), u.push(a), c.push(r), c.push(o), c.push(a); for (i.sort(e), s.sort(e), u.sort(e), c.sort(e), t = 0; t < 7; t++) (s[t] = fe(s[t])), (u[t] = fe(u[t])), (c[t] = fe(c[t])); (this._weekdaysRegex = new RegExp("^(" + c.join("|") + ")", "i")), (this._weekdaysShortRegex = this._weekdaysRegex), (this._weekdaysMinRegex = this._weekdaysRegex), (this._weekdaysStrictRegex = new RegExp("^(" + u.join("|") + ")", "i")), (this._weekdaysShortStrictRegex = new RegExp("^(" + s.join("|") + ")", "i")), (this._weekdaysMinStrictRegex = new RegExp("^(" + i.join("|") + ")", "i")); } function Ve() { return this.hours() % 12 || 12; } function Ge(e, t) { I(e, 0, 0, function () { return this.localeData().meridiem(this.hours(), this.minutes(), t); }); } function $e(e, t) { return t._meridiemParse; } I("H", ["HH", 2], 0, "hour"), I("h", ["hh", 2], 0, Ve), I("k", ["kk", 2], 0, function () { return this.hours() || 24; }), I("hmm", 0, 0, function () { return "" + Ve.apply(this) + q(this.minutes(), 2); }), I("hmmss", 0, 0, function () { return "" + Ve.apply(this) + q(this.minutes(), 2) + q(this.seconds(), 2); }), I("Hmm", 0, 0, function () { return "" + this.hours() + q(this.minutes(), 2); }), I("Hmmss", 0, 0, function () { return "" + this.hours() + q(this.minutes(), 2) + q(this.seconds(), 2); }), Ge("a", !0), Ge("A", !1), j("hour", "h"), W("hour", 13), le("a", $e), le("A", $e), le("H", Q), le("h", Q), le("k", Q), le("HH", Q, J), le("hh", Q, J), le("kk", Q, J), le("hmm", Z), le("hmmss", ee), le("Hmm", Z), le("Hmmss", ee), he(["H", "HH"], 3), he(["k", "kk"], function (e, t, n) { var r = L(e); t[3] = 24 === r ? 0 : r; }), he(["a", "A"], function (e, t, n) { (n._isPm = n._locale.isPM(e)), (n._meridiem = e); }), he(["h", "hh"], function (e, t, n) { (t[3] = L(e)), (h(n).bigHour = !0); }), he("hmm", function (e, t, n) { var r = e.length - 2; (t[3] = L(e.substr(0, r))), (t[4] = L(e.substr(r))), (h(n).bigHour = !0); }), he("hmmss", function (e, t, n) { var r = e.length - 4, o = e.length - 2; (t[3] = L(e.substr(0, r))), (t[4] = L(e.substr(r, 2))), (t[5] = L(e.substr(o))), (h(n).bigHour = !0); }), he("Hmm", function (e, t, n) { var r = e.length - 2; (t[3] = L(e.substr(0, r))), (t[4] = L(e.substr(r))); }), he("Hmmss", function (e, t, n) { var r = e.length - 4, o = e.length - 2; (t[3] = L(e.substr(0, r))), (t[4] = L(e.substr(r, 2))), (t[5] = L(e.substr(o))); }); var Qe, Ze = _e("Hours", !0), et = { calendar: { sameDay: "[Today at] LT", nextDay: "[Tomorrow at] LT", nextWeek: "dddd [at] LT", lastDay: "[Yesterday at] LT", lastWeek: "[Last] dddd [at] LT", sameElse: "L" }, longDateFormat: { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }, invalidDate: "Invalid date", ordinal: "%d", dayOfMonthOrdinalParse: /\d{1,2}/, relativeTime: { future: "in %s", past: "%s ago", s: "a few seconds", ss: "%d seconds", m: "a minute", mm: "%d minutes", h: "an hour", hh: "%d hours", d: "a day", dd: "%d days", M: "a month", MM: "%d months", y: "a year", yy: "%d years", }, months: ke, monthsShort: Oe, week: { dow: 0, doy: 6 }, weekdays: Re, weekdaysMin: He, weekdaysShort: Fe, meridiemParse: /[ap]\.?m?\.?/i, }, tt = {}, nt = {}; function rt(e) { return e ? e.toLowerCase().replace("_", "-") : e; } function ot(t) { var r = null; if (!tt[t] && void 0 !== e && e && e.exports) try { (r = Qe._abbr), n(643)("./" + t), at(r); } catch (e) {} return tt[t]; } function at(e, t) { var n; return e && ((n = s(t) ? st(e) : it(e, t)) ? (Qe = n) : "undefined" != typeof console && console.warn && console.warn("Locale " + e + " not found. Did you forget to load it?")), Qe._abbr; } function it(e, t) { if (null !== t) { var n, r = et; if (((t.abbr = e), null != tt[e])) z( "defineLocaleOverride", "use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info." ), (r = tt[e]._config); else if (null != t.parentLocale) if (null != tt[t.parentLocale]) r = tt[t.parentLocale]._config; else { if (null == (n = ot(t.parentLocale))) return nt[t.parentLocale] || (nt[t.parentLocale] = []), nt[t.parentLocale].push({ name: e, config: t }), null; r = n._config; } return ( (tt[e] = new D(x(r, t))), nt[e] && nt[e].forEach(function (e) { it(e.name, e.config); }), at(e), tt[e] ); } return delete tt[e], null; } function st(e) { var t; if ((e && e._locale && e._locale._abbr && (e = e._locale._abbr), !e)) return Qe; if (!a(e)) { if ((t = ot(e))) return t; e = [e]; } return (function (e) { for (var t, n, r, o, a = 0; a < e.length; ) { for (t = (o = rt(e[a]).split("-")).length, n = (n = rt(e[a + 1])) ? n.split("-") : null; t > 0; ) { if ((r = ot(o.slice(0, t).join("-")))) return r; if (n && n.length >= t && w(o, n, !0) >= t - 1) break; t--; } a++; } return Qe; })(e); } function ut(e) { var t, n = e._a; return ( n && -2 === h(e).overflow && ((t = n[1] < 0 || n[1] > 11 ? 1 : n[2] < 1 || n[2] > we(n[0], n[1]) ? 2 : n[3] < 0 || n[3] > 24 || (24 === n[3] && (0 !== n[4] || 0 !== n[5] || 0 !== n[6])) ? 3 : n[4] < 0 || n[4] > 59 ? 4 : n[5] < 0 || n[5] > 59 ? 5 : n[6] < 0 || n[6] > 999 ? 6 : -1), h(e)._overflowDayOfYear && (t < 0 || t > 2) && (t = 2), h(e)._overflowWeeks && -1 === t && (t = 7), h(e)._overflowWeekday && -1 === t && (t = 8), (h(e).overflow = t)), e ); } function ct(e, t, n) { return null != e ? e : null != t ? t : n; } function lt(e) { var t, n, r, a, i, s = []; if (!e._d) { for ( r = (function (e) { var t = new Date(o.now()); return e._useUTC ? [t.getUTCFullYear(), t.getUTCMonth(), t.getUTCDate()] : [t.getFullYear(), t.getMonth(), t.getDate()]; })(e), e._w && null == e._a[2] && null == e._a[1] && (function (e) { var t, n, r, o, a, i, s, u; if (null != (t = e._w).GG || null != t.W || null != t.E) (a = 1), (i = 4), (n = ct(t.GG, e._a[0], We(Tt(), 1, 4).year)), (r = ct(t.W, 1)), ((o = ct(t.E, 1)) < 1 || o > 7) && (u = !0); else { (a = e._locale._week.dow), (i = e._locale._week.doy); var c = We(Tt(), a, i); (n = ct(t.gg, e._a[0], c.year)), (r = ct(t.w, c.week)), null != t.d ? ((o = t.d) < 0 || o > 6) && (u = !0) : null != t.e ? ((o = t.e + a), (t.e < 0 || t.e > 6) && (u = !0)) : (o = a); } r < 1 || r > qe(n, a, i) ? (h(e)._overflowWeeks = !0) : null != u ? (h(e)._overflowWeekday = !0) : ((s = Ye(n, r, o, a, i)), (e._a[0] = s.year), (e._dayOfYear = s.dayOfYear)); })(e), null != e._dayOfYear && ((i = ct(e._a[0], r[0])), (e._dayOfYear > ye(i) || 0 === e._dayOfYear) && (h(e)._overflowDayOfYear = !0), (n = Ce(i, 0, e._dayOfYear)), (e._a[1] = n.getUTCMonth()), (e._a[2] = n.getUTCDate())), t = 0; t < 3 && null == e._a[t]; ++t ) e._a[t] = s[t] = r[t]; for (; t < 7; t++) e._a[t] = s[t] = null == e._a[t] ? (2 === t ? 1 : 0) : e._a[t]; 24 === e._a[3] && 0 === e._a[4] && 0 === e._a[5] && 0 === e._a[6] && ((e._nextDay = !0), (e._a[3] = 0)), (e._d = (e._useUTC ? Ce : je).apply(null, s)), (a = e._useUTC ? e._d.getUTCDay() : e._d.getDay()), null != e._tzm && e._d.setUTCMinutes(e._d.getUTCMinutes() - e._tzm), e._nextDay && (e._a[3] = 24), e._w && void 0 !== e._w.d && e._w.d !== a && (h(e).weekdayMismatch = !0); } } var dt = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, ft = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, pt = /Z|[+-]\d\d(?::?\d\d)?/, ht = [ ["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/], ["YYYY-MM-DD", /\d{4}-\d\d-\d\d/], ["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/], ["GGGG-[W]WW", /\d{4}-W\d\d/, !1], ["YYYY-DDD", /\d{4}-\d{3}/], ["YYYY-MM", /\d{4}-\d\d/, !1], ["YYYYYYMMDD", /[+-]\d{10}/], ["YYYYMMDD", /\d{8}/], ["GGGG[W]WWE", /\d{4}W\d{3}/], ["GGGG[W]WW", /\d{4}W\d{2}/, !1], ["YYYYDDD", /\d{7}/], ], mt = [ ["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/], ["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/], ["HH:mm:ss", /\d\d:\d\d:\d\d/], ["HH:mm", /\d\d:\d\d/], ["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/], ["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/], ["HHmmss", /\d\d\d\d\d\d/], ["HHmm", /\d\d\d\d/], ["HH", /\d\d/], ], Mt = /^\/?Date\((\-?\d+)/i; function yt(e) { var t, n, r, o, a, i, s = e._i, u = dt.exec(s) || ft.exec(s); if (u) { for (h(e).iso = !0, t = 0, n = ht.length; t < n; t++) if (ht[t][1].exec(u[1])) { (o = ht[t][0]), (r = !1 !== ht[t][2]); break; } if (null == o) return void (e._isValid = !1); if (u[3]) { for (t = 0, n = mt.length; t < n; t++) if (mt[t][1].exec(u[3])) { a = (u[2] || " ") + mt[t][0]; break; } if (null == a) return void (e._isValid = !1); } if (!r && null != a) return void (e._isValid = !1); if (u[4]) { if (!pt.exec(u[4])) return void (e._isValid = !1); i = "Z"; } (e._f = o + (a || "") + (i || "")), At(e); } else e._isValid = !1; } var vt = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/; function bt(e) { var t = parseInt(e, 10); return t <= 49 ? 2e3 + t : t <= 999 ? 1900 + t : t; } var gt = { UT: 0, GMT: 0, EDT: -240, EST: -300, CDT: -300, CST: -360, MDT: -360, MST: -420, PDT: -420, PST: -480 }; function _t(e) { var t, n, r, o, a, i, s, u = vt.exec( e._i .replace(/\([^)]*\)|[\n\t]/g, " ") .replace(/(\s\s+)/g, " ") .replace(/^\s\s*/, "") .replace(/\s\s*$/, "") ); if (u) { var c = ((t = u[4]), (n = u[3]), (r = u[2]), (o = u[5]), (a = u[6]), (i = u[7]), (s = [bt(t), Oe.indexOf(n), parseInt(r, 10), parseInt(o, 10), parseInt(a, 10)]), i && s.push(parseInt(i, 10)), s); if ( !(function (e, t, n) { return !e || Fe.indexOf(e) === new Date(t[0], t[1], t[2]).getDay() || ((h(n).weekdayMismatch = !0), (n._isValid = !1), !1); })(u[1], c, e) ) return; (e._a = c), (e._tzm = (function (e, t, n) { if (e) return gt[e]; if (t) return 0; var r = parseInt(n, 10), o = r % 100; return ((r - o) / 100) * 60 + o; })(u[8], u[9], u[10])), (e._d = Ce.apply(null, e._a)), e._d.setUTCMinutes(e._d.getUTCMinutes() - e._tzm), (h(e).rfc2822 = !0); } else e._isValid = !1; } function At(e) { if (e._f !== o.ISO_8601) if (e._f !== o.RFC_2822) { (e._a = []), (h(e).empty = !0); var t, n, r, a, i, s = "" + e._i, u = s.length, c = 0; for (r = K(e._f, e._locale).match(B) || [], t = 0; t < r.length; t++) (a = r[t]), (n = (s.match(de(a, e)) || [])[0]) && ((i = s.substr(0, s.indexOf(n))).length > 0 && h(e).unusedInput.push(i), (s = s.slice(s.indexOf(n) + n.length)), (c += n.length)), H[a] ? (n ? (h(e).empty = !1) : h(e).unusedTokens.push(a), Me(a, n, e)) : e._strict && !n && h(e).unusedTokens.push(a); (h(e).charsLeftOver = u - c), s.length > 0 && h(e).unusedInput.push(s), e._a[3] <= 12 && !0 === h(e).bigHour && e._a[3] > 0 && (h(e).bigHour = void 0), (h(e).parsedDateParts = e._a.slice(0)), (h(e).meridiem = e._meridiem), (e._a[3] = (function (e, t, n) { var r; return null == n ? t : null != e.meridiemHour ? e.meridiemHour(t, n) : null != e.isPM ? ((r = e.isPM(n)) && t < 12 && (t += 12), r || 12 !== t || (t = 0), t) : t; })(e._locale, e._a[3], e._meridiem)), lt(e), ut(e); } else _t(e); else yt(e); } function Lt(e) { var t = e._i, n = e._f; return ( (e._locale = e._locale || st(e._l)), null === t || (void 0 === n && "" === t) ? M({ nullInput: !0 }) : ("string" == typeof t && (e._i = t = e._locale.preparse(t)), _(t) ? new g(ut(t)) : (c(t) ? (e._d = t) : a(n) ? (function (e) { var t, n, r, o, a; if (0 === e._f.length) return (h(e).invalidFormat = !0), void (e._d = new Date(NaN)); for (o = 0; o < e._f.length; o++) (a = 0), (t = v({}, e)), null != e._useUTC && (t._useUTC = e._useUTC), (t._f = e._f[o]), At(t), m(t) && ((a += h(t).charsLeftOver), (a += 10 * h(t).unusedTokens.length), (h(t).score = a), (null == r || a < r) && ((r = a), (n = t))); f(e, n || t); })(e) : n ? At(e) : (function (e) { var t = e._i; s(t) ? (e._d = new Date(o.now())) : c(t) ? (e._d = new Date(t.valueOf())) : "string" == typeof t ? (function (e) { var t = Mt.exec(e._i); null === t ? (yt(e), !1 === e._isValid && (delete e._isValid, _t(e), !1 === e._isValid && (delete e._isValid, o.createFromInputFallback(e)))) : (e._d = new Date(+t[1])); })(e) : a(t) ? ((e._a = l(t.slice(0), function (e) { return parseInt(e, 10); })), lt(e)) : i(t) ? (function (e) { if (!e._d) { var t = P(e._i); (e._a = l([t.year, t.month, t.day || t.date, t.hour, t.minute, t.second, t.millisecond], function (e) { return e && parseInt(e, 10); })), lt(e); } })(e) : u(t) ? (e._d = new Date(t)) : o.createFromInputFallback(e); })(e), m(e) || (e._d = null), e)) ); } function wt(e, t, n, r, o) { var s, u = {}; return ( (!0 !== n && !1 !== n) || ((r = n), (n = void 0)), ((i(e) && (function (e) { if (Object.getOwnPropertyNames) return 0 === Object.getOwnPropertyNames(e).length; var t; for (t in e) if (e.hasOwnProperty(t)) return !1; return !0; })(e)) || (a(e) && 0 === e.length)) && (e = void 0), (u._isAMomentObject = !0), (u._useUTC = u._isUTC = o), (u._l = n), (u._i = e), (u._f = t), (u._strict = r), (s = new g(ut(Lt(u))))._nextDay && (s.add(1, "d"), (s._nextDay = void 0)), s ); } function Tt(e, t, n, r) { return wt(e, t, n, r, !1); } (o.createFromInputFallback = k( "value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.", function (e) { e._d = new Date(e._i + (e._useUTC ? " UTC" : "")); } )), (o.ISO_8601 = function () {}), (o.RFC_2822 = function () {}); var kt = k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/", function () { var e = Tt.apply(null, arguments); return this.isValid() && e.isValid() ? (e < this ? this : e) : M(); }), Ot = k("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/", function () { var e = Tt.apply(null, arguments); return this.isValid() && e.isValid() ? (e > this ? this : e) : M(); }); function St(e, t) { var n, r; if ((1 === t.length && a(t[0]) && (t = t[0]), !t.length)) return Tt(); for (n = t[0], r = 1; r < t.length; ++r) (t[r].isValid() && !t[r][e](n)) || (n = t[r]); return n; } var zt = ["year", "quarter", "month", "week", "day", "hour", "minute", "second", "millisecond"]; function Et(e) { var t = P(e), n = t.year || 0, r = t.quarter || 0, o = t.month || 0, a = t.week || t.isoWeek || 0, i = t.day || 0, s = t.hour || 0, u = t.minute || 0, c = t.second || 0, l = t.millisecond || 0; (this._isValid = (function (e) { for (var t in e) if (-1 === be.call(zt, t) || (null != e[t] && isNaN(e[t]))) return !1; for (var n = !1, r = 0; r < zt.length; ++r) if (e[zt[r]]) { if (n) return !1; parseFloat(e[zt[r]]) !== L(e[zt[r]]) && (n = !0); } return !0; })(t)), (this._milliseconds = +l + 1e3 * c + 6e4 * u + 1e3 * s * 60 * 60), (this._days = +i + 7 * a), (this._months = +o + 3 * r + 12 * n), (this._data = {}), (this._locale = st()), this._bubble(); } function xt(e) { return e instanceof Et; } function Dt(e) { return e < 0 ? -1 * Math.round(-1 * e) : Math.round(e); } function Nt(e, t) { I(e, 0, 0, function () { var e = this.utcOffset(), n = "+"; return e < 0 && ((e = -e), (n = "-")), n + q(~~(e / 60), 2) + t + q(~~e % 60, 2); }); } Nt("Z", ":"), Nt("ZZ", ""), le("Z", se), le("ZZ", se), he(["Z", "ZZ"], function (e, t, n) { (n._useUTC = !0), (n._tzm = Ct(se, e)); }); var jt = /([\+\-]|\d\d)/gi; function Ct(e, t) { var n = (t || "").match(e); if (null === n) return null; var r = ((n[n.length - 1] || []) + "").match(jt) || ["-", 0, 0], o = 60 * r[1] + L(r[2]); return 0 === o ? 0 : "+" === r[0] ? o : -o; } function Pt(e, t) { var n, r; return t._isUTC ? ((n = t.clone()), (r = (_(e) || c(e) ? e.valueOf() : Tt(e).valueOf()) - n.valueOf()), n._d.setTime(n._d.valueOf() + r), o.updateOffset(n, !1), n) : Tt(e).local(); } function Yt(e) { return 15 * -Math.round(e._d.getTimezoneOffset() / 15); } function Wt() { return !!this.isValid() && this._isUTC && 0 === this._offset; } o.updateOffset = function () {}; var qt = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/, Bt = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; function Rt(e, t) { var n, r, o, a, i, s, c = e, l = null; return ( xt(e) ? (c = { ms: e._milliseconds, d: e._days, M: e._months }) : u(e) ? ((c = {}), t ? (c[t] = e) : (c.milliseconds = e)) : (l = qt.exec(e)) ? ((n = "-" === l[1] ? -1 : 1), (c = { y: 0, d: L(l[2]) * n, h: L(l[3]) * n, m: L(l[4]) * n, s: L(l[5]) * n, ms: L(Dt(1e3 * l[6])) * n })) : (l = Bt.exec(e)) ? ((n = "-" === l[1] ? -1 : 1), (c = { y: Ft(l[2], n), M: Ft(l[3], n), w: Ft(l[4], n), d: Ft(l[5], n), h: Ft(l[6], n), m: Ft(l[7], n), s: Ft(l[8], n) })) : null == c ? (c = {}) : "object" == typeof c && ("from" in c || "to" in c) && ((a = Tt(c.from)), (i = Tt(c.to)), (o = a.isValid() && i.isValid() ? ((i = Pt(i, a)), a.isBefore(i) ? (s = Ht(a, i)) : (((s = Ht(i, a)).milliseconds = -s.milliseconds), (s.months = -s.months)), s) : { milliseconds: 0, months: 0 }), ((c = {}).ms = o.milliseconds), (c.M = o.months)), (r = new Et(c)), xt(e) && d(e, "_locale") && (r._locale = e._locale), r ); } function Ft(e, t) { var n = e && parseFloat(e.replace(",", ".")); return (isNaN(n) ? 0 : n) * t; } function Ht(e, t) { var n = {}; return (n.months = t.month() - e.month() + 12 * (t.year() - e.year())), e.clone().add(n.months, "M").isAfter(t) && --n.months, (n.milliseconds = +t - +e.clone().add(n.months, "M")), n; } function It(e, t) { return function (n, r) { var o; return ( null === r || isNaN(+r) || (z(t, "moment()." + t + "(period, number) is deprecated. Please use moment()." + t + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."), (o = n), (n = r), (r = o)), Xt(this, Rt((n = "string" == typeof n ? +n : n), r), e), this ); }; } function Xt(e, t, n, r) { var a = t._milliseconds, i = Dt(t._days), s = Dt(t._months); e.isValid() && ((r = null == r || r), s && ze(e, Ae(e, "Month") + s * n), i && Le(e, "Date", Ae(e, "Date") + i * n), a && e._d.setTime(e._d.valueOf() + a * n), r && o.updateOffset(e, i || s)); } (Rt.fn = Et.prototype), (Rt.invalid = function () { return Rt(NaN); }); var Kt = It(1, "add"), Ut = It(-1, "subtract"); function Jt(e, t) { var n = 12 * (t.year() - e.year()) + (t.month() - e.month()), r = e.clone().add(n, "months"); return -(n + (t - r < 0 ? (t - r) / (r - e.clone().add(n - 1, "months")) : (t - r) / (e.clone().add(n + 1, "months") - r))) || 0; } function Vt(e) { var t; return void 0 === e ? this._locale._abbr : (null != (t = st(e)) && (this._locale = t), this); } (o.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ"), (o.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]"); var Gt = k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.", function (e) { return void 0 === e ? this.localeData() : this.locale(e); }); function $t() { return this._locale; } function Qt(e, t) { return ((e % t) + t) % t; } function Zt(e, t, n) { return e < 100 && e >= 0 ? new Date(e + 400, t, n) - 126227808e5 : new Date(e, t, n).valueOf(); } function en(e, t, n) { return e < 100 && e >= 0 ? Date.UTC(e + 400, t, n) - 126227808e5 : Date.UTC(e, t, n); } function tn(e, t) { I(0, [e, e.length], 0, t); } function nn(e, t, n, r, o) { var a; return null == e ? We(this, r, o).year : (t > (a = qe(e, r, o)) && (t = a), rn.call(this, e, t, n, r, o)); } function rn(e, t, n, r, o) { var a = Ye(e, t, n, r, o), i = Ce(a.year, 0, a.dayOfYear); return this.year(i.getUTCFullYear()), this.month(i.getUTCMonth()), this.date(i.getUTCDate()), this; } I(0, ["gg", 2], 0, function () { return this.weekYear() % 100; }), I(0, ["GG", 2], 0, function () { return this.isoWeekYear() % 100; }), tn("gggg", "weekYear"), tn("ggggg", "weekYear"), tn("GGGG", "isoWeekYear"), tn("GGGGG", "isoWeekYear"), j("weekYear", "gg"), j("isoWeekYear", "GG"), W("weekYear", 1), W("isoWeekYear", 1), le("G", ae), le("g", ae), le("GG", Q, J), le("gg", Q, J), le("GGGG", ne, G), le("gggg", ne, G), le("GGGGG", re, $), le("ggggg", re, $), me(["gggg", "ggggg", "GGGG", "GGGGG"], function (e, t, n, r) { t[r.substr(0, 2)] = L(e); }), me(["gg", "GG"], function (e, t, n, r) { t[r] = o.parseTwoDigitYear(e); }), I("Q", 0, "Qo", "quarter"), j("quarter", "Q"), W("quarter", 7), le("Q", U), he("Q", function (e, t) { t[1] = 3 * (L(e) - 1); }), I("D", ["DD", 2], "Do", "date"), j("date", "D"), W("date", 9), le("D", Q), le("DD", Q, J), le("Do", function (e, t) { return e ? t._dayOfMonthOrdinalParse || t._ordinalParse : t._dayOfMonthOrdinalParseLenient; }), he(["D", "DD"], 2), he("Do", function (e, t) { t[2] = L(e.match(Q)[0]); }); var on = _e("Date", !0); I("DDD", ["DDDD", 3], "DDDo", "dayOfYear"), j("dayOfYear", "DDD"), W("dayOfYear", 4), le("DDD", te), le("DDDD", V), he(["DDD", "DDDD"], function (e, t, n) { n._dayOfYear = L(e); }), I("m", ["mm", 2], 0, "minute"), j("minute", "m"), W("minute", 14), le("m", Q), le("mm", Q, J), he(["m", "mm"], 4); var an = _e("Minutes", !1); I("s", ["ss", 2], 0, "second"), j("second", "s"), W("second", 15), le("s", Q), le("ss", Q, J), he(["s", "ss"], 5); var sn, un = _e("Seconds", !1); for ( I("S", 0, 0, function () { return ~~(this.millisecond() / 100); }), I(0, ["SS", 2], 0, function () { return ~~(this.millisecond() / 10); }), I(0, ["SSS", 3], 0, "millisecond"), I(0, ["SSSS", 4], 0, function () { return 10 * this.millisecond(); }), I(0, ["SSSSS", 5], 0, function () { return 100 * this.millisecond(); }), I(0, ["SSSSSS", 6], 0, function () { return 1e3 * this.millisecond(); }), I(0, ["SSSSSSS", 7], 0, function () { return 1e4 * this.millisecond(); }), I(0, ["SSSSSSSS", 8], 0, function () { return 1e5 * this.millisecond(); }), I(0, ["SSSSSSSSS", 9], 0, function () { return 1e6 * this.millisecond(); }), j("millisecond", "ms"), W("millisecond", 16), le("S", te, U), le("SS", te, J), le("SSS", te, V), sn = "SSSS"; sn.length <= 9; sn += "S" ) le(sn, oe); function cn(e, t) { t[6] = L(1e3 * ("0." + e)); } for (sn = "S"; sn.length <= 9; sn += "S") he(sn, cn); var ln = _e("Milliseconds", !1); I("z", 0, 0, "zoneAbbr"), I("zz", 0, 0, "zoneName"); var dn = g.prototype; function fn(e) { return e; } (dn.add = Kt), (dn.calendar = function (e, t) { var n = e || Tt(), r = Pt(n, this).startOf("day"), a = o.calendarFormat(this, r) || "sameElse", i = t && (E(t[a]) ? t[a].call(this, n) : t[a]); return this.format(i || this.localeData().calendar(a, this, Tt(n))); }), (dn.clone = function () { return new g(this); }), (dn.diff = function (e, t, n) { var r, o, a; if (!this.isValid()) return NaN; if (!(r = Pt(e, this)).isValid()) return NaN; switch (((o = 6e4 * (r.utcOffset() - this.utcOffset())), (t = C(t)))) { case "year": a = Jt(this, r) / 12; break; case "month": a = Jt(this, r); break; case "quarter": a = Jt(this, r) / 3; break; case "second": a = (this - r) / 1e3; break; case "minute": a = (this - r) / 6e4; break; case "hour": a = (this - r) / 36e5; break; case "day": a = (this - r - o) / 864e5; break; case "week": a = (this - r - o) / 6048e5; break; default: a = this - r; } return n ? a : A(a); }), (dn.endOf = function (e) { var t; if (void 0 === (e = C(e)) || "millisecond" === e || !this.isValid()) return this; var n = this._isUTC ? en : Zt; switch (e) { case "year": t = n(this.year() + 1, 0, 1) - 1; break; case "quarter": t = n(this.year(), this.month() - (this.month() % 3) + 3, 1) - 1; break; case "month": t = n(this.year(), this.month() + 1, 1) - 1; break; case "week": t = n(this.year(), this.month(), this.date() - this.weekday() + 7) - 1; break; case "isoWeek": t = n(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1; break; case "day": case "date": t = n(this.year(), this.month(), this.date() + 1) - 1; break; case "hour": (t = this._d.valueOf()), (t += 36e5 - Qt(t + (this._isUTC ? 0 : 6e4 * this.utcOffset()), 36e5) - 1); break; case "minute": (t = this._d.valueOf()), (t += 6e4 - Qt(t, 6e4) - 1); break; case "second": (t = this._d.valueOf()), (t += 1e3 - Qt(t, 1e3) - 1); } return this._d.setTime(t), o.updateOffset(this, !0), this; }), (dn.format = function (e) { e || (e = this.isUtc() ? o.defaultFormatUtc : o.defaultFormat); var t = X(this, e); return this.localeData().postformat(t); }), (dn.from = function (e, t) { return this.isValid() && ((_(e) && e.isValid()) || Tt(e).isValid()) ? Rt({ to: this, from: e }).locale(this.locale()).humanize(!t) : this.localeData().invalidDate(); }), (dn.fromNow = function (e) { return this.from(Tt(), e); }), (dn.to = function (e, t) { return this.isValid() && ((_(e) && e.isValid()) || Tt(e).isValid()) ? Rt({ from: this, to: e }).locale(this.locale()).humanize(!t) : this.localeData().invalidDate(); }), (dn.toNow = function (e) { return this.to(Tt(), e); }), (dn.get = function (e) { return E(this[(e = C(e))]) ? this[e]() : this; }), (dn.invalidAt = function () { return h(this).overflow; }), (dn.isAfter = function (e, t) { var n = _(e) ? e : Tt(e); return !(!this.isValid() || !n.isValid()) && ("millisecond" === (t = C(t) || "millisecond") ? this.valueOf() > n.valueOf() : n.valueOf() < this.clone().startOf(t).valueOf()); }), (dn.isBefore = function (e, t) { var n = _(e) ? e : Tt(e); return !(!this.isValid() || !n.isValid()) && ("millisecond" === (t = C(t) || "millisecond") ? this.valueOf() < n.valueOf() : this.clone().endOf(t).valueOf() < n.valueOf()); }), (dn.isBetween = function (e, t, n, r) { var o = _(e) ? e : Tt(e), a = _(t) ? t : Tt(t); return !!(this.isValid() && o.isValid() && a.isValid()) && ("(" === (r = r || "()")[0] ? this.isAfter(o, n) : !this.isBefore(o, n)) && (")" === r[1] ? this.isBefore(a, n) : !this.isAfter(a, n)); }), (dn.isSame = function (e, t) { var n, r = _(e) ? e : Tt(e); return ( !(!this.isValid() || !r.isValid()) && ("millisecond" === (t = C(t) || "millisecond") ? this.valueOf() === r.valueOf() : ((n = r.valueOf()), this.clone().startOf(t).valueOf() <= n && n <= this.clone().endOf(t).valueOf())) ); }), (dn.isSameOrAfter = function (e, t) { return this.isSame(e, t) || this.isAfter(e, t); }), (dn.isSameOrBefore = function (e, t) { return this.isSame(e, t) || this.isBefore(e, t); }), (dn.isValid = function () { return m(this); }), (dn.lang = Gt), (dn.locale = Vt), (dn.localeData = $t), (dn.max = Ot), (dn.min = kt), (dn.parsingFlags = function () { return f({}, h(this)); }), (dn.set = function (e, t) { if ("object" == typeof e) for ( var n = (function (e) { var t = []; for (var n in e) t.push({ unit: n, priority: Y[n] }); return ( t.sort(function (e, t) { return e.priority - t.priority; }), t ); })((e = P(e))), r = 0; r < n.length; r++ ) this[n[r].unit](e[n[r].unit]); else if (E(this[(e = C(e))])) return this[e](t); return this; }), (dn.startOf = function (e) { var t; if (void 0 === (e = C(e)) || "millisecond" === e || !this.isValid()) return this; var n = this._isUTC ? en : Zt; switch (e) { case "year": t = n(this.year(), 0, 1); break; case "quarter": t = n(this.year(), this.month() - (this.month() % 3), 1); break; case "month": t = n(this.year(), this.month(), 1); break; case "week": t = n(this.year(), this.month(), this.date() - this.weekday()); break; case "isoWeek": t = n(this.year(), this.month(), this.date() - (this.isoWeekday() - 1)); break; case "day": case "date": t = n(this.year(), this.month(), this.date()); break; case "hour": (t = this._d.valueOf()), (t -= Qt(t + (this._isUTC ? 0 : 6e4 * this.utcOffset()), 36e5)); break; case "minute": (t = this._d.valueOf()), (t -= Qt(t, 6e4)); break; case "second": (t = this._d.valueOf()), (t -= Qt(t, 1e3)); } return this._d.setTime(t), o.updateOffset(this, !0), this; }), (dn.subtract = Ut), (dn.toArray = function () { var e = this; return [e.year(), e.month(), e.date(), e.hour(), e.minute(), e.second(), e.millisecond()]; }), (dn.toObject = function () { var e = this; return { years: e.year(), months: e.month(), date: e.date(), hours: e.hours(), minutes: e.minutes(), seconds: e.seconds(), milliseconds: e.milliseconds() }; }), (dn.toDate = function () { return new Date(this.valueOf()); }), (dn.toISOString = function (e) { if (!this.isValid()) return null; var t = !0 !== e, n = t ? this.clone().utc() : this; return n.year() < 0 || n.year() > 9999 ? X(n, t ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ") : E(Date.prototype.toISOString) ? t ? this.toDate().toISOString() : new Date(this.valueOf() + 60 * this.utcOffset() * 1e3).toISOString().replace("Z", X(n, "Z")) : X(n, t ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ"); }), (dn.inspect = function () { if (!this.isValid()) return "moment.invalid(/* " + this._i + " */)"; var e = "moment", t = ""; this.isLocal() || ((e = 0 === this.utcOffset() ? "moment.utc" : "moment.parseZone"), (t = "Z")); var n = "[" + e + '("]', r = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY", o = t + '[")]'; return this.format(n + r + "-MM-DD[T]HH:mm:ss.SSS" + o); }), (dn.toJSON = function () { return this.isValid() ? this.toISOString() : null; }), (dn.toString = function () { return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ"); }), (dn.unix = function () { return Math.floor(this.valueOf() / 1e3); }), (dn.valueOf = function () { return this._d.valueOf() - 6e4 * (this._offset || 0); }), (dn.creationData = function () { return { input: this._i, format: this._f, locale: this._locale, isUTC: this._isUTC, strict: this._strict }; }), (dn.year = ge), (dn.isLeapYear = function () { return ve(this.year()); }), (dn.weekYear = function (e) { return nn.call(this, e, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy); }), (dn.isoWeekYear = function (e) { return nn.call(this, e, this.isoWeek(), this.isoWeekday(), 1, 4); }), (dn.quarter = dn.quarters = function (e) { return null == e ? Math.ceil((this.month() + 1) / 3) : this.month(3 * (e - 1) + (this.month() % 3)); }), (dn.month = Ee), (dn.daysInMonth = function () { return we(this.year(), this.month()); }), (dn.week = dn.weeks = function (e) { var t = this.localeData().week(this); return null == e ? t : this.add(7 * (e - t), "d"); }), (dn.isoWeek = dn.isoWeeks = function (e) { var t = We(this, 1, 4).week; return null == e ? t : this.add(7 * (e - t), "d"); }), (dn.weeksInYear = function () { var e = this.localeData()._week; return qe(this.year(), e.dow, e.doy); }), (dn.isoWeeksInYear = function () { return qe(this.year(), 1, 4); }), (dn.date = on), (dn.day = dn.days = function (e) { if (!this.isValid()) return null != e ? this : NaN; var t = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); return null != e ? ((e = (function (e, t) { return "string" != typeof e ? e : isNaN(e) ? ("number" == typeof (e = t.weekdaysParse(e)) ? e : null) : parseInt(e, 10); })(e, this.localeData())), this.add(e - t, "d")) : t; }), (dn.weekday = function (e) { if (!this.isValid()) return null != e ? this : NaN; var t = (this.day() + 7 - this.localeData()._week.dow) % 7; return null == e ? t : this.add(e - t, "d"); }), (dn.isoWeekday = function (e) { if (!this.isValid()) return null != e ? this : NaN; if (null != e) { var t = (function (e, t) { return "string" == typeof e ? t.weekdaysParse(e) % 7 || 7 : isNaN(e) ? null : e; })(e, this.localeData()); return this.day(this.day() % 7 ? t : t - 7); } return this.day() || 7; }), (dn.dayOfYear = function (e) { var t = Math.round((this.clone().startOf("day") - this.clone().startOf("year")) / 864e5) + 1; return null == e ? t : this.add(e - t, "d"); }), (dn.hour = dn.hours = Ze), (dn.minute = dn.minutes = an), (dn.second = dn.seconds = un), (dn.millisecond = dn.milliseconds = ln), (dn.utcOffset = function (e, t, n) { var r, a = this._offset || 0; if (!this.isValid()) return null != e ? this : NaN; if (null != e) { if ("string" == typeof e) { if (null === (e = Ct(se, e))) return this; } else Math.abs(e) < 16 && !n && (e *= 60); return ( !this._isUTC && t && (r = Yt(this)), (this._offset = e), (this._isUTC = !0), null != r && this.add(r, "m"), a !== e && (!t || this._changeInProgress ? Xt(this, Rt(e - a, "m"), 1, !1) : this._changeInProgress || ((this._changeInProgress = !0), o.updateOffset(this, !0), (this._changeInProgress = null))), this ); } return this._isUTC ? a : Yt(this); }), (dn.utc = function (e) { return this.utcOffset(0, e); }), (dn.local = function (e) { return this._isUTC && (this.utcOffset(0, e), (this._isUTC = !1), e && this.subtract(Yt(this), "m")), this; }), (dn.parseZone = function () { if (null != this._tzm) this.utcOffset(this._tzm, !1, !0); else if ("string" == typeof this._i) { var e = Ct(ie, this._i); null != e ? this.utcOffset(e) : this.utcOffset(0, !0); } return this; }), (dn.hasAlignedHourOffset = function (e) { return !!this.isValid() && ((e = e ? Tt(e).utcOffset() : 0), (this.utcOffset() - e) % 60 == 0); }), (dn.isDST = function () { return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset(); }), (dn.isLocal = function () { return !!this.isValid() && !this._isUTC; }), (dn.isUtcOffset = function () { return !!this.isValid() && this._isUTC; }), (dn.isUtc = Wt), (dn.isUTC = Wt), (dn.zoneAbbr = function () { return this._isUTC ? "UTC" : ""; }), (dn.zoneName = function () { return this._isUTC ? "Coordinated Universal Time" : ""; }), (dn.dates = k("dates accessor is deprecated. Use date instead.", on)), (dn.months = k("months accessor is deprecated. Use month instead", Ee)), (dn.years = k("years accessor is deprecated. Use year instead", ge)), (dn.zone = k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/", function (e, t) { return null != e ? ("string" != typeof e && (e = -e), this.utcOffset(e, t), this) : -this.utcOffset(); })), (dn.isDSTShifted = k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information", function () { if (!s(this._isDSTShifted)) return this._isDSTShifted; var e = {}; if ((v(e, this), (e = Lt(e))._a)) { var t = e._isUTC ? p(e._a) : Tt(e._a); this._isDSTShifted = this.isValid() && w(e._a, t.toArray()) > 0; } else this._isDSTShifted = !1; return this._isDSTShifted; })); var pn = D.prototype; function hn(e, t, n, r) { var o = st(), a = p().set(r, t); return o[n](a, e); } function mn(e, t, n) { if ((u(e) && ((t = e), (e = void 0)), (e = e || ""), null != t)) return hn(e, t, n, "month"); var r, o = []; for (r = 0; r < 12; r++) o[r] = hn(e, r, n, "month"); return o; } function Mn(e, t, n, r) { "boolean" == typeof e ? (u(t) && ((n = t), (t = void 0)), (t = t || "")) : ((n = t = e), (e = !1), u(t) && ((n = t), (t = void 0)), (t = t || "")); var o, a = st(), i = e ? a._week.dow : 0; if (null != n) return hn(t, (n + i) % 7, r, "day"); var s = []; for (o = 0; o < 7; o++) s[o] = hn(t, (o + i) % 7, r, "day"); return s; } (pn.calendar = function (e, t, n) { var r = this._calendar[e] || this._calendar.sameElse; return E(r) ? r.call(t, n) : r; }), (pn.longDateFormat = function (e) { var t = this._longDateFormat[e], n = this._longDateFormat[e.toUpperCase()]; return t || !n ? t : ((this._longDateFormat[e] = n.replace(/MMMM|MM|DD|dddd/g, function (e) { return e.slice(1); })), this._longDateFormat[e]); }), (pn.invalidDate = function () { return this._invalidDate; }), (pn.ordinal = function (e) { return this._ordinal.replace("%d", e); }), (pn.preparse = fn), (pn.postformat = fn), (pn.relativeTime = function (e, t, n, r) { var o = this._relativeTime[n]; return E(o) ? o(e, t, n, r) : o.replace(/%d/i, e); }), (pn.pastFuture = function (e, t) { var n = this._relativeTime[e > 0 ? "future" : "past"]; return E(n) ? n(t) : n.replace(/%s/i, t); }), (pn.set = function (e) { var t, n; for (n in e) E((t = e[n])) ? (this[n] = t) : (this["_" + n] = t); (this._config = e), (this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source)); }), (pn.months = function (e, t) { return e ? (a(this._months) ? this._months[e.month()] : this._months[(this._months.isFormat || Te).test(t) ? "format" : "standalone"][e.month()]) : a(this._months) ? this._months : this._months.standalone; }), (pn.monthsShort = function (e, t) { return e ? (a(this._monthsShort) ? this._monthsShort[e.month()] : this._monthsShort[Te.test(t) ? "format" : "standalone"][e.month()]) : a(this._monthsShort) ? this._monthsShort : this._monthsShort.standalone; }), (pn.monthsParse = function (e, t, n) { var r, o, a; if (this._monthsParseExact) return Se.call(this, e, t, n); for (this._monthsParse || ((this._monthsParse = []), (this._longMonthsParse = []), (this._shortMonthsParse = [])), r = 0; r < 12; r++) { if ( ((o = p([2e3, r])), n && !this._longMonthsParse[r] && ((this._longMonthsParse[r] = new RegExp("^" + this.months(o, "").replace(".", "") + "$", "i")), (this._shortMonthsParse[r] = new RegExp("^" + this.monthsShort(o, "").replace(".", "") + "$", "i"))), n || this._monthsParse[r] || ((a = "^" + this.months(o, "") + "|^" + this.monthsShort(o, "")), (this._monthsParse[r] = new RegExp(a.replace(".", ""), "i"))), n && "MMMM" === t && this._longMonthsParse[r].test(e)) ) return r; if (n && "MMM" === t && this._shortMonthsParse[r].test(e)) return r; if (!n && this._monthsParse[r].test(e)) return r; } }), (pn.monthsRegex = function (e) { return this._monthsParseExact ? (d(this, "_monthsRegex") || Ne.call(this), e ? this._monthsStrictRegex : this._monthsRegex) : (d(this, "_monthsRegex") || (this._monthsRegex = De), this._monthsStrictRegex && e ? this._monthsStrictRegex : this._monthsRegex); }), (pn.monthsShortRegex = function (e) { return this._monthsParseExact ? (d(this, "_monthsRegex") || Ne.call(this), e ? this._monthsShortStrictRegex : this._monthsShortRegex) : (d(this, "_monthsShortRegex") || (this._monthsShortRegex = xe), this._monthsShortStrictRegex && e ? this._monthsShortStrictRegex : this._monthsShortRegex); }), (pn.week = function (e) { return We(e, this._week.dow, this._week.doy).week; }), (pn.firstDayOfYear = function () { return this._week.doy; }), (pn.firstDayOfWeek = function () { return this._week.dow; }), (pn.weekdays = function (e, t) { var n = a(this._weekdays) ? this._weekdays : this._weekdays[e && !0 !== e && this._weekdays.isFormat.test(t) ? "format" : "standalone"]; return !0 === e ? Be(n, this._week.dow) : e ? n[e.day()] : n; }), (pn.weekdaysMin = function (e) { return !0 === e ? Be(this._weekdaysMin, this._week.dow) : e ? this._weekdaysMin[e.day()] : this._weekdaysMin; }), (pn.weekdaysShort = function (e) { return !0 === e ? Be(this._weekdaysShort, this._week.dow) : e ? this._weekdaysShort[e.day()] : this._weekdaysShort; }), (pn.weekdaysParse = function (e, t, n) { var r, o, a; if (this._weekdaysParseExact) return Ie.call(this, e, t, n); for (this._weekdaysParse || ((this._weekdaysParse = []), (this._minWeekdaysParse = []), (this._shortWeekdaysParse = []), (this._fullWeekdaysParse = [])), r = 0; r < 7; r++) { if ( ((o = p([2e3, 1]).day(r)), n && !this._fullWeekdaysParse[r] && ((this._fullWeekdaysParse[r] = new RegExp("^" + this.weekdays(o, "").replace(".", "\\.?") + "$", "i")), (this._shortWeekdaysParse[r] = new RegExp("^" + this.weekdaysShort(o, "").replace(".", "\\.?") + "$", "i")), (this._minWeekdaysParse[r] = new RegExp("^" + this.weekdaysMin(o, "").replace(".", "\\.?") + "$", "i"))), this._weekdaysParse[r] || ((a = "^" + this.weekdays(o, "") + "|^" + this.weekdaysShort(o, "") + "|^" + this.weekdaysMin(o, "")), (this._weekdaysParse[r] = new RegExp(a.replace(".", ""), "i"))), n && "dddd" === t && this._fullWeekdaysParse[r].test(e)) ) return r; if (n && "ddd" === t && this._shortWeekdaysParse[r].test(e)) return r; if (n && "dd" === t && this._minWeekdaysParse[r].test(e)) return r; if (!n && this._weekdaysParse[r].test(e)) return r; } }), (pn.weekdaysRegex = function (e) { return this._weekdaysParseExact ? (d(this, "_weekdaysRegex") || Je.call(this), e ? this._weekdaysStrictRegex : this._weekdaysRegex) : (d(this, "_weekdaysRegex") || (this._weekdaysRegex = Xe), this._weekdaysStrictRegex && e ? this._weekdaysStrictRegex : this._weekdaysRegex); }), (pn.weekdaysShortRegex = function (e) { return this._weekdaysParseExact ? (d(this, "_weekdaysRegex") || Je.call(this), e ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex) : (d(this, "_weekdaysShortRegex") || (this._weekdaysShortRegex = Ke), this._weekdaysShortStrictRegex && e ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex); }), (pn.weekdaysMinRegex = function (e) { return this._weekdaysParseExact ? (d(this, "_weekdaysRegex") || Je.call(this), e ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex) : (d(this, "_weekdaysMinRegex") || (this._weekdaysMinRegex = Ue), this._weekdaysMinStrictRegex && e ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex); }), (pn.isPM = function (e) { return "p" === (e + "").toLowerCase().charAt(0); }), (pn.meridiem = function (e, t, n) { return e > 11 ? (n ? "pm" : "PM") : n ? "am" : "AM"; }), at("en", { dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal: function (e) { var t = e % 10; return e + (1 === L((e % 100) / 10) ? "th" : 1 === t ? "st" : 2 === t ? "nd" : 3 === t ? "rd" : "th"); }, }), (o.lang = k("moment.lang is deprecated. Use moment.locale instead.", at)), (o.langData = k("moment.langData is deprecated. Use moment.localeData instead.", st)); var yn = Math.abs; function vn(e, t, n, r) { var o = Rt(t, n); return (e._milliseconds += r * o._milliseconds), (e._days += r * o._days), (e._months += r * o._months), e._bubble(); } function bn(e) { return e < 0 ? Math.floor(e) : Math.ceil(e); } function gn(e) { return (4800 * e) / 146097; } function _n(e) { return (146097 * e) / 4800; } function An(e) { return function () { return this.as(e); }; } var Ln = An("ms"), wn = An("s"), Tn = An("m"), kn = An("h"), On = An("d"), Sn = An("w"), zn = An("M"), En = An("Q"), xn = An("y"); function Dn(e) { return function () { return this.isValid() ? this._data[e] : NaN; }; } var Nn = Dn("milliseconds"), jn = Dn("seconds"), Cn = Dn("minutes"), Pn = Dn("hours"), Yn = Dn("days"), Wn = Dn("months"), qn = Dn("years"), Bn = Math.round, Rn = { ss: 44, s: 45, m: 45, h: 22, d: 26, M: 11 }; function Fn(e, t, n, r, o) { return o.relativeTime(t || 1, !!n, e, r); } var Hn = Math.abs; function In(e) { return (e > 0) - (e < 0) || +e; } function Xn() { if (!this.isValid()) return this.localeData().invalidDate(); var e, t, n = Hn(this._milliseconds) / 1e3, r = Hn(this._days), o = Hn(this._months); (e = A(n / 60)), (t = A(e / 60)), (n %= 60), (e %= 60); var a = A(o / 12), i = (o %= 12), s = r, u = t, c = e, l = n ? n.toFixed(3).replace(/\.?0+$/, "") : "", d = this.asSeconds(); if (!d) return "P0D"; var f = d < 0 ? "-" : "", p = In(this._months) !== In(d) ? "-" : "", h = In(this._days) !== In(d) ? "-" : "", m = In(this._milliseconds) !== In(d) ? "-" : ""; return f + "P" + (a ? p + a + "Y" : "") + (i ? p + i + "M" : "") + (s ? h + s + "D" : "") + (u || c || l ? "T" : "") + (u ? m + u + "H" : "") + (c ? m + c + "M" : "") + (l ? m + l + "S" : ""); } var Kn = Et.prototype; return ( (Kn.isValid = function () { return this._isValid; }), (Kn.abs = function () { var e = this._data; return ( (this._milliseconds = yn(this._milliseconds)), (this._days = yn(this._days)), (this._months = yn(this._months)), (e.milliseconds = yn(e.milliseconds)), (e.seconds = yn(e.seconds)), (e.minutes = yn(e.minutes)), (e.hours = yn(e.hours)), (e.months = yn(e.months)), (e.years = yn(e.years)), this ); }), (Kn.add = function (e, t) { return vn(this, e, t, 1); }), (Kn.subtract = function (e, t) { return vn(this, e, t, -1); }), (Kn.as = function (e) { if (!this.isValid()) return NaN; var t, n, r = this._milliseconds; if ("month" === (e = C(e)) || "quarter" === e || "year" === e) switch (((t = this._days + r / 864e5), (n = this._months + gn(t)), e)) { case "month": return n; case "quarter": return n / 3; case "year": return n / 12; } else switch (((t = this._days + Math.round(_n(this._months))), e)) { case "week": return t / 7 + r / 6048e5; case "day": return t + r / 864e5; case "hour": return 24 * t + r / 36e5; case "minute": return 1440 * t + r / 6e4; case "second": return 86400 * t + r / 1e3; case "millisecond": return Math.floor(864e5 * t) + r; default: throw new Error("Unknown unit " + e); } }), (Kn.asMilliseconds = Ln), (Kn.asSeconds = wn), (Kn.asMinutes = Tn), (Kn.asHours = kn), (Kn.asDays = On), (Kn.asWeeks = Sn), (Kn.asMonths = zn), (Kn.asQuarters = En), (Kn.asYears = xn), (Kn.valueOf = function () { return this.isValid() ? this._milliseconds + 864e5 * this._days + (this._months % 12) * 2592e6 + 31536e6 * L(this._months / 12) : NaN; }), (Kn._bubble = function () { var e, t, n, r, o, a = this._milliseconds, i = this._days, s = this._months, u = this._data; return ( (a >= 0 && i >= 0 && s >= 0) || (a <= 0 && i <= 0 && s <= 0) || ((a += 864e5 * bn(_n(s) + i)), (i = 0), (s = 0)), (u.milliseconds = a % 1e3), (e = A(a / 1e3)), (u.seconds = e % 60), (t = A(e / 60)), (u.minutes = t % 60), (n = A(t / 60)), (u.hours = n % 24), (i += A(n / 24)), (o = A(gn(i))), (s += o), (i -= bn(_n(o))), (r = A(s / 12)), (s %= 12), (u.days = i), (u.months = s), (u.years = r), this ); }), (Kn.clone = function () { return Rt(this); }), (Kn.get = function (e) { return (e = C(e)), this.isValid() ? this[e + "s"]() : NaN; }), (Kn.milliseconds = Nn), (Kn.seconds = jn), (Kn.minutes = Cn), (Kn.hours = Pn), (Kn.days = Yn), (Kn.weeks = function () { return A(this.days() / 7); }), (Kn.months = Wn), (Kn.years = qn), (Kn.humanize = function (e) { if (!this.isValid()) return this.localeData().invalidDate(); var t = this.localeData(), n = (function (e, t, n) { var r = Rt(e).abs(), o = Bn(r.as("s")), a = Bn(r.as("m")), i = Bn(r.as("h")), s = Bn(r.as("d")), u = Bn(r.as("M")), c = Bn(r.as("y")), l = (o <= Rn.ss && ["s", o]) || (o < Rn.s && ["ss", o]) || (a <= 1 && ["m"]) || (a < Rn.m && ["mm", a]) || (i <= 1 && ["h"]) || (i < Rn.h && ["hh", i]) || (s <= 1 && ["d"]) || (s < Rn.d && ["dd", s]) || (u <= 1 && ["M"]) || (u < Rn.M && ["MM", u]) || (c <= 1 && ["y"]) || ["yy", c]; return (l[2] = t), (l[3] = +e > 0), (l[4] = n), Fn.apply(null, l); })(this, !e, t); return e && (n = t.pastFuture(+this, n)), t.postformat(n); }), (Kn.toISOString = Xn), (Kn.toString = Xn), (Kn.toJSON = Xn), (Kn.locale = Vt), (Kn.localeData = $t), (Kn.toIsoString = k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", Xn)), (Kn.lang = Gt), I("X", 0, 0, "unix"), I("x", 0, 0, "valueOf"), le("x", ae), le("X", /[+-]?\d+(\.\d{1,3})?/), he("X", function (e, t, n) { n._d = new Date(1e3 * parseFloat(e, 10)); }), he("x", function (e, t, n) { n._d = new Date(L(e)); }), (o.version = "2.24.0"), (t = Tt), (o.fn = dn), (o.min = function () { var e = [].slice.call(arguments, 0); return St("isBefore", e); }), (o.max = function () { var e = [].slice.call(arguments, 0); return St("isAfter", e); }), (o.now = function () { return Date.now ? Date.now() : +new Date(); }), (o.utc = p), (o.unix = function (e) { return Tt(1e3 * e); }), (o.months = function (e, t) { return mn(e, t, "months"); }), (o.isDate = c), (o.locale = at), (o.invalid = M), (o.duration = Rt), (o.isMoment = _), (o.weekdays = function (e, t, n) { return Mn(e, t, n, "weekdays"); }), (o.parseZone = function () { return Tt.apply(null, arguments).parseZone(); }), (o.localeData = st), (o.isDuration = xt), (o.monthsShort = function (e, t) { return mn(e, t, "monthsShort"); }), (o.weekdaysMin = function (e, t, n) { return Mn(e, t, n, "weekdaysMin"); }), (o.defineLocale = it), (o.updateLocale = function (e, t) { if (null != t) { var n, r, o = et; null != (r = ot(e)) && (o = r._config), (t = x(o, t)), ((n = new D(t)).parentLocale = tt[e]), (tt[e] = n), at(e); } else null != tt[e] && (null != tt[e].parentLocale ? (tt[e] = tt[e].parentLocale) : null != tt[e] && delete tt[e]); return tt[e]; }), (o.locales = function () { return O(tt); }), (o.weekdaysShort = function (e, t, n) { return Mn(e, t, n, "weekdaysShort"); }), (o.normalizeUnits = C), (o.relativeTimeRounding = function (e) { return void 0 === e ? Bn : "function" == typeof e && ((Bn = e), !0); }), (o.relativeTimeThreshold = function (e, t) { return void 0 !== Rn[e] && (void 0 === t ? Rn[e] : ((Rn[e] = t), "s" === e && (Rn.ss = t - 1), !0)); }), (o.calendarFormat = function (e, t) { var n = e.diff(t, "days", !0); return n < -6 ? "sameElse" : n < -1 ? "lastWeek" : n < 0 ? "lastDay" : n < 1 ? "sameDay" : n < 2 ? "nextDay" : n < 7 ? "nextWeek" : "sameElse"; }), (o.prototype = dn), (o.HTML5_FMT = { DATETIME_LOCAL: "YYYY-MM-DDTHH:mm", DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss", DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS", DATE: "YYYY-MM-DD", TIME: "HH:mm", TIME_SECONDS: "HH:mm:ss", TIME_MS: "HH:mm:ss.SSS", WEEK: "GGGG-[W]WW", MONTH: "YYYY-MM", }), o ); })(); }.call(this, n(79)(e))); }, , , , , , , function (e, t, n) { "use strict"; t.__esModule = !0; var r, o = n(994), a = (r = o) && r.__esModule ? r : { default: r }; t.default = a.default || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; }, function (e, t, n) { "use strict"; n.r(t); var r = n(19), o = n.n(r), a = n(1), i = n.n(a), s = n(38), u = n.n(s), c = n(0), l = n.n(c); n(73); function d(e) { return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } var f = Object.create(null); function p(e) { return ( f[e] || (f[e] = (function (e) { for (var t = "", n = [], r = [], o = void 0, a = 0, i = /:([a-zA-Z_$][a-zA-Z0-9_$]*)|\*\*|\*|\(|\)|\\\(|\\\)/g; (o = i.exec(e)); ) o.index !== a && (r.push(e.slice(a, o.index)), (t += d(e.slice(a, o.index)))), o[1] ? ((t += "([^/]+)"), n.push(o[1])) : "**" === o[0] ? ((t += "(.*)"), n.push("splat")) : "*" === o[0] ? ((t += "(.*?)"), n.push("splat")) : "(" === o[0] ? (t += "(?:") : ")" === o[0] ? (t += ")?") : "\\(" === o[0] ? (t += "\\(") : "\\)" === o[0] && (t += "\\)"), r.push(o[0]), (a = i.lastIndex); return a !== e.length && (r.push(e.slice(a, e.length)), (t += d(e.slice(a, e.length)))), { pattern: e, regexpSource: t, paramNames: n, tokens: r }; })(e)), f[e] ); } function h(e, t) { "/" !== e.charAt(0) && (e = "/" + e); var n = p(e), r = n.regexpSource, o = n.paramNames, a = n.tokens; "/" !== e.charAt(e.length - 1) && (r += "/?"), "*" === a[a.length - 1] && (r += "$"); var i = t.match(new RegExp("^" + r, "i")); if (null == i) return null; var s = i[0], u = t.substr(s.length); if (u) { if ("/" !== s.charAt(s.length - 1)) return null; u = "/" + u; } return { remainingPathname: u, paramNames: o, paramValues: i.slice(1).map(function (e) { return e && decodeURIComponent(e); }), }; } function m(e) { return p(e).paramNames; } function M(e, t) { t = t || {}; for (var n = p(e).tokens, r = 0, a = "", i = 0, s = [], u = void 0, c = void 0, l = 0, d = n.length; l < d; ++l) if ("*" === (u = n[l]) || "**" === u) null != (c = Array.isArray(t.splat) ? t.splat[i++] : t.splat) || r > 0 || o()(!1), null != c && (a += encodeURI(c)); else if ("(" === u) (s[r] = ""), (r += 1); else if (")" === u) { var f = s.pop(); (r -= 1) ? (s[r - 1] += f) : (a += f); } else if ("\\(" === u) a += "("; else if ("\\)" === u) a += ")"; else if (":" === u.charAt(0)) if ((null != (c = t[u.substring(1)]) || r > 0 || o()(!1), null == c)) { if (r) { s[r - 1] = ""; for (var h = n.indexOf(u), m = n.slice(h, n.length), M = -1, y = 0; y < m.length; y++) if (")" == m[y]) { M = y; break; } M > 0 || o()(!1), (l = h + M - 1); } } else r ? (s[r - 1] += encodeURIComponent(c)) : (a += encodeURIComponent(c)); else r ? (s[r - 1] += u) : (a += u); return r <= 0 || o()(!1), a.replace(/\/+/g, "/"); } var y = function (e, t) { var n = e && e.routes, r = t.routes, o = void 0, a = void 0, i = void 0; if (n) { var s = !1; (o = n.filter(function (n) { if (s) return !0; var o = -1 === r.indexOf(n) || (function (e, t, n) { return ( !!e.path && m(e.path).some(function (e) { return t.params[e] !== n.params[e]; }) ); })(n, e, t); return o && (s = !0), o; })).reverse(), (i = []), (a = []), r.forEach(function (e) { var t = -1 === n.indexOf(e), r = -1 !== o.indexOf(e); t || r ? i.push(e) : a.push(e); }); } else (o = []), (a = []), (i = r); return { leaveRoutes: o, changeRoutes: a, enterRoutes: i }; }; function v(e, t, n) { var r = 0, o = !1, a = !1, i = !1, s = void 0; function u() { (o = !0), a ? (s = [].concat(Array.prototype.slice.call(arguments))) : n.apply(this, arguments); } !(function c() { if (!o && ((i = !0), !a)) { for (a = !0; !o && r < e && i; ) (i = !1), t.call(this, r++, c, u); (a = !1), o ? n.apply(this, s) : r >= e && i && ((o = !0), n()); } })(); } function b(e, t, n) { var r = e.length, o = []; if (0 === r) return n(null, o); var a = !1, i = 0; e.forEach(function (e, s) { t(e, s, function (e, t) { !(function (e, t, s) { a || (t ? ((a = !0), n(t)) : ((o[e] = s), (a = ++i === r) && n(null, o))); })(s, e, t); }); }); } var g = function e() { var t = this; !(function (e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); })(this, e), (this.hooks = []), (this.add = function (e) { return t.hooks.push(e); }), (this.remove = function (e) { return (t.hooks = t.hooks.filter(function (t) { return t !== e; })); }), (this.has = function (e) { return -1 !== t.hooks.indexOf(e); }), (this.clear = function () { return (t.hooks = []); }); }; function _() { var e = new g(), t = new g(); function n(e, t, n, r) { var o = e.length < n, a = function () { for (var n = arguments.length, r = Array(n), a = 0; a < n; a++) r[a] = arguments[a]; if ((e.apply(t, r), o)) { var i = r[r.length - 1]; i(); } }; return r.add(a), a; } function r(e, t, n) { if (e) { var r = void 0; v( e, function (e, n, a) { t(e, o, function (e) { e || r ? a(e, r) : n(); }); }, n ); } else n(); function o(e) { r = e; } } return { runEnterHooks: function (t, o, a) { e.clear(); var i = (function (t) { return t.reduce(function (t, r) { return r.onEnter && t.push(n(r.onEnter, r, 3, e)), t; }, []); })(t); return r( i.length, function (t, n, r) { i[t](o, n, function () { e.has(i[t]) && (r.apply(void 0, arguments), e.remove(i[t])); }); }, a ); }, runChangeHooks: function (e, o, a, i) { t.clear(); var s = (function (e) { return e.reduce(function (e, r) { return r.onChange && e.push(n(r.onChange, r, 4, t)), e; }, []); })(e); return r( s.length, function (e, n, r) { s[e](o, a, n, function () { t.has(s[e]) && (r.apply(void 0, arguments), t.remove(s[e])); }); }, i ); }, runLeaveHooks: function (e, t) { for (var n = 0, r = e.length; n < r; ++n) e[n].onLeave && e[n].onLeave.call(e[n], t); }, }; } var A = "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; }; function L(e, t) { return null == t ? null == e : null == e || (function e(t, n) { if (t == n) return !0; if (null == t || null == n) return !1; if (Array.isArray(t)) return ( Array.isArray(n) && t.length === n.length && t.every(function (t, r) { return e(t, n[r]); }) ); if ("object" === (void 0 === t ? "undefined" : A(t))) { for (var r in t) if (Object.prototype.hasOwnProperty.call(t, r)) if (void 0 === t[r]) { if (void 0 !== n[r]) return !1; } else { if (!Object.prototype.hasOwnProperty.call(n, r)) return !1; if (!e(t[r], n[r])) return !1; } return !0; } return String(t) === String(n); })(e, t); } function w(e, t, n, r, o) { var a = e.pathname, i = e.query; return ( null != n && ("/" !== a.charAt(0) && (a = "/" + a), !!( (function (e, t) { return "/" !== t.charAt(0) && (t = "/" + t), "/" !== e.charAt(e.length - 1) && (e += "/"), "/" !== t.charAt(t.length - 1) && (t += "/"), t === e; })(a, n.pathname) || (!t && (function (e, t, n) { for (var r = e, o = [], a = [], i = 0, s = t.length; i < s; ++i) { var u = t[i].path || ""; if (("/" === u.charAt(0) && ((r = e), (o = []), (a = [])), null !== r && u)) { var c = h(u, r); if ((c ? ((r = c.remainingPathname), (o = [].concat(o, c.paramNames)), (a = [].concat(a, c.paramValues))) : (r = null), "" === r)) return o.every(function (e, t) { return String(a[t]) === String(n[e]); }); } } return !1; })(a, r, o)) ) && L(i, n.query)) ); } function T(e) { return e && "function" == typeof e.then; } var k = function (e, t) { b( e.routes, function (t, n, r) { !(function (e, t, n) { if (t.component || t.components) n(null, t.component || t.components); else { var r = t.getComponent || t.getComponents; if (r) { var o = r.call(t, e, n); T(o) && o.then(function (e) { return n(null, e); }, n); } else n(); } })(e, t, r); }, t ); }, O = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function S(e) { return null == e || i.a.isValidElement(e); } function z(e) { return S(e) || (Array.isArray(e) && e.every(S)); } function E(e) { var t, n, r = e.type, o = ((t = r.defaultProps), (n = e.props), O({}, t, n)); if (o.children) { var a = x(o.children, o); a.length && (o.childRoutes = a), delete o.children; } return o; } function x(e, t) { var n = []; return ( i.a.Children.forEach(e, function (e) { if (i.a.isValidElement(e)) if (e.type.createRouteFromReactElement) { var r = e.type.createRouteFromReactElement(e, t); r && n.push(r); } else n.push(E(e)); }), n ); } function D(e) { return z(e) ? (e = x(e)) : e && !Array.isArray(e) && (e = [e]), e; } var N = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function j(e, t, n, r, o) { if (e.childRoutes) return [null, e.childRoutes]; if (!e.getChildRoutes) return []; var a = !0, i = void 0, s = { location: t, params: C(n, r) }, u = e.getChildRoutes(s, function (e, t) { (t = !e && D(t)), a ? (i = [e, t]) : o(e, t); }); return ( T(u) && u.then(function (e) { return o(null, D(e)); }, o), (a = !1), i ); } function C(e, t) { return (function (e, t, n) { return t.reduce(function (e, t, r) { var o = n && n[r]; return Array.isArray(e[t]) ? e[t].push(o) : (e[t] = t in e ? [e[t], o] : o), e; }, e); })({}, e, t); } function P(e, t, n, r, o, a) { var i = e.path || ""; if (("/" === i.charAt(0) && ((n = t.pathname), (r = []), (o = [])), null !== n && i)) { try { var s = h(i, n); s ? ((n = s.remainingPathname), (r = [].concat(r, s.paramNames)), (o = [].concat(o, s.paramValues))) : (n = null); } catch (e) { a(e); } if ("" === n) { var u = { routes: [e], params: C(r, o) }; return void (function e(t, n, r, o, a) { if (t.indexRoute) a(null, t.indexRoute); else if (t.getIndexRoute) { var i = { location: n, params: C(r, o) }, s = t.getIndexRoute(i, function (e, t) { a(e, !e && D(t)[0]); }); T(s) && s.then(function (e) { return a(null, D(e)[0]); }, a); } else if (t.childRoutes || t.getChildRoutes) { var u = function (t, i) { if (t) a(t); else { var s = i.filter(function (e) { return !e.path; }); v( s.length, function (t, a, i) { e(s[t], n, r, o, function (e, n) { if (e || n) { var r = [s[t]].concat(Array.isArray(n) ? n : [n]); i(e, r); } else a(); }); }, function (e, t) { a(null, t); } ); } }, c = j(t, n, r, o, u); c && u.apply(void 0, c); } else a(); })(e, t, r, o, function (e, t) { if (e) a(e); else { var n; if (Array.isArray(t)) (n = u.routes).push.apply(n, t); else t && u.routes.push(t); a(null, u); } }); } } if (null != n || e.childRoutes) { var c = function (i, s) { i ? a(i) : s ? Y( s, t, function (t, n) { t ? a(t) : n ? (n.routes.unshift(e), a(null, n)) : a(); }, n, r, o ) : a(); }, l = j(e, t, r, o, c); l && c.apply(void 0, l); } else a(); } function Y(e, t, n, r) { var o = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : [], a = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : []; void 0 === r && ("/" !== t.pathname.charAt(0) && (t = N({}, t, { pathname: "/" + t.pathname })), (r = t.pathname)), v( e.length, function (n, i, s) { P(e[n], t, r, o, a, function (e, t) { e || t ? s(e, t) : i(); }); }, n ); } var W = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function q(e) { for (var t in e) if (Object.prototype.hasOwnProperty.call(e, t)) return !0; return !1; } function B(e, t) { var n = {}, r = _(), o = r.runEnterHooks, a = r.runChangeHooks, i = r.runLeaveHooks; var s = void 0; function u(e, n) { s && s.location === e ? c(s, n) : Y(t, e, function (t, r) { t ? n(t) : r ? c(W({}, r, { location: e }), n) : n(); }); } function c(e, t) { var r = y(n, e), s = r.leaveRoutes, u = r.changeRoutes, c = r.enterRoutes; function l(r, o) { if (r || o) return d(r, o); k(e, function (r, o) { r ? t(r) : t(null, null, (n = W({}, e, { components: o }))); }); } function d(e, n) { e ? t(e) : t(null, n); } i(s, n), s .filter(function (e) { return -1 === c.indexOf(e); }) .forEach(b), a(u, n, e, function (t, n) { if (t || n) return d(t, n); o(c, e, l); }); } var l = 1; function d(e) { var t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; return e.__id__ || (t && (e.__id__ = l++)); } var f = Object.create(null); function p(e) { return e .map(function (e) { return f[d(e)]; }) .filter(function (e) { return e; }); } function h(e, r) { Y(t, e, function (t, o) { if (null != o) { s = W({}, o, { location: e }); for (var a = p(y(n, s).leaveRoutes), i = void 0, u = 0, c = a.length; null == i && u < c; ++u) i = a[u](e); r(i); } else r(); }); } function m() { if (n.routes) { for (var e = p(n.routes), t = void 0, r = 0, o = e.length; "string" != typeof t && r < o; ++r) t = e[r](); return t; } } var M = void 0, v = void 0; function b(e) { var t = d(e); t && (delete f[t], q(f) || (M && (M(), (M = null)), v && (v(), (v = null)))); } return { isActive: function (t, r) { return w((t = e.createLocation(t)), r, n.location, n.routes, n.params); }, match: u, listenBeforeLeavingRoute: function (t, n) { var r = !q(f), o = d(t, !0); return ( (f[o] = n), r && ((M = e.listenBefore(h)), e.listenBeforeUnload && (v = e.listenBeforeUnload(m))), function () { b(t); } ); }, listen: function (t) { function r(r) { n.location === r ? t(null, n) : u(r, function (n, r, o) { n ? t(n) : r ? e.replace(r) : o && t(null, o); }); } var o = e.listen(r); return n.location ? t(null, n) : r(e.getCurrentLocation()), o; }, }; } function R(e, t, n) { if (e[t]) return new Error("<" + n + '> should not have a "' + t + '" prop'); } Object(c.shape)({ listen: c.func.isRequired, push: c.func.isRequired, replace: c.func.isRequired, go: c.func.isRequired, goBack: c.func.isRequired, goForward: c.func.isRequired }); var F = Object(c.oneOfType)([c.func, c.string]), H = Object(c.oneOfType)([F, c.object]), I = Object(c.oneOfType)([c.object, c.element]), X = Object(c.oneOfType)([I, Object(c.arrayOf)(I)]); var K = function (e, t) { var n = {}; return e.path ? (m(e.path).forEach(function (e) { Object.prototype.hasOwnProperty.call(t, e) && (n[e] = t[e]); }), n) : n; }, U = l.a.shape({ subscribe: l.a.func.isRequired, eventIndex: l.a.number.isRequired }); function J(e) { return "@@contextSubscriber/" + e; } function V(e) { var t, n, r = J(e), o = r + "/lastRenderedEventIndex", a = r + "/handleContextUpdate", i = r + "/unsubscribe"; return ( ((n = { contextTypes: ((t = {}), (t[r] = U), t), getInitialState: function () { var e; return this.context[r] ? (((e = {})[o] = this.context[r].eventIndex), e) : {}; }, componentDidMount: function () { this.context[r] && (this[i] = this.context[r].subscribe(this[a])); }, componentWillReceiveProps: function () { var e; this.context[r] && this.setState((((e = {})[o] = this.context[r].eventIndex), e)); }, componentWillUnmount: function () { this[i] && (this[i](), (this[i] = null)); }, })[a] = function (e) { var t; e !== this.state[o] && this.setState((((t = {})[o] = e), t)); }), n ); } var G, $, Q, Z, ee, te, ne, re = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, oe = "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; }, ae = u()({ displayName: "RouterContext", mixins: [ ((G = "router"), (Z = J(G)), (ee = Z + "/listeners"), (te = Z + "/eventIndex"), (ne = Z + "/subscribe"), ((Q = { childContextTypes: (($ = {}), ($[Z] = U.isRequired), $), getChildContext: function () { var e; return ((e = {})[Z] = { eventIndex: this[te], subscribe: this[ne] }), e; }, componentWillMount: function () { (this[ee] = []), (this[te] = 0); }, componentWillReceiveProps: function () { this[te]++; }, componentDidUpdate: function () { var e = this; this[ee].forEach(function (t) { return t(e[te]); }); }, })[ne] = function (e) { var t = this; return ( this[ee].push(e), function () { t[ee] = t[ee].filter(function (t) { return t !== e; }); } ); }), Q), ], propTypes: { router: c.object.isRequired, location: c.object.isRequired, routes: c.array.isRequired, params: c.object.isRequired, components: c.array.isRequired, createElement: c.func.isRequired }, getDefaultProps: function () { return { createElement: i.a.createElement }; }, childContextTypes: { router: c.object.isRequired }, getChildContext: function () { return { router: this.props.router }; }, createElement: function (e, t) { return null == e ? null : this.props.createElement(e, t); }, render: function () { var e = this, t = this.props, n = t.location, r = t.routes, a = t.params, s = t.components, u = t.router, c = null; return ( s && (c = s.reduceRight(function (t, o, i) { if (null == o) return t; var s = r[i], c = K(s, a), l = { location: n, params: a, route: s, router: u, routeParams: c, routes: r }; if (z(t)) l.children = t; else if (t) for (var d in t) Object.prototype.hasOwnProperty.call(t, d) && (l[d] = t[d]); if ("object" === (void 0 === o ? "undefined" : oe(o))) { var f = {}; for (var p in o) Object.prototype.hasOwnProperty.call(o, p) && (f[p] = e.createElement(o[p], re({ key: p }, l))); return f; } return e.createElement(o, l); }, c)), null === c || !1 === c || i.a.isValidElement(c) || o()(!1), c ); }, }), ie = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function se(e, t, n) { return ue(ie({}, e, { setRouteLeaveHook: t.listenBeforeLeavingRoute, isActive: t.isActive }), n); } function ue(e, t) { var n = t.location, r = t.params, o = t.routes; return (e.location = n), (e.params = r), (e.routes = o), e; } var ce = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; var le = { history: c.object, children: X, routes: X, render: c.func, createElement: c.func, onError: c.func, onUpdate: c.func, matchContext: c.object }, de = u()({ displayName: "Router", propTypes: le, getDefaultProps: function () { return { render: function (e) { return i.a.createElement(ae, e); }, }; }, getInitialState: function () { return { location: null, routes: null, params: null, components: null }; }, handleError: function (e) { if (!this.props.onError) throw e; this.props.onError.call(this, e); }, createRouterObject: function (e) { var t = this.props.matchContext; return t ? t.router : se(this.props.history, this.transitionManager, e); }, createTransitionManager: function () { var e = this.props.matchContext; if (e) return e.transitionManager; var t = this.props.history, n = this.props, r = n.routes, a = n.children; return t.getCurrentLocation || o()(!1), B(t, D(r || a)); }, componentWillMount: function () { var e = this; (this.transitionManager = this.createTransitionManager()), (this.router = this.createRouterObject(this.state)), (this._unlisten = this.transitionManager.listen(function (t, n) { t ? e.handleError(t) : (ue(e.router, n), e.setState(n, e.props.onUpdate)); })); }, componentWillReceiveProps: function (e) {}, componentWillUnmount: function () { this._unlisten && this._unlisten(); }, render: function () { var e = this.state, t = e.location, n = e.routes, r = e.params, o = e.components, a = this.props, i = a.createElement, s = a.render, u = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(a, ["createElement", "render"]); return null == t ? null : (Object.keys(le).forEach(function (e) { return delete u[e]; }), s(ce({}, u, { router: this.router, location: t, routes: n, params: r, components: o, createElement: i }))); }, }), fe = Object(c.shape)({ push: c.func.isRequired, replace: c.func.isRequired, go: c.func.isRequired, goBack: c.func.isRequired, goForward: c.func.isRequired, setRouteLeaveHook: c.func.isRequired, isActive: c.func.isRequired, }), pe = Object(c.shape)({ pathname: c.string.isRequired, search: c.string.isRequired, state: c.object, action: c.string.isRequired, key: c.string }), he = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function me(e, t) { return "function" == typeof e ? e(t.location) : e; } var Me = u()({ displayName: "Link", mixins: [V("router")], contextTypes: { router: fe }, propTypes: { to: Object(c.oneOfType)([c.string, c.object, c.func]), activeStyle: c.object, activeClassName: c.string, onlyActiveOnIndex: c.bool.isRequired, onClick: c.func, target: c.string }, getDefaultProps: function () { return { onlyActiveOnIndex: !1, style: {} }; }, handleClick: function (e) { if ((this.props.onClick && this.props.onClick(e), !e.defaultPrevented)) { var t = this.context.router; t || o()(!1), !(function (e) { return !!(e.metaKey || e.altKey || e.ctrlKey || e.shiftKey); })(e) && (function (e) { return 0 === e.button; })(e) && (this.props.target || (e.preventDefault(), t.push(me(this.props.to, t)))); } }, render: function () { var e = this.props, t = e.to, n = e.activeClassName, r = e.activeStyle, o = e.onlyActiveOnIndex, a = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(e, ["to", "activeClassName", "activeStyle", "onlyActiveOnIndex"]), s = this.context.router; if (s) { if (!t) return i.a.createElement("a", a); var u = me(t, s); (a.href = s.createHref(u)), (n || (null != r && !(function (e) { for (var t in e) if (Object.prototype.hasOwnProperty.call(e, t)) return !1; return !0; })(r))) && s.isActive(u, o) && (n && (a.className ? (a.className += " " + n) : (a.className = n)), r && (a.style = he({}, a.style, r))); } return i.a.createElement("a", he({}, a, { onClick: this.handleClick })); }, }), ye = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, ve = u()({ displayName: "IndexLink", render: function () { return i.a.createElement(Me, ye({}, this.props, { onlyActiveOnIndex: !0 })); }, }), be = n(523), ge = n.n(be), _e = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function Ae(e, t) { var n = t && t.withRef, r = u()({ displayName: "WithRouter", mixins: [V("router")], contextTypes: { router: fe }, propTypes: { router: fe }, getWrappedInstance: function () { return n || o()(!1), this.wrappedInstance; }, render: function () { var t = this, r = this.props.router || this.context.router; if (!r) return i.a.createElement(e, this.props); var o = r.params, a = r.location, s = r.routes, u = _e({}, this.props, { router: r, params: o, location: a, routes: s }); return ( n && (u.ref = function (e) { t.wrappedInstance = e; }), i.a.createElement(e, u) ); }, }); return ( (r.displayName = "withRouter(" + (function (e) { return e.displayName || e.name || "Component"; })(e) + ")"), (r.WrappedComponent = e), ge()(r, e) ); } var Le = u()({ displayName: "Redirect", statics: { createRouteFromReactElement: function (e) { var t = E(e); return ( t.from && (t.path = t.from), (t.onEnter = function (e, n) { var r = e.location, o = e.params, a = void 0; if ("/" === t.to.charAt(0)) a = M(t.to, o); else if (t.to) { var i = e.routes.indexOf(t); a = M(Le.getRoutePattern(e.routes, i - 1).replace(/\/*$/, "/") + t.to, o); } else a = r.pathname; n({ pathname: a, query: t.query || r.query, state: t.state || r.state }); }), t ); }, getRoutePattern: function (e, t) { for (var n = "", r = t; r >= 0; r--) { var o = e[r].path || ""; if (((n = o.replace(/\/*$/, "/") + n), 0 === o.indexOf("/"))) break; } return "/" + n; }, }, propTypes: { path: c.string, from: c.string, to: c.string.isRequired, query: c.object, state: c.object, onEnter: R, children: R }, render: function () { o()(!1); }, }), we = Le, Te = u()({ displayName: "IndexRedirect", statics: { createRouteFromReactElement: function (e, t) { t && (t.indexRoute = we.createRouteFromReactElement(e)); }, }, propTypes: { to: c.string.isRequired, query: c.object, state: c.object, onEnter: R, children: R }, render: function () { o()(!1); }, }), ke = u()({ displayName: "IndexRoute", statics: { createRouteFromReactElement: function (e, t) { t && (t.indexRoute = E(e)); }, }, propTypes: { path: R, component: F, components: H, getComponent: c.func, getComponents: c.func }, render: function () { o()(!1); }, }), Oe = u()({ displayName: "Route", statics: { createRouteFromReactElement: E }, propTypes: { path: c.string, component: F, components: H, getComponent: c.func, getComponents: c.func }, render: function () { o()(!1); }, }), Se = n(148), ze = n(194), Ee = n.n(ze), xe = n(195), De = n.n(xe), Ne = n(524), je = n.n(Ne); function Ce(e) { var t = je()(e); return Ee()( De()(function () { return t; }) )(e); } var Pe = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; var Ye = function (e, t) { var n = e.history, r = e.routes, a = e.location, i = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(e, ["history", "routes", "location"]); n || a || o()(!1); var s = B((n = n || Ce(i)), D(r)); (a = a ? n.createLocation(a) : n.getCurrentLocation()), s.match(a, function (e, r, o) { var a = void 0; if (o) { var i = se(n, s, o); a = Pe({}, o, { router: i, matchContext: { transitionManager: s, router: i } }); } t(e, r && n.createLocation(r, Se.REPLACE), a); }); }; function We(e) { return function (t) { return Ee()(De()(e))(t); }; } var qe = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, Be = function () { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; var r = t .map(function (e) { return e.renderRouterContext; }) .filter(Boolean), o = t .map(function (e) { return e.renderRouteComponent; }) .filter(Boolean), s = function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : a.createElement; return function (t, n) { return o.reduceRight(function (e, t) { return t(e, n); }, e(t, n)); }; }; return function (e) { return r.reduceRight(function (t, n) { return n(t, e); }, i.a.createElement(ae, qe({}, e, { createElement: s(e.createElement) }))); }; }, Re = n(525), Fe = n.n(Re), He = !("undefined" == typeof window || !window.document || !window.document.createElement); function Ie(e) { var t = void 0; return He && (t = We(e)()), t; } var Xe = Ie(Fe.a), Ke = n(526), Ue = Ie(n.n(Ke).a); n.d(t, "Router", function () { return de; }), n.d(t, "Link", function () { return Me; }), n.d(t, "IndexLink", function () { return ve; }), n.d(t, "withRouter", function () { return Ae; }), n.d(t, "IndexRedirect", function () { return Te; }), n.d(t, "IndexRoute", function () { return ke; }), n.d(t, "Redirect", function () { return we; }), n.d(t, "Route", function () { return Oe; }), n.d(t, "createRoutes", function () { return D; }), n.d(t, "RouterContext", function () { return ae; }), n.d(t, "locationShape", function () { return pe; }), n.d(t, "routerShape", function () { return fe; }), n.d(t, "match", function () { return Ye; }), n.d(t, "useRouterHistory", function () { return We; }), n.d(t, "formatPattern", function () { return M; }), n.d(t, "applyRouterMiddleware", function () { return Be; }), n.d(t, "browserHistory", function () { return Xe; }), n.d(t, "hashHistory", function () { return Ue; }), n.d(t, "createMemoryHistory", function () { return Ce; }); }, function (e, t, n) { "use strict"; function r(e, t) { try { return t(e); } catch (e) { if (e instanceof TypeError) { if (o.test(e)) return null; if (a.test(e)) return; } throw e; } } var o = /^null | null$|^[^(]* null /, a = /^undefined | undefined$|^[^(]* undefined /; (r.default = r), (e.exports = r); }, function (e, t, n) { "use strict"; e.exports = function (e, t, n, r, o, a, i, s) { if (!e) { var u; if (void 0 === t) u = new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings."); else { var c = [n, r, o, a, i, s], l = 0; (u = new Error( t.replace(/%s/g, function () { return c[l++]; }) )).name = "Invariant Violation"; } throw ((u.framesToPop = 1), u); } }; }, function (e, t, n) { "use strict"; !(function e() { if ("undefined" != typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" == typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE) { 0; try { __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e); } catch (e) { console.error(e); } } })(), (e.exports = n(595)); }, , , function (e, t, n) { "use strict"; t.__esModule = !0; var r, o = n(193), a = (r = o) && r.__esModule ? r : { default: r }; t.default = function (e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || ("object" !== (void 0 === t ? "undefined" : (0, a.default)(t)) && "function" != typeof t) ? e : t; }; }, function (e, t, n) { "use strict"; (t.__esModule = !0), (t.default = function (e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); }); }, function (e, t, n) { "use strict"; t.__esModule = !0; var r = i(n(1023)), o = i(n(1027)), a = i(n(193)); function i(e) { return e && e.__esModule ? e : { default: e }; } t.default = function (e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + (void 0 === t ? "undefined" : (0, a.default)(t))); (e.prototype = (0, o.default)(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } })), t && (r.default ? (0, r.default)(e, t) : (e.__proto__ = t)); }; }, , function (e, t, n) { (function (e, r) { var o; (function () { var a = "Expected a function", i = "__lodash_placeholder__", s = [ ["ary", 128], ["bind", 1], ["bindKey", 2], ["curry", 8], ["curryRight", 16], ["flip", 512], ["partial", 32], ["partialRight", 64], ["rearg", 256], ], u = "[object Arguments]", c = "[object Array]", l = "[object Boolean]", d = "[object Date]", f = "[object Error]", p = "[object Function]", h = "[object GeneratorFunction]", m = "[object Map]", M = "[object Number]", y = "[object Object]", v = "[object RegExp]", b = "[object Set]", g = "[object String]", _ = "[object Symbol]", A = "[object WeakMap]", L = "[object ArrayBuffer]", w = "[object DataView]", T = "[object Float32Array]", k = "[object Float64Array]", O = "[object Int8Array]", S = "[object Int16Array]", z = "[object Int32Array]", E = "[object Uint8Array]", x = "[object Uint16Array]", D = "[object Uint32Array]", N = /\b__p \+= '';/g, j = /\b(__p \+=) '' \+/g, C = /(__e\(.*?\)|\b__t\)) \+\n'';/g, P = /&(?:amp|lt|gt|quot|#39);/g, Y = /[&<>"']/g, W = RegExp(P.source), q = RegExp(Y.source), B = /<%-([\s\S]+?)%>/g, R = /<%([\s\S]+?)%>/g, F = /<%=([\s\S]+?)%>/g, H = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, I = /^\w*$/, X = /^\./, K = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, U = /[\\^$.*+?()[\]{}|]/g, J = RegExp(U.source), V = /^\s+|\s+$/g, G = /^\s+/, $ = /\s+$/, Q = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, Z = /\{\n\/\* \[wrapped with (.+)\] \*/, ee = /,? & /, te = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g, ne = /\\(\\)?/g, re = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, oe = /\w*$/, ae = /^[-+]0x[0-9a-f]+$/i, ie = /^0b[01]+$/i, se = /^\[object .+?Constructor\]$/, ue = /^0o[0-7]+$/i, ce = /^(?:0|[1-9]\d*)$/, le = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g, de = /($^)/, fe = /['\n\r\u2028\u2029\\]/g, pe = "\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff", he = "\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", me = "[\\ud800-\\udfff]", Me = "[" + he + "]", ye = "[" + pe + "]", ve = "\\d+", be = "[\\u2700-\\u27bf]", ge = "[a-z\\xdf-\\xf6\\xf8-\\xff]", _e = "[^\\ud800-\\udfff" + he + ve + "\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]", Ae = "\\ud83c[\\udffb-\\udfff]", Le = "[^\\ud800-\\udfff]", we = "(?:\\ud83c[\\udde6-\\uddff]){2}", Te = "[\\ud800-\\udbff][\\udc00-\\udfff]", ke = "[A-Z\\xc0-\\xd6\\xd8-\\xde]", Oe = "(?:" + ge + "|" + _e + ")", Se = "(?:" + ke + "|" + _e + ")", ze = "(?:" + ye + "|" + Ae + ")" + "?", Ee = "[\\ufe0e\\ufe0f]?" + ze + ("(?:\\u200d(?:" + [Le, we, Te].join("|") + ")[\\ufe0e\\ufe0f]?" + ze + ")*"), xe = "(?:" + [be, we, Te].join("|") + ")" + Ee, De = "(?:" + [Le + ye + "?", ye, we, Te, me].join("|") + ")", Ne = RegExp("['’]", "g"), je = RegExp(ye, "g"), Ce = RegExp(Ae + "(?=" + Ae + ")|" + De + Ee, "g"), Pe = RegExp( [ ke + "?" + ge + "+(?:['’](?:d|ll|m|re|s|t|ve))?(?=" + [Me, ke, "$"].join("|") + ")", Se + "+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=" + [Me, ke + Oe, "$"].join("|") + ")", ke + "?" + Oe + "+(?:['’](?:d|ll|m|re|s|t|ve))?", ke + "+(?:['’](?:D|LL|M|RE|S|T|VE))?", "\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)", "\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)", ve, xe, ].join("|"), "g" ), Ye = RegExp("[\\u200d\\ud800-\\udfff" + pe + "\\ufe0e\\ufe0f]"), We = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/, qe = [ "Array", "Buffer", "DataView", "Date", "Error", "Float32Array", "Float64Array", "Function", "Int8Array", "Int16Array", "Int32Array", "Map", "Math", "Object", "Promise", "RegExp", "Set", "String", "Symbol", "TypeError", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "WeakMap", "_", "clearTimeout", "isFinite", "parseInt", "setTimeout", ], Be = -1, Re = {}; (Re[T] = Re[k] = Re[O] = Re[S] = Re[z] = Re[E] = Re["[object Uint8ClampedArray]"] = Re[x] = Re[D] = !0), (Re[u] = Re[c] = Re[L] = Re[l] = Re[w] = Re[d] = Re[f] = Re[p] = Re[m] = Re[M] = Re[y] = Re[v] = Re[b] = Re[g] = Re[A] = !1); var Fe = {}; (Fe[u] = Fe[c] = Fe[L] = Fe[w] = Fe[l] = Fe[d] = Fe[T] = Fe[k] = Fe[O] = Fe[S] = Fe[z] = Fe[m] = Fe[M] = Fe[y] = Fe[v] = Fe[b] = Fe[g] = Fe[_] = Fe[E] = Fe["[object Uint8ClampedArray]"] = Fe[x] = Fe[D] = !0), (Fe[f] = Fe[p] = Fe[A] = !1); var He = { "\\": "\\", "'": "'", "\n": "n", "\r": "r", "\u2028": "u2028", "\u2029": "u2029" }, Ie = parseFloat, Xe = parseInt, Ke = "object" == typeof e && e && e.Object === Object && e, Ue = "object" == typeof self && self && self.Object === Object && self, Je = Ke || Ue || Function("return this")(), Ve = t && !t.nodeType && t, Ge = Ve && "object" == typeof r && r && !r.nodeType && r, $e = Ge && Ge.exports === Ve, Qe = $e && Ke.process, Ze = (function () { try { return Qe && Qe.binding && Qe.binding("util"); } catch (e) {} })(), et = Ze && Ze.isArrayBuffer, tt = Ze && Ze.isDate, nt = Ze && Ze.isMap, rt = Ze && Ze.isRegExp, ot = Ze && Ze.isSet, at = Ze && Ze.isTypedArray; function it(e, t) { return e.set(t[0], t[1]), e; } function st(e, t) { return e.add(t), e; } function ut(e, t, n) { switch (n.length) { case 0: return e.call(t); case 1: return e.call(t, n[0]); case 2: return e.call(t, n[0], n[1]); case 3: return e.call(t, n[0], n[1], n[2]); } return e.apply(t, n); } function ct(e, t, n, r) { for (var o = -1, a = null == e ? 0 : e.length; ++o < a; ) { var i = e[o]; t(r, i, n(i), e); } return r; } function lt(e, t) { for (var n = -1, r = null == e ? 0 : e.length; ++n < r && !1 !== t(e[n], n, e); ); return e; } function dt(e, t) { for (var n = null == e ? 0 : e.length; n-- && !1 !== t(e[n], n, e); ); return e; } function ft(e, t) { for (var n = -1, r = null == e ? 0 : e.length; ++n < r; ) if (!t(e[n], n, e)) return !1; return !0; } function pt(e, t) { for (var n = -1, r = null == e ? 0 : e.length, o = 0, a = []; ++n < r; ) { var i = e[n]; t(i, n, e) && (a[o++] = i); } return a; } function ht(e, t) { return !!(null == e ? 0 : e.length) && wt(e, t, 0) > -1; } function mt(e, t, n) { for (var r = -1, o = null == e ? 0 : e.length; ++r < o; ) if (n(t, e[r])) return !0; return !1; } function Mt(e, t) { for (var n = -1, r = null == e ? 0 : e.length, o = Array(r); ++n < r; ) o[n] = t(e[n], n, e); return o; } function yt(e, t) { for (var n = -1, r = t.length, o = e.length; ++n < r; ) e[o + n] = t[n]; return e; } function vt(e, t, n, r) { var o = -1, a = null == e ? 0 : e.length; for (r && a && (n = e[++o]); ++o < a; ) n = t(n, e[o], o, e); return n; } function bt(e, t, n, r) { var o = null == e ? 0 : e.length; for (r && o && (n = e[--o]); o--; ) n = t(n, e[o], o, e); return n; } function gt(e, t) { for (var n = -1, r = null == e ? 0 : e.length; ++n < r; ) if (t(e[n], n, e)) return !0; return !1; } var _t = St("length"); function At(e, t, n) { var r; return ( n(e, function (e, n, o) { if (t(e, n, o)) return (r = n), !1; }), r ); } function Lt(e, t, n, r) { for (var o = e.length, a = n + (r ? 1 : -1); r ? a-- : ++a < o; ) if (t(e[a], a, e)) return a; return -1; } function wt(e, t, n) { return t == t ? (function (e, t, n) { var r = n - 1, o = e.length; for (; ++r < o; ) if (e[r] === t) return r; return -1; })(e, t, n) : Lt(e, kt, n); } function Tt(e, t, n, r) { for (var o = n - 1, a = e.length; ++o < a; ) if (r(e[o], t)) return o; return -1; } function kt(e) { return e != e; } function Ot(e, t) { var n = null == e ? 0 : e.length; return n ? xt(e, t) / n : NaN; } function St(e) { return function (t) { return null == t ? void 0 : t[e]; }; } function zt(e) { return function (t) { return null == e ? void 0 : e[t]; }; } function Et(e, t, n, r, o) { return ( o(e, function (e, o, a) { n = r ? ((r = !1), e) : t(n, e, o, a); }), n ); } function xt(e, t) { for (var n, r = -1, o = e.length; ++r < o; ) { var a = t(e[r]); void 0 !== a && (n = void 0 === n ? a : n + a); } return n; } function Dt(e, t) { for (var n = -1, r = Array(e); ++n < e; ) r[n] = t(n); return r; } function Nt(e) { return function (t) { return e(t); }; } function jt(e, t) { return Mt(t, function (t) { return e[t]; }); } function Ct(e, t) { return e.has(t); } function Pt(e, t) { for (var n = -1, r = e.length; ++n < r && wt(t, e[n], 0) > -1; ); return n; } function Yt(e, t) { for (var n = e.length; n-- && wt(t, e[n], 0) > -1; ); return n; } function Wt(e, t) { for (var n = e.length, r = 0; n--; ) e[n] === t && ++r; return r; } var qt = zt({ À: "A", Á: "A", Â: "A", Ã: "A", Ä: "A", Å: "A", à: "a", á: "a", â: "a", ã: "a", ä: "a", å: "a", Ç: "C", ç: "c", Ð: "D", ð: "d", È: "E", É: "E", Ê: "E", Ë: "E", è: "e", é: "e", ê: "e", ë: "e", Ì: "I", Í: "I", Î: "I", Ï: "I", ì: "i", í: "i", î: "i", ï: "i", Ñ: "N", ñ: "n", Ò: "O", Ó: "O", Ô: "O", Õ: "O", Ö: "O", Ø: "O", ò: "o", ó: "o", ô: "o", õ: "o", ö: "o", ø: "o", Ù: "U", Ú: "U", Û: "U", Ü: "U", ù: "u", ú: "u", û: "u", ü: "u", Ý: "Y", ý: "y", ÿ: "y", Æ: "Ae", æ: "ae", Þ: "Th", þ: "th", ß: "ss", Ā: "A", Ă: "A", Ą: "A", ā: "a", ă: "a", ą: "a", Ć: "C", Ĉ: "C", Ċ: "C", Č: "C", ć: "c", ĉ: "c", ċ: "c", č: "c", Ď: "D", Đ: "D", ď: "d", đ: "d", Ē: "E", Ĕ: "E", Ė: "E", Ę: "E", Ě: "E", ē: "e", ĕ: "e", ė: "e", ę: "e", ě: "e", Ĝ: "G", Ğ: "G", Ġ: "G", Ģ: "G", ĝ: "g", ğ: "g", ġ: "g", ģ: "g", Ĥ: "H", Ħ: "H", ĥ: "h", ħ: "h", Ĩ: "I", Ī: "I", Ĭ: "I", Į: "I", İ: "I", ĩ: "i", ī: "i", ĭ: "i", į: "i", ı: "i", Ĵ: "J", ĵ: "j", Ķ: "K", ķ: "k", ĸ: "k", Ĺ: "L", Ļ: "L", Ľ: "L", Ŀ: "L", Ł: "L", ĺ: "l", ļ: "l", ľ: "l", ŀ: "l", ł: "l", Ń: "N", Ņ: "N", Ň: "N", Ŋ: "N", ń: "n", ņ: "n", ň: "n", ŋ: "n", Ō: "O", Ŏ: "O", Ő: "O", ō: "o", ŏ: "o", ő: "o", Ŕ: "R", Ŗ: "R", Ř: "R", ŕ: "r", ŗ: "r", ř: "r", Ś: "S", Ŝ: "S", Ş: "S", Š: "S", ś: "s", ŝ: "s", ş: "s", š: "s", Ţ: "T", Ť: "T", Ŧ: "T", ţ: "t", ť: "t", ŧ: "t", Ũ: "U", Ū: "U", Ŭ: "U", Ů: "U", Ű: "U", Ų: "U", ũ: "u", ū: "u", ŭ: "u", ů: "u", ű: "u", ų: "u", Ŵ: "W", ŵ: "w", Ŷ: "Y", ŷ: "y", Ÿ: "Y", Ź: "Z", Ż: "Z", Ž: "Z", ź: "z", ż: "z", ž: "z", IJ: "IJ", ij: "ij", Œ: "Oe", œ: "oe", ʼn: "'n", ſ: "s", }), Bt = zt({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }); function Rt(e) { return "\\" + He[e]; } function Ft(e) { return Ye.test(e); } function Ht(e) { var t = -1, n = Array(e.size); return ( e.forEach(function (e, r) { n[++t] = [r, e]; }), n ); } function It(e, t) { return function (n) { return e(t(n)); }; } function Xt(e, t) { for (var n = -1, r = e.length, o = 0, a = []; ++n < r; ) { var s = e[n]; (s !== t && s !== i) || ((e[n] = i), (a[o++] = n)); } return a; } function Kt(e) { var t = -1, n = Array(e.size); return ( e.forEach(function (e) { n[++t] = e; }), n ); } function Ut(e) { var t = -1, n = Array(e.size); return ( e.forEach(function (e) { n[++t] = [e, e]; }), n ); } function Jt(e) { return Ft(e) ? (function (e) { var t = (Ce.lastIndex = 0); for (; Ce.test(e); ) ++t; return t; })(e) : _t(e); } function Vt(e) { return Ft(e) ? (function (e) { return e.match(Ce) || []; })(e) : (function (e) { return e.split(""); })(e); } var Gt = zt({ "&": "&", "<": "<", ">": ">", """: '"', "'": "'" }); var $t = (function e(t) { var n, r = (t = null == t ? Je : $t.defaults(Je.Object(), t, $t.pick(Je, qe))).Array, o = t.Date, pe = t.Error, he = t.Function, me = t.Math, Me = t.Object, ye = t.RegExp, ve = t.String, be = t.TypeError, ge = r.prototype, _e = he.prototype, Ae = Me.prototype, Le = t["__core-js_shared__"], we = _e.toString, Te = Ae.hasOwnProperty, ke = 0, Oe = (n = /[^.]+$/.exec((Le && Le.keys && Le.keys.IE_PROTO) || "")) ? "Symbol(src)_1." + n : "", Se = Ae.toString, ze = we.call(Me), Ee = Je._, xe = ye( "^" + we .call(Te) .replace(U, "\\$&") .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" ), De = $e ? t.Buffer : void 0, Ce = t.Symbol, Ye = t.Uint8Array, He = De ? De.allocUnsafe : void 0, Ke = It(Me.getPrototypeOf, Me), Ue = Me.create, Ve = Ae.propertyIsEnumerable, Ge = ge.splice, Qe = Ce ? Ce.isConcatSpreadable : void 0, Ze = Ce ? Ce.iterator : void 0, _t = Ce ? Ce.toStringTag : void 0, zt = (function () { try { var e = ra(Me, "defineProperty"); return e({}, "", {}), e; } catch (e) {} })(), Qt = t.clearTimeout !== Je.clearTimeout && t.clearTimeout, Zt = o && o.now !== Je.Date.now && o.now, en = t.setTimeout !== Je.setTimeout && t.setTimeout, tn = me.ceil, nn = me.floor, rn = Me.getOwnPropertySymbols, on = De ? De.isBuffer : void 0, an = t.isFinite, sn = ge.join, un = It(Me.keys, Me), cn = me.max, ln = me.min, dn = o.now, fn = t.parseInt, pn = me.random, hn = ge.reverse, mn = ra(t, "DataView"), Mn = ra(t, "Map"), yn = ra(t, "Promise"), vn = ra(t, "Set"), bn = ra(t, "WeakMap"), gn = ra(Me, "create"), _n = bn && new bn(), An = {}, Ln = za(mn), wn = za(Mn), Tn = za(yn), kn = za(vn), On = za(bn), Sn = Ce ? Ce.prototype : void 0, zn = Sn ? Sn.valueOf : void 0, En = Sn ? Sn.toString : void 0; function xn(e) { if (Ki(e) && !Ci(e) && !(e instanceof Cn)) { if (e instanceof jn) return e; if (Te.call(e, "__wrapped__")) return Ea(e); } return new jn(e); } var Dn = (function () { function e() {} return function (t) { if (!Xi(t)) return {}; if (Ue) return Ue(t); e.prototype = t; var n = new e(); return (e.prototype = void 0), n; }; })(); function Nn() {} function jn(e, t) { (this.__wrapped__ = e), (this.__actions__ = []), (this.__chain__ = !!t), (this.__index__ = 0), (this.__values__ = void 0); } function Cn(e) { (this.__wrapped__ = e), (this.__actions__ = []), (this.__dir__ = 1), (this.__filtered__ = !1), (this.__iteratees__ = []), (this.__takeCount__ = 4294967295), (this.__views__ = []); } function Pn(e) { var t = -1, n = null == e ? 0 : e.length; for (this.clear(); ++t < n; ) { var r = e[t]; this.set(r[0], r[1]); } } function Yn(e) { var t = -1, n = null == e ? 0 : e.length; for (this.clear(); ++t < n; ) { var r = e[t]; this.set(r[0], r[1]); } } function Wn(e) { var t = -1, n = null == e ? 0 : e.length; for (this.clear(); ++t < n; ) { var r = e[t]; this.set(r[0], r[1]); } } function qn(e) { var t = -1, n = null == e ? 0 : e.length; for (this.__data__ = new Wn(); ++t < n; ) this.add(e[t]); } function Bn(e) { var t = (this.__data__ = new Yn(e)); this.size = t.size; } function Rn(e, t) { var n = Ci(e), r = !n && ji(e), o = !n && !r && qi(e), a = !n && !r && !o && es(e), i = n || r || o || a, s = i ? Dt(e.length, ve) : [], u = s.length; for (var c in e) (!t && !Te.call(e, c)) || (i && ("length" == c || (o && ("offset" == c || "parent" == c)) || (a && ("buffer" == c || "byteLength" == c || "byteOffset" == c)) || la(c, u))) || s.push(c); return s; } function Fn(e) { var t = e.length; return t ? e[qr(0, t - 1)] : void 0; } function Hn(e, t) { return ka(_o(e), Qn(t, 0, e.length)); } function In(e) { return ka(_o(e)); } function Xn(e, t, n) { ((void 0 !== n && !xi(e[t], n)) || (void 0 === n && !(t in e))) && Gn(e, t, n); } function Kn(e, t, n) { var r = e[t]; (Te.call(e, t) && xi(r, n) && (void 0 !== n || t in e)) || Gn(e, t, n); } function Un(e, t) { for (var n = e.length; n--; ) if (xi(e[n][0], t)) return n; return -1; } function Jn(e, t, n, r) { return ( rr(e, function (e, o, a) { t(r, e, n(e), a); }), r ); } function Vn(e, t) { return e && Ao(t, As(t), e); } function Gn(e, t, n) { "__proto__" == t && zt ? zt(e, t, { configurable: !0, enumerable: !0, value: n, writable: !0 }) : (e[t] = n); } function $n(e, t) { for (var n = -1, o = t.length, a = r(o), i = null == e; ++n < o; ) a[n] = i ? void 0 : ys(e, t[n]); return a; } function Qn(e, t, n) { return e == e && (void 0 !== n && (e = e <= n ? e : n), void 0 !== t && (e = e >= t ? e : t)), e; } function Zn(e, t, n, r, o, a) { var i, s = 1 & t, c = 2 & t, f = 4 & t; if ((n && (i = o ? n(e, r, o, a) : n(e)), void 0 !== i)) return i; if (!Xi(e)) return e; var A = Ci(e); if (A) { if ( ((i = (function (e) { var t = e.length, n = e.constructor(t); t && "string" == typeof e[0] && Te.call(e, "index") && ((n.index = e.index), (n.input = e.input)); return n; })(e)), !s) ) return _o(e, i); } else { var N = ia(e), j = N == p || N == h; if (qi(e)) return mo(e, s); if (N == y || N == u || (j && !o)) { if (((i = c || j ? {} : ua(e)), !s)) return c ? (function (e, t) { return Ao(e, aa(e), t); })( e, (function (e, t) { return e && Ao(t, Ls(t), e); })(i, e) ) : (function (e, t) { return Ao(e, oa(e), t); })(e, Vn(i, e)); } else { if (!Fe[N]) return o ? e : {}; i = (function (e, t, n, r) { var o = e.constructor; switch (t) { case L: return Mo(e); case l: case d: return new o(+e); case w: return (function (e, t) { var n = t ? Mo(e.buffer) : e.buffer; return new e.constructor(n, e.byteOffset, e.byteLength); })(e, r); case T: case k: case O: case S: case z: case E: case "[object Uint8ClampedArray]": case x: case D: return yo(e, r); case m: return (function (e, t, n) { return vt(t ? n(Ht(e), 1) : Ht(e), it, new e.constructor()); })(e, r, n); case M: case g: return new o(e); case v: return (function (e) { var t = new e.constructor(e.source, oe.exec(e)); return (t.lastIndex = e.lastIndex), t; })(e); case b: return (function (e, t, n) { return vt(t ? n(Kt(e), 1) : Kt(e), st, new e.constructor()); })(e, r, n); case _: return (a = e), zn ? Me(zn.call(a)) : {}; } var a; })(e, N, Zn, s); } } a || (a = new Bn()); var C = a.get(e); if (C) return C; a.set(e, i); var P = A ? void 0 : (f ? (c ? Go : Vo) : c ? Ls : As)(e); return ( lt(P || e, function (r, o) { P && (r = e[(o = r)]), Kn(i, o, Zn(r, t, n, o, e, a)); }), i ); } function er(e, t, n) { var r = n.length; if (null == e) return !r; for (e = Me(e); r--; ) { var o = n[r], a = t[o], i = e[o]; if ((void 0 === i && !(o in e)) || !a(i)) return !1; } return !0; } function tr(e, t, n) { if ("function" != typeof e) throw new be(a); return Aa(function () { e.apply(void 0, n); }, t); } function nr(e, t, n, r) { var o = -1, a = ht, i = !0, s = e.length, u = [], c = t.length; if (!s) return u; n && (t = Mt(t, Nt(n))), r ? ((a = mt), (i = !1)) : t.length >= 200 && ((a = Ct), (i = !1), (t = new qn(t))); e: for (; ++o < s; ) { var l = e[o], d = null == n ? l : n(l); if (((l = r || 0 !== l ? l : 0), i && d == d)) { for (var f = c; f--; ) if (t[f] === d) continue e; u.push(l); } else a(t, d, r) || u.push(l); } return u; } (xn.templateSettings = { escape: B, evaluate: R, interpolate: F, variable: "", imports: { _: xn } }), (xn.prototype = Nn.prototype), (xn.prototype.constructor = xn), (jn.prototype = Dn(Nn.prototype)), (jn.prototype.constructor = jn), (Cn.prototype = Dn(Nn.prototype)), (Cn.prototype.constructor = Cn), (Pn.prototype.clear = function () { (this.__data__ = gn ? gn(null) : {}), (this.size = 0); }), (Pn.prototype.delete = function (e) { var t = this.has(e) && delete this.__data__[e]; return (this.size -= t ? 1 : 0), t; }), (Pn.prototype.get = function (e) { var t = this.__data__; if (gn) { var n = t[e]; return "__lodash_hash_undefined__" === n ? void 0 : n; } return Te.call(t, e) ? t[e] : void 0; }), (Pn.prototype.has = function (e) { var t = this.__data__; return gn ? void 0 !== t[e] : Te.call(t, e); }), (Pn.prototype.set = function (e, t) { var n = this.__data__; return (this.size += this.has(e) ? 0 : 1), (n[e] = gn && void 0 === t ? "__lodash_hash_undefined__" : t), this; }), (Yn.prototype.clear = function () { (this.__data__ = []), (this.size = 0); }), (Yn.prototype.delete = function (e) { var t = this.__data__, n = Un(t, e); return !(n < 0) && (n == t.length - 1 ? t.pop() : Ge.call(t, n, 1), --this.size, !0); }), (Yn.prototype.get = function (e) { var t = this.__data__, n = Un(t, e); return n < 0 ? void 0 : t[n][1]; }), (Yn.prototype.has = function (e) { return Un(this.__data__, e) > -1; }), (Yn.prototype.set = function (e, t) { var n = this.__data__, r = Un(n, e); return r < 0 ? (++this.size, n.push([e, t])) : (n[r][1] = t), this; }), (Wn.prototype.clear = function () { (this.size = 0), (this.__data__ = { hash: new Pn(), map: new (Mn || Yn)(), string: new Pn() }); }), (Wn.prototype.delete = function (e) { var t = ta(this, e).delete(e); return (this.size -= t ? 1 : 0), t; }), (Wn.prototype.get = function (e) { return ta(this, e).get(e); }), (Wn.prototype.has = function (e) { return ta(this, e).has(e); }), (Wn.prototype.set = function (e, t) { var n = ta(this, e), r = n.size; return n.set(e, t), (this.size += n.size == r ? 0 : 1), this; }), (qn.prototype.add = qn.prototype.push = function (e) { return this.__data__.set(e, "__lodash_hash_undefined__"), this; }), (qn.prototype.has = function (e) { return this.__data__.has(e); }), (Bn.prototype.clear = function () { (this.__data__ = new Yn()), (this.size = 0); }), (Bn.prototype.delete = function (e) { var t = this.__data__, n = t.delete(e); return (this.size = t.size), n; }), (Bn.prototype.get = function (e) { return this.__data__.get(e); }), (Bn.prototype.has = function (e) { return this.__data__.has(e); }), (Bn.prototype.set = function (e, t) { var n = this.__data__; if (n instanceof Yn) { var r = n.__data__; if (!Mn || r.length < 199) return r.push([e, t]), (this.size = ++n.size), this; n = this.__data__ = new Wn(r); } return n.set(e, t), (this.size = n.size), this; }); var rr = To(dr), or = To(fr, !0); function ar(e, t) { var n = !0; return ( rr(e, function (e, r, o) { return (n = !!t(e, r, o)); }), n ); } function ir(e, t, n) { for (var r = -1, o = e.length; ++r < o; ) { var a = e[r], i = t(a); if (null != i && (void 0 === s ? i == i && !Zi(i) : n(i, s))) var s = i, u = a; } return u; } function sr(e, t) { var n = []; return ( rr(e, function (e, r, o) { t(e, r, o) && n.push(e); }), n ); } function ur(e, t, n, r, o) { var a = -1, i = e.length; for (n || (n = ca), o || (o = []); ++a < i; ) { var s = e[a]; t > 0 && n(s) ? (t > 1 ? ur(s, t - 1, n, r, o) : yt(o, s)) : r || (o[o.length] = s); } return o; } var cr = ko(), lr = ko(!0); function dr(e, t) { return e && cr(e, t, As); } function fr(e, t) { return e && lr(e, t, As); } function pr(e, t) { return pt(t, function (t) { return Fi(e[t]); }); } function hr(e, t) { for (var n = 0, r = (t = lo(t, e)).length; null != e && n < r; ) e = e[Sa(t[n++])]; return n && n == r ? e : void 0; } function mr(e, t, n) { var r = t(e); return Ci(e) ? r : yt(r, n(e)); } function Mr(e) { return null == e ? void 0 === e ? "[object Undefined]" : "[object Null]" : _t && _t in Me(e) ? (function (e) { var t = Te.call(e, _t), n = e[_t]; try { e[_t] = void 0; var r = !0; } catch (e) {} var o = Se.call(e); r && (t ? (e[_t] = n) : delete e[_t]); return o; })(e) : (function (e) { return Se.call(e); })(e); } function yr(e, t) { return e > t; } function vr(e, t) { return null != e && Te.call(e, t); } function br(e, t) { return null != e && t in Me(e); } function gr(e, t, n) { for (var o = n ? mt : ht, a = e[0].length, i = e.length, s = i, u = r(i), c = 1 / 0, l = []; s--; ) { var d = e[s]; s && t && (d = Mt(d, Nt(t))), (c = ln(d.length, c)), (u[s] = !n && (t || (a >= 120 && d.length >= 120)) ? new qn(s && d) : void 0); } d = e[0]; var f = -1, p = u[0]; e: for (; ++f < a && l.length < c; ) { var h = d[f], m = t ? t(h) : h; if (((h = n || 0 !== h ? h : 0), !(p ? Ct(p, m) : o(l, m, n)))) { for (s = i; --s; ) { var M = u[s]; if (!(M ? Ct(M, m) : o(e[s], m, n))) continue e; } p && p.push(m), l.push(h); } } return l; } function _r(e, t, n) { var r = null == (e = ba(e, (t = lo(t, e)))) ? e : e[Sa(Ra(t))]; return null == r ? void 0 : ut(r, e, n); } function Ar(e) { return Ki(e) && Mr(e) == u; } function Lr(e, t, n, r, o) { return ( e === t || (null == e || null == t || (!Ki(e) && !Ki(t)) ? e != e && t != t : (function (e, t, n, r, o, a) { var i = Ci(e), s = Ci(t), p = i ? c : ia(e), h = s ? c : ia(t), A = (p = p == u ? y : p) == y, T = (h = h == u ? y : h) == y, k = p == h; if (k && qi(e)) { if (!qi(t)) return !1; (i = !0), (A = !1); } if (k && !A) return ( a || (a = new Bn()), i || es(e) ? Uo(e, t, n, r, o, a) : (function (e, t, n, r, o, a, i) { switch (n) { case w: if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset) return !1; (e = e.buffer), (t = t.buffer); case L: return !(e.byteLength != t.byteLength || !a(new Ye(e), new Ye(t))); case l: case d: case M: return xi(+e, +t); case f: return e.name == t.name && e.message == t.message; case v: case g: return e == t + ""; case m: var s = Ht; case b: var u = 1 & r; if ((s || (s = Kt), e.size != t.size && !u)) return !1; var c = i.get(e); if (c) return c == t; (r |= 2), i.set(e, t); var p = Uo(s(e), s(t), r, o, a, i); return i.delete(e), p; case _: if (zn) return zn.call(e) == zn.call(t); } return !1; })(e, t, p, n, r, o, a) ); if (!(1 & n)) { var O = A && Te.call(e, "__wrapped__"), S = T && Te.call(t, "__wrapped__"); if (O || S) { var z = O ? e.value() : e, E = S ? t.value() : t; return a || (a = new Bn()), o(z, E, n, r, a); } } if (!k) return !1; return ( a || (a = new Bn()), (function (e, t, n, r, o, a) { var i = 1 & n, s = Vo(e), u = s.length, c = Vo(t).length; if (u != c && !i) return !1; var l = u; for (; l--; ) { var d = s[l]; if (!(i ? d in t : Te.call(t, d))) return !1; } var f = a.get(e); if (f && a.get(t)) return f == t; var p = !0; a.set(e, t), a.set(t, e); var h = i; for (; ++l < u; ) { d = s[l]; var m = e[d], M = t[d]; if (r) var y = i ? r(M, m, d, t, e, a) : r(m, M, d, e, t, a); if (!(void 0 === y ? m === M || o(m, M, n, r, a) : y)) { p = !1; break; } h || (h = "constructor" == d); } if (p && !h) { var v = e.constructor, b = t.constructor; v == b || !("constructor" in e) || !("constructor" in t) || ("function" == typeof v && v instanceof v && "function" == typeof b && b instanceof b) || (p = !1); } return a.delete(e), a.delete(t), p; })(e, t, n, r, o, a) ); })(e, t, n, r, Lr, o)) ); } function wr(e, t, n, r) { var o = n.length, a = o, i = !r; if (null == e) return !a; for (e = Me(e); o--; ) { var s = n[o]; if (i && s[2] ? s[1] !== e[s[0]] : !(s[0] in e)) return !1; } for (; ++o < a; ) { var u = (s = n[o])[0], c = e[u], l = s[1]; if (i && s[2]) { if (void 0 === c && !(u in e)) return !1; } else { var d = new Bn(); if (r) var f = r(c, l, u, e, t, d); if (!(void 0 === f ? Lr(l, c, 3, r, d) : f)) return !1; } } return !0; } function Tr(e) { return !(!Xi(e) || ((t = e), Oe && Oe in t)) && (Fi(e) ? xe : se).test(za(e)); var t; } function kr(e) { return "function" == typeof e ? e : null == e ? Js : "object" == typeof e ? (Ci(e) ? Dr(e[0], e[1]) : xr(e)) : ru(e); } function Or(e) { if (!ma(e)) return un(e); var t = []; for (var n in Me(e)) Te.call(e, n) && "constructor" != n && t.push(n); return t; } function Sr(e) { if (!Xi(e)) return (function (e) { var t = []; if (null != e) for (var n in Me(e)) t.push(n); return t; })(e); var t = ma(e), n = []; for (var r in e) ("constructor" != r || (!t && Te.call(e, r))) && n.push(r); return n; } function zr(e, t) { return e < t; } function Er(e, t) { var n = -1, o = Yi(e) ? r(e.length) : []; return ( rr(e, function (e, r, a) { o[++n] = t(e, r, a); }), o ); } function xr(e) { var t = na(e); return 1 == t.length && t[0][2] ? ya(t[0][0], t[0][1]) : function (n) { return n === e || wr(n, e, t); }; } function Dr(e, t) { return fa(e) && Ma(t) ? ya(Sa(e), t) : function (n) { var r = ys(n, e); return void 0 === r && r === t ? vs(n, e) : Lr(t, r, 3); }; } function Nr(e, t, n, r, o) { e !== t && cr( t, function (a, i) { if (Xi(a)) o || (o = new Bn()), (function (e, t, n, r, o, a, i) { var s = e[n], u = t[n], c = i.get(u); if (c) return void Xn(e, n, c); var l = a ? a(s, u, n + "", e, t, i) : void 0, d = void 0 === l; if (d) { var f = Ci(u), p = !f && qi(u), h = !f && !p && es(u); (l = u), f || p || h ? Ci(s) ? (l = s) : Wi(s) ? (l = _o(s)) : p ? ((d = !1), (l = mo(u, !0))) : h ? ((d = !1), (l = yo(u, !0))) : (l = []) : Vi(u) || ji(u) ? ((l = s), ji(s) ? (l = us(s)) : (!Xi(s) || (r && Fi(s))) && (l = ua(u))) : (d = !1); } d && (i.set(u, l), o(l, u, r, a, i), i.delete(u)); Xn(e, n, l); })(e, t, i, n, Nr, r, o); else { var s = r ? r(e[i], a, i + "", e, t, o) : void 0; void 0 === s && (s = a), Xn(e, i, s); } }, Ls ); } function jr(e, t) { var n = e.length; if (n) return la((t += t < 0 ? n : 0), n) ? e[t] : void 0; } function Cr(e, t, n) { var r = -1; return ( (t = Mt(t.length ? t : [Js], Nt(ea()))), (function (e, t) { var n = e.length; for (e.sort(t); n--; ) e[n] = e[n].value; return e; })( Er(e, function (e, n, o) { return { criteria: Mt(t, function (t) { return t(e); }), index: ++r, value: e, }; }), function (e, t) { return (function (e, t, n) { var r = -1, o = e.criteria, a = t.criteria, i = o.length, s = n.length; for (; ++r < i; ) { var u = vo(o[r], a[r]); if (u) { if (r >= s) return u; var c = n[r]; return u * ("desc" == c ? -1 : 1); } } return e.index - t.index; })(e, t, n); } ) ); } function Pr(e, t, n) { for (var r = -1, o = t.length, a = {}; ++r < o; ) { var i = t[r], s = hr(e, i); n(s, i) && Ir(a, lo(i, e), s); } return a; } function Yr(e, t, n, r) { var o = r ? Tt : wt, a = -1, i = t.length, s = e; for (e === t && (t = _o(t)), n && (s = Mt(e, Nt(n))); ++a < i; ) for (var u = 0, c = t[a], l = n ? n(c) : c; (u = o(s, l, u, r)) > -1; ) s !== e && Ge.call(s, u, 1), Ge.call(e, u, 1); return e; } function Wr(e, t) { for (var n = e ? t.length : 0, r = n - 1; n--; ) { var o = t[n]; if (n == r || o !== a) { var a = o; la(o) ? Ge.call(e, o, 1) : no(e, o); } } return e; } function qr(e, t) { return e + nn(pn() * (t - e + 1)); } function Br(e, t) { var n = ""; if (!e || t < 1 || t > 9007199254740991) return n; do { t % 2 && (n += e), (t = nn(t / 2)) && (e += e); } while (t); return n; } function Rr(e, t) { return La(va(e, t, Js), e + ""); } function Fr(e) { return Fn(xs(e)); } function Hr(e, t) { var n = xs(e); return ka(n, Qn(t, 0, n.length)); } function Ir(e, t, n, r) { if (!Xi(e)) return e; for (var o = -1, a = (t = lo(t, e)).length, i = a - 1, s = e; null != s && ++o < a; ) { var u = Sa(t[o]), c = n; if (o != i) { var l = s[u]; void 0 === (c = r ? r(l, u, s) : void 0) && (c = Xi(l) ? l : la(t[o + 1]) ? [] : {}); } Kn(s, u, c), (s = s[u]); } return e; } var Xr = _n ? function (e, t) { return _n.set(e, t), e; } : Js, Kr = zt ? function (e, t) { return zt(e, "toString", { configurable: !0, enumerable: !1, value: Xs(t), writable: !0 }); } : Js; function Ur(e) { return ka(xs(e)); } function Jr(e, t, n) { var o = -1, a = e.length; t < 0 && (t = -t > a ? 0 : a + t), (n = n > a ? a : n) < 0 && (n += a), (a = t > n ? 0 : (n - t) >>> 0), (t >>>= 0); for (var i = r(a); ++o < a; ) i[o] = e[o + t]; return i; } function Vr(e, t) { var n; return ( rr(e, function (e, r, o) { return !(n = t(e, r, o)); }), !!n ); } function Gr(e, t, n) { var r = 0, o = null == e ? r : e.length; if ("number" == typeof t && t == t && o <= 2147483647) { for (; r < o; ) { var a = (r + o) >>> 1, i = e[a]; null !== i && !Zi(i) && (n ? i <= t : i < t) ? (r = a + 1) : (o = a); } return o; } return $r(e, t, Js, n); } function $r(e, t, n, r) { t = n(t); for (var o = 0, a = null == e ? 0 : e.length, i = t != t, s = null === t, u = Zi(t), c = void 0 === t; o < a; ) { var l = nn((o + a) / 2), d = n(e[l]), f = void 0 !== d, p = null === d, h = d == d, m = Zi(d); if (i) var M = r || h; else M = c ? h && (r || f) : s ? h && f && (r || !p) : u ? h && f && !p && (r || !m) : !p && !m && (r ? d <= t : d < t); M ? (o = l + 1) : (a = l); } return ln(a, 4294967294); } function Qr(e, t) { for (var n = -1, r = e.length, o = 0, a = []; ++n < r; ) { var i = e[n], s = t ? t(i) : i; if (!n || !xi(s, u)) { var u = s; a[o++] = 0 === i ? 0 : i; } } return a; } function Zr(e) { return "number" == typeof e ? e : Zi(e) ? NaN : +e; } function eo(e) { if ("string" == typeof e) return e; if (Ci(e)) return Mt(e, eo) + ""; if (Zi(e)) return En ? En.call(e) : ""; var t = e + ""; return "0" == t && 1 / e == -1 / 0 ? "-0" : t; } function to(e, t, n) { var r = -1, o = ht, a = e.length, i = !0, s = [], u = s; if (n) (i = !1), (o = mt); else if (a >= 200) { var c = t ? null : Ro(e); if (c) return Kt(c); (i = !1), (o = Ct), (u = new qn()); } else u = t ? [] : s; e: for (; ++r < a; ) { var l = e[r], d = t ? t(l) : l; if (((l = n || 0 !== l ? l : 0), i && d == d)) { for (var f = u.length; f--; ) if (u[f] === d) continue e; t && u.push(d), s.push(l); } else o(u, d, n) || (u !== s && u.push(d), s.push(l)); } return s; } function no(e, t) { return null == (e = ba(e, (t = lo(t, e)))) || delete e[Sa(Ra(t))]; } function ro(e, t, n, r) { return Ir(e, t, n(hr(e, t)), r); } function oo(e, t, n, r) { for (var o = e.length, a = r ? o : -1; (r ? a-- : ++a < o) && t(e[a], a, e); ); return n ? Jr(e, r ? 0 : a, r ? a + 1 : o) : Jr(e, r ? a + 1 : 0, r ? o : a); } function ao(e, t) { var n = e; return ( n instanceof Cn && (n = n.value()), vt( t, function (e, t) { return t.func.apply(t.thisArg, yt([e], t.args)); }, n ) ); } function io(e, t, n) { var o = e.length; if (o < 2) return o ? to(e[0]) : []; for (var a = -1, i = r(o); ++a < o; ) for (var s = e[a], u = -1; ++u < o; ) u != a && (i[a] = nr(i[a] || s, e[u], t, n)); return to(ur(i, 1), t, n); } function so(e, t, n) { for (var r = -1, o = e.length, a = t.length, i = {}; ++r < o; ) { var s = r < a ? t[r] : void 0; n(i, e[r], s); } return i; } function uo(e) { return Wi(e) ? e : []; } function co(e) { return "function" == typeof e ? e : Js; } function lo(e, t) { return Ci(e) ? e : fa(e, t) ? [e] : Oa(cs(e)); } var fo = Rr; function po(e, t, n) { var r = e.length; return (n = void 0 === n ? r : n), !t && n >= r ? e : Jr(e, t, n); } var ho = Qt || function (e) { return Je.clearTimeout(e); }; function mo(e, t) { if (t) return e.slice(); var n = e.length, r = He ? He(n) : new e.constructor(n); return e.copy(r), r; } function Mo(e) { var t = new e.constructor(e.byteLength); return new Ye(t).set(new Ye(e)), t; } function yo(e, t) { var n = t ? Mo(e.buffer) : e.buffer; return new e.constructor(n, e.byteOffset, e.length); } function vo(e, t) { if (e !== t) { var n = void 0 !== e, r = null === e, o = e == e, a = Zi(e), i = void 0 !== t, s = null === t, u = t == t, c = Zi(t); if ((!s && !c && !a && e > t) || (a && i && u && !s && !c) || (r && i && u) || (!n && u) || !o) return 1; if ((!r && !a && !c && e < t) || (c && n && o && !r && !a) || (s && n && o) || (!i && o) || !u) return -1; } return 0; } function bo(e, t, n, o) { for (var a = -1, i = e.length, s = n.length, u = -1, c = t.length, l = cn(i - s, 0), d = r(c + l), f = !o; ++u < c; ) d[u] = t[u]; for (; ++a < s; ) (f || a < i) && (d[n[a]] = e[a]); for (; l--; ) d[u++] = e[a++]; return d; } function go(e, t, n, o) { for (var a = -1, i = e.length, s = -1, u = n.length, c = -1, l = t.length, d = cn(i - u, 0), f = r(d + l), p = !o; ++a < d; ) f[a] = e[a]; for (var h = a; ++c < l; ) f[h + c] = t[c]; for (; ++s < u; ) (p || a < i) && (f[h + n[s]] = e[a++]); return f; } function _o(e, t) { var n = -1, o = e.length; for (t || (t = r(o)); ++n < o; ) t[n] = e[n]; return t; } function Ao(e, t, n, r) { var o = !n; n || (n = {}); for (var a = -1, i = t.length; ++a < i; ) { var s = t[a], u = r ? r(n[s], e[s], s, n, e) : void 0; void 0 === u && (u = e[s]), o ? Gn(n, s, u) : Kn(n, s, u); } return n; } function Lo(e, t) { return function (n, r) { var o = Ci(n) ? ct : Jn, a = t ? t() : {}; return o(n, e, ea(r, 2), a); }; } function wo(e) { return Rr(function (t, n) { var r = -1, o = n.length, a = o > 1 ? n[o - 1] : void 0, i = o > 2 ? n[2] : void 0; for (a = e.length > 3 && "function" == typeof a ? (o--, a) : void 0, i && da(n[0], n[1], i) && ((a = o < 3 ? void 0 : a), (o = 1)), t = Me(t); ++r < o; ) { var s = n[r]; s && e(t, s, r, a); } return t; }); } function To(e, t) { return function (n, r) { if (null == n) return n; if (!Yi(n)) return e(n, r); for (var o = n.length, a = t ? o : -1, i = Me(n); (t ? a-- : ++a < o) && !1 !== r(i[a], a, i); ); return n; }; } function ko(e) { return function (t, n, r) { for (var o = -1, a = Me(t), i = r(t), s = i.length; s--; ) { var u = i[e ? s : ++o]; if (!1 === n(a[u], u, a)) break; } return t; }; } function Oo(e) { return function (t) { var n = Ft((t = cs(t))) ? Vt(t) : void 0, r = n ? n[0] : t.charAt(0), o = n ? po(n, 1).join("") : t.slice(1); return r[e]() + o; }; } function So(e) { return function (t) { return vt(Fs(js(t).replace(Ne, "")), e, ""); }; } function zo(e) { return function () { var t = arguments; switch (t.length) { case 0: return new e(); case 1: return new e(t[0]); case 2: return new e(t[0], t[1]); case 3: return new e(t[0], t[1], t[2]); case 4: return new e(t[0], t[1], t[2], t[3]); case 5: return new e(t[0], t[1], t[2], t[3], t[4]); case 6: return new e(t[0], t[1], t[2], t[3], t[4], t[5]); case 7: return new e(t[0], t[1], t[2], t[3], t[4], t[5], t[6]); } var n = Dn(e.prototype), r = e.apply(n, t); return Xi(r) ? r : n; }; } function Eo(e) { return function (t, n, r) { var o = Me(t); if (!Yi(t)) { var a = ea(n, 3); (t = As(t)), (n = function (e) { return a(o[e], e, o); }); } var i = e(t, n, r); return i > -1 ? o[a ? t[i] : i] : void 0; }; } function xo(e) { return Jo(function (t) { var n = t.length, r = n, o = jn.prototype.thru; for (e && t.reverse(); r--; ) { var i = t[r]; if ("function" != typeof i) throw new be(a); if (o && !s && "wrapper" == Qo(i)) var s = new jn([], !0); } for (r = s ? r : n; ++r < n; ) { var u = Qo((i = t[r])), c = "wrapper" == u ? $o(i) : void 0; s = c && pa(c[0]) && 424 == c[1] && !c[4].length && 1 == c[9] ? s[Qo(c[0])].apply(s, c[3]) : 1 == i.length && pa(i) ? s[u]() : s.thru(i); } return function () { var e = arguments, r = e[0]; if (s && 1 == e.length && Ci(r)) return s.plant(r).value(); for (var o = 0, a = n ? t[o].apply(this, e) : r; ++o < n; ) a = t[o].call(this, a); return a; }; }); } function Do(e, t, n, o, a, i, s, u, c, l) { var d = 128 & t, f = 1 & t, p = 2 & t, h = 24 & t, m = 512 & t, M = p ? void 0 : zo(e); return function y() { for (var v = arguments.length, b = r(v), g = v; g--; ) b[g] = arguments[g]; if (h) var _ = Zo(y), A = Wt(b, _); if ((o && (b = bo(b, o, a, h)), i && (b = go(b, i, s, h)), (v -= A), h && v < l)) { var L = Xt(b, _); return qo(e, t, Do, y.placeholder, n, b, L, u, c, l - v); } var w = f ? n : this, T = p ? w[e] : e; return (v = b.length), u ? (b = ga(b, u)) : m && v > 1 && b.reverse(), d && c < v && (b.length = c), this && this !== Je && this instanceof y && (T = M || zo(T)), T.apply(w, b); }; } function No(e, t) { return function (n, r) { return (function (e, t, n, r) { return ( dr(e, function (e, o, a) { t(r, n(e), o, a); }), r ); })(n, e, t(r), {}); }; } function jo(e, t) { return function (n, r) { var o; if (void 0 === n && void 0 === r) return t; if ((void 0 !== n && (o = n), void 0 !== r)) { if (void 0 === o) return r; "string" == typeof n || "string" == typeof r ? ((n = eo(n)), (r = eo(r))) : ((n = Zr(n)), (r = Zr(r))), (o = e(n, r)); } return o; }; } function Co(e) { return Jo(function (t) { return ( (t = Mt(t, Nt(ea()))), Rr(function (n) { var r = this; return e(t, function (e) { return ut(e, r, n); }); }) ); }); } function Po(e, t) { var n = (t = void 0 === t ? " " : eo(t)).length; if (n < 2) return n ? Br(t, e) : t; var r = Br(t, tn(e / Jt(t))); return Ft(t) ? po(Vt(r), 0, e).join("") : r.slice(0, e); } function Yo(e) { return function (t, n, o) { return ( o && "number" != typeof o && da(t, n, o) && (n = o = void 0), (t = os(t)), void 0 === n ? ((n = t), (t = 0)) : (n = os(n)), (function (e, t, n, o) { for (var a = -1, i = cn(tn((t - e) / (n || 1)), 0), s = r(i); i--; ) (s[o ? i : ++a] = e), (e += n); return s; })(t, n, (o = void 0 === o ? (t < n ? 1 : -1) : os(o)), e) ); }; } function Wo(e) { return function (t, n) { return ("string" == typeof t && "string" == typeof n) || ((t = ss(t)), (n = ss(n))), e(t, n); }; } function qo(e, t, n, r, o, a, i, s, u, c) { var l = 8 & t; (t |= l ? 32 : 64), 4 & (t &= ~(l ? 64 : 32)) || (t &= -4); var d = [e, t, o, l ? a : void 0, l ? i : void 0, l ? void 0 : a, l ? void 0 : i, s, u, c], f = n.apply(void 0, d); return pa(e) && _a(f, d), (f.placeholder = r), wa(f, e, t); } function Bo(e) { var t = me[e]; return function (e, n) { if (((e = ss(e)), (n = null == n ? 0 : ln(as(n), 292)))) { var r = (cs(e) + "e").split("e"); return +((r = (cs(t(r[0] + "e" + (+r[1] + n))) + "e").split("e"))[0] + "e" + (+r[1] - n)); } return t(e); }; } var Ro = vn && 1 / Kt(new vn([, -0]))[1] == 1 / 0 ? function (e) { return new vn(e); } : Zs; function Fo(e) { return function (t) { var n = ia(t); return n == m ? Ht(t) : n == b ? Ut(t) : (function (e, t) { return Mt(t, function (t) { return [t, e[t]]; }); })(t, e(t)); }; } function Ho(e, t, n, o, s, u, c, l) { var d = 2 & t; if (!d && "function" != typeof e) throw new be(a); var f = o ? o.length : 0; if ((f || ((t &= -97), (o = s = void 0)), (c = void 0 === c ? c : cn(as(c), 0)), (l = void 0 === l ? l : as(l)), (f -= s ? s.length : 0), 64 & t)) { var p = o, h = s; o = s = void 0; } var m = d ? void 0 : $o(e), M = [e, t, n, o, s, p, h, u, c, l]; if ( (m && (function (e, t) { var n = e[1], r = t[1], o = n | r, a = o < 131, s = (128 == r && 8 == n) || (128 == r && 256 == n && e[7].length <= t[8]) || (384 == r && t[7].length <= t[8] && 8 == n); if (!a && !s) return e; 1 & r && ((e[2] = t[2]), (o |= 1 & n ? 0 : 4)); var u = t[3]; if (u) { var c = e[3]; (e[3] = c ? bo(c, u, t[4]) : u), (e[4] = c ? Xt(e[3], i) : t[4]); } (u = t[5]) && ((c = e[5]), (e[5] = c ? go(c, u, t[6]) : u), (e[6] = c ? Xt(e[5], i) : t[6])); (u = t[7]) && (e[7] = u); 128 & r && (e[8] = null == e[8] ? t[8] : ln(e[8], t[8])); null == e[9] && (e[9] = t[9]); (e[0] = t[0]), (e[1] = o); })(M, m), (e = M[0]), (t = M[1]), (n = M[2]), (o = M[3]), (s = M[4]), !(l = M[9] = void 0 === M[9] ? (d ? 0 : e.length) : cn(M[9] - f, 0)) && 24 & t && (t &= -25), t && 1 != t) ) y = 8 == t || 16 == t ? (function (e, t, n) { var o = zo(e); return function a() { for (var i = arguments.length, s = r(i), u = i, c = Zo(a); u--; ) s[u] = arguments[u]; var l = i < 3 && s[0] !== c && s[i - 1] !== c ? [] : Xt(s, c); if ((i -= l.length) < n) return qo(e, t, Do, a.placeholder, void 0, s, l, void 0, void 0, n - i); var d = this && this !== Je && this instanceof a ? o : e; return ut(d, this, s); }; })(e, t, l) : (32 != t && 33 != t) || s.length ? Do.apply(void 0, M) : (function (e, t, n, o) { var a = 1 & t, i = zo(e); return function t() { for (var s = -1, u = arguments.length, c = -1, l = o.length, d = r(l + u), f = this && this !== Je && this instanceof t ? i : e; ++c < l; ) d[c] = o[c]; for (; u--; ) d[c++] = arguments[++s]; return ut(f, a ? n : this, d); }; })(e, t, n, o); else var y = (function (e, t, n) { var r = 1 & t, o = zo(e); return function t() { var a = this && this !== Je && this instanceof t ? o : e; return a.apply(r ? n : this, arguments); }; })(e, t, n); return wa((m ? Xr : _a)(y, M), e, t); } function Io(e, t, n, r) { return void 0 === e || (xi(e, Ae[n]) && !Te.call(r, n)) ? t : e; } function Xo(e, t, n, r, o, a) { return Xi(e) && Xi(t) && (a.set(t, e), Nr(e, t, void 0, Xo, a), a.delete(t)), e; } function Ko(e) { return Vi(e) ? void 0 : e; } function Uo(e, t, n, r, o, a) { var i = 1 & n, s = e.length, u = t.length; if (s != u && !(i && u > s)) return !1; var c = a.get(e); if (c && a.get(t)) return c == t; var l = -1, d = !0, f = 2 & n ? new qn() : void 0; for (a.set(e, t), a.set(t, e); ++l < s; ) { var p = e[l], h = t[l]; if (r) var m = i ? r(h, p, l, t, e, a) : r(p, h, l, e, t, a); if (void 0 !== m) { if (m) continue; d = !1; break; } if (f) { if ( !gt(t, function (e, t) { if (!Ct(f, t) && (p === e || o(p, e, n, r, a))) return f.push(t); }) ) { d = !1; break; } } else if (p !== h && !o(p, h, n, r, a)) { d = !1; break; } } return a.delete(e), a.delete(t), d; } function Jo(e) { return La(va(e, void 0, Pa), e + ""); } function Vo(e) { return mr(e, As, oa); } function Go(e) { return mr(e, Ls, aa); } var $o = _n ? function (e) { return _n.get(e); } : Zs; function Qo(e) { for (var t = e.name + "", n = An[t], r = Te.call(An, t) ? n.length : 0; r--; ) { var o = n[r], a = o.func; if (null == a || a == e) return o.name; } return t; } function Zo(e) { return (Te.call(xn, "placeholder") ? xn : e).placeholder; } function ea() { var e = xn.iteratee || Vs; return (e = e === Vs ? kr : e), arguments.length ? e(arguments[0], arguments[1]) : e; } function ta(e, t) { var n, r, o = e.__data__; return ("string" == (r = typeof (n = t)) || "number" == r || "symbol" == r || "boolean" == r ? "__proto__" !== n : null === n) ? o["string" == typeof t ? "string" : "hash"] : o.map; } function na(e) { for (var t = As(e), n = t.length; n--; ) { var r = t[n], o = e[r]; t[n] = [r, o, Ma(o)]; } return t; } function ra(e, t) { var n = (function (e, t) { return null == e ? void 0 : e[t]; })(e, t); return Tr(n) ? n : void 0; } var oa = rn ? function (e) { return null == e ? [] : ((e = Me(e)), pt(rn(e), function (t) { return Ve.call(e, t); })); } : iu, aa = rn ? function (e) { for (var t = []; e; ) yt(t, oa(e)), (e = Ke(e)); return t; } : iu, ia = Mr; function sa(e, t, n) { for (var r = -1, o = (t = lo(t, e)).length, a = !1; ++r < o; ) { var i = Sa(t[r]); if (!(a = null != e && n(e, i))) break; e = e[i]; } return a || ++r != o ? a : !!(o = null == e ? 0 : e.length) && Ii(o) && la(i, o) && (Ci(e) || ji(e)); } function ua(e) { return "function" != typeof e.constructor || ma(e) ? {} : Dn(Ke(e)); } function ca(e) { return Ci(e) || ji(e) || !!(Qe && e && e[Qe]); } function la(e, t) { return !!(t = null == t ? 9007199254740991 : t) && ("number" == typeof e || ce.test(e)) && e > -1 && e % 1 == 0 && e < t; } function da(e, t, n) { if (!Xi(n)) return !1; var r = typeof t; return !!("number" == r ? Yi(n) && la(t, n.length) : "string" == r && t in n) && xi(n[t], e); } function fa(e, t) { if (Ci(e)) return !1; var n = typeof e; return !("number" != n && "symbol" != n && "boolean" != n && null != e && !Zi(e)) || I.test(e) || !H.test(e) || (null != t && e in Me(t)); } function pa(e) { var t = Qo(e), n = xn[t]; if ("function" != typeof n || !(t in Cn.prototype)) return !1; if (e === n) return !0; var r = $o(n); return !!r && e === r[0]; } ((mn && ia(new mn(new ArrayBuffer(1))) != w) || (Mn && ia(new Mn()) != m) || (yn && "[object Promise]" != ia(yn.resolve())) || (vn && ia(new vn()) != b) || (bn && ia(new bn()) != A)) && (ia = function (e) { var t = Mr(e), n = t == y ? e.constructor : void 0, r = n ? za(n) : ""; if (r) switch (r) { case Ln: return w; case wn: return m; case Tn: return "[object Promise]"; case kn: return b; case On: return A; } return t; }); var ha = Le ? Fi : su; function ma(e) { var t = e && e.constructor; return e === (("function" == typeof t && t.prototype) || Ae); } function Ma(e) { return e == e && !Xi(e); } function ya(e, t) { return function (n) { return null != n && n[e] === t && (void 0 !== t || e in Me(n)); }; } function va(e, t, n) { return ( (t = cn(void 0 === t ? e.length - 1 : t, 0)), function () { for (var o = arguments, a = -1, i = cn(o.length - t, 0), s = r(i); ++a < i; ) s[a] = o[t + a]; a = -1; for (var u = r(t + 1); ++a < t; ) u[a] = o[a]; return (u[t] = n(s)), ut(e, this, u); } ); } function ba(e, t) { return t.length < 2 ? e : hr(e, Jr(t, 0, -1)); } function ga(e, t) { for (var n = e.length, r = ln(t.length, n), o = _o(e); r--; ) { var a = t[r]; e[r] = la(a, n) ? o[a] : void 0; } return e; } var _a = Ta(Xr), Aa = en || function (e, t) { return Je.setTimeout(e, t); }, La = Ta(Kr); function wa(e, t, n) { var r = t + ""; return La( e, (function (e, t) { var n = t.length; if (!n) return e; var r = n - 1; return (t[r] = (n > 1 ? "& " : "") + t[r]), (t = t.join(n > 2 ? ", " : " ")), e.replace(Q, "{\n/* [wrapped with " + t + "] */\n"); })( r, (function (e, t) { return ( lt(s, function (n) { var r = "_." + n[0]; t & n[1] && !ht(e, r) && e.push(r); }), e.sort() ); })( (function (e) { var t = e.match(Z); return t ? t[1].split(ee) : []; })(r), n ) ) ); } function Ta(e) { var t = 0, n = 0; return function () { var r = dn(), o = 16 - (r - n); if (((n = r), o > 0)) { if (++t >= 800) return arguments[0]; } else t = 0; return e.apply(void 0, arguments); }; } function ka(e, t) { var n = -1, r = e.length, o = r - 1; for (t = void 0 === t ? r : t; ++n < t; ) { var a = qr(n, o), i = e[a]; (e[a] = e[n]), (e[n] = i); } return (e.length = t), e; } var Oa = (function (e) { var t = Ti(e, function (e) { return 500 === n.size && n.clear(), e; }), n = t.cache; return t; })(function (e) { var t = []; return ( X.test(e) && t.push(""), e.replace(K, function (e, n, r, o) { t.push(r ? o.replace(ne, "$1") : n || e); }), t ); }); function Sa(e) { if ("string" == typeof e || Zi(e)) return e; var t = e + ""; return "0" == t && 1 / e == -1 / 0 ? "-0" : t; } function za(e) { if (null != e) { try { return we.call(e); } catch (e) {} try { return e + ""; } catch (e) {} } return ""; } function Ea(e) { if (e instanceof Cn) return e.clone(); var t = new jn(e.__wrapped__, e.__chain__); return (t.__actions__ = _o(e.__actions__)), (t.__index__ = e.__index__), (t.__values__ = e.__values__), t; } var xa = Rr(function (e, t) { return Wi(e) ? nr(e, ur(t, 1, Wi, !0)) : []; }), Da = Rr(function (e, t) { var n = Ra(t); return Wi(n) && (n = void 0), Wi(e) ? nr(e, ur(t, 1, Wi, !0), ea(n, 2)) : []; }), Na = Rr(function (e, t) { var n = Ra(t); return Wi(n) && (n = void 0), Wi(e) ? nr(e, ur(t, 1, Wi, !0), void 0, n) : []; }); function ja(e, t, n) { var r = null == e ? 0 : e.length; if (!r) return -1; var o = null == n ? 0 : as(n); return o < 0 && (o = cn(r + o, 0)), Lt(e, ea(t, 3), o); } function Ca(e, t, n) { var r = null == e ? 0 : e.length; if (!r) return -1; var o = r - 1; return void 0 !== n && ((o = as(n)), (o = n < 0 ? cn(r + o, 0) : ln(o, r - 1))), Lt(e, ea(t, 3), o, !0); } function Pa(e) { return (null == e ? 0 : e.length) ? ur(e, 1) : []; } function Ya(e) { return e && e.length ? e[0] : void 0; } var Wa = Rr(function (e) { var t = Mt(e, uo); return t.length && t[0] === e[0] ? gr(t) : []; }), qa = Rr(function (e) { var t = Ra(e), n = Mt(e, uo); return t === Ra(n) ? (t = void 0) : n.pop(), n.length && n[0] === e[0] ? gr(n, ea(t, 2)) : []; }), Ba = Rr(function (e) { var t = Ra(e), n = Mt(e, uo); return (t = "function" == typeof t ? t : void 0) && n.pop(), n.length && n[0] === e[0] ? gr(n, void 0, t) : []; }); function Ra(e) { var t = null == e ? 0 : e.length; return t ? e[t - 1] : void 0; } var Fa = Rr(Ha); function Ha(e, t) { return e && e.length && t && t.length ? Yr(e, t) : e; } var Ia = Jo(function (e, t) { var n = null == e ? 0 : e.length, r = $n(e, t); return ( Wr( e, Mt(t, function (e) { return la(e, n) ? +e : e; }).sort(vo) ), r ); }); function Xa(e) { return null == e ? e : hn.call(e); } var Ka = Rr(function (e) { return to(ur(e, 1, Wi, !0)); }), Ua = Rr(function (e) { var t = Ra(e); return Wi(t) && (t = void 0), to(ur(e, 1, Wi, !0), ea(t, 2)); }), Ja = Rr(function (e) { var t = Ra(e); return (t = "function" == typeof t ? t : void 0), to(ur(e, 1, Wi, !0), void 0, t); }); function Va(e) { if (!e || !e.length) return []; var t = 0; return ( (e = pt(e, function (e) { if (Wi(e)) return (t = cn(e.length, t)), !0; })), Dt(t, function (t) { return Mt(e, St(t)); }) ); } function Ga(e, t) { if (!e || !e.length) return []; var n = Va(e); return null == t ? n : Mt(n, function (e) { return ut(t, void 0, e); }); } var $a = Rr(function (e, t) { return Wi(e) ? nr(e, t) : []; }), Qa = Rr(function (e) { return io(pt(e, Wi)); }), Za = Rr(function (e) { var t = Ra(e); return Wi(t) && (t = void 0), io(pt(e, Wi), ea(t, 2)); }), ei = Rr(function (e) { var t = Ra(e); return (t = "function" == typeof t ? t : void 0), io(pt(e, Wi), void 0, t); }), ti = Rr(Va); var ni = Rr(function (e) { var t = e.length, n = t > 1 ? e[t - 1] : void 0; return (n = "function" == typeof n ? (e.pop(), n) : void 0), Ga(e, n); }); function ri(e) { var t = xn(e); return (t.__chain__ = !0), t; } function oi(e, t) { return t(e); } var ai = Jo(function (e) { var t = e.length, n = t ? e[0] : 0, r = this.__wrapped__, o = function (t) { return $n(t, e); }; return !(t > 1 || this.__actions__.length) && r instanceof Cn && la(n) ? ((r = r.slice(n, +n + (t ? 1 : 0))).__actions__.push({ func: oi, args: [o], thisArg: void 0 }), new jn(r, this.__chain__).thru(function (e) { return t && !e.length && e.push(void 0), e; })) : this.thru(o); }); var ii = Lo(function (e, t, n) { Te.call(e, n) ? ++e[n] : Gn(e, n, 1); }); var si = Eo(ja), ui = Eo(Ca); function ci(e, t) { return (Ci(e) ? lt : rr)(e, ea(t, 3)); } function li(e, t) { return (Ci(e) ? dt : or)(e, ea(t, 3)); } var di = Lo(function (e, t, n) { Te.call(e, n) ? e[n].push(t) : Gn(e, n, [t]); }); var fi = Rr(function (e, t, n) { var o = -1, a = "function" == typeof t, i = Yi(e) ? r(e.length) : []; return ( rr(e, function (e) { i[++o] = a ? ut(t, e, n) : _r(e, t, n); }), i ); }), pi = Lo(function (e, t, n) { Gn(e, n, t); }); function hi(e, t) { return (Ci(e) ? Mt : Er)(e, ea(t, 3)); } var mi = Lo( function (e, t, n) { e[n ? 0 : 1].push(t); }, function () { return [[], []]; } ); var Mi = Rr(function (e, t) { if (null == e) return []; var n = t.length; return n > 1 && da(e, t[0], t[1]) ? (t = []) : n > 2 && da(t[0], t[1], t[2]) && (t = [t[0]]), Cr(e, ur(t, 1), []); }), yi = Zt || function () { return Je.Date.now(); }; function vi(e, t, n) { return (t = n ? void 0 : t), Ho(e, 128, void 0, void 0, void 0, void 0, (t = e && null == t ? e.length : t)); } function bi(e, t) { var n; if ("function" != typeof t) throw new be(a); return ( (e = as(e)), function () { return --e > 0 && (n = t.apply(this, arguments)), e <= 1 && (t = void 0), n; } ); } var gi = Rr(function (e, t, n) { var r = 1; if (n.length) { var o = Xt(n, Zo(gi)); r |= 32; } return Ho(e, r, t, n, o); }), _i = Rr(function (e, t, n) { var r = 3; if (n.length) { var o = Xt(n, Zo(_i)); r |= 32; } return Ho(t, r, e, n, o); }); function Ai(e, t, n) { var r, o, i, s, u, c, l = 0, d = !1, f = !1, p = !0; if ("function" != typeof e) throw new be(a); function h(t) { var n = r, a = o; return (r = o = void 0), (l = t), (s = e.apply(a, n)); } function m(e) { return (l = e), (u = Aa(y, t)), d ? h(e) : s; } function M(e) { var n = e - c; return void 0 === c || n >= t || n < 0 || (f && e - l >= i); } function y() { var e = yi(); if (M(e)) return v(e); u = Aa( y, (function (e) { var n = t - (e - c); return f ? ln(n, i - (e - l)) : n; })(e) ); } function v(e) { return (u = void 0), p && r ? h(e) : ((r = o = void 0), s); } function b() { var e = yi(), n = M(e); if (((r = arguments), (o = this), (c = e), n)) { if (void 0 === u) return m(c); if (f) return (u = Aa(y, t)), h(c); } return void 0 === u && (u = Aa(y, t)), s; } return ( (t = ss(t) || 0), Xi(n) && ((d = !!n.leading), (i = (f = "maxWait" in n) ? cn(ss(n.maxWait) || 0, t) : i), (p = "trailing" in n ? !!n.trailing : p)), (b.cancel = function () { void 0 !== u && ho(u), (l = 0), (r = c = o = u = void 0); }), (b.flush = function () { return void 0 === u ? s : v(yi()); }), b ); } var Li = Rr(function (e, t) { return tr(e, 1, t); }), wi = Rr(function (e, t, n) { return tr(e, ss(t) || 0, n); }); function Ti(e, t) { if ("function" != typeof e || (null != t && "function" != typeof t)) throw new be(a); var n = function () { var r = arguments, o = t ? t.apply(this, r) : r[0], a = n.cache; if (a.has(o)) return a.get(o); var i = e.apply(this, r); return (n.cache = a.set(o, i) || a), i; }; return (n.cache = new (Ti.Cache || Wn)()), n; } function ki(e) { if ("function" != typeof e) throw new be(a); return function () { var t = arguments; switch (t.length) { case 0: return !e.call(this); case 1: return !e.call(this, t[0]); case 2: return !e.call(this, t[0], t[1]); case 3: return !e.call(this, t[0], t[1], t[2]); } return !e.apply(this, t); }; } Ti.Cache = Wn; var Oi = fo(function (e, t) { var n = (t = 1 == t.length && Ci(t[0]) ? Mt(t[0], Nt(ea())) : Mt(ur(t, 1), Nt(ea()))).length; return Rr(function (r) { for (var o = -1, a = ln(r.length, n); ++o < a; ) r[o] = t[o].call(this, r[o]); return ut(e, this, r); }); }), Si = Rr(function (e, t) { return Ho(e, 32, void 0, t, Xt(t, Zo(Si))); }), zi = Rr(function (e, t) { return Ho(e, 64, void 0, t, Xt(t, Zo(zi))); }), Ei = Jo(function (e, t) { return Ho(e, 256, void 0, void 0, void 0, t); }); function xi(e, t) { return e === t || (e != e && t != t); } var Di = Wo(yr), Ni = Wo(function (e, t) { return e >= t; }), ji = Ar( (function () { return arguments; })() ) ? Ar : function (e) { return Ki(e) && Te.call(e, "callee") && !Ve.call(e, "callee"); }, Ci = r.isArray, Pi = et ? Nt(et) : function (e) { return Ki(e) && Mr(e) == L; }; function Yi(e) { return null != e && Ii(e.length) && !Fi(e); } function Wi(e) { return Ki(e) && Yi(e); } var qi = on || su, Bi = tt ? Nt(tt) : function (e) { return Ki(e) && Mr(e) == d; }; function Ri(e) { if (!Ki(e)) return !1; var t = Mr(e); return t == f || "[object DOMException]" == t || ("string" == typeof e.message && "string" == typeof e.name && !Vi(e)); } function Fi(e) { if (!Xi(e)) return !1; var t = Mr(e); return t == p || t == h || "[object AsyncFunction]" == t || "[object Proxy]" == t; } function Hi(e) { return "number" == typeof e && e == as(e); } function Ii(e) { return "number" == typeof e && e > -1 && e % 1 == 0 && e <= 9007199254740991; } function Xi(e) { var t = typeof e; return null != e && ("object" == t || "function" == t); } function Ki(e) { return null != e && "object" == typeof e; } var Ui = nt ? Nt(nt) : function (e) { return Ki(e) && ia(e) == m; }; function Ji(e) { return "number" == typeof e || (Ki(e) && Mr(e) == M); } function Vi(e) { if (!Ki(e) || Mr(e) != y) return !1; var t = Ke(e); if (null === t) return !0; var n = Te.call(t, "constructor") && t.constructor; return "function" == typeof n && n instanceof n && we.call(n) == ze; } var Gi = rt ? Nt(rt) : function (e) { return Ki(e) && Mr(e) == v; }; var $i = ot ? Nt(ot) : function (e) { return Ki(e) && ia(e) == b; }; function Qi(e) { return "string" == typeof e || (!Ci(e) && Ki(e) && Mr(e) == g); } function Zi(e) { return "symbol" == typeof e || (Ki(e) && Mr(e) == _); } var es = at ? Nt(at) : function (e) { return Ki(e) && Ii(e.length) && !!Re[Mr(e)]; }; var ts = Wo(zr), ns = Wo(function (e, t) { return e <= t; }); function rs(e) { if (!e) return []; if (Yi(e)) return Qi(e) ? Vt(e) : _o(e); if (Ze && e[Ze]) return (function (e) { for (var t, n = []; !(t = e.next()).done; ) n.push(t.value); return n; })(e[Ze]()); var t = ia(e); return (t == m ? Ht : t == b ? Kt : xs)(e); } function os(e) { return e ? ((e = ss(e)) === 1 / 0 || e === -1 / 0 ? 17976931348623157e292 * (e < 0 ? -1 : 1) : e == e ? e : 0) : 0 === e ? e : 0; } function as(e) { var t = os(e), n = t % 1; return t == t ? (n ? t - n : t) : 0; } function is(e) { return e ? Qn(as(e), 0, 4294967295) : 0; } function ss(e) { if ("number" == typeof e) return e; if (Zi(e)) return NaN; if (Xi(e)) { var t = "function" == typeof e.valueOf ? e.valueOf() : e; e = Xi(t) ? t + "" : t; } if ("string" != typeof e) return 0 === e ? e : +e; e = e.replace(V, ""); var n = ie.test(e); return n || ue.test(e) ? Xe(e.slice(2), n ? 2 : 8) : ae.test(e) ? NaN : +e; } function us(e) { return Ao(e, Ls(e)); } function cs(e) { return null == e ? "" : eo(e); } var ls = wo(function (e, t) { if (ma(t) || Yi(t)) Ao(t, As(t), e); else for (var n in t) Te.call(t, n) && Kn(e, n, t[n]); }), ds = wo(function (e, t) { Ao(t, Ls(t), e); }), fs = wo(function (e, t, n, r) { Ao(t, Ls(t), e, r); }), ps = wo(function (e, t, n, r) { Ao(t, As(t), e, r); }), hs = Jo($n); var ms = Rr(function (e) { return e.push(void 0, Io), ut(fs, void 0, e); }), Ms = Rr(function (e) { return e.push(void 0, Xo), ut(Ts, void 0, e); }); function ys(e, t, n) { var r = null == e ? void 0 : hr(e, t); return void 0 === r ? n : r; } function vs(e, t) { return null != e && sa(e, t, br); } var bs = No(function (e, t, n) { e[t] = n; }, Xs(Js)), gs = No(function (e, t, n) { Te.call(e, t) ? e[t].push(n) : (e[t] = [n]); }, ea), _s = Rr(_r); function As(e) { return Yi(e) ? Rn(e) : Or(e); } function Ls(e) { return Yi(e) ? Rn(e, !0) : Sr(e); } var ws = wo(function (e, t, n) { Nr(e, t, n); }), Ts = wo(function (e, t, n, r) { Nr(e, t, n, r); }), ks = Jo(function (e, t) { var n = {}; if (null == e) return n; var r = !1; (t = Mt(t, function (t) { return (t = lo(t, e)), r || (r = t.length > 1), t; })), Ao(e, Go(e), n), r && (n = Zn(n, 7, Ko)); for (var o = t.length; o--; ) no(n, t[o]); return n; }); var Os = Jo(function (e, t) { return null == e ? {} : (function (e, t) { return Pr(e, t, function (t, n) { return vs(e, n); }); })(e, t); }); function Ss(e, t) { if (null == e) return {}; var n = Mt(Go(e), function (e) { return [e]; }); return ( (t = ea(t)), Pr(e, n, function (e, n) { return t(e, n[0]); }) ); } var zs = Fo(As), Es = Fo(Ls); function xs(e) { return null == e ? [] : jt(e, As(e)); } var Ds = So(function (e, t, n) { return (t = t.toLowerCase()), e + (n ? Ns(t) : t); }); function Ns(e) { return Rs(cs(e).toLowerCase()); } function js(e) { return (e = cs(e)) && e.replace(le, qt).replace(je, ""); } var Cs = So(function (e, t, n) { return e + (n ? "-" : "") + t.toLowerCase(); }), Ps = So(function (e, t, n) { return e + (n ? " " : "") + t.toLowerCase(); }), Ys = Oo("toLowerCase"); var Ws = So(function (e, t, n) { return e + (n ? "_" : "") + t.toLowerCase(); }); var qs = So(function (e, t, n) { return e + (n ? " " : "") + Rs(t); }); var Bs = So(function (e, t, n) { return e + (n ? " " : "") + t.toUpperCase(); }), Rs = Oo("toUpperCase"); function Fs(e, t, n) { return ( (e = cs(e)), void 0 === (t = n ? void 0 : t) ? (function (e) { return We.test(e); })(e) ? (function (e) { return e.match(Pe) || []; })(e) : (function (e) { return e.match(te) || []; })(e) : e.match(t) || [] ); } var Hs = Rr(function (e, t) { try { return ut(e, void 0, t); } catch (e) { return Ri(e) ? e : new pe(e); } }), Is = Jo(function (e, t) { return ( lt(t, function (t) { (t = Sa(t)), Gn(e, t, gi(e[t], e)); }), e ); }); function Xs(e) { return function () { return e; }; } var Ks = xo(), Us = xo(!0); function Js(e) { return e; } function Vs(e) { return kr("function" == typeof e ? e : Zn(e, 1)); } var Gs = Rr(function (e, t) { return function (n) { return _r(n, e, t); }; }), $s = Rr(function (e, t) { return function (n) { return _r(e, n, t); }; }); function Qs(e, t, n) { var r = As(t), o = pr(t, r); null != n || (Xi(t) && (o.length || !r.length)) || ((n = t), (t = e), (e = this), (o = pr(t, As(t)))); var a = !(Xi(n) && "chain" in n && !n.chain), i = Fi(e); return ( lt(o, function (n) { var r = t[n]; (e[n] = r), i && (e.prototype[n] = function () { var t = this.__chain__; if (a || t) { var n = e(this.__wrapped__), o = (n.__actions__ = _o(this.__actions__)); return o.push({ func: r, args: arguments, thisArg: e }), (n.__chain__ = t), n; } return r.apply(e, yt([this.value()], arguments)); }); }), e ); } function Zs() {} var eu = Co(Mt), tu = Co(ft), nu = Co(gt); function ru(e) { return fa(e) ? St(Sa(e)) : (function (e) { return function (t) { return hr(t, e); }; })(e); } var ou = Yo(), au = Yo(!0); function iu() { return []; } function su() { return !1; } var uu = jo(function (e, t) { return e + t; }, 0), cu = Bo("ceil"), lu = jo(function (e, t) { return e / t; }, 1), du = Bo("floor"); var fu, pu = jo(function (e, t) { return e * t; }, 1), hu = Bo("round"), mu = jo(function (e, t) { return e - t; }, 0); return ( (xn.after = function (e, t) { if ("function" != typeof t) throw new be(a); return ( (e = as(e)), function () { if (--e < 1) return t.apply(this, arguments); } ); }), (xn.ary = vi), (xn.assign = ls), (xn.assignIn = ds), (xn.assignInWith = fs), (xn.assignWith = ps), (xn.at = hs), (xn.before = bi), (xn.bind = gi), (xn.bindAll = Is), (xn.bindKey = _i), (xn.castArray = function () { if (!arguments.length) return []; var e = arguments[0]; return Ci(e) ? e : [e]; }), (xn.chain = ri), (xn.chunk = function (e, t, n) { t = (n ? da(e, t, n) : void 0 === t) ? 1 : cn(as(t), 0); var o = null == e ? 0 : e.length; if (!o || t < 1) return []; for (var a = 0, i = 0, s = r(tn(o / t)); a < o; ) s[i++] = Jr(e, a, (a += t)); return s; }), (xn.compact = function (e) { for (var t = -1, n = null == e ? 0 : e.length, r = 0, o = []; ++t < n; ) { var a = e[t]; a && (o[r++] = a); } return o; }), (xn.concat = function () { var e = arguments.length; if (!e) return []; for (var t = r(e - 1), n = arguments[0], o = e; o--; ) t[o - 1] = arguments[o]; return yt(Ci(n) ? _o(n) : [n], ur(t, 1)); }), (xn.cond = function (e) { var t = null == e ? 0 : e.length, n = ea(); return ( (e = t ? Mt(e, function (e) { if ("function" != typeof e[1]) throw new be(a); return [n(e[0]), e[1]]; }) : []), Rr(function (n) { for (var r = -1; ++r < t; ) { var o = e[r]; if (ut(o[0], this, n)) return ut(o[1], this, n); } }) ); }), (xn.conforms = function (e) { return (function (e) { var t = As(e); return function (n) { return er(n, e, t); }; })(Zn(e, 1)); }), (xn.constant = Xs), (xn.countBy = ii), (xn.create = function (e, t) { var n = Dn(e); return null == t ? n : Vn(n, t); }), (xn.curry = function e(t, n, r) { var o = Ho(t, 8, void 0, void 0, void 0, void 0, void 0, (n = r ? void 0 : n)); return (o.placeholder = e.placeholder), o; }), (xn.curryRight = function e(t, n, r) { var o = Ho(t, 16, void 0, void 0, void 0, void 0, void 0, (n = r ? void 0 : n)); return (o.placeholder = e.placeholder), o; }), (xn.debounce = Ai), (xn.defaults = ms), (xn.defaultsDeep = Ms), (xn.defer = Li), (xn.delay = wi), (xn.difference = xa), (xn.differenceBy = Da), (xn.differenceWith = Na), (xn.drop = function (e, t, n) { var r = null == e ? 0 : e.length; return r ? Jr(e, (t = n || void 0 === t ? 1 : as(t)) < 0 ? 0 : t, r) : []; }), (xn.dropRight = function (e, t, n) { var r = null == e ? 0 : e.length; return r ? Jr(e, 0, (t = r - (t = n || void 0 === t ? 1 : as(t))) < 0 ? 0 : t) : []; }), (xn.dropRightWhile = function (e, t) { return e && e.length ? oo(e, ea(t, 3), !0, !0) : []; }), (xn.dropWhile = function (e, t) { return e && e.length ? oo(e, ea(t, 3), !0) : []; }), (xn.fill = function (e, t, n, r) { var o = null == e ? 0 : e.length; return o ? (n && "number" != typeof n && da(e, t, n) && ((n = 0), (r = o)), (function (e, t, n, r) { var o = e.length; for ((n = as(n)) < 0 && (n = -n > o ? 0 : o + n), (r = void 0 === r || r > o ? o : as(r)) < 0 && (r += o), r = n > r ? 0 : is(r); n < r; ) e[n++] = t; return e; })(e, t, n, r)) : []; }), (xn.filter = function (e, t) { return (Ci(e) ? pt : sr)(e, ea(t, 3)); }), (xn.flatMap = function (e, t) { return ur(hi(e, t), 1); }), (xn.flatMapDeep = function (e, t) { return ur(hi(e, t), 1 / 0); }), (xn.flatMapDepth = function (e, t, n) { return (n = void 0 === n ? 1 : as(n)), ur(hi(e, t), n); }), (xn.flatten = Pa), (xn.flattenDeep = function (e) { return (null == e ? 0 : e.length) ? ur(e, 1 / 0) : []; }), (xn.flattenDepth = function (e, t) { return (null == e ? 0 : e.length) ? ur(e, (t = void 0 === t ? 1 : as(t))) : []; }), (xn.flip = function (e) { return Ho(e, 512); }), (xn.flow = Ks), (xn.flowRight = Us), (xn.fromPairs = function (e) { for (var t = -1, n = null == e ? 0 : e.length, r = {}; ++t < n; ) { var o = e[t]; r[o[0]] = o[1]; } return r; }), (xn.functions = function (e) { return null == e ? [] : pr(e, As(e)); }), (xn.functionsIn = function (e) { return null == e ? [] : pr(e, Ls(e)); }), (xn.groupBy = di), (xn.initial = function (e) { return (null == e ? 0 : e.length) ? Jr(e, 0, -1) : []; }), (xn.intersection = Wa), (xn.intersectionBy = qa), (xn.intersectionWith = Ba), (xn.invert = bs), (xn.invertBy = gs), (xn.invokeMap = fi), (xn.iteratee = Vs), (xn.keyBy = pi), (xn.keys = As), (xn.keysIn = Ls), (xn.map = hi), (xn.mapKeys = function (e, t) { var n = {}; return ( (t = ea(t, 3)), dr(e, function (e, r, o) { Gn(n, t(e, r, o), e); }), n ); }), (xn.mapValues = function (e, t) { var n = {}; return ( (t = ea(t, 3)), dr(e, function (e, r, o) { Gn(n, r, t(e, r, o)); }), n ); }), (xn.matches = function (e) { return xr(Zn(e, 1)); }), (xn.matchesProperty = function (e, t) { return Dr(e, Zn(t, 1)); }), (xn.memoize = Ti), (xn.merge = ws), (xn.mergeWith = Ts), (xn.method = Gs), (xn.methodOf = $s), (xn.mixin = Qs), (xn.negate = ki), (xn.nthArg = function (e) { return ( (e = as(e)), Rr(function (t) { return jr(t, e); }) ); }), (xn.omit = ks), (xn.omitBy = function (e, t) { return Ss(e, ki(ea(t))); }), (xn.once = function (e) { return bi(2, e); }), (xn.orderBy = function (e, t, n, r) { return null == e ? [] : (Ci(t) || (t = null == t ? [] : [t]), Ci((n = r ? void 0 : n)) || (n = null == n ? [] : [n]), Cr(e, t, n)); }), (xn.over = eu), (xn.overArgs = Oi), (xn.overEvery = tu), (xn.overSome = nu), (xn.partial = Si), (xn.partialRight = zi), (xn.partition = mi), (xn.pick = Os), (xn.pickBy = Ss), (xn.property = ru), (xn.propertyOf = function (e) { return function (t) { return null == e ? void 0 : hr(e, t); }; }), (xn.pull = Fa), (xn.pullAll = Ha), (xn.pullAllBy = function (e, t, n) { return e && e.length && t && t.length ? Yr(e, t, ea(n, 2)) : e; }), (xn.pullAllWith = function (e, t, n) { return e && e.length && t && t.length ? Yr(e, t, void 0, n) : e; }), (xn.pullAt = Ia), (xn.range = ou), (xn.rangeRight = au), (xn.rearg = Ei), (xn.reject = function (e, t) { return (Ci(e) ? pt : sr)(e, ki(ea(t, 3))); }), (xn.remove = function (e, t) { var n = []; if (!e || !e.length) return n; var r = -1, o = [], a = e.length; for (t = ea(t, 3); ++r < a; ) { var i = e[r]; t(i, r, e) && (n.push(i), o.push(r)); } return Wr(e, o), n; }), (xn.rest = function (e, t) { if ("function" != typeof e) throw new be(a); return Rr(e, (t = void 0 === t ? t : as(t))); }), (xn.reverse = Xa), (xn.sampleSize = function (e, t, n) { return (t = (n ? da(e, t, n) : void 0 === t) ? 1 : as(t)), (Ci(e) ? Hn : Hr)(e, t); }), (xn.set = function (e, t, n) { return null == e ? e : Ir(e, t, n); }), (xn.setWith = function (e, t, n, r) { return (r = "function" == typeof r ? r : void 0), null == e ? e : Ir(e, t, n, r); }), (xn.shuffle = function (e) { return (Ci(e) ? In : Ur)(e); }), (xn.slice = function (e, t, n) { var r = null == e ? 0 : e.length; return r ? (n && "number" != typeof n && da(e, t, n) ? ((t = 0), (n = r)) : ((t = null == t ? 0 : as(t)), (n = void 0 === n ? r : as(n))), Jr(e, t, n)) : []; }), (xn.sortBy = Mi), (xn.sortedUniq = function (e) { return e && e.length ? Qr(e) : []; }), (xn.sortedUniqBy = function (e, t) { return e && e.length ? Qr(e, ea(t, 2)) : []; }), (xn.split = function (e, t, n) { return ( n && "number" != typeof n && da(e, t, n) && (t = n = void 0), (n = void 0 === n ? 4294967295 : n >>> 0) ? ((e = cs(e)) && ("string" == typeof t || (null != t && !Gi(t))) && !(t = eo(t)) && Ft(e) ? po(Vt(e), 0, n) : e.split(t, n)) : [] ); }), (xn.spread = function (e, t) { if ("function" != typeof e) throw new be(a); return ( (t = null == t ? 0 : cn(as(t), 0)), Rr(function (n) { var r = n[t], o = po(n, 0, t); return r && yt(o, r), ut(e, this, o); }) ); }), (xn.tail = function (e) { var t = null == e ? 0 : e.length; return t ? Jr(e, 1, t) : []; }), (xn.take = function (e, t, n) { return e && e.length ? Jr(e, 0, (t = n || void 0 === t ? 1 : as(t)) < 0 ? 0 : t) : []; }), (xn.takeRight = function (e, t, n) { var r = null == e ? 0 : e.length; return r ? Jr(e, (t = r - (t = n || void 0 === t ? 1 : as(t))) < 0 ? 0 : t, r) : []; }), (xn.takeRightWhile = function (e, t) { return e && e.length ? oo(e, ea(t, 3), !1, !0) : []; }), (xn.takeWhile = function (e, t) { return e && e.length ? oo(e, ea(t, 3)) : []; }), (xn.tap = function (e, t) { return t(e), e; }), (xn.throttle = function (e, t, n) { var r = !0, o = !0; if ("function" != typeof e) throw new be(a); return Xi(n) && ((r = "leading" in n ? !!n.leading : r), (o = "trailing" in n ? !!n.trailing : o)), Ai(e, t, { leading: r, maxWait: t, trailing: o }); }), (xn.thru = oi), (xn.toArray = rs), (xn.toPairs = zs), (xn.toPairsIn = Es), (xn.toPath = function (e) { return Ci(e) ? Mt(e, Sa) : Zi(e) ? [e] : _o(Oa(cs(e))); }), (xn.toPlainObject = us), (xn.transform = function (e, t, n) { var r = Ci(e), o = r || qi(e) || es(e); if (((t = ea(t, 4)), null == n)) { var a = e && e.constructor; n = o ? (r ? new a() : []) : Xi(e) && Fi(a) ? Dn(Ke(e)) : {}; } return ( (o ? lt : dr)(e, function (e, r, o) { return t(n, e, r, o); }), n ); }), (xn.unary = function (e) { return vi(e, 1); }), (xn.union = Ka), (xn.unionBy = Ua), (xn.unionWith = Ja), (xn.uniq = function (e) { return e && e.length ? to(e) : []; }), (xn.uniqBy = function (e, t) { return e && e.length ? to(e, ea(t, 2)) : []; }), (xn.uniqWith = function (e, t) { return (t = "function" == typeof t ? t : void 0), e && e.length ? to(e, void 0, t) : []; }), (xn.unset = function (e, t) { return null == e || no(e, t); }), (xn.unzip = Va), (xn.unzipWith = Ga), (xn.update = function (e, t, n) { return null == e ? e : ro(e, t, co(n)); }), (xn.updateWith = function (e, t, n, r) { return (r = "function" == typeof r ? r : void 0), null == e ? e : ro(e, t, co(n), r); }), (xn.values = xs), (xn.valuesIn = function (e) { return null == e ? [] : jt(e, Ls(e)); }), (xn.without = $a), (xn.words = Fs), (xn.wrap = function (e, t) { return Si(co(t), e); }), (xn.xor = Qa), (xn.xorBy = Za), (xn.xorWith = ei), (xn.zip = ti), (xn.zipObject = function (e, t) { return so(e || [], t || [], Kn); }), (xn.zipObjectDeep = function (e, t) { return so(e || [], t || [], Ir); }), (xn.zipWith = ni), (xn.entries = zs), (xn.entriesIn = Es), (xn.extend = ds), (xn.extendWith = fs), Qs(xn, xn), (xn.add = uu), (xn.attempt = Hs), (xn.camelCase = Ds), (xn.capitalize = Ns), (xn.ceil = cu), (xn.clamp = function (e, t, n) { return void 0 === n && ((n = t), (t = void 0)), void 0 !== n && (n = (n = ss(n)) == n ? n : 0), void 0 !== t && (t = (t = ss(t)) == t ? t : 0), Qn(ss(e), t, n); }), (xn.clone = function (e) { return Zn(e, 4); }), (xn.cloneDeep = function (e) { return Zn(e, 5); }), (xn.cloneDeepWith = function (e, t) { return Zn(e, 5, (t = "function" == typeof t ? t : void 0)); }), (xn.cloneWith = function (e, t) { return Zn(e, 4, (t = "function" == typeof t ? t : void 0)); }), (xn.conformsTo = function (e, t) { return null == t || er(e, t, As(t)); }), (xn.deburr = js), (xn.defaultTo = function (e, t) { return null == e || e != e ? t : e; }), (xn.divide = lu), (xn.endsWith = function (e, t, n) { (e = cs(e)), (t = eo(t)); var r = e.length, o = (n = void 0 === n ? r : Qn(as(n), 0, r)); return (n -= t.length) >= 0 && e.slice(n, o) == t; }), (xn.eq = xi), (xn.escape = function (e) { return (e = cs(e)) && q.test(e) ? e.replace(Y, Bt) : e; }), (xn.escapeRegExp = function (e) { return (e = cs(e)) && J.test(e) ? e.replace(U, "\\$&") : e; }), (xn.every = function (e, t, n) { var r = Ci(e) ? ft : ar; return n && da(e, t, n) && (t = void 0), r(e, ea(t, 3)); }), (xn.find = si), (xn.findIndex = ja), (xn.findKey = function (e, t) { return At(e, ea(t, 3), dr); }), (xn.findLast = ui), (xn.findLastIndex = Ca), (xn.findLastKey = function (e, t) { return At(e, ea(t, 3), fr); }), (xn.floor = du), (xn.forEach = ci), (xn.forEachRight = li), (xn.forIn = function (e, t) { return null == e ? e : cr(e, ea(t, 3), Ls); }), (xn.forInRight = function (e, t) { return null == e ? e : lr(e, ea(t, 3), Ls); }), (xn.forOwn = function (e, t) { return e && dr(e, ea(t, 3)); }), (xn.forOwnRight = function (e, t) { return e && fr(e, ea(t, 3)); }), (xn.get = ys), (xn.gt = Di), (xn.gte = Ni), (xn.has = function (e, t) { return null != e && sa(e, t, vr); }), (xn.hasIn = vs), (xn.head = Ya), (xn.identity = Js), (xn.includes = function (e, t, n, r) { (e = Yi(e) ? e : xs(e)), (n = n && !r ? as(n) : 0); var o = e.length; return n < 0 && (n = cn(o + n, 0)), Qi(e) ? n <= o && e.indexOf(t, n) > -1 : !!o && wt(e, t, n) > -1; }), (xn.indexOf = function (e, t, n) { var r = null == e ? 0 : e.length; if (!r) return -1; var o = null == n ? 0 : as(n); return o < 0 && (o = cn(r + o, 0)), wt(e, t, o); }), (xn.inRange = function (e, t, n) { return ( (t = os(t)), void 0 === n ? ((n = t), (t = 0)) : (n = os(n)), (function (e, t, n) { return e >= ln(t, n) && e < cn(t, n); })((e = ss(e)), t, n) ); }), (xn.invoke = _s), (xn.isArguments = ji), (xn.isArray = Ci), (xn.isArrayBuffer = Pi), (xn.isArrayLike = Yi), (xn.isArrayLikeObject = Wi), (xn.isBoolean = function (e) { return !0 === e || !1 === e || (Ki(e) && Mr(e) == l); }), (xn.isBuffer = qi), (xn.isDate = Bi), (xn.isElement = function (e) { return Ki(e) && 1 === e.nodeType && !Vi(e); }), (xn.isEmpty = function (e) { if (null == e) return !0; if (Yi(e) && (Ci(e) || "string" == typeof e || "function" == typeof e.splice || qi(e) || es(e) || ji(e))) return !e.length; var t = ia(e); if (t == m || t == b) return !e.size; if (ma(e)) return !Or(e).length; for (var n in e) if (Te.call(e, n)) return !1; return !0; }), (xn.isEqual = function (e, t) { return Lr(e, t); }), (xn.isEqualWith = function (e, t, n) { var r = (n = "function" == typeof n ? n : void 0) ? n(e, t) : void 0; return void 0 === r ? Lr(e, t, void 0, n) : !!r; }), (xn.isError = Ri), (xn.isFinite = function (e) { return "number" == typeof e && an(e); }), (xn.isFunction = Fi), (xn.isInteger = Hi), (xn.isLength = Ii), (xn.isMap = Ui), (xn.isMatch = function (e, t) { return e === t || wr(e, t, na(t)); }), (xn.isMatchWith = function (e, t, n) { return (n = "function" == typeof n ? n : void 0), wr(e, t, na(t), n); }), (xn.isNaN = function (e) { return Ji(e) && e != +e; }), (xn.isNative = function (e) { if (ha(e)) throw new pe("Unsupported core-js use. Try https://npms.io/search?q=ponyfill."); return Tr(e); }), (xn.isNil = function (e) { return null == e; }), (xn.isNull = function (e) { return null === e; }), (xn.isNumber = Ji), (xn.isObject = Xi), (xn.isObjectLike = Ki), (xn.isPlainObject = Vi), (xn.isRegExp = Gi), (xn.isSafeInteger = function (e) { return Hi(e) && e >= -9007199254740991 && e <= 9007199254740991; }), (xn.isSet = $i), (xn.isString = Qi), (xn.isSymbol = Zi), (xn.isTypedArray = es), (xn.isUndefined = function (e) { return void 0 === e; }), (xn.isWeakMap = function (e) { return Ki(e) && ia(e) == A; }), (xn.isWeakSet = function (e) { return Ki(e) && "[object WeakSet]" == Mr(e); }), (xn.join = function (e, t) { return null == e ? "" : sn.call(e, t); }), (xn.kebabCase = Cs), (xn.last = Ra), (xn.lastIndexOf = function (e, t, n) { var r = null == e ? 0 : e.length; if (!r) return -1; var o = r; return ( void 0 !== n && (o = (o = as(n)) < 0 ? cn(r + o, 0) : ln(o, r - 1)), t == t ? (function (e, t, n) { for (var r = n + 1; r--; ) if (e[r] === t) return r; return r; })(e, t, o) : Lt(e, kt, o, !0) ); }), (xn.lowerCase = Ps), (xn.lowerFirst = Ys), (xn.lt = ts), (xn.lte = ns), (xn.max = function (e) { return e && e.length ? ir(e, Js, yr) : void 0; }), (xn.maxBy = function (e, t) { return e && e.length ? ir(e, ea(t, 2), yr) : void 0; }), (xn.mean = function (e) { return Ot(e, Js); }), (xn.meanBy = function (e, t) { return Ot(e, ea(t, 2)); }), (xn.min = function (e) { return e && e.length ? ir(e, Js, zr) : void 0; }), (xn.minBy = function (e, t) { return e && e.length ? ir(e, ea(t, 2), zr) : void 0; }), (xn.stubArray = iu), (xn.stubFalse = su), (xn.stubObject = function () { return {}; }), (xn.stubString = function () { return ""; }), (xn.stubTrue = function () { return !0; }), (xn.multiply = pu), (xn.nth = function (e, t) { return e && e.length ? jr(e, as(t)) : void 0; }), (xn.noConflict = function () { return Je._ === this && (Je._ = Ee), this; }), (xn.noop = Zs), (xn.now = yi), (xn.pad = function (e, t, n) { e = cs(e); var r = (t = as(t)) ? Jt(e) : 0; if (!t || r >= t) return e; var o = (t - r) / 2; return Po(nn(o), n) + e + Po(tn(o), n); }), (xn.padEnd = function (e, t, n) { e = cs(e); var r = (t = as(t)) ? Jt(e) : 0; return t && r < t ? e + Po(t - r, n) : e; }), (xn.padStart = function (e, t, n) { e = cs(e); var r = (t = as(t)) ? Jt(e) : 0; return t && r < t ? Po(t - r, n) + e : e; }), (xn.parseInt = function (e, t, n) { return n || null == t ? (t = 0) : t && (t = +t), fn(cs(e).replace(G, ""), t || 0); }), (xn.random = function (e, t, n) { if ( (n && "boolean" != typeof n && da(e, t, n) && (t = n = void 0), void 0 === n && ("boolean" == typeof t ? ((n = t), (t = void 0)) : "boolean" == typeof e && ((n = e), (e = void 0))), void 0 === e && void 0 === t ? ((e = 0), (t = 1)) : ((e = os(e)), void 0 === t ? ((t = e), (e = 0)) : (t = os(t))), e > t) ) { var r = e; (e = t), (t = r); } if (n || e % 1 || t % 1) { var o = pn(); return ln(e + o * (t - e + Ie("1e-" + ((o + "").length - 1))), t); } return qr(e, t); }), (xn.reduce = function (e, t, n) { var r = Ci(e) ? vt : Et, o = arguments.length < 3; return r(e, ea(t, 4), n, o, rr); }), (xn.reduceRight = function (e, t, n) { var r = Ci(e) ? bt : Et, o = arguments.length < 3; return r(e, ea(t, 4), n, o, or); }), (xn.repeat = function (e, t, n) { return (t = (n ? da(e, t, n) : void 0 === t) ? 1 : as(t)), Br(cs(e), t); }), (xn.replace = function () { var e = arguments, t = cs(e[0]); return e.length < 3 ? t : t.replace(e[1], e[2]); }), (xn.result = function (e, t, n) { var r = -1, o = (t = lo(t, e)).length; for (o || ((o = 1), (e = void 0)); ++r < o; ) { var a = null == e ? void 0 : e[Sa(t[r])]; void 0 === a && ((r = o), (a = n)), (e = Fi(a) ? a.call(e) : a); } return e; }), (xn.round = hu), (xn.runInContext = e), (xn.sample = function (e) { return (Ci(e) ? Fn : Fr)(e); }), (xn.size = function (e) { if (null == e) return 0; if (Yi(e)) return Qi(e) ? Jt(e) : e.length; var t = ia(e); return t == m || t == b ? e.size : Or(e).length; }), (xn.snakeCase = Ws), (xn.some = function (e, t, n) { var r = Ci(e) ? gt : Vr; return n && da(e, t, n) && (t = void 0), r(e, ea(t, 3)); }), (xn.sortedIndex = function (e, t) { return Gr(e, t); }), (xn.sortedIndexBy = function (e, t, n) { return $r(e, t, ea(n, 2)); }), (xn.sortedIndexOf = function (e, t) { var n = null == e ? 0 : e.length; if (n) { var r = Gr(e, t); if (r < n && xi(e[r], t)) return r; } return -1; }), (xn.sortedLastIndex = function (e, t) { return Gr(e, t, !0); }), (xn.sortedLastIndexBy = function (e, t, n) { return $r(e, t, ea(n, 2), !0); }), (xn.sortedLastIndexOf = function (e, t) { if (null == e ? 0 : e.length) { var n = Gr(e, t, !0) - 1; if (xi(e[n], t)) return n; } return -1; }), (xn.startCase = qs), (xn.startsWith = function (e, t, n) { return (e = cs(e)), (n = null == n ? 0 : Qn(as(n), 0, e.length)), (t = eo(t)), e.slice(n, n + t.length) == t; }), (xn.subtract = mu), (xn.sum = function (e) { return e && e.length ? xt(e, Js) : 0; }), (xn.sumBy = function (e, t) { return e && e.length ? xt(e, ea(t, 2)) : 0; }), (xn.template = function (e, t, n) { var r = xn.templateSettings; n && da(e, t, n) && (t = void 0), (e = cs(e)), (t = fs({}, t, r, Io)); var o, a, i = fs({}, t.imports, r.imports, Io), s = As(i), u = jt(i, s), c = 0, l = t.interpolate || de, d = "__p += '", f = ye((t.escape || de).source + "|" + l.source + "|" + (l === F ? re : de).source + "|" + (t.evaluate || de).source + "|$", "g"), p = "//# sourceURL=" + ("sourceURL" in t ? t.sourceURL : "lodash.templateSources[" + ++Be + "]") + "\n"; e.replace(f, function (t, n, r, i, s, u) { return ( r || (r = i), (d += e.slice(c, u).replace(fe, Rt)), n && ((o = !0), (d += "' +\n__e(" + n + ") +\n'")), s && ((a = !0), (d += "';\n" + s + ";\n__p += '")), r && (d += "' +\n((__t = (" + r + ")) == null ? '' : __t) +\n'"), (c = u + t.length), t ); }), (d += "';\n"); var h = t.variable; h || (d = "with (obj) {\n" + d + "\n}\n"), (d = (a ? d.replace(N, "") : d).replace(j, "$1").replace(C, "$1;")), (d = "function(" + (h || "obj") + ") {\n" + (h ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (o ? ", __e = _.escape" : "") + (a ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + d + "return __p\n}"); var m = Hs(function () { return he(s, p + "return " + d).apply(void 0, u); }); if (((m.source = d), Ri(m))) throw m; return m; }), (xn.times = function (e, t) { if ((e = as(e)) < 1 || e > 9007199254740991) return []; var n = 4294967295, r = ln(e, 4294967295); e -= 4294967295; for (var o = Dt(r, (t = ea(t))); ++n < e; ) t(n); return o; }), (xn.toFinite = os), (xn.toInteger = as), (xn.toLength = is), (xn.toLower = function (e) { return cs(e).toLowerCase(); }), (xn.toNumber = ss), (xn.toSafeInteger = function (e) { return e ? Qn(as(e), -9007199254740991, 9007199254740991) : 0 === e ? e : 0; }), (xn.toString = cs), (xn.toUpper = function (e) { return cs(e).toUpperCase(); }), (xn.trim = function (e, t, n) { if ((e = cs(e)) && (n || void 0 === t)) return e.replace(V, ""); if (!e || !(t = eo(t))) return e; var r = Vt(e), o = Vt(t); return po(r, Pt(r, o), Yt(r, o) + 1).join(""); }), (xn.trimEnd = function (e, t, n) { if ((e = cs(e)) && (n || void 0 === t)) return e.replace($, ""); if (!e || !(t = eo(t))) return e; var r = Vt(e); return po(r, 0, Yt(r, Vt(t)) + 1).join(""); }), (xn.trimStart = function (e, t, n) { if ((e = cs(e)) && (n || void 0 === t)) return e.replace(G, ""); if (!e || !(t = eo(t))) return e; var r = Vt(e); return po(r, Pt(r, Vt(t))).join(""); }), (xn.truncate = function (e, t) { var n = 30, r = "..."; if (Xi(t)) { var o = "separator" in t ? t.separator : o; (n = "length" in t ? as(t.length) : n), (r = "omission" in t ? eo(t.omission) : r); } var a = (e = cs(e)).length; if (Ft(e)) { var i = Vt(e); a = i.length; } if (n >= a) return e; var s = n - Jt(r); if (s < 1) return r; var u = i ? po(i, 0, s).join("") : e.slice(0, s); if (void 0 === o) return u + r; if ((i && (s += u.length - s), Gi(o))) { if (e.slice(s).search(o)) { var c, l = u; for (o.global || (o = ye(o.source, cs(oe.exec(o)) + "g")), o.lastIndex = 0; (c = o.exec(l)); ) var d = c.index; u = u.slice(0, void 0 === d ? s : d); } } else if (e.indexOf(eo(o), s) != s) { var f = u.lastIndexOf(o); f > -1 && (u = u.slice(0, f)); } return u + r; }), (xn.unescape = function (e) { return (e = cs(e)) && W.test(e) ? e.replace(P, Gt) : e; }), (xn.uniqueId = function (e) { var t = ++ke; return cs(e) + t; }), (xn.upperCase = Bs), (xn.upperFirst = Rs), (xn.each = ci), (xn.eachRight = li), (xn.first = Ya), Qs( xn, ((fu = {}), dr(xn, function (e, t) { Te.call(xn.prototype, t) || (fu[t] = e); }), fu), { chain: !1 } ), (xn.VERSION = "4.17.4"), lt(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function (e) { xn[e].placeholder = xn; }), lt(["drop", "take"], function (e, t) { (Cn.prototype[e] = function (n) { n = void 0 === n ? 1 : cn(as(n), 0); var r = this.__filtered__ && !t ? new Cn(this) : this.clone(); return r.__filtered__ ? (r.__takeCount__ = ln(n, r.__takeCount__)) : r.__views__.push({ size: ln(n, 4294967295), type: e + (r.__dir__ < 0 ? "Right" : "") }), r; }), (Cn.prototype[e + "Right"] = function (t) { return this.reverse()[e](t).reverse(); }); }), lt(["filter", "map", "takeWhile"], function (e, t) { var n = t + 1, r = 1 == n || 3 == n; Cn.prototype[e] = function (e) { var t = this.clone(); return t.__iteratees__.push({ iteratee: ea(e, 3), type: n }), (t.__filtered__ = t.__filtered__ || r), t; }; }), lt(["head", "last"], function (e, t) { var n = "take" + (t ? "Right" : ""); Cn.prototype[e] = function () { return this[n](1).value()[0]; }; }), lt(["initial", "tail"], function (e, t) { var n = "drop" + (t ? "" : "Right"); Cn.prototype[e] = function () { return this.__filtered__ ? new Cn(this) : this[n](1); }; }), (Cn.prototype.compact = function () { return this.filter(Js); }), (Cn.prototype.find = function (e) { return this.filter(e).head(); }), (Cn.prototype.findLast = function (e) { return this.reverse().find(e); }), (Cn.prototype.invokeMap = Rr(function (e, t) { return "function" == typeof e ? new Cn(this) : this.map(function (n) { return _r(n, e, t); }); })), (Cn.prototype.reject = function (e) { return this.filter(ki(ea(e))); }), (Cn.prototype.slice = function (e, t) { e = as(e); var n = this; return n.__filtered__ && (e > 0 || t < 0) ? new Cn(n) : (e < 0 ? (n = n.takeRight(-e)) : e && (n = n.drop(e)), void 0 !== t && (n = (t = as(t)) < 0 ? n.dropRight(-t) : n.take(t - e)), n); }), (Cn.prototype.takeRightWhile = function (e) { return this.reverse().takeWhile(e).reverse(); }), (Cn.prototype.toArray = function () { return this.take(4294967295); }), dr(Cn.prototype, function (e, t) { var n = /^(?:filter|find|map|reject)|While$/.test(t), r = /^(?:head|last)$/.test(t), o = xn[r ? "take" + ("last" == t ? "Right" : "") : t], a = r || /^find/.test(t); o && (xn.prototype[t] = function () { var t = this.__wrapped__, i = r ? [1] : arguments, s = t instanceof Cn, u = i[0], c = s || Ci(t), l = function (e) { var t = o.apply(xn, yt([e], i)); return r && d ? t[0] : t; }; c && n && "function" == typeof u && 1 != u.length && (s = c = !1); var d = this.__chain__, f = !!this.__actions__.length, p = a && !d, h = s && !f; if (!a && c) { t = h ? t : new Cn(this); var m = e.apply(t, i); return m.__actions__.push({ func: oi, args: [l], thisArg: void 0 }), new jn(m, d); } return p && h ? e.apply(this, i) : ((m = this.thru(l)), p ? (r ? m.value()[0] : m.value()) : m); }); }), lt(["pop", "push", "shift", "sort", "splice", "unshift"], function (e) { var t = ge[e], n = /^(?:push|sort|unshift)$/.test(e) ? "tap" : "thru", r = /^(?:pop|shift)$/.test(e); xn.prototype[e] = function () { var e = arguments; if (r && !this.__chain__) { var o = this.value(); return t.apply(Ci(o) ? o : [], e); } return this[n](function (n) { return t.apply(Ci(n) ? n : [], e); }); }; }), dr(Cn.prototype, function (e, t) { var n = xn[t]; if (n) { var r = n.name + ""; (An[r] || (An[r] = [])).push({ name: t, func: n }); } }), (An[Do(void 0, 2).name] = [{ name: "wrapper", func: void 0 }]), (Cn.prototype.clone = function () { var e = new Cn(this.__wrapped__); return ( (e.__actions__ = _o(this.__actions__)), (e.__dir__ = this.__dir__), (e.__filtered__ = this.__filtered__), (e.__iteratees__ = _o(this.__iteratees__)), (e.__takeCount__ = this.__takeCount__), (e.__views__ = _o(this.__views__)), e ); }), (Cn.prototype.reverse = function () { if (this.__filtered__) { var e = new Cn(this); (e.__dir__ = -1), (e.__filtered__ = !0); } else (e = this.clone()).__dir__ *= -1; return e; }), (Cn.prototype.value = function () { var e = this.__wrapped__.value(), t = this.__dir__, n = Ci(e), r = t < 0, o = n ? e.length : 0, a = (function (e, t, n) { var r = -1, o = n.length; for (; ++r < o; ) { var a = n[r], i = a.size; switch (a.type) { case "drop": e += i; break; case "dropRight": t -= i; break; case "take": t = ln(t, e + i); break; case "takeRight": e = cn(e, t - i); } } return { start: e, end: t }; })(0, o, this.__views__), i = a.start, s = a.end, u = s - i, c = r ? s : i - 1, l = this.__iteratees__, d = l.length, f = 0, p = ln(u, this.__takeCount__); if (!n || (!r && o == u && p == u)) return ao(e, this.__actions__); var h = []; e: for (; u-- && f < p; ) { for (var m = -1, M = e[(c += t)]; ++m < d; ) { var y = l[m], v = y.iteratee, b = y.type, g = v(M); if (2 == b) M = g; else if (!g) { if (1 == b) continue e; break e; } } h[f++] = M; } return h; }), (xn.prototype.at = ai), (xn.prototype.chain = function () { return ri(this); }), (xn.prototype.commit = function () { return new jn(this.value(), this.__chain__); }), (xn.prototype.next = function () { void 0 === this.__values__ && (this.__values__ = rs(this.value())); var e = this.__index__ >= this.__values__.length; return { done: e, value: e ? void 0 : this.__values__[this.__index__++] }; }), (xn.prototype.plant = function (e) { for (var t, n = this; n instanceof Nn; ) { var r = Ea(n); (r.__index__ = 0), (r.__values__ = void 0), t ? (o.__wrapped__ = r) : (t = r); var o = r; n = n.__wrapped__; } return (o.__wrapped__ = e), t; }), (xn.prototype.reverse = function () { var e = this.__wrapped__; if (e instanceof Cn) { var t = e; return this.__actions__.length && (t = new Cn(this)), (t = t.reverse()).__actions__.push({ func: oi, args: [Xa], thisArg: void 0 }), new jn(t, this.__chain__); } return this.thru(Xa); }), (xn.prototype.toJSON = xn.prototype.valueOf = xn.prototype.value = function () { return ao(this.__wrapped__, this.__actions__); }), (xn.prototype.first = xn.prototype.head), Ze && (xn.prototype[Ze] = function () { return this; }), xn ); })(); (Je._ = $t), void 0 === (o = function () { return $t; }.call(t, n, t, r)) || (r.exports = o); }.call(this)); }.call(this, n(53), n(79)(e))); }, , , function (e, t, n) { "use strict"; t.__esModule = !0; var r, o = n(513), a = (r = o) && r.__esModule ? r : { default: r }; t.default = function (e, t, n) { return t in e ? (0, a.default)(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = n), e; }; }, function (e, t, n) { var r; !(function () { "use strict"; var n = {}.hasOwnProperty; function o() { for (var e = [], t = 0; t < arguments.length; t++) { var r = arguments[t]; if (r) { var a = typeof r; if ("string" === a || "number" === a) e.push(r); else if (Array.isArray(r) && r.length) { var i = o.apply(null, r); i && e.push(i); } else if ("object" === a) for (var s in r) n.call(r, s) && r[s] && e.push(s); } } return e.join(" "); } e.exports ? ((o.default = o), (e.exports = o)) : void 0 === (r = function () { return o; }.apply(t, [])) || (e.exports = r); })(); }, function (e, t) { e.exports = function (e) { return e && e.__esModule ? e : { default: e }; }; }, function (e, t, n) { "use strict"; var r = n(197), o = "object" == typeof self && self && self.Object === Object && self, a = r.a || o || Function("return this")(); t.a = a; }, function (e, t, n) { "use strict"; e.exports = n(818); }, function (e, t, n) { "use strict"; n.r(t); var r = n(1), o = n(0), a = n.n(o), i = a.a.shape({ trySubscribe: a.a.func.isRequired, tryUnsubscribe: a.a.func.isRequired, notifyNestedSubs: a.a.func.isRequired, isSubscribed: a.a.func.isRequired }), s = a.a.shape({ subscribe: a.a.func.isRequired, dispatch: a.a.func.isRequired, getState: a.a.func.isRequired }); function u(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); } function c(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || ("object" != typeof t && "function" != typeof t) ? e : t; } function l(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); (e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } })), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : (e.__proto__ = t)); } function d() { var e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "store", n = arguments[1], o = n || t + "Subscription", d = (function (e) { function n(r, o) { u(this, n); var a = c(this, e.call(this, r, o)); return (a[t] = r.store), a; } return ( l(n, e), (n.prototype.getChildContext = function () { var e; return ((e = {})[t] = this[t]), (e[o] = null), e; }), (n.prototype.render = function () { return r.Children.only(this.props.children); }), n ); })(r.Component); return (d.propTypes = { store: s.isRequired, children: a.a.element.isRequired }), (d.childContextTypes = (((e = {})[t] = s.isRequired), (e[o] = i), e)), d; } var f = d(), p = n(196), h = n.n(p), m = n(19), M = n.n(m); var y = { notify: function () {} }; var v = (function () { function e(t, n, r) { !(function (e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); })(this, e), (this.store = t), (this.parentSub = n), (this.onStateChange = r), (this.unsubscribe = null), (this.listeners = y); } return ( (e.prototype.addNestedSub = function (e) { return this.trySubscribe(), this.listeners.subscribe(e); }), (e.prototype.notifyNestedSubs = function () { this.listeners.notify(); }), (e.prototype.isSubscribed = function () { return Boolean(this.unsubscribe); }), (e.prototype.trySubscribe = function () { var e, t; this.unsubscribe || ((this.unsubscribe = this.parentSub ? this.parentSub.addNestedSub(this.onStateChange) : this.store.subscribe(this.onStateChange)), (this.listeners = ((e = []), (t = []), { clear: function () { (t = null), (e = null); }, notify: function () { for (var n = (e = t), r = 0; r < n.length; r++) n[r](); }, get: function () { return t; }, subscribe: function (n) { var r = !0; return ( t === e && (t = e.slice()), t.push(n), function () { r && null !== e && ((r = !1), t === e && (t = e.slice()), t.splice(t.indexOf(n), 1)); } ); }, }))); }), (e.prototype.tryUnsubscribe = function () { this.unsubscribe && (this.unsubscribe(), (this.unsubscribe = null), this.listeners.clear(), (this.listeners = y)); }), e ); })(), b = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function g(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function"); } function _(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || ("object" != typeof t && "function" != typeof t) ? e : t; } function A(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); (e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } })), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : (e.__proto__ = t)); } function L(e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; } var w = 0, T = {}; function k() {} function O(e, t) { var n = { run: function (r) { try { var o = e(t.getState(), r); (o !== n.props || n.error) && ((n.shouldComponentUpdate = !0), (n.props = o), (n.error = null)); } catch (e) { (n.shouldComponentUpdate = !0), (n.error = e); } }, }; return n; } function S(e) { var t, n, o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, a = o.getDisplayName, u = void 0 === a ? function (e) { return "ConnectAdvanced(" + e + ")"; } : a, c = o.methodName, l = void 0 === c ? "connectAdvanced" : c, d = o.renderCountProp, f = void 0 === d ? void 0 : d, p = o.shouldHandleStateChanges, m = void 0 === p || p, y = o.storeKey, S = void 0 === y ? "store" : y, z = o.withRef, E = void 0 !== z && z, x = L(o, ["getDisplayName", "methodName", "renderCountProp", "shouldHandleStateChanges", "storeKey", "withRef"]), D = S + "Subscription", N = w++, j = (((t = {})[S] = s), (t[D] = i), t), C = (((n = {})[D] = i), n); return function (t) { M()("function" == typeof t, "You must pass a component to the function returned by connect. Instead received " + JSON.stringify(t)); var n = t.displayName || t.name || "Component", o = u(n), a = b({}, x, { getDisplayName: u, methodName: l, renderCountProp: f, shouldHandleStateChanges: m, storeKey: S, withRef: E, displayName: o, wrappedComponentName: n, WrappedComponent: t }), i = (function (n) { function i(e, t) { g(this, i); var r = _(this, n.call(this, e, t)); return ( (r.version = N), (r.state = {}), (r.renderCount = 0), (r.store = e[S] || t[S]), (r.propsMode = Boolean(e[S])), (r.setWrappedInstance = r.setWrappedInstance.bind(r)), M()(r.store, 'Could not find "' + S + '" in either the context or props of "' + o + '". Either wrap the root component in a , or explicitly pass "' + S + '" as a prop to "' + o + '".'), r.initSelector(), r.initSubscription(), r ); } return ( A(i, n), (i.prototype.getChildContext = function () { var e, t = this.propsMode ? null : this.subscription; return ((e = {})[D] = t || this.context[D]), e; }), (i.prototype.componentDidMount = function () { m && (this.subscription.trySubscribe(), this.selector.run(this.props), this.selector.shouldComponentUpdate && this.forceUpdate()); }), (i.prototype.componentWillReceiveProps = function (e) { this.selector.run(e); }), (i.prototype.shouldComponentUpdate = function () { return this.selector.shouldComponentUpdate; }), (i.prototype.componentWillUnmount = function () { this.subscription && this.subscription.tryUnsubscribe(), (this.subscription = null), (this.notifyNestedSubs = k), (this.store = null), (this.selector.run = k), (this.selector.shouldComponentUpdate = !1); }), (i.prototype.getWrappedInstance = function () { return M()(E, "To access the wrapped instance, you need to specify { withRef: true } in the options argument of the " + l + "() call."), this.wrappedInstance; }), (i.prototype.setWrappedInstance = function (e) { this.wrappedInstance = e; }), (i.prototype.initSelector = function () { var t = e(this.store.dispatch, a); (this.selector = O(t, this.store)), this.selector.run(this.props); }), (i.prototype.initSubscription = function () { if (m) { var e = (this.propsMode ? this.props : this.context)[D]; (this.subscription = new v(this.store, e, this.onStateChange.bind(this))), (this.notifyNestedSubs = this.subscription.notifyNestedSubs.bind(this.subscription)); } }), (i.prototype.onStateChange = function () { this.selector.run(this.props), this.selector.shouldComponentUpdate ? ((this.componentDidUpdate = this.notifyNestedSubsOnComponentDidUpdate), this.setState(T)) : this.notifyNestedSubs(); }), (i.prototype.notifyNestedSubsOnComponentDidUpdate = function () { (this.componentDidUpdate = void 0), this.notifyNestedSubs(); }), (i.prototype.isSubscribed = function () { return Boolean(this.subscription) && this.subscription.isSubscribed(); }), (i.prototype.addExtraProps = function (e) { if (!(E || f || (this.propsMode && this.subscription))) return e; var t = b({}, e); return E && (t.ref = this.setWrappedInstance), f && (t[f] = this.renderCount++), this.propsMode && this.subscription && (t[D] = this.subscription), t; }), (i.prototype.render = function () { var e = this.selector; if (((e.shouldComponentUpdate = !1), e.error)) throw e.error; return Object(r.createElement)(t, this.addExtraProps(e.props)); }), i ); })(r.Component); return (i.WrappedComponent = t), (i.displayName = o), (i.childContextTypes = C), (i.contextTypes = j), (i.propTypes = j), h()(i, t); }; } var z = Object.prototype.hasOwnProperty; function E(e, t) { return e === t ? 0 !== e || 0 !== t || 1 / e == 1 / t : e != e && t != t; } function x(e, t) { if (E(e, t)) return !0; if ("object" != typeof e || null === e || "object" != typeof t || null === t) return !1; var n = Object.keys(e), r = Object.keys(t); if (n.length !== r.length) return !1; for (var o = 0; o < n.length; o++) if (!z.call(t, n[o]) || !E(e[n[o]], t[n[o]])) return !1; return !0; } var D = n(49); n(87); function N(e) { return function (t, n) { var r = e(t, n); function o() { return r; } return (o.dependsOnOwnProps = !1), o; }; } function j(e) { return null !== e.dependsOnOwnProps && void 0 !== e.dependsOnOwnProps ? Boolean(e.dependsOnOwnProps) : 1 !== e.length; } function C(e, t) { return function (t, n) { n.displayName; var r = function (e, t) { return r.dependsOnOwnProps ? r.mapToProps(e, t) : r.mapToProps(e); }; return ( (r.dependsOnOwnProps = !0), (r.mapToProps = function (t, n) { (r.mapToProps = e), (r.dependsOnOwnProps = j(e)); var o = r(t, n); return "function" == typeof o && ((r.mapToProps = o), (r.dependsOnOwnProps = j(o)), (o = r(t, n))), o; }), r ); }; } var P = [ function (e) { return "function" == typeof e ? C(e) : void 0; }, function (e) { return e ? void 0 : N(function (e) { return { dispatch: e }; }); }, function (e) { return e && "object" == typeof e ? N(function (t) { return Object(D.b)(e, t); }) : void 0; }, ]; var Y = [ function (e) { return "function" == typeof e ? C(e) : void 0; }, function (e) { return e ? void 0 : N(function () { return {}; }); }, ], W = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function q(e, t, n) { return W({}, n, e, t); } var B = [ function (e) { return "function" == typeof e ? (function (e) { return function (t, n) { n.displayName; var r = n.pure, o = n.areMergedPropsEqual, a = !1, i = void 0; return function (t, n, s) { var u = e(t, n, s); return a ? (r && o(u, i)) || (i = u) : ((a = !0), (i = u)), i; }; }; })(e) : void 0; }, function (e) { return e ? void 0 : function () { return q; }; }, ]; function R(e, t, n, r) { return function (o, a) { return n(e(o, a), t(r, a), a); }; } function F(e, t, n, r, o) { var a = o.areStatesEqual, i = o.areOwnPropsEqual, s = o.areStatePropsEqual, u = !1, c = void 0, l = void 0, d = void 0, f = void 0, p = void 0; function h(o, u) { var h, m, M = !i(u, l), y = !a(o, c); return ( (c = o), (l = u), M && y ? ((d = e(c, l)), t.dependsOnOwnProps && (f = t(r, l)), (p = n(d, f, l))) : M ? (e.dependsOnOwnProps && (d = e(c, l)), t.dependsOnOwnProps && (f = t(r, l)), (p = n(d, f, l))) : y ? ((h = e(c, l)), (m = !s(h, d)), (d = h), m && (p = n(d, f, l)), p) : p ); } return function (o, a) { return u ? h(o, a) : ((d = e((c = o), (l = a))), (f = t(r, l)), (p = n(d, f, l)), (u = !0), p); }; } function H(e, t) { var n = t.initMapStateToProps, r = t.initMapDispatchToProps, o = t.initMergeProps, a = (function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; })(t, ["initMapStateToProps", "initMapDispatchToProps", "initMergeProps"]), i = n(e, a), s = r(e, a), u = o(e, a); return (a.pure ? F : R)(i, s, u, e, a); } var I = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function X(e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; } function K(e, t, n) { for (var r = t.length - 1; r >= 0; r--) { var o = t[r](e); if (o) return o; } return function (t, r) { throw new Error("Invalid value of type " + typeof e + " for " + n + " argument when connecting component " + r.wrappedComponentName + "."); }; } function U(e, t) { return e === t; } var J = (function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = e.connectHOC, n = void 0 === t ? S : t, r = e.mapStateToPropsFactories, o = void 0 === r ? Y : r, a = e.mapDispatchToPropsFactories, i = void 0 === a ? P : a, s = e.mergePropsFactories, u = void 0 === s ? B : s, c = e.selectorFactory, l = void 0 === c ? H : c; return function (e, t, r) { var a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, s = a.pure, c = void 0 === s || s, d = a.areStatesEqual, f = void 0 === d ? U : d, p = a.areOwnPropsEqual, h = void 0 === p ? x : p, m = a.areStatePropsEqual, M = void 0 === m ? x : m, y = a.areMergedPropsEqual, v = void 0 === y ? x : y, b = X(a, ["pure", "areStatesEqual", "areOwnPropsEqual", "areStatePropsEqual", "areMergedPropsEqual"]), g = K(e, o, "mapStateToProps"), _ = K(t, i, "mapDispatchToProps"), A = K(r, u, "mergeProps"); return n( l, I( { methodName: "connect", getDisplayName: function (e) { return "Connect(" + e + ")"; }, shouldHandleStateChanges: Boolean(e), initMapStateToProps: g, initMapDispatchToProps: _, initMergeProps: A, pure: c, areStatesEqual: f, areOwnPropsEqual: h, areStatePropsEqual: M, areMergedPropsEqual: v, }, b ) ); }; })(); n.d(t, "Provider", function () { return f; }), n.d(t, "createProvider", function () { return d; }), n.d(t, "connectAdvanced", function () { return S; }), n.d(t, "connect", function () { return J; }); }, function (e, t) { var n = Array.isArray; e.exports = n; }, , function (e, t, n) { "use strict"; var r = n(1), o = n(598); if (void 0 === r) throw Error("create-react-class could not find the React object. If you are using script tags, make sure that React is being loaded before create-react-class."); var a = new r.Component().updater; e.exports = o(r.Component, r.isValidElement, a); }, , function (e, t, n) { "use strict"; e.exports = n(756); }, function (e, t, n) { "use strict"; t.__esModule = !0; var r, o = n(513), a = (r = o) && r.__esModule ? r : { default: r }; t.default = (function () { function e(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; (r.enumerable = r.enumerable || !1), (r.configurable = !0), "value" in r && (r.writable = !0), (0, a.default)(e, r.key, r); } } return function (t, n, r) { return n && e(t.prototype, n), r && e(t, r), t; }; })(); }, , function (e, t, n) { "use strict"; n.d(t, "a", function () { return r; }), n.d(t, "b", function () { return o; }); var r = "reduxPersist:", o = "persist/REHYDRATE"; }, , , , function (e, t, n) { "use strict"; t.a = function (e) { return null != e && "object" == typeof e; }; }, , function (e, t, n) { "use strict"; var r = n(87), o = n(265), a = "@@redux/INIT"; function i(e, t, n) { var s; if (("function" == typeof t && void 0 === n && ((n = t), (t = void 0)), void 0 !== n)) { if ("function" != typeof n) throw new Error("Expected the enhancer to be a function."); return n(i)(e, t); } if ("function" != typeof e) throw new Error("Expected the reducer to be a function."); var u = e, c = t, l = [], d = l, f = !1; function p() { d === l && (d = l.slice()); } function h() { return c; } function m(e) { if ("function" != typeof e) throw new Error("Expected listener to be a function."); var t = !0; return ( p(), d.push(e), function () { if (t) { (t = !1), p(); var n = d.indexOf(e); d.splice(n, 1); } } ); } function M(e) { if (!Object(r.a)(e)) throw new Error("Actions must be plain objects. Use custom middleware for async actions."); if (void 0 === e.type) throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?'); if (f) throw new Error("Reducers may not dispatch actions."); try { (f = !0), (c = u(c, e)); } finally { f = !1; } for (var t = (l = d), n = 0; n < t.length; n++) { (0, t[n])(); } return e; } return ( M({ type: a }), ((s = { dispatch: M, subscribe: m, getState: h, replaceReducer: function (e) { if ("function" != typeof e) throw new Error("Expected the nextReducer to be a function."); (u = e), M({ type: a }); }, })[o.a] = function () { var e, t = m; return ( ((e = { subscribe: function (e) { if ("object" != typeof e) throw new TypeError("Expected the observer to be an object."); function n() { e.next && e.next(h()); } return n(), { unsubscribe: t(n) }; }, })[o.a] = function () { return this; }), e ); }), s ); } function s(e, t) { var n = t && t.type; return ( "Given action " + ((n && '"' + n.toString() + '"') || "an action") + ', reducer "' + e + '" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.' ); } function u(e) { for (var t = Object.keys(e), n = {}, r = 0; r < t.length; r++) { var o = t[r]; 0, "function" == typeof e[o] && (n[o] = e[o]); } var i = Object.keys(n); var u = void 0; try { !(function (e) { Object.keys(e).forEach(function (t) { var n = e[t]; if (void 0 === n(void 0, { type: a })) throw new Error( 'Reducer "' + t + "\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined." ); if (void 0 === n(void 0, { type: "@@redux/PROBE_UNKNOWN_ACTION_" + Math.random().toString(36).substring(7).split("").join(".") })) throw new Error( 'Reducer "' + t + "\" returned undefined when probed with a random type. Don't try to handle " + a + ' or other actions in "redux/*" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.' ); }); })(n); } catch (e) { u = e; } return function () { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t = arguments[1]; if (u) throw u; for (var r = !1, o = {}, a = 0; a < i.length; a++) { var c = i[a], l = n[c], d = e[c], f = l(d, t); if (void 0 === f) { var p = s(c, t); throw new Error(p); } (o[c] = f), (r = r || f !== d); } return r ? o : e; }; } function c(e, t) { return function () { return t(e.apply(void 0, arguments)); }; } function l(e, t) { if ("function" == typeof e) return c(e, t); if ("object" != typeof e || null === e) throw new Error("bindActionCreators expected an object or a function, instead received " + (null === e ? "null" : typeof e) + '. Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?'); for (var n = Object.keys(e), r = {}, o = 0; o < n.length; o++) { var a = n[o], i = e[a]; "function" == typeof i && (r[a] = c(i, t)); } return r; } function d() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return 0 === t.length ? function (e) { return e; } : 1 === t.length ? t[0] : t.reduce(function (e, t) { return function () { return e(t.apply(void 0, arguments)); }; }); } var f = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }; function p() { for (var e = arguments.length, t = Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return function (e) { return function (n, r, o) { var a, i = e(n, r, o), s = i.dispatch, u = { getState: i.getState, dispatch: function (e) { return s(e); }, }; return ( (a = t.map(function (e) { return e(u); })), (s = d.apply(void 0, a)(i.dispatch)), f({}, i, { dispatch: s }) ); }; }; } n.d(t, "e", function () { return i; }), n.d(t, "c", function () { return u; }), n.d(t, "b", function () { return l; }), n.d(t, "a", function () { return p; }), n.d(t, "d", function () { return d; }); }, , function (e, t) { var n = (e.exports = { version: "2.6.9" }); "number" == typeof __e && (__e = n); }, function (e, t, n) { "use strict"; var r = n(54), o = Object.prototype, a = o.hasOwnProperty, i = o.toString, s = r.a ? r.a.toStringTag : void 0; var u = function (e) { var t = a.call(e, s), n = e[s]; try { e[s] = void 0; var r = !0; } catch (e) {} var o = i.call(e); return r && (t ? (e[s] = n) : delete e[s]), o; }, c = Object.prototype.toString; var l = function (e) { return c.call(e); }, d = r.a ? r.a.toStringTag : void 0; t.a = function (e) { return null == e ? (void 0 === e ? "[object Undefined]" : "[object Null]") : d && d in Object(e) ? u(e) : l(e); }; }, function (e, t) { var n; n = (function () { return this; })(); try { n = n || new Function("return this")(); } catch (e) { "object" == typeof window && (n = window); } e.exports = n; }, function (e, t, n) { "use strict"; var r = n(33).a.Symbol; t.a = r; }, , , function (e, t, n) { "use strict"; (t.__esModule = !0), (t.default = function (e, t) { var n = {}; for (var r in e) t.indexOf(r) >= 0 || (Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r])); return n; }); }, , , , function (e, t, n) { var r = n(294), o = "object" == typeof self && self && self.Object === Object && self, a = r || o || Function("return this")(); e.exports = a; }, , function (e, t) { var n = Array.isArray; e.exports = n; }, function (e, t, n) { var r = n(466), o = "object" == typeof self && self && self.Object === Object && self, a = r || o || Function("return this")(); e.exports = a; }, function (e, t, n) { var r = n(254)("wks"), o = n(188), a = n(84).Symbol, i = "function" == typeof a; (e.exports = function (e) { return r[e] || (r[e] = (i && a[e]) || (i ? a : o)("Symbol." + e)); }).store = r; }, function (e, t, n) { var r, o, a; (o = "undefined" != typeof window ? window : this), (a = function (n, o) { var a = [], i = n.document, s = a.slice, u = a.concat, c = a.push, l = a.indexOf, d = {}, f = d.toString, p = d.hasOwnProperty, h = {}, m = function (e, t) { return new m.fn.init(e, t); }, M = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, y = /^-ms-/, v = /-([\da-z])/gi, b = function (e, t) { return t.toUpperCase(); }; function g(e) { var t = !!e && "length" in e && e.length, n = m.type(e); return "function" !== n && !m.isWindow(e) && ("array" === n || 0 === t || ("number" == typeof t && t > 0 && t - 1 in e)); } (m.fn = m.prototype = { jquery: "2.2.4", constructor: m, selector: "", length: 0, toArray: function () { return s.call(this); }, get: function (e) { return null != e ? (e < 0 ? this[e + this.length] : this[e]) : s.call(this); }, pushStack: function (e) { var t = m.merge(this.constructor(), e); return (t.prevObject = this), (t.context = this.context), t; }, each: function (e) { return m.each(this, e); }, map: function (e) { return this.pushStack( m.map(this, function (t, n) { return e.call(t, n, t); }) ); }, slice: function () { return this.pushStack(s.apply(this, arguments)); }, first: function () { return this.eq(0); }, last: function () { return this.eq(-1); }, eq: function (e) { var t = this.length, n = +e + (e < 0 ? t : 0); return this.pushStack(n >= 0 && n < t ? [this[n]] : []); }, end: function () { return this.prevObject || this.constructor(); }, push: c, sort: a.sort, splice: a.splice, }), (m.extend = m.fn.extend = function () { var e, t, n, r, o, a, i = arguments[0] || {}, s = 1, u = arguments.length, c = !1; for ("boolean" == typeof i && ((c = i), (i = arguments[s] || {}), s++), "object" == typeof i || m.isFunction(i) || (i = {}), s === u && ((i = this), s--); s < u; s++) if (null != (e = arguments[s])) for (t in e) (n = i[t]), i !== (r = e[t]) && (c && r && (m.isPlainObject(r) || (o = m.isArray(r))) ? (o ? ((o = !1), (a = n && m.isArray(n) ? n : [])) : (a = n && m.isPlainObject(n) ? n : {}), (i[t] = m.extend(c, a, r))) : void 0 !== r && (i[t] = r)); return i; }), m.extend({ expando: "jQuery" + ("2.2.4" + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) { throw new Error(e); }, noop: function () {}, isFunction: function (e) { return "function" === m.type(e); }, isArray: Array.isArray, isWindow: function (e) { return null != e && e === e.window; }, isNumeric: function (e) { var t = e && e.toString(); return !m.isArray(e) && t - parseFloat(t) + 1 >= 0; }, isPlainObject: function (e) { var t; if ("object" !== m.type(e) || e.nodeType || m.isWindow(e)) return !1; if (e.constructor && !p.call(e, "constructor") && !p.call(e.constructor.prototype || {}, "isPrototypeOf")) return !1; for (t in e); return void 0 === t || p.call(e, t); }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0; }, type: function (e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? d[f.call(e)] || "object" : typeof e; }, globalEval: function (e) { var t, n = eval; (e = m.trim(e)) && (1 === e.indexOf("use strict") ? (((t = i.createElement("script")).text = e), i.head.appendChild(t).parentNode.removeChild(t)) : n(e)); }, camelCase: function (e) { return e.replace(y, "ms-").replace(v, b); }, nodeName: function (e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase(); }, each: function (e, t) { var n, r = 0; if (g(e)) for (n = e.length; r < n && !1 !== t.call(e[r], r, e[r]); r++); else for (r in e) if (!1 === t.call(e[r], r, e[r])) break; return e; }, trim: function (e) { return null == e ? "" : (e + "").replace(M, ""); }, makeArray: function (e, t) { var n = t || []; return null != e && (g(Object(e)) ? m.merge(n, "string" == typeof e ? [e] : e) : c.call(n, e)), n; }, inArray: function (e, t, n) { return null == t ? -1 : l.call(t, e, n); }, merge: function (e, t) { for (var n = +t.length, r = 0, o = e.length; r < n; r++) e[o++] = t[r]; return (e.length = o), e; }, grep: function (e, t, n) { for (var r = [], o = 0, a = e.length, i = !n; o < a; o++) !t(e[o], o) !== i && r.push(e[o]); return r; }, map: function (e, t, n) { var r, o, a = 0, i = []; if (g(e)) for (r = e.length; a < r; a++) null != (o = t(e[a], a, n)) && i.push(o); else for (a in e) null != (o = t(e[a], a, n)) && i.push(o); return u.apply([], i); }, guid: 1, proxy: function (e, t) { var n, r, o; if (("string" == typeof t && ((n = e[t]), (t = e), (e = n)), m.isFunction(e))) return ( (r = s.call(arguments, 2)), ((o = function () { return e.apply(t || this, r.concat(s.call(arguments))); }).guid = e.guid = e.guid || m.guid++), o ); }, now: Date.now, support: h, }), "function" == typeof Symbol && (m.fn[Symbol.iterator] = a[Symbol.iterator]), m.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) { d["[object " + t + "]"] = t.toLowerCase(); }); var _ = (function (e) { var t, n, r, o, a, i, s, u, c, l, d, f, p, h, m, M, y, v, b, g = "sizzle" + 1 * new Date(), _ = e.document, A = 0, L = 0, w = oe(), T = oe(), k = oe(), O = function (e, t) { return e === t && (d = !0), 0; }, S = {}.hasOwnProperty, z = [], E = z.pop, x = z.push, D = z.push, N = z.slice, j = function (e, t) { for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n; return -1; }, C = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", P = "[\\x20\\t\\r\\n\\f]", Y = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", W = "\\[" + P + "*(" + Y + ")(?:" + P + "*([*^$|!~]?=)" + P + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + Y + "))|)" + P + "*\\]", q = ":(" + Y + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)", B = new RegExp(P + "+", "g"), R = new RegExp("^" + P + "+|((?:^|[^\\\\])(?:\\\\.)*)" + P + "+$", "g"), F = new RegExp("^" + P + "*," + P + "*"), H = new RegExp("^" + P + "*([>+~]|" + P + ")" + P + "*"), I = new RegExp("=" + P + "*([^\\]'\"]*?)" + P + "*\\]", "g"), X = new RegExp(q), K = new RegExp("^" + Y + "$"), U = { ID: new RegExp("^#(" + Y + ")"), CLASS: new RegExp("^\\.(" + Y + ")"), TAG: new RegExp("^(" + Y + "|[*])"), ATTR: new RegExp("^" + W), PSEUDO: new RegExp("^" + q), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + P + "*(even|odd|(([+-]|)(\\d*)n|)" + P + "*(?:([+-]|)" + P + "*(\\d+)|))" + P + "*\\)|)", "i"), bool: new RegExp("^(?:" + C + ")$", "i"), needsContext: new RegExp("^" + P + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + P + "*((?:-\\d)?\\d*)" + P + "*\\)|)(?=[^-]|$)", "i"), }, J = /^(?:input|select|textarea|button)$/i, V = /^h\d$/i, G = /^[^{]+\{\s*\[native \w/, $ = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, Q = /[+~]/, Z = /'|\\/g, ee = new RegExp("\\\\([\\da-f]{1,6}" + P + "?|(" + P + ")|.)", "ig"), te = function (e, t, n) { var r = "0x" + t - 65536; return r != r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode((r >> 10) | 55296, (1023 & r) | 56320); }, ne = function () { f(); }; try { D.apply((z = N.call(_.childNodes)), _.childNodes), z[_.childNodes.length].nodeType; } catch (e) { D = { apply: z.length ? function (e, t) { x.apply(e, N.call(t)); } : function (e, t) { for (var n = e.length, r = 0; (e[n++] = t[r++]); ); e.length = n - 1; }, }; } function re(e, t, r, o) { var a, s, c, l, d, h, y, v, A = t && t.ownerDocument, L = t ? t.nodeType : 9; if (((r = r || []), "string" != typeof e || !e || (1 !== L && 9 !== L && 11 !== L))) return r; if (!o && ((t ? t.ownerDocument || t : _) !== p && f(t), (t = t || p), m)) { if (11 !== L && (h = $.exec(e))) if ((a = h[1])) { if (9 === L) { if (!(c = t.getElementById(a))) return r; if (c.id === a) return r.push(c), r; } else if (A && (c = A.getElementById(a)) && b(t, c) && c.id === a) return r.push(c), r; } else { if (h[2]) return D.apply(r, t.getElementsByTagName(e)), r; if ((a = h[3]) && n.getElementsByClassName && t.getElementsByClassName) return D.apply(r, t.getElementsByClassName(a)), r; } if (n.qsa && !k[e + " "] && (!M || !M.test(e))) { if (1 !== L) (A = t), (v = e); else if ("object" !== t.nodeName.toLowerCase()) { for ((l = t.getAttribute("id")) ? (l = l.replace(Z, "\\$&")) : t.setAttribute("id", (l = g)), s = (y = i(e)).length, d = K.test(l) ? "#" + l : "[id='" + l + "']"; s--; ) y[s] = d + " " + he(y[s]); (v = y.join(",")), (A = (Q.test(e) && fe(t.parentNode)) || t); } if (v) try { return D.apply(r, A.querySelectorAll(v)), r; } catch (e) { } finally { l === g && t.removeAttribute("id"); } } } return u(e.replace(R, "$1"), t, r, o); } function oe() { var e = []; return function t(n, o) { return e.push(n + " ") > r.cacheLength && delete t[e.shift()], (t[n + " "] = o); }; } function ae(e) { return (e[g] = !0), e; } function ie(e) { var t = p.createElement("div"); try { return !!e(t); } catch (e) { return !1; } finally { t.parentNode && t.parentNode.removeChild(t), (t = null); } } function se(e, t) { for (var n = e.split("|"), o = n.length; o--; ) r.attrHandle[n[o]] = t; } function ue(e, t) { var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || 1 << 31) - (~e.sourceIndex || 1 << 31); if (r) return r; if (n) for (; (n = n.nextSibling); ) if (n === t) return -1; return e ? 1 : -1; } function ce(e) { return function (t) { return "input" === t.nodeName.toLowerCase() && t.type === e; }; } function le(e) { return function (t) { var n = t.nodeName.toLowerCase(); return ("input" === n || "button" === n) && t.type === e; }; } function de(e) { return ae(function (t) { return ( (t = +t), ae(function (n, r) { for (var o, a = e([], n.length, t), i = a.length; i--; ) n[(o = a[i])] && (n[o] = !(r[o] = n[o])); }) ); }); } function fe(e) { return e && void 0 !== e.getElementsByTagName && e; } for (t in ((n = re.support = {}), (a = re.isXML = function (e) { var t = e && (e.ownerDocument || e).documentElement; return !!t && "HTML" !== t.nodeName; }), (f = re.setDocument = function (e) { var t, o, i = e ? e.ownerDocument || e : _; return i !== p && 9 === i.nodeType && i.documentElement ? ((h = (p = i).documentElement), (m = !a(p)), (o = p.defaultView) && o.top !== o && (o.addEventListener ? o.addEventListener("unload", ne, !1) : o.attachEvent && o.attachEvent("onunload", ne)), (n.attributes = ie(function (e) { return (e.className = "i"), !e.getAttribute("className"); })), (n.getElementsByTagName = ie(function (e) { return e.appendChild(p.createComment("")), !e.getElementsByTagName("*").length; })), (n.getElementsByClassName = G.test(p.getElementsByClassName)), (n.getById = ie(function (e) { return (h.appendChild(e).id = g), !p.getElementsByName || !p.getElementsByName(g).length; })), n.getById ? ((r.find.ID = function (e, t) { if (void 0 !== t.getElementById && m) { var n = t.getElementById(e); return n ? [n] : []; } }), (r.filter.ID = function (e) { var t = e.replace(ee, te); return function (e) { return e.getAttribute("id") === t; }; })) : (delete r.find.ID, (r.filter.ID = function (e) { var t = e.replace(ee, te); return function (e) { var n = void 0 !== e.getAttributeNode && e.getAttributeNode("id"); return n && n.value === t; }; })), (r.find.TAG = n.getElementsByTagName ? function (e, t) { return void 0 !== t.getElementsByTagName ? t.getElementsByTagName(e) : n.qsa ? t.querySelectorAll(e) : void 0; } : function (e, t) { var n, r = [], o = 0, a = t.getElementsByTagName(e); if ("*" === e) { for (; (n = a[o++]); ) 1 === n.nodeType && r.push(n); return r; } return a; }), (r.find.CLASS = n.getElementsByClassName && function (e, t) { if (void 0 !== t.getElementsByClassName && m) return t.getElementsByClassName(e); }), (y = []), (M = []), (n.qsa = G.test(p.querySelectorAll)) && (ie(function (e) { (h.appendChild(e).innerHTML = ""), e.querySelectorAll("[msallowcapture^='']").length && M.push("[*^$]=" + P + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || M.push("\\[" + P + "*(?:value|" + C + ")"), e.querySelectorAll("[id~=" + g + "-]").length || M.push("~="), e.querySelectorAll(":checked").length || M.push(":checked"), e.querySelectorAll("a#" + g + "+*").length || M.push(".#.+[+~]"); }), ie(function (e) { var t = p.createElement("input"); t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && M.push("name" + P + "*[*^$|!~]?="), e.querySelectorAll(":enabled").length || M.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), M.push(",.*:"); })), (n.matchesSelector = G.test((v = h.matches || h.webkitMatchesSelector || h.mozMatchesSelector || h.oMatchesSelector || h.msMatchesSelector))) && ie(function (e) { (n.disconnectedMatch = v.call(e, "div")), v.call(e, "[s!='']:x"), y.push("!=", q); }), (M = M.length && new RegExp(M.join("|"))), (y = y.length && new RegExp(y.join("|"))), (t = G.test(h.compareDocumentPosition)), (b = t || G.test(h.contains) ? function (e, t) { var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode; return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))); } : function (e, t) { if (t) for (; (t = t.parentNode); ) if (t === e) return !0; return !1; }), (O = t ? function (e, t) { if (e === t) return (d = !0), 0; var r = !e.compareDocumentPosition - !t.compareDocumentPosition; return ( r || (1 & (r = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || (!n.sortDetached && t.compareDocumentPosition(e) === r) ? e === p || (e.ownerDocument === _ && b(_, e)) ? -1 : t === p || (t.ownerDocument === _ && b(_, t)) ? 1 : l ? j(l, e) - j(l, t) : 0 : 4 & r ? -1 : 1) ); } : function (e, t) { if (e === t) return (d = !0), 0; var n, r = 0, o = e.parentNode, a = t.parentNode, i = [e], s = [t]; if (!o || !a) return e === p ? -1 : t === p ? 1 : o ? -1 : a ? 1 : l ? j(l, e) - j(l, t) : 0; if (o === a) return ue(e, t); for (n = e; (n = n.parentNode); ) i.unshift(n); for (n = t; (n = n.parentNode); ) s.unshift(n); for (; i[r] === s[r]; ) r++; return r ? ue(i[r], s[r]) : i[r] === _ ? -1 : s[r] === _ ? 1 : 0; }), p) : p; }), (re.matches = function (e, t) { return re(e, null, null, t); }), (re.matchesSelector = function (e, t) { if (((e.ownerDocument || e) !== p && f(e), (t = t.replace(I, "='$1']")), n.matchesSelector && m && !k[t + " "] && (!y || !y.test(t)) && (!M || !M.test(t)))) try { var r = v.call(e, t); if (r || n.disconnectedMatch || (e.document && 11 !== e.document.nodeType)) return r; } catch (e) {} return re(t, p, null, [e]).length > 0; }), (re.contains = function (e, t) { return (e.ownerDocument || e) !== p && f(e), b(e, t); }), (re.attr = function (e, t) { (e.ownerDocument || e) !== p && f(e); var o = r.attrHandle[t.toLowerCase()], a = o && S.call(r.attrHandle, t.toLowerCase()) ? o(e, t, !m) : void 0; return void 0 !== a ? a : n.attributes || !m ? e.getAttribute(t) : (a = e.getAttributeNode(t)) && a.specified ? a.value : null; }), (re.error = function (e) { throw new Error("Syntax error, unrecognized expression: " + e); }), (re.uniqueSort = function (e) { var t, r = [], o = 0, a = 0; if (((d = !n.detectDuplicates), (l = !n.sortStable && e.slice(0)), e.sort(O), d)) { for (; (t = e[a++]); ) t === e[a] && (o = r.push(a)); for (; o--; ) e.splice(r[o], 1); } return (l = null), e; }), (o = re.getText = function (e) { var t, n = "", r = 0, a = e.nodeType; if (a) { if (1 === a || 9 === a || 11 === a) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling) n += o(e); } else if (3 === a || 4 === a) return e.nodeValue; } else for (; (t = e[r++]); ) n += o(t); return n; }), ((r = re.selectors = { cacheLength: 50, createPseudo: ae, match: U, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (e) { return (e[1] = e[1].replace(ee, te)), (e[3] = (e[3] || e[4] || e[5] || "").replace(ee, te)), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4); }, CHILD: function (e) { return ( (e[1] = e[1].toLowerCase()), "nth" === e[1].slice(0, 3) ? (e[3] || re.error(e[0]), (e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3]))), (e[5] = +(e[7] + e[8] || "odd" === e[3]))) : e[3] && re.error(e[0]), e ); }, PSEUDO: function (e) { var t, n = !e[6] && e[2]; return U.CHILD.test(e[0]) ? null : (e[3] ? (e[2] = e[4] || e[5] || "") : n && X.test(n) && (t = i(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && ((e[0] = e[0].slice(0, t)), (e[2] = n.slice(0, t))), e.slice(0, 3)); }, }, filter: { TAG: function (e) { var t = e.replace(ee, te).toLowerCase(); return "*" === e ? function () { return !0; } : function (e) { return e.nodeName && e.nodeName.toLowerCase() === t; }; }, CLASS: function (e) { var t = w[e + " "]; return ( t || ((t = new RegExp("(^|" + P + ")" + e + "(" + P + "|$)")) && w(e, function (e) { return t.test(("string" == typeof e.className && e.className) || (void 0 !== e.getAttribute && e.getAttribute("class")) || ""); })) ); }, ATTR: function (e, t, n) { return function (r) { var o = re.attr(r, e); return null == o ? "!=" === t : !t || ((o += ""), "=" === t ? o === n : "!=" === t ? o !== n : "^=" === t ? n && 0 === o.indexOf(n) : "*=" === t ? n && o.indexOf(n) > -1 : "$=" === t ? n && o.slice(-n.length) === n : "~=" === t ? (" " + o.replace(B, " ") + " ").indexOf(n) > -1 : "|=" === t && (o === n || o.slice(0, n.length + 1) === n + "-")); }; }, CHILD: function (e, t, n, r, o) { var a = "nth" !== e.slice(0, 3), i = "last" !== e.slice(-4), s = "of-type" === t; return 1 === r && 0 === o ? function (e) { return !!e.parentNode; } : function (t, n, u) { var c, l, d, f, p, h, m = a !== i ? "nextSibling" : "previousSibling", M = t.parentNode, y = s && t.nodeName.toLowerCase(), v = !u && !s, b = !1; if (M) { if (a) { for (; m; ) { for (f = t; (f = f[m]); ) if (s ? f.nodeName.toLowerCase() === y : 1 === f.nodeType) return !1; h = m = "only" === e && !h && "nextSibling"; } return !0; } if (((h = [i ? M.firstChild : M.lastChild]), i && v)) { for ( b = (p = (c = (l = (d = (f = M)[g] || (f[g] = {}))[f.uniqueID] || (d[f.uniqueID] = {}))[e] || [])[0] === A && c[1]) && c[2], f = p && M.childNodes[p]; (f = (++p && f && f[m]) || (b = p = 0) || h.pop()); ) if (1 === f.nodeType && ++b && f === t) { l[e] = [A, p, b]; break; } } else if ((v && (b = p = (c = (l = (d = (f = t)[g] || (f[g] = {}))[f.uniqueID] || (d[f.uniqueID] = {}))[e] || [])[0] === A && c[1]), !1 === b)) for ( ; (f = (++p && f && f[m]) || (b = p = 0) || h.pop()) && ((s ? f.nodeName.toLowerCase() !== y : 1 !== f.nodeType) || !++b || (v && ((l = (d = f[g] || (f[g] = {}))[f.uniqueID] || (d[f.uniqueID] = {}))[e] = [A, b]), f !== t)); ); return (b -= o) === r || (b % r == 0 && b / r >= 0); } }; }, PSEUDO: function (e, t) { var n, o = r.pseudos[e] || r.setFilters[e.toLowerCase()] || re.error("unsupported pseudo: " + e); return o[g] ? o(t) : o.length > 1 ? ((n = [e, e, "", t]), r.setFilters.hasOwnProperty(e.toLowerCase()) ? ae(function (e, n) { for (var r, a = o(e, t), i = a.length; i--; ) e[(r = j(e, a[i]))] = !(n[r] = a[i]); }) : function (e) { return o(e, 0, n); }) : o; }, }, pseudos: { not: ae(function (e) { var t = [], n = [], r = s(e.replace(R, "$1")); return r[g] ? ae(function (e, t, n, o) { for (var a, i = r(e, null, o, []), s = e.length; s--; ) (a = i[s]) && (e[s] = !(t[s] = a)); }) : function (e, o, a) { return (t[0] = e), r(t, null, a, n), (t[0] = null), !n.pop(); }; }), has: ae(function (e) { return function (t) { return re(e, t).length > 0; }; }), contains: ae(function (e) { return ( (e = e.replace(ee, te)), function (t) { return (t.textContent || t.innerText || o(t)).indexOf(e) > -1; } ); }), lang: ae(function (e) { return ( K.test(e || "") || re.error("unsupported lang: " + e), (e = e.replace(ee, te).toLowerCase()), function (t) { var n; do { if ((n = m ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang"))) return (n = n.toLowerCase()) === e || 0 === n.indexOf(e + "-"); } while ((t = t.parentNode) && 1 === t.nodeType); return !1; } ); }), target: function (t) { var n = e.location && e.location.hash; return n && n.slice(1) === t.id; }, root: function (e) { return e === h; }, focus: function (e) { return e === p.activeElement && (!p.hasFocus || p.hasFocus()) && !!(e.type || e.href || ~e.tabIndex); }, enabled: function (e) { return !1 === e.disabled; }, disabled: function (e) { return !0 === e.disabled; }, checked: function (e) { var t = e.nodeName.toLowerCase(); return ("input" === t && !!e.checked) || ("option" === t && !!e.selected); }, selected: function (e) { return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected; }, empty: function (e) { for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1; return !0; }, parent: function (e) { return !r.pseudos.empty(e); }, header: function (e) { return V.test(e.nodeName); }, input: function (e) { return J.test(e.nodeName); }, button: function (e) { var t = e.nodeName.toLowerCase(); return ("input" === t && "button" === e.type) || "button" === t; }, text: function (e) { var t; return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()); }, first: de(function () { return [0]; }), last: de(function (e, t) { return [t - 1]; }), eq: de(function (e, t, n) { return [n < 0 ? n + t : n]; }), even: de(function (e, t) { for (var n = 0; n < t; n += 2) e.push(n); return e; }), odd: de(function (e, t) { for (var n = 1; n < t; n += 2) e.push(n); return e; }), lt: de(function (e, t, n) { for (var r = n < 0 ? n + t : n; --r >= 0; ) e.push(r); return e; }), gt: de(function (e, t, n) { for (var r = n < 0 ? n + t : n; ++r < t; ) e.push(r); return e; }), }, }).pseudos.nth = r.pseudos.eq), { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 })) r.pseudos[t] = ce(t); for (t in { submit: !0, reset: !0 }) r.pseudos[t] = le(t); function pe() {} function he(e) { for (var t = 0, n = e.length, r = ""; t < n; t++) r += e[t].value; return r; } function me(e, t, n) { var r = t.dir, o = n && "parentNode" === r, a = L++; return t.first ? function (t, n, a) { for (; (t = t[r]); ) if (1 === t.nodeType || o) return e(t, n, a); } : function (t, n, i) { var s, u, c, l = [A, a]; if (i) { for (; (t = t[r]); ) if ((1 === t.nodeType || o) && e(t, n, i)) return !0; } else for (; (t = t[r]); ) if (1 === t.nodeType || o) { if ((s = (u = (c = t[g] || (t[g] = {}))[t.uniqueID] || (c[t.uniqueID] = {}))[r]) && s[0] === A && s[1] === a) return (l[2] = s[2]); if (((u[r] = l), (l[2] = e(t, n, i)))) return !0; } }; } function Me(e) { return e.length > 1 ? function (t, n, r) { for (var o = e.length; o--; ) if (!e[o](t, n, r)) return !1; return !0; } : e[0]; } function ye(e, t, n, r, o) { for (var a, i = [], s = 0, u = e.length, c = null != t; s < u; s++) (a = e[s]) && ((n && !n(a, r, o)) || (i.push(a), c && t.push(s))); return i; } function ve(e, t, n, r, o, a) { return ( r && !r[g] && (r = ve(r)), o && !o[g] && (o = ve(o, a)), ae(function (a, i, s, u) { var c, l, d, f = [], p = [], h = i.length, m = a || (function (e, t, n) { for (var r = 0, o = t.length; r < o; r++) re(e, t[r], n); return n; })(t || "*", s.nodeType ? [s] : s, []), M = !e || (!a && t) ? m : ye(m, f, e, s, u), y = n ? (o || (a ? e : h || r) ? [] : i) : M; if ((n && n(M, y, s, u), r)) for (c = ye(y, p), r(c, [], s, u), l = c.length; l--; ) (d = c[l]) && (y[p[l]] = !(M[p[l]] = d)); if (a) { if (o || e) { if (o) { for (c = [], l = y.length; l--; ) (d = y[l]) && c.push((M[l] = d)); o(null, (y = []), c, u); } for (l = y.length; l--; ) (d = y[l]) && (c = o ? j(a, d) : f[l]) > -1 && (a[c] = !(i[c] = d)); } } else (y = ye(y === i ? y.splice(h, y.length) : y)), o ? o(null, i, y, u) : D.apply(i, y); }) ); } function be(e) { for ( var t, n, o, a = e.length, i = r.relative[e[0].type], s = i || r.relative[" "], u = i ? 1 : 0, l = me( function (e) { return e === t; }, s, !0 ), d = me( function (e) { return j(t, e) > -1; }, s, !0 ), f = [ function (e, n, r) { var o = (!i && (r || n !== c)) || ((t = n).nodeType ? l(e, n, r) : d(e, n, r)); return (t = null), o; }, ]; u < a; u++ ) if ((n = r.relative[e[u].type])) f = [me(Me(f), n)]; else { if ((n = r.filter[e[u].type].apply(null, e[u].matches))[g]) { for (o = ++u; o < a && !r.relative[e[o].type]; o++); return ve( u > 1 && Me(f), u > 1 && he(e.slice(0, u - 1).concat({ value: " " === e[u - 2].type ? "*" : "" })).replace(R, "$1"), n, u < o && be(e.slice(u, o)), o < a && be((e = e.slice(o))), o < a && he(e) ); } f.push(n); } return Me(f); } return ( (pe.prototype = r.filters = r.pseudos), (r.setFilters = new pe()), (i = re.tokenize = function (e, t) { var n, o, a, i, s, u, c, l = T[e + " "]; if (l) return t ? 0 : l.slice(0); for (s = e, u = [], c = r.preFilter; s; ) { for (i in ((n && !(o = F.exec(s))) || (o && (s = s.slice(o[0].length) || s), u.push((a = []))), (n = !1), (o = H.exec(s)) && ((n = o.shift()), a.push({ value: n, type: o[0].replace(R, " ") }), (s = s.slice(n.length))), r.filter)) !(o = U[i].exec(s)) || (c[i] && !(o = c[i](o))) || ((n = o.shift()), a.push({ value: n, type: i, matches: o }), (s = s.slice(n.length))); if (!n) break; } return t ? s.length : s ? re.error(e) : T(e, u).slice(0); }), (s = re.compile = function (e, t) { var n, o = [], a = [], s = k[e + " "]; if (!s) { for (t || (t = i(e)), n = t.length; n--; ) (s = be(t[n]))[g] ? o.push(s) : a.push(s); (s = k( e, (function (e, t) { var n = t.length > 0, o = e.length > 0, a = function (a, i, s, u, l) { var d, h, M, y = 0, v = "0", b = a && [], g = [], _ = c, L = a || (o && r.find.TAG("*", l)), w = (A += null == _ ? 1 : Math.random() || 0.1), T = L.length; for (l && (c = i === p || i || l); v !== T && null != (d = L[v]); v++) { if (o && d) { for (h = 0, i || d.ownerDocument === p || (f(d), (s = !m)); (M = e[h++]); ) if (M(d, i || p, s)) { u.push(d); break; } l && (A = w); } n && ((d = !M && d) && y--, a && b.push(d)); } if (((y += v), n && v !== y)) { for (h = 0; (M = t[h++]); ) M(b, g, i, s); if (a) { if (y > 0) for (; v--; ) b[v] || g[v] || (g[v] = E.call(u)); g = ye(g); } D.apply(u, g), l && !a && g.length > 0 && y + t.length > 1 && re.uniqueSort(u); } return l && ((A = w), (c = _)), b; }; return n ? ae(a) : a; })(a, o) )).selector = e; } return s; }), (u = re.select = function (e, t, o, a) { var u, c, l, d, f, p = "function" == typeof e && e, h = !a && i((e = p.selector || e)); if (((o = o || []), 1 === h.length)) { if ((c = h[0] = h[0].slice(0)).length > 2 && "ID" === (l = c[0]).type && n.getById && 9 === t.nodeType && m && r.relative[c[1].type]) { if (!(t = (r.find.ID(l.matches[0].replace(ee, te), t) || [])[0])) return o; p && (t = t.parentNode), (e = e.slice(c.shift().value.length)); } for (u = U.needsContext.test(e) ? 0 : c.length; u-- && ((l = c[u]), !r.relative[(d = l.type)]); ) if ((f = r.find[d]) && (a = f(l.matches[0].replace(ee, te), (Q.test(c[0].type) && fe(t.parentNode)) || t))) { if ((c.splice(u, 1), !(e = a.length && he(c)))) return D.apply(o, a), o; break; } } return (p || s(e, h))(a, t, !m, o, !t || (Q.test(e) && fe(t.parentNode)) || t), o; }), (n.sortStable = g.split("").sort(O).join("") === g), (n.detectDuplicates = !!d), f(), (n.sortDetached = ie(function (e) { return 1 & e.compareDocumentPosition(p.createElement("div")); })), ie(function (e) { return (e.innerHTML = ""), "#" === e.firstChild.getAttribute("href"); }) || se("type|href|height|width", function (e, t, n) { if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2); }), (n.attributes && ie(function (e) { return (e.innerHTML = ""), e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value"); })) || se("value", function (e, t, n) { if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue; }), ie(function (e) { return null == e.getAttribute("disabled"); }) || se(C, function (e, t, n) { var r; if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null; }), re ); })(n); (m.find = _), (m.expr = _.selectors), (m.expr[":"] = m.expr.pseudos), (m.uniqueSort = m.unique = _.uniqueSort), (m.text = _.getText), (m.isXMLDoc = _.isXML), (m.contains = _.contains); var A = function (e, t, n) { for (var r = [], o = void 0 !== n; (e = e[t]) && 9 !== e.nodeType; ) if (1 === e.nodeType) { if (o && m(e).is(n)) break; r.push(e); } return r; }, L = function (e, t) { for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e); return n; }, w = m.expr.match.needsContext, T = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/, k = /^.[^:#\[\.,]*$/; function O(e, t, n) { if (m.isFunction(t)) return m.grep(e, function (e, r) { return !!t.call(e, r, e) !== n; }); if (t.nodeType) return m.grep(e, function (e) { return (e === t) !== n; }); if ("string" == typeof t) { if (k.test(t)) return m.filter(t, e, n); t = m.filter(t, e); } return m.grep(e, function (e) { return l.call(t, e) > -1 !== n; }); } (m.filter = function (e, t, n) { var r = t[0]; return ( n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? m.find.matchesSelector(r, e) ? [r] : [] : m.find.matches( e, m.grep(t, function (e) { return 1 === e.nodeType; }) ) ); }), m.fn.extend({ find: function (e) { var t, n = this.length, r = [], o = this; if ("string" != typeof e) return this.pushStack( m(e).filter(function () { for (t = 0; t < n; t++) if (m.contains(o[t], this)) return !0; }) ); for (t = 0; t < n; t++) m.find(e, o[t], r); return ((r = this.pushStack(n > 1 ? m.unique(r) : r)).selector = this.selector ? this.selector + " " + e : e), r; }, filter: function (e) { return this.pushStack(O(this, e || [], !1)); }, not: function (e) { return this.pushStack(O(this, e || [], !0)); }, is: function (e) { return !!O(this, "string" == typeof e && w.test(e) ? m(e) : e || [], !1).length; }, }); var S, z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/; ((m.fn.init = function (e, t, n) { var r, o; if (!e) return this; if (((n = n || S), "string" == typeof e)) { if (!(r = "<" === e[0] && ">" === e[e.length - 1] && e.length >= 3 ? [null, e, null] : z.exec(e)) || (!r[1] && t)) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); if (r[1]) { if (((t = t instanceof m ? t[0] : t), m.merge(this, m.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : i, !0)), T.test(r[1]) && m.isPlainObject(t))) for (r in t) m.isFunction(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); return this; } return (o = i.getElementById(r[2])) && o.parentNode && ((this.length = 1), (this[0] = o)), (this.context = i), (this.selector = e), this; } return e.nodeType ? ((this.context = this[0] = e), (this.length = 1), this) : m.isFunction(e) ? void 0 !== n.ready ? n.ready(e) : e(m) : (void 0 !== e.selector && ((this.selector = e.selector), (this.context = e.context)), m.makeArray(e, this)); }).prototype = m.fn), (S = m(i)); var E = /^(?:parents|prev(?:Until|All))/, x = { children: !0, contents: !0, next: !0, prev: !0 }; function D(e, t) { for (; (e = e[t]) && 1 !== e.nodeType; ); return e; } m.fn.extend({ has: function (e) { var t = m(e, this), n = t.length; return this.filter(function () { for (var e = 0; e < n; e++) if (m.contains(this, t[e])) return !0; }); }, closest: function (e, t) { for (var n, r = 0, o = this.length, a = [], i = w.test(e) || "string" != typeof e ? m(e, t || this.context) : 0; r < o; r++) for (n = this[r]; n && n !== t; n = n.parentNode) if (n.nodeType < 11 && (i ? i.index(n) > -1 : 1 === n.nodeType && m.find.matchesSelector(n, e))) { a.push(n); break; } return this.pushStack(a.length > 1 ? m.uniqueSort(a) : a); }, index: function (e) { return e ? ("string" == typeof e ? l.call(m(e), this[0]) : l.call(this, e.jquery ? e[0] : e)) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1; }, add: function (e, t) { return this.pushStack(m.uniqueSort(m.merge(this.get(), m(e, t)))); }, addBack: function (e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)); }, }), m.each( { parent: function (e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null; }, parents: function (e) { return A(e, "parentNode"); }, parentsUntil: function (e, t, n) { return A(e, "parentNode", n); }, next: function (e) { return D(e, "nextSibling"); }, prev: function (e) { return D(e, "previousSibling"); }, nextAll: function (e) { return A(e, "nextSibling"); }, prevAll: function (e) { return A(e, "previousSibling"); }, nextUntil: function (e, t, n) { return A(e, "nextSibling", n); }, prevUntil: function (e, t, n) { return A(e, "previousSibling", n); }, siblings: function (e) { return L((e.parentNode || {}).firstChild, e); }, children: function (e) { return L(e.firstChild); }, contents: function (e) { return e.contentDocument || m.merge([], e.childNodes); }, }, function (e, t) { m.fn[e] = function (n, r) { var o = m.map(this, t, n); return "Until" !== e.slice(-5) && (r = n), r && "string" == typeof r && (o = m.filter(r, o)), this.length > 1 && (x[e] || m.uniqueSort(o), E.test(e) && o.reverse()), this.pushStack(o); }; } ); var N, j = /\S+/g; function C() { i.removeEventListener("DOMContentLoaded", C), n.removeEventListener("load", C), m.ready(); } (m.Callbacks = function (e) { e = "string" == typeof e ? (function (e) { var t = {}; return ( m.each(e.match(j) || [], function (e, n) { t[n] = !0; }), t ); })(e) : m.extend({}, e); var t, n, r, o, a = [], i = [], s = -1, u = function () { for (o = e.once, r = t = !0; i.length; s = -1) for (n = i.shift(); ++s < a.length; ) !1 === a[s].apply(n[0], n[1]) && e.stopOnFalse && ((s = a.length), (n = !1)); e.memory || (n = !1), (t = !1), o && (a = n ? [] : ""); }, c = { add: function () { return ( a && (n && !t && ((s = a.length - 1), i.push(n)), (function t(n) { m.each(n, function (n, r) { m.isFunction(r) ? (e.unique && c.has(r)) || a.push(r) : r && r.length && "string" !== m.type(r) && t(r); }); })(arguments), n && !t && u()), this ); }, remove: function () { return ( m.each(arguments, function (e, t) { for (var n; (n = m.inArray(t, a, n)) > -1; ) a.splice(n, 1), n <= s && s--; }), this ); }, has: function (e) { return e ? m.inArray(e, a) > -1 : a.length > 0; }, empty: function () { return a && (a = []), this; }, disable: function () { return (o = i = []), (a = n = ""), this; }, disabled: function () { return !a; }, lock: function () { return (o = i = []), n || (a = n = ""), this; }, locked: function () { return !!o; }, fireWith: function (e, n) { return o || ((n = [e, (n = n || []).slice ? n.slice() : n]), i.push(n), t || u()), this; }, fire: function () { return c.fireWith(this, arguments), this; }, fired: function () { return !!r; }, }; return c; }), m.extend({ Deferred: function (e) { var t = [ ["resolve", "done", m.Callbacks("once memory"), "resolved"], ["reject", "fail", m.Callbacks("once memory"), "rejected"], ["notify", "progress", m.Callbacks("memory")], ], n = "pending", r = { state: function () { return n; }, always: function () { return o.done(arguments).fail(arguments), this; }, then: function () { var e = arguments; return m .Deferred(function (n) { m.each(t, function (t, a) { var i = m.isFunction(e[t]) && e[t]; o[a[1]](function () { var e = i && i.apply(this, arguments); e && m.isFunction(e.promise) ? e.promise().progress(n.notify).done(n.resolve).fail(n.reject) : n[a[0] + "With"](this === r ? n.promise() : this, i ? [e] : arguments); }); }), (e = null); }) .promise(); }, promise: function (e) { return null != e ? m.extend(e, r) : r; }, }, o = {}; return ( (r.pipe = r.then), m.each(t, function (e, a) { var i = a[2], s = a[3]; (r[a[1]] = i.add), s && i.add( function () { n = s; }, t[1 ^ e][2].disable, t[2][2].lock ), (o[a[0]] = function () { return o[a[0] + "With"](this === o ? r : this, arguments), this; }), (o[a[0] + "With"] = i.fireWith); }), r.promise(o), e && e.call(o, o), o ); }, when: function (e) { var t, n, r, o = 0, a = s.call(arguments), i = a.length, u = 1 !== i || (e && m.isFunction(e.promise)) ? i : 0, c = 1 === u ? e : m.Deferred(), l = function (e, n, r) { return function (o) { (n[e] = this), (r[e] = arguments.length > 1 ? s.call(arguments) : o), r === t ? c.notifyWith(n, r) : --u || c.resolveWith(n, r); }; }; if (i > 1) for (t = new Array(i), n = new Array(i), r = new Array(i); o < i; o++) a[o] && m.isFunction(a[o].promise) ? a[o].promise().progress(l(o, n, t)).done(l(o, r, a)).fail(c.reject) : --u; return u || c.resolveWith(r, a), c.promise(); }, }), (m.fn.ready = function (e) { return m.ready.promise().done(e), this; }), m.extend({ isReady: !1, readyWait: 1, holdReady: function (e) { e ? m.readyWait++ : m.ready(!0); }, ready: function (e) { (!0 === e ? --m.readyWait : m.isReady) || ((m.isReady = !0), (!0 !== e && --m.readyWait > 0) || (N.resolveWith(i, [m]), m.fn.triggerHandler && (m(i).triggerHandler("ready"), m(i).off("ready")))); }, }), (m.ready.promise = function (e) { return ( N || ((N = m.Deferred()), "complete" === i.readyState || ("loading" !== i.readyState && !i.documentElement.doScroll) ? n.setTimeout(m.ready) : (i.addEventListener("DOMContentLoaded", C), n.addEventListener("load", C))), N.promise(e) ); }), m.ready.promise(); var P = function (e, t, n, r, o, a, i) { var s = 0, u = e.length, c = null == n; if ("object" === m.type(n)) for (s in ((o = !0), n)) P(e, t, s, n[s], !0, a, i); else if ( void 0 !== r && ((o = !0), m.isFunction(r) || (i = !0), c && (i ? (t.call(e, r), (t = null)) : ((c = t), (t = function (e, t, n) { return c.call(m(e), n); }))), t) ) for (; s < u; s++) t(e[s], n, i ? r : r.call(e[s], s, t(e[s], n))); return o ? e : c ? t.call(e) : u ? t(e[0], n) : a; }, Y = function (e) { return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType; }; function W() { this.expando = m.expando + W.uid++; } (W.uid = 1), (W.prototype = { register: function (e, t) { var n = t || {}; return e.nodeType ? (e[this.expando] = n) : Object.defineProperty(e, this.expando, { value: n, writable: !0, configurable: !0 }), e[this.expando]; }, cache: function (e) { if (!Y(e)) return {}; var t = e[this.expando]; return t || ((t = {}), Y(e) && (e.nodeType ? (e[this.expando] = t) : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t; }, set: function (e, t, n) { var r, o = this.cache(e); if ("string" == typeof t) o[t] = n; else for (r in t) o[r] = t[r]; return o; }, get: function (e, t) { return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][t]; }, access: function (e, t, n) { var r; return void 0 === t || (t && "string" == typeof t && void 0 === n) ? (void 0 !== (r = this.get(e, t)) ? r : this.get(e, m.camelCase(t))) : (this.set(e, t, n), void 0 !== n ? n : t); }, remove: function (e, t) { var n, r, o, a = e[this.expando]; if (void 0 !== a) { if (void 0 === t) this.register(e); else { m.isArray(t) ? (r = t.concat(t.map(m.camelCase))) : ((o = m.camelCase(t)), (r = t in a ? [t, o] : (r = o) in a ? [r] : r.match(j) || [])), (n = r.length); for (; n--; ) delete a[r[n]]; } (void 0 === t || m.isEmptyObject(a)) && (e.nodeType ? (e[this.expando] = void 0) : delete e[this.expando]); } }, hasData: function (e) { var t = e[this.expando]; return void 0 !== t && !m.isEmptyObject(t); }, }); var q = new W(), B = new W(), R = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, F = /[A-Z]/g; function H(e, t, n) { var r; if (void 0 === n && 1 === e.nodeType) if (((r = "data-" + t.replace(F, "-$&").toLowerCase()), "string" == typeof (n = e.getAttribute(r)))) { try { n = "true" === n || ("false" !== n && ("null" === n ? null : +n + "" === n ? +n : R.test(n) ? m.parseJSON(n) : n)); } catch (e) {} B.set(e, t, n); } else n = void 0; return n; } m.extend({ hasData: function (e) { return B.hasData(e) || q.hasData(e); }, data: function (e, t, n) { return B.access(e, t, n); }, removeData: function (e, t) { B.remove(e, t); }, _data: function (e, t, n) { return q.access(e, t, n); }, _removeData: function (e, t) { q.remove(e, t); }, }), m.fn.extend({ data: function (e, t) { var n, r, o, a = this[0], i = a && a.attributes; if (void 0 === e) { if (this.length && ((o = B.get(a)), 1 === a.nodeType && !q.get(a, "hasDataAttrs"))) { for (n = i.length; n--; ) i[n] && 0 === (r = i[n].name).indexOf("data-") && ((r = m.camelCase(r.slice(5))), H(a, r, o[r])); q.set(a, "hasDataAttrs", !0); } return o; } return "object" == typeof e ? this.each(function () { B.set(this, e); }) : P( this, function (t) { var n, r; if (a && void 0 === t) return void 0 !== (n = B.get(a, e) || B.get(a, e.replace(F, "-$&").toLowerCase())) ? n : ((r = m.camelCase(e)), void 0 !== (n = B.get(a, r)) || void 0 !== (n = H(a, r, void 0)) ? n : void 0); (r = m.camelCase(e)), this.each(function () { var n = B.get(this, r); B.set(this, r, t), e.indexOf("-") > -1 && void 0 !== n && B.set(this, e, t); }); }, null, t, arguments.length > 1, null, !0 ); }, removeData: function (e) { return this.each(function () { B.remove(this, e); }); }, }), m.extend({ queue: function (e, t, n) { var r; if (e) return (t = (t || "fx") + "queue"), (r = q.get(e, t)), n && (!r || m.isArray(n) ? (r = q.access(e, t, m.makeArray(n))) : r.push(n)), r || []; }, dequeue: function (e, t) { t = t || "fx"; var n = m.queue(e, t), r = n.length, o = n.shift(), a = m._queueHooks(e, t); "inprogress" === o && ((o = n.shift()), r--), o && ("fx" === t && n.unshift("inprogress"), delete a.stop, o.call( e, function () { m.dequeue(e, t); }, a )), !r && a && a.empty.fire(); }, _queueHooks: function (e, t) { var n = t + "queueHooks"; return ( q.get(e, n) || q.access(e, n, { empty: m.Callbacks("once memory").add(function () { q.remove(e, [t + "queue", n]); }), }) ); }, }), m.fn.extend({ queue: function (e, t) { var n = 2; return ( "string" != typeof e && ((t = e), (e = "fx"), n--), arguments.length < n ? m.queue(this[0], e) : void 0 === t ? this : this.each(function () { var n = m.queue(this, e, t); m._queueHooks(this, e), "fx" === e && "inprogress" !== n[0] && m.dequeue(this, e); }) ); }, dequeue: function (e) { return this.each(function () { m.dequeue(this, e); }); }, clearQueue: function (e) { return this.queue(e || "fx", []); }, promise: function (e, t) { var n, r = 1, o = m.Deferred(), a = this, i = this.length, s = function () { --r || o.resolveWith(a, [a]); }; for ("string" != typeof e && ((t = e), (e = void 0)), e = e || "fx"; i--; ) (n = q.get(a[i], e + "queueHooks")) && n.empty && (r++, n.empty.add(s)); return s(), o.promise(t); }, }); var I = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, X = new RegExp("^(?:([+-])=|)(" + I + ")([a-z%]*)$", "i"), K = ["Top", "Right", "Bottom", "Left"], U = function (e, t) { return (e = t || e), "none" === m.css(e, "display") || !m.contains(e.ownerDocument, e); }; function J(e, t, n, r) { var o, a = 1, i = 20, s = r ? function () { return r.cur(); } : function () { return m.css(e, t, ""); }, u = s(), c = (n && n[3]) || (m.cssNumber[t] ? "" : "px"), l = (m.cssNumber[t] || ("px" !== c && +u)) && X.exec(m.css(e, t)); if (l && l[3] !== c) { (c = c || l[3]), (n = n || []), (l = +u || 1); do { (l /= a = a || ".5"), m.style(e, t, l + c); } while (a !== (a = s() / u) && 1 !== a && --i); } return n && ((l = +l || +u || 0), (o = n[1] ? l + (n[1] + 1) * n[2] : +n[2]), r && ((r.unit = c), (r.start = l), (r.end = o))), o; } var V = /^(?:checkbox|radio)$/i, G = /<([\w:-]+)/, $ = /^$|\/(?:java|ecma)script/i, Q = { option: [1, ""], thead: [1, "", "
"], col: [2, "", "
"], tr: [2, "", "
"], td: [3, "", "
"], _default: [0, "", ""], }; function Z(e, t) { var n = void 0 !== e.getElementsByTagName ? e.getElementsByTagName(t || "*") : void 0 !== e.querySelectorAll ? e.querySelectorAll(t || "*") : []; return void 0 === t || (t && m.nodeName(e, t)) ? m.merge([e], n) : n; } function ee(e, t) { for (var n = 0, r = e.length; n < r; n++) q.set(e[n], "globalEval", !t || q.get(t[n], "globalEval")); } (Q.optgroup = Q.option), (Q.tbody = Q.tfoot = Q.colgroup = Q.caption = Q.thead), (Q.th = Q.td); var te, ne, re = /<|&#?\w+;/; function oe(e, t, n, r, o) { for (var a, i, s, u, c, l, d = t.createDocumentFragment(), f = [], p = 0, h = e.length; p < h; p++) if ((a = e[p]) || 0 === a) if ("object" === m.type(a)) m.merge(f, a.nodeType ? [a] : a); else if (re.test(a)) { for (i = i || d.appendChild(t.createElement("div")), s = (G.exec(a) || ["", ""])[1].toLowerCase(), u = Q[s] || Q._default, i.innerHTML = u[1] + m.htmlPrefilter(a) + u[2], l = u[0]; l--; ) i = i.lastChild; m.merge(f, i.childNodes), ((i = d.firstChild).textContent = ""); } else f.push(t.createTextNode(a)); for (d.textContent = "", p = 0; (a = f[p++]); ) if (r && m.inArray(a, r) > -1) o && o.push(a); else if (((c = m.contains(a.ownerDocument, a)), (i = Z(d.appendChild(a), "script")), c && ee(i), n)) for (l = 0; (a = i[l++]); ) $.test(a.type || "") && n.push(a); return d; } (te = i.createDocumentFragment().appendChild(i.createElement("div"))), (ne = i.createElement("input")).setAttribute("type", "radio"), ne.setAttribute("checked", "checked"), ne.setAttribute("name", "t"), te.appendChild(ne), (h.checkClone = te.cloneNode(!0).cloneNode(!0).lastChild.checked), (te.innerHTML = ""), (h.noCloneChecked = !!te.cloneNode(!0).lastChild.defaultValue); var ae = /^key/, ie = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, se = /^([^.]*)(?:\.(.+)|)/; function ue() { return !0; } function ce() { return !1; } function le() { try { return i.activeElement; } catch (e) {} } function de(e, t, n, r, o, a) { var i, s; if ("object" == typeof t) { for (s in ("string" != typeof n && ((r = r || n), (n = void 0)), t)) de(e, s, n, r, t[s], a); return e; } if ((null == r && null == o ? ((o = n), (r = n = void 0)) : null == o && ("string" == typeof n ? ((o = r), (r = void 0)) : ((o = r), (r = n), (n = void 0))), !1 === o)) o = ce; else if (!o) return e; return ( 1 === a && ((i = o), ((o = function (e) { return m().off(e), i.apply(this, arguments); }).guid = i.guid || (i.guid = m.guid++))), e.each(function () { m.event.add(this, t, o, r, n); }) ); } (m.event = { global: {}, add: function (e, t, n, r, o) { var a, i, s, u, c, l, d, f, p, h, M, y = q.get(e); if (y) for ( n.handler && ((n = (a = n).handler), (o = a.selector)), n.guid || (n.guid = m.guid++), (u = y.events) || (u = y.events = {}), (i = y.handle) || (i = y.handle = function (t) { return void 0 !== m && m.event.triggered !== t.type ? m.event.dispatch.apply(e, arguments) : void 0; }), c = (t = (t || "").match(j) || [""]).length; c--; ) (p = M = (s = se.exec(t[c]) || [])[1]), (h = (s[2] || "").split(".").sort()), p && ((d = m.event.special[p] || {}), (p = (o ? d.delegateType : d.bindType) || p), (d = m.event.special[p] || {}), (l = m.extend({ type: p, origType: M, data: r, handler: n, guid: n.guid, selector: o, needsContext: o && m.expr.match.needsContext.test(o), namespace: h.join(".") }, a)), (f = u[p]) || (((f = u[p] = []).delegateCount = 0), (d.setup && !1 !== d.setup.call(e, r, h, i)) || (e.addEventListener && e.addEventListener(p, i))), d.add && (d.add.call(e, l), l.handler.guid || (l.handler.guid = n.guid)), o ? f.splice(f.delegateCount++, 0, l) : f.push(l), (m.event.global[p] = !0)); }, remove: function (e, t, n, r, o) { var a, i, s, u, c, l, d, f, p, h, M, y = q.hasData(e) && q.get(e); if (y && (u = y.events)) { for (c = (t = (t || "").match(j) || [""]).length; c--; ) if (((p = M = (s = se.exec(t[c]) || [])[1]), (h = (s[2] || "").split(".").sort()), p)) { for (d = m.event.special[p] || {}, f = u[(p = (r ? d.delegateType : d.bindType) || p)] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = a = f.length; a--; ) (l = f[a]), (!o && M !== l.origType) || (n && n.guid !== l.guid) || (s && !s.test(l.namespace)) || (r && r !== l.selector && ("**" !== r || !l.selector)) || (f.splice(a, 1), l.selector && f.delegateCount--, d.remove && d.remove.call(e, l)); i && !f.length && ((d.teardown && !1 !== d.teardown.call(e, h, y.handle)) || m.removeEvent(e, p, y.handle), delete u[p]); } else for (p in u) m.event.remove(e, p + t[c], n, r, !0); m.isEmptyObject(u) && q.remove(e, "handle events"); } }, dispatch: function (e) { e = m.event.fix(e); var t, n, r, o, a, i = [], u = s.call(arguments), c = (q.get(this, "events") || {})[e.type] || [], l = m.event.special[e.type] || {}; if (((u[0] = e), (e.delegateTarget = this), !l.preDispatch || !1 !== l.preDispatch.call(this, e))) { for (i = m.event.handlers.call(this, e, c), t = 0; (o = i[t++]) && !e.isPropagationStopped(); ) for (e.currentTarget = o.elem, n = 0; (a = o.handlers[n++]) && !e.isImmediatePropagationStopped(); ) (e.rnamespace && !e.rnamespace.test(a.namespace)) || ((e.handleObj = a), (e.data = a.data), void 0 !== (r = ((m.event.special[a.origType] || {}).handle || a.handler).apply(o.elem, u)) && !1 === (e.result = r) && (e.preventDefault(), e.stopPropagation())); return l.postDispatch && l.postDispatch.call(this, e), e.result; } }, handlers: function (e, t) { var n, r, o, a, i = [], s = t.delegateCount, u = e.target; if (s && u.nodeType && ("click" !== e.type || isNaN(e.button) || e.button < 1)) for (; u !== this; u = u.parentNode || this) if (1 === u.nodeType && (!0 !== u.disabled || "click" !== e.type)) { for (r = [], n = 0; n < s; n++) void 0 === r[(o = (a = t[n]).selector + " ")] && (r[o] = a.needsContext ? m(o, this).index(u) > -1 : m.find(o, this, null, [u]).length), r[o] && r.push(a); r.length && i.push({ elem: u, handlers: r }); } return s < t.length && i.push({ elem: this, handlers: t.slice(s) }), i; }, props: "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function (e, t) { return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), e; }, }, mouseHooks: { props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function (e, t) { var n, r, o, a = t.button; return ( null == e.pageX && null != t.clientX && ((r = (n = e.target.ownerDocument || i).documentElement), (o = n.body), (e.pageX = t.clientX + ((r && r.scrollLeft) || (o && o.scrollLeft) || 0) - ((r && r.clientLeft) || (o && o.clientLeft) || 0)), (e.pageY = t.clientY + ((r && r.scrollTop) || (o && o.scrollTop) || 0) - ((r && r.clientTop) || (o && o.clientTop) || 0))), e.which || void 0 === a || (e.which = 1 & a ? 1 : 2 & a ? 3 : 4 & a ? 2 : 0), e ); }, }, fix: function (e) { if (e[m.expando]) return e; var t, n, r, o = e.type, a = e, s = this.fixHooks[o]; for (s || (this.fixHooks[o] = s = ie.test(o) ? this.mouseHooks : ae.test(o) ? this.keyHooks : {}), r = s.props ? this.props.concat(s.props) : this.props, e = new m.Event(a), t = r.length; t--; ) e[(n = r[t])] = a[n]; return e.target || (e.target = i), 3 === e.target.nodeType && (e.target = e.target.parentNode), s.filter ? s.filter(e, a) : e; }, special: { load: { noBubble: !0 }, focus: { trigger: function () { if (this !== le() && this.focus) return this.focus(), !1; }, delegateType: "focusin", }, blur: { trigger: function () { if (this === le() && this.blur) return this.blur(), !1; }, delegateType: "focusout", }, click: { trigger: function () { if ("checkbox" === this.type && this.click && m.nodeName(this, "input")) return this.click(), !1; }, _default: function (e) { return m.nodeName(e.target, "a"); }, }, beforeunload: { postDispatch: function (e) { void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result); }, }, }, }), (m.removeEvent = function (e, t, n) { e.removeEventListener && e.removeEventListener(t, n); }), (m.Event = function (e, t) { if (!(this instanceof m.Event)) return new m.Event(e, t); e && e.type ? ((this.originalEvent = e), (this.type = e.type), (this.isDefaultPrevented = e.defaultPrevented || (void 0 === e.defaultPrevented && !1 === e.returnValue) ? ue : ce)) : (this.type = e), t && m.extend(this, t), (this.timeStamp = (e && e.timeStamp) || m.now()), (this[m.expando] = !0); }), (m.Event.prototype = { constructor: m.Event, isDefaultPrevented: ce, isPropagationStopped: ce, isImmediatePropagationStopped: ce, isSimulated: !1, preventDefault: function () { var e = this.originalEvent; (this.isDefaultPrevented = ue), e && !this.isSimulated && e.preventDefault(); }, stopPropagation: function () { var e = this.originalEvent; (this.isPropagationStopped = ue), e && !this.isSimulated && e.stopPropagation(); }, stopImmediatePropagation: function () { var e = this.originalEvent; (this.isImmediatePropagationStopped = ue), e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation(); }, }), m.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function (e, t) { m.event.special[e] = { delegateType: t, bindType: t, handle: function (e) { var n, r = this, o = e.relatedTarget, a = e.handleObj; return (o && (o === r || m.contains(r, o))) || ((e.type = a.origType), (n = a.handler.apply(this, arguments)), (e.type = t)), n; }, }; }), m.fn.extend({ on: function (e, t, n, r) { return de(this, e, t, n, r); }, one: function (e, t, n, r) { return de(this, e, t, n, r, 1); }, off: function (e, t, n) { var r, o; if (e && e.preventDefault && e.handleObj) return (r = e.handleObj), m(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; if ("object" == typeof e) { for (o in e) this.off(o, t, e[o]); return this; } return ( (!1 !== t && "function" != typeof t) || ((n = t), (t = void 0)), !1 === n && (n = ce), this.each(function () { m.event.remove(this, e, n, t); }) ); }, }); var fe = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, pe = /\s*$/g; function ye(e, t) { return m.nodeName(e, "table") && m.nodeName(11 !== t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e; } function ve(e) { return (e.type = (null !== e.getAttribute("type")) + "/" + e.type), e; } function be(e) { var t = me.exec(e.type); return t ? (e.type = t[1]) : e.removeAttribute("type"), e; } function ge(e, t) { var n, r, o, a, i, s, u, c; if (1 === t.nodeType) { if (q.hasData(e) && ((a = q.access(e)), (i = q.set(t, a)), (c = a.events))) for (o in (delete i.handle, (i.events = {}), c)) for (n = 0, r = c[o].length; n < r; n++) m.event.add(t, o, c[o][n]); B.hasData(e) && ((s = B.access(e)), (u = m.extend({}, s)), B.set(t, u)); } } function _e(e, t, n, r) { t = u.apply([], t); var o, a, i, s, c, l, d = 0, f = e.length, p = f - 1, M = t[0], y = m.isFunction(M); if (y || (f > 1 && "string" == typeof M && !h.checkClone && he.test(M))) return e.each(function (o) { var a = e.eq(o); y && (t[0] = M.call(this, o, a.html())), _e(a, t, n, r); }); if (f && ((a = (o = oe(t, e[0].ownerDocument, !1, e, r)).firstChild), 1 === o.childNodes.length && (o = a), a || r)) { for (s = (i = m.map(Z(o, "script"), ve)).length; d < f; d++) (c = o), d !== p && ((c = m.clone(c, !0, !0)), s && m.merge(i, Z(c, "script"))), n.call(e[d], c, d); if (s) for (l = i[i.length - 1].ownerDocument, m.map(i, be), d = 0; d < s; d++) (c = i[d]), $.test(c.type || "") && !q.access(c, "globalEval") && m.contains(l, c) && (c.src ? m._evalUrl && m._evalUrl(c.src) : m.globalEval(c.textContent.replace(Me, ""))); } return e; } function Ae(e, t, n) { for (var r, o = t ? m.filter(t, e) : e, a = 0; null != (r = o[a]); a++) n || 1 !== r.nodeType || m.cleanData(Z(r)), r.parentNode && (n && m.contains(r.ownerDocument, r) && ee(Z(r, "script")), r.parentNode.removeChild(r)); return e; } m.extend({ htmlPrefilter: function (e) { return e.replace(fe, "<$1>"); }, clone: function (e, t, n) { var r, o, a, i, s, u, c, l = e.cloneNode(!0), d = m.contains(e.ownerDocument, e); if (!(h.noCloneChecked || (1 !== e.nodeType && 11 !== e.nodeType) || m.isXMLDoc(e))) for (i = Z(l), r = 0, o = (a = Z(e)).length; r < o; r++) (s = a[r]), (u = i[r]), (c = void 0), "input" === (c = u.nodeName.toLowerCase()) && V.test(s.type) ? (u.checked = s.checked) : ("input" !== c && "textarea" !== c) || (u.defaultValue = s.defaultValue); if (t) if (n) for (a = a || Z(e), i = i || Z(l), r = 0, o = a.length; r < o; r++) ge(a[r], i[r]); else ge(e, l); return (i = Z(l, "script")).length > 0 && ee(i, !d && Z(e, "script")), l; }, cleanData: function (e) { for (var t, n, r, o = m.event.special, a = 0; void 0 !== (n = e[a]); a++) if (Y(n)) { if ((t = n[q.expando])) { if (t.events) for (r in t.events) o[r] ? m.event.remove(n, r) : m.removeEvent(n, r, t.handle); n[q.expando] = void 0; } n[B.expando] && (n[B.expando] = void 0); } }, }), m.fn.extend({ domManip: _e, detach: function (e) { return Ae(this, e, !0); }, remove: function (e) { return Ae(this, e); }, text: function (e) { return P( this, function (e) { return void 0 === e ? m.text(this) : this.empty().each(function () { (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) || (this.textContent = e); }); }, null, e, arguments.length ); }, append: function () { return _e(this, arguments, function (e) { (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) || ye(this, e).appendChild(e); }); }, prepend: function () { return _e(this, arguments, function (e) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var t = ye(this, e); t.insertBefore(e, t.firstChild); } }); }, before: function () { return _e(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this); }); }, after: function () { return _e(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this.nextSibling); }); }, empty: function () { for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (m.cleanData(Z(e, !1)), (e.textContent = "")); return this; }, clone: function (e, t) { return ( (e = null != e && e), (t = null == t ? e : t), this.map(function () { return m.clone(this, e, t); }) ); }, html: function (e) { return P( this, function (e) { var t = this[0] || {}, n = 0, r = this.length; if (void 0 === e && 1 === t.nodeType) return t.innerHTML; if ("string" == typeof e && !pe.test(e) && !Q[(G.exec(e) || ["", ""])[1].toLowerCase()]) { e = m.htmlPrefilter(e); try { for (; n < r; n++) 1 === (t = this[n] || {}).nodeType && (m.cleanData(Z(t, !1)), (t.innerHTML = e)); t = 0; } catch (e) {} } t && this.empty().append(e); }, null, e, arguments.length ); }, replaceWith: function () { var e = []; return _e( this, arguments, function (t) { var n = this.parentNode; m.inArray(this, e) < 0 && (m.cleanData(Z(this)), n && n.replaceChild(t, this)); }, e ); }, }), m.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function (e, t) { m.fn[e] = function (e) { for (var n, r = [], o = m(e), a = o.length - 1, i = 0; i <= a; i++) (n = i === a ? this : this.clone(!0)), m(o[i])[t](n), c.apply(r, n.get()); return this.pushStack(r); }; }); var Le, we = { HTML: "block", BODY: "block" }; function Te(e, t) { var n = m(t.createElement(e)).appendTo(t.body), r = m.css(n[0], "display"); return n.detach(), r; } function ke(e) { var t = i, n = we[e]; return ( n || (("none" !== (n = Te(e, t)) && n) || ((t = (Le = (Le || m("